|
[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
|






