Re: More on XQueryX paths

Howard Katz wrote:
> 
> What's the syntax for longer path expressions? None of the examples
> show multi-step expressions having more than a single operator.

Actually, http://www.w3.org/TR/2001/WD-xqueryx-20010607#Example1 has a
three-step path:
    document("bib.xml")//book[publisher = $p]/price
which supposedly translates as
    <q:step axis="CHILD">
        <q:function name="document">
            <q:constant datatype="CHARSTRING">bib.xml</q:constant>
        </q:function>
        <q:step axis="CHILD">
            <q:predicatedExpr>
                <q:identifier>book</q:identifier>
                <q:predicate>
                    <q:function name="EQUALS">
                        <q:identifier>publisher</q:identifier>
                        <q:variable>$p</q:variable>
                    </q:function>
                </q:predicate>
            </q:predicatedExpr>
            <q:identifier>price</q:identifier>
        </q:step>
    </q:step>
although I suspect that first "axis" should be "SLASHSLASH".

> What if I want to say
> 
>       /article/section
> 
> Given the DTD, it looks like I have to recast this into AST form:
> 
>               /
>      null          /
>             article   section
> 
> so I can say something like this:
> 
>      <q:query ...>
>           <q:step axis="CHILD">
>                 <q:identifier/>
>                 <q:step axis="CHILD">
>                     <q:identifier>article</q:identifier>
>                     <q:identifier>section</q:identifier>
>                 </q:step>
>           </q:step>
>      </q:query>
> 
> Is that correct?

Apparently. Modulo the correct expression of absolute paths (your previous
question).

------
For contrast, in Wayne Steele's XML Encoded XPath (XEXPath), these would
(I think) be expressed as follows:

    <!-- document("bib.xml")//book[publisher = $p]/price -->
    <compose>
        <function name="document">
            <literal>bib.xml</literal>
        </function>
        <descendant-or-self type="node" />
        <child>book</child>
        <filter>
            <eq>
                <compose><child>publisher</child></compose>
                <variable>p</variable>
            </eq>
        </filter>
        <child>price</child>
    </compose>

    <!-- /article/section -->
    <compose>
        <root/>
        <child>article</child>
        <child>section</child>
    </compose>

As you can see, XEXPath does *not* reflect the recursive tree structure of
path expressions, which makes them flatter, briefer, and (in my opinion)
easier to read.  For info on XEXPath, see:
http://lists.xml.org/archives/xml-dev/200104/msg00013.html
and the 3 messages that follow that.

-Michael

Received on Sunday, 17 June 2001 20:36:52 UTC