|
[XQuery Talk Mailing List Archive Home] [By Date] [By Thread] [By Subject] [By Author] [Recent Entries] [Reply To This Message] Better way to structure XQueryG. Ken Holman gkholman at CraneSoftwrights.comWed Jul 8 13:32:27 PDT 2009
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
|
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
|






