|
[XQuery Talk Mailing List Archive Home] [By Date] [By Thread] [By Subject] [By Author] [Recent Entries] [Reply To This Message] Better way to structure XQueryDavid A. Lee dlee at calldei.comWed Jul 8 13:40:46 PDT 2009
A scripting language like xproc or xmlsh can do this where xquery cannot
directly.
For example, in xmlsh
xread doc < file.xml
xpaths=(xpath1 xpath2 xpath3 xpath4)
for $x in $xpaths ; do
r=$<(xquery -q $x -i $doc)
xecho <[ <result>{$r}</result> ]>
done
David A. Lee
http://x-query.com/mailman/listinfo/talk
http://www.calldei.com
http://www.xmlsh.org
812-482-5224
G. Ken Holman wrote:
> At 2009-07-08 11:08 -0500, http://x-query.com/mailman/listinfo/talk wrote:
>> I have the following XQuery:
>>
>> xquery version="1.0";
>>
>> let $mydoc :=doc('http://localhost:8080/exist/rest/db/bio.xml')
>> let $profileType := 'Standard'
>> let $profileType := if
>> ($mydoc/metadata/idinfo/spdom/bounding/boundalt/altmin or
>> $mydoc/metadata/idinfo/spdom/bounding/boundalt/altmax) then 'Biological'
>> else $profileType
>>
>> return
>> <result>
>> {$profileType>
>> </result>
>
> As an aside, I would have written that as:
>
> xquery version="1.0";
> <result>
> { if ( doc('http://localhost:8080/exist/rest/db/bio.xml')/
> metadata/idinfo/spdom/bounding/boundalt/altmin or
> doc('http://localhost:8080/exist/rest/db/bio.xml')/
> metadata/idinfo/spdom/bounding/boundalt/altax )
> then 'Biological" else 'Standard' }
> </result>
>
> ... because I would assume that the processor would have cached the
> document in memory during the transformation rather than accessing the
> resource each time. I'm unsure why you would have used and re-used
> the $profileType variable.
>
>> This works fine, however, I would like to take the paths and place them
>> in a sequence (there are potentially 30+ I need to check for). I am new
>> to XQuery/XPath and unable to figure out the proper way to do this.
>>
>> Can anyone let me know how to use two variables, one being the $mydoc
>> and one being a string ($path :=
>> '/metadata/idinfo/spdom/bounding/boundalt/altmin') and have it evaluate
>> as XPath instead of as a string?
>
> There is no equivalent to eval() available to you.
>
> However, if you have a text serialization available in your XQuery
> implementation then XQuery is composable (XSLT moreso I find because
> it is all simple XML) so you can run two steps, the first to compose
> the necessary XQuery that is run in the second.
>
> I have an example below that uses Saxon. I have no idea what you want
> to do with your XPath expressions since you are asking about getting
> them one at a time, yet you are using two of them in your sample.
>
> I hope this helps give you an idea.
>
> . . . . . . . . . . . . . Ken
>
> p.s. I hope on Friday to announce a hands-on XQuery class in
> California this summer ... plans are in the works and there is a
> survey out to help determine interest in particular delivery dates
>
> T:\ftemp>type stacy.xml
> <xpaths>
> <xpath>/metadata/idinfo/spdom/bounding/boundalt/altmin</xpath>
> <xpath>/metadata/idinfo/spdom/bounding/boundalt/altmax</xpath>
> </xpaths>
>
> T:\ftemp>type stacy.xq
> declare namespace saxon = "http://saxon.sf.net/";
> declare option saxon:output "method=text";
>
> "let $mydoc := doc( 'bio.xml' )
> return <result>
> ",
> for $each in xpaths/xpath
> return concat("<subresult>
> {if ($mydoc",$each,") then 'Biological' else 'Standard'}
> </subresult>"),
> "</result>"
>
> T:\ftemp>xquery stacy.xml stacy.xq generated.xq
>
> T:\ftemp>type generated.xq
> let $mydoc := doc( 'bio.xml' )
> return <result>
> <subresult>
> {if
> ($mydoc/metadata/idinfo/spdom/bounding/boundalt/altmin) then 'B
> iological' else 'Standard'}
> </subresult> <subresult>
> {if
> ($mydoc/metadata/idinfo/spdom/bounding/boundalt/altmax) then 'B
> iological' else 'Standard'}
> </subresult> </result>
> T:\ftemp>xquery bio.xml generated.xq
> Source document ignored - query does not access the context item
> <?xml version="1.0" encoding="UTF-8"?>
> <result>
> <subresult>Standard</subresult>
> <subresult>Standard</subresult>
> </result>
> T:\ftemp>
>
>
>
> --
> Possible July/August XSLT/XQuery/XSL-FO training in Oakland/CA/USA
> Crane Softwrights Ltd. http://www.CraneSoftwrights.com/q/
> Training tools: Comprehensive interactive XSLT/XPath 1.0/2.0 video
> Video lesson: http://www.youtube.com/watch?v=PrNjJCh7Ppg&fmt=18
> Video overview: http://www.youtube.com/watch?v=VTiodiij6gE&fmt=18
> G. Ken Holman mailto:http://x-query.com/mailman/listinfo/talk
> Male Cancer Awareness Nov'07 http://www.CraneSoftwrights.com/q/bc
> Legal business disclaimers: http://www.CraneSoftwrights.com/legal
>
> _______________________________________________
> http://x-query.com/mailman/listinfo/talk
> http://x-query.com/mailman/listinfo/talk
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|






