[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: XQuery & XSLT was RE: Verboseness - XML Syntax for XQuery 1.0(XQueryX)
- From: Richard Lanyon <rgl@decisionsoft.com>
- To: xml-dev@lists.xml.org
- Date: Wed, 20 Jun 2001 19:45:27 +0100 (BST)
On Tue, 19 Jun 2001, Jonathan Robie wrote:
> I need more detail on this to understand what you want. Let me ask you a
> few questions based on one of Evan's examples
> (http://xmlportfolio.com/xsltuk/slides/Q18b.html).
>
> In the new XQuery syntax, it looks like this:
>
> FOR $h IN //holding
> RETURN
> <holding>
> { $h/title }
> {
> IF ($h/@type = "Journal")
> THEN $h/editor
> ELSE $h/author
> }
> </holding>
> SORTBY(title)
>
> Note that the curly braces indicate expressions to be evaluated, as opposed
> to literal content.
This is actually incredibly similar to the syntax for "interpolations"
in XML Script 2 (see http://www.xmlscript.org/), where the above would
probably be something like:
<xs:output>
<holding>
# $h/title #
<xs:if test="$h/@type = 'journal'">
<xs:then># $h/@editor #</xs:then>
<xs:else># $h/@author #</xs:else>
</xs:if>
</holding>
</xs:output>
The text between '#' signs is an interpolation (the
interpolation delimiters don't have to be '#' signs, that's just the
default). If you don't like the 'non-XMLness' you can write
<xs:output>
<holding>
<xs:eval>$h/title</xs:eval>
<xs:if test="$h/@type = 'journal'">
<xs:then><xs:eval>$h/@editor</xs:eval></xs:then>
<xs:else><xs:eval>$h/@author</xs:eval></xs:else>
</xs:if>
</holding>
</xs:output>
though you obviously can't use an <xs:eval> inside attribute values,
whereas you can put interpolations inside attribute values.
--
Richard Lanyon, Software Engineer DecisionSoft Ltd.
Telephone: +44-1865-203192 http://www.decisionsoft.com
"The medium is the message" -- Marshall McLuhan