Thanks Colleen! That is what I want to do. I tried your code and it didn't but I did notice some interesting behavior.
I had the following line commented out: (: <render:generic-elem match-name="Component" match-ns="" tag="p" xmlns:render="http://marklogic.com/renderapi"/> :) When I look at the output I see: <p class="render-Component">Directory Services</p> It is still picking up the <render:generic> element even though it is commented out. If I delete that line <render:generic> line then I get no formatting. Do I need to import the custom module into the config.xqy file? Thanks! Betty > Hi Betty, > > It looks like you're headed in the right direction, but there are a couple > of things in the function that might be causing problem. > > I'm assuming an input context node that looks like this: > > <Component>foo</Component> > > And desired output that looks like this: > > <xhtml:p xmlns:xhtml="http://www.w3.org/1999/xhtml"><xhtml:b>Component: > </xhtml:b>foo</xhtml:p> > > If that's right, then your render element looks good, but I think your > function should look like: > > declare function custom:Component($context as node(), $matchedrule as > element(), $rules as element()+, > $params as xs:string*)) as element()+ { > { > element xhtml:p { > element xhtml:b {"Component: "}, $context/string() > } > }; > > If that's not what you're looking for, please send along what you expect > that input and output to be, and we'll see if we can get you past the > problem. > > --Colleen Whitney > > ________________________________________ > From: [email protected] > [[email protected]] On Behalf Of Betty Harvey > [[email protected]] > Sent: Thursday, July 02, 2009 8:05 AM > To: General Mark Logic Developer Discussion > Subject: Re: [MarkLogic Dev General] Best Approach for Formatting Content > From Application Builder > > I think I have followed the instructions but can't get it to work. IE > doesn't support CSS before and after text. I am also noticing quite a > few styling differences between Firefox and IE. Unfortunately, I am > stuck presenting in IE 6. > > Here is the code that I have. I have included the <render:generic> > element > so you can see the original declaration from the application. I am > thinking it is a namespace issue. > > <!-- My custom.xqy --> > xquery version '1.0-ml'; > > module namespace custom="http://www.eccnet.com"; > declare namespace xhtml="http://www.w3.org/1999/xhtml"; > declare namespace custom="http://www.eccnet.com"; > > declare function custom:Component($context as node(), $matchedrule as > element(), $rules as element()+, > $params as xs:string*)) as element()+ { > { > element{QName(http://www.w3.org/1999/xhtml", "p")} > <xhtml:b>Component: </xhtml:b>map:get($context/string()) > } > }; > > <!-- Modification in config.xqy --> > > (: <render:generic-elem match-name="Component" match-ns="" tag="p" > xmlns:render="http://marklogic.com/renderapi"/>:) > > <render:custom match-name="Component" match-ns="" > xmlns:render="http://marklogic.com/renderapi"> > <render:apply ns="http://www.eccnet.com" name="Component" > at="/lib/custom.xqy"/> > </render:custom> > > TIA > > Betty > >> >> Hi Betty, >> >> You might consider using the "render:custom" tag rather than overriding >> the generic-elem function. If the "render:custom" element does not >> offer >> you enough granularity and you would like go beyond the rendering of a >> single XML element by tagname, then you may want to go the path of >> overriding the functions of standard.xqy directly. I've included an >> explanation on the usage of each of these below. They are preferable to >> editing the "render:generic-elem" directly. Feedback about the >> explanations would be much appreciated - they may possibly get included >> in >> future documentation. Let me know what you think. >> >> Cheers, >> David >> >> >> Overriding a Function from "standard.xqy" >> >> You can override a function in standard.xqy by editing the variable for >> the related function in config.xqy. >> >> For example, say I want to entirely change the function for the footer. >> I >> find the following lines in config.xqy: >> >> declare variable $footer := >> xdmp:function( >> fn:QName( >> "http://marklogic.com/appservices/component", "footer")); >> >> And I change it to: >> >> declare variable $footer := >> xdmp:function( >> fn:QName( >> "http://mycompany.com/custom-app", "custom-footer"), >> "/lib/extension.xqy"); >> >> Then, add the "custom-footer" function in "/lib/extension.xqy". The >> function "asc:footer" in standard.xqy will no longer be used. >> >> >> Custom Rendering >> >> On the "Content" screen of the Applicaiton Builder, you are able to >> specify how certain XML elements get translated into XHTML (ex: each >> element <section> should be rendered as a <div>). Sometimes you want to >> have more control over how this XHTML gets rendered. The "render:custom" >> tag allows you to do just that. >> >> In /application/lib/config.xqy, you will find a variable named >> $TRANSFORMS. Within the element $TRANSFORMS, you will find elements with >> the namespace prefix "render". If you see the XML QName that you are >> interested in as one of the "render" elements (based on the >> @match-ns/@match-name attributes), then you can change the element tag >> name to "render:custom". If you do not see such an element, then you can >> add your own "render:custom" element as a sibling of the "render" >> elements. >> >> Each element with QName "render:custom" must have a child element with >> QName "render:apply" that has the attributes @ns (function namespace), >> @name (function name), and @at (library module) to specify the function >> name and library module for the custom rendering. >> >> Let's step through a basic example. >> >> I have used entity enrichment to mark up the text of my documents, and >> one >> of the marked up items are URLs which get marked up with the namespace >> "http://marklogic.com/entity" and tag name "url". An example is: >> >> <e:url >> xmlns:e="http://marklogic.com/entity">http://marklogic.com</e:url> >> >> On the "Content" page, we specified that this QName should be rendered >> as >> a span, so we end up with the following element within the $TRANSFORMS >> variable in config.xqy: >> >> <render:generic-elem match-name="url" >> match-ns="http://marklogic.com/entity" tag="span" >> xmlns:render="http://marklogic.com/renderapi"/> >> >> This "render" element will cause the example URL above to be rendered >> as: >> >> <span>http://marklogic.com</span> >> >> However, we want the URL to be rendered with an "a" tag and @href >> attribute, like this: >> >> <a href="http://marklogic.com">Mark Logic Corporation</a> >> >> To do this, we replace the "render:generic-elem" element with the >> "render:custom" element below: >> >> <render:custom match-name="url" >> match-ns="http://marklogic.com/entity" >> xmlns:render="http://marklogic.com/renderapi"> >> <render:apply ns="http://mycompany.com/custom-app" >> name="link-render" at="/lib/extension.xqy" /> >> </render:custom> >> >> Notice that we no longer need the @tag attribute. >> >> Within the file "/lib/extension.xqy" (which is a file that was added >> after >> the project was compiled), we have the function custom:link-render >> (where >> the namespace prefix "custom" corresponds to the namespace >> "http://mycompany.com/custom-app"). This function looks like this: >> >> declare function custom:link-render($context as node(), $matchedrule as >> element(), $rules as element()+, $params as xs:string*) >> as element(a) >> { >> element {QName("http://www.w3.org/1999/xhtml","a")} { >> attribute href { concat(if (not(starts-with($context/string(), >> "http://"))) then "http://" else (), $context/string()) }, >> map:get($URL-MAP, $context/string()) >> } >> }; >> >> Parameters: >> >> $context - the XML element to be transformed Example: >> >> <e:url >> xmlns:e="http://marklogic.com/entity">http://marklogic.com</e:url> >> >> $matchedrule - the element with QName "render:custom" that represents >> the >> custom transformation Example: >> >> <render:custom match-name="url" >> match-ns="http://marklogic.com/entity" >> xmlns:render="http://marklogic.com/renderapi"> >> <render:apply ns="http://marklogic.com/appservices/component" >> name="link-render" at="/lib/extension.xqy" /> >> </render:custom> >> >> $rules - a sequence of all the elements from the $TRANSFORMS variable >> with >> namespace "render" that refer to rules for tranformation >> >> $params - this variable must be included in the function signature. >> However, for the purposes of extending a generated application, this >> parameter should not be used within the function itself. >> >> >> >> >> David Amusin >> Software Engineer >> Mark Logic Corporation >> 999 Skyway Road >> Suite 200 >> San Carlos, CA 94070 >> +1 650 207 2308 Cell >> +1 650 655 2310 Fax >> [email protected] >> www.marklogic.com >> >> >> >> This e-mail and any accompanying attachments are confidential. The >> information is intended solely for the use of the individual to whom it >> is >> addressed. Any review, disclosure, distribution, or use of this e-mail >> communication by others is strictly prohibited. If you are not the >> intended recipient, please notify us by returning this message to the >> sender and delete all copies. Thank you for your cooperation. >> >> >> >> >> >> >> >>> ________________________________________ >>> From: [email protected] >>> [[email protected] >>> ] On Behalf Of Betty Harvey [[email protected]] >>> Sent: Tuesday, June 30, 2009 1:27 PM >>> To: General Mark Logic Developer Discussion >>> Subject: [MarkLogic Dev General] Best Approach for Formatting >>> Content From Application Builder >>> >>> I have started building an application using Application Builder. >>> For most of my elements modifying the <render:generic-elem> tag along >>> with CSS modifications work. >>> >>> There are some cases where I need more granularity in formatting. >>> The documentation doesn't specify how to modify the <item-detail> >>> component in the config.xqy file: >>> >>> <item-detail> >>> <render:generic-elem match-name="Revision" match-ns="" tag="tr" >>> xmlns:render="http://marklogic.com/renderapi"/> >>> </item-detail> >>> >>> I need to do more manipulation of what goes into table cells that our >>> outside the sequential flow of the information. >>> >>> Any advice/hints/tips is appreciated! >>> >>> Thanks! >>> >>> >>> /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ >>> Betty Harvey | Phone: 410-787-9200 FAX: 9830 >>> Electronic Commerce Connection, Inc. | >>> [email protected] | Washington,DC XML Users Grp >>> URL: http://www.eccnet.com | http://www.eccnet.com/xmlug/ >>> /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\\/\/ >>> _______________________________________________ >>> General mailing list >>> [email protected] >>> http://xqzone.com/mailman/listinfo/general >> >> >> _______________________________________________ >> General mailing list >> [email protected] >> http://xqzone.com/mailman/listinfo/general >> > > > /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ > Betty Harvey | Phone: 410-787-9200 FAX: 9830 > Electronic Commerce Connection, Inc. | > [email protected] | Washington,DC XML Users Grp > URL: http://www.eccnet.com | http://www.eccnet.com/xmlug/ > /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\\/\/ > _______________________________________________ > General mailing list > [email protected] > http://xqzone.com/mailman/listinfo/general > _______________________________________________ > General mailing list > [email protected] > http://xqzone.com/mailman/listinfo/general > /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ Betty Harvey | Phone: 410-787-9200 FAX: 9830 Electronic Commerce Connection, Inc. | [email protected] | Washington,DC XML Users Grp URL: http://www.eccnet.com | http://www.eccnet.com/xmlug/ /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\\/\/ _______________________________________________ General mailing list [email protected] http://xqzone.com/mailman/listinfo/general
