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

Reply via email to