Re: Query on the XML graph

Jiang Ming Fei <[email protected]>
Newsgroups gmane.comp.web.query-languages
Message-ID <[email protected]>
Thank you very much. I am now much more clearer now.

Regards,
Fianny

On Sun, 8 Feb 2004, Michael Brundage wrote:

>
> XPath can follow ID/IDREF edges (in one direction) using the id() function.
>
> Also, XPath can do self-joins, and when extended with the document() (or
> doc()) function, it can do cross-document joins.  The kinds of joins that
> can be expressed are limited by XPath's inability to introduce variables
> (aliases).
>
> Some joins are built-in to the semantics of XPath.  For example,
> //A[B/C > B/D]
> Iterates over the B children of A twice (independently, as a cross-product).
>
>
> Other joins are possible using absolute paths in predicates to achieve
> independence.
>
> For example, given a structure containing Employee elements with ID and
> ReportsTo attributes (typed as ID, IDREF, respectively), here are some joins
> expressed using XPath 1.0:
>
> (: the manager of a particular employee :)
> Id(//Employee[@ID='X1']/@ReportsTo)
>
> (: all managers - i.e., all employees with at least one direct report :)
> //Employee[//Employee/@ReportsTo = @ID]
>
> (: employees who report to people not in the organization, or report to no
> one :)
> //Employee[not(@ReportsTo = //Employee/@ID)]
>
> (: their direct reports :)
> //Employee[@ReportsTo = //Employee[not(@ReportsTo = //Employee/@ID)]/@ID]
>
> etc.
>
> Other joins are difficult to express, require unnatural syntax, or are
> outright inexpressible using XPath 1.0:
>
> (: all employees with at least two direct reports
>   You'd like to do: :)
> //Employee[count(//Employee[@ReportsTo = $outer/@ID]) >= 2]
> (: or :)
> //Employee[count(id(//Employee/@ReportsTo)[@ID = $outer/@ID]) >= 2]
> (: but you have no way to introduce an alias to the outer Employee.
> If XPath had an idref() function, you could do something like: :)
> //Employee[count(idref(@ID)) >= 2]
>
>
> (: managers whose entire organization is a certain size
>  - there's no way to count subtrees unless the hierarchy already represents
> the relationship.  For example, :)
> //Employee[count(.//Employee)]
> (: is trivial, but there's no way to recursively follow ID/IDREF edges :)
>
> etc.
>
>
>
> Hope this helps,
>
> Michael Brundage
> [email protected]
>
> Writing as
> Author, XQuery: The XML Query Language (Addison-Wesley, 2004)
> Co-author, Professional XML Databases (Wrox Press, 2000)
>
> not as
> Technical Lead
> Common Query Runtime/XML Query Processing
> WebData XML Team
> Microsoft
>
>
>
> On 2/8/04 7:16 PM, "Jim Tivy" <[email protected]> wrote:
> > One way to accomplish cross document links is use foreignkey/primary key
> > relationships and then do joins using XQuery.
> >
> >> -----Original Message-----
> >> From: [email protected] [mailto:[email protected]]On Behalf Of
> >> Jiang Ming Fei
> >> Sent: Sunday, February 08, 2004 6:48 PM
> >> To: [email protected]
> >> Cc: [email protected]
> >> Subject: Query on the XML graph
> >>
> >>
> >>
> >> I am now doing the research on the XML graph. What I am wondering about is
> >> that how the nowaday query engines cope with the XML files that have idref
> >> attributes, or XML graph? Since XPath have no notation for the idref/id
> >> edge. Or I miss some details?  So can I always treat the XML document as
> >> a tree with the special node, i.e. idref node?
> >>
> >> Thank you in advance for your suggestion.
> >>
> >> Regards,
> >> Fianny
> >>
> >>
> >
>
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.