Xpath to xquery
This presentation is the property of its rightful owner.
Sponsored Links
1 / 29

Xpath to XQuery PowerPoint PPT Presentation


  • 38 Views
  • Uploaded on
  • Presentation posted in: General

Xpath to XQuery. February 23rd, 2004. Other Stuff. HW 3 is out. Instructions for Phase 3 are out. Today: finish Xpath, start and finish Xquery. From Wednesday: dbms internals. Xpath: Wildcard. Result: < first-name > Rick </ first-name > < last-name > Hull </ last-name >

Download Presentation

Xpath to XQuery

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Xpath to xquery

Xpath to XQuery

February 23rd, 2004


Other stuff

Other Stuff

  • HW 3 is out.

  • Instructions for Phase 3 are out.

  • Today: finish Xpath, start and finish Xquery.

  • From Wednesday: dbms internals.


Xpath wildcard

Xpath: Wildcard

Result: <first-name> Rick </first-name>

<last-name> Hull </last-name>

* Matches any element

//author/*


Xpath attribute nodes

Xpath: Attribute Nodes

[email protected]

Result: “55”

@price means that price is an attribute


Xpath predicates

Xpath: Predicates

/bib/book/author[firstname]

Result: <author> <first-name> Rick </first-name>

<last-name> Hull </last-name>

</author>


Xpath more predicates

Xpath: More Predicates

Result: <lastname> … </lastname>

<lastname> … </lastname>

/bib/book/author[firstname][address[//zip][city]]/lastname


Xpath more predicates1

Xpath: More Predicates

/bib/book[@price < “60”]

/bib/book[[email protected] < “25”]

/bib/book[author/text()]


Xpath summary

Xpath: Summary

bibmatches a bib element

*matches any element

/matches the root element

/bibmatches a bib element under root

bib/papermatches a paper in bib

bib//papermatches a paper in bib, at any depth

//papermatches a paper at any depth

paper|bookmatches a paper or a book

@pricematches a price attribute

[email protected] price attribute in book, in bib

bib/book/[@price<“55”]/author/lastname matches…


Comments on xpath

Comments on XPath?

  • What’s good about it?

  • What can’t it do that you want it to do?

  • How does it compare, say, to SQL?


Xquery

XQuery

  • Based on Quilt, which is based on XML-QL

  • Uses XPath to express more complex queries


Flwr flower expressions

FLWR (“Flower”) Expressions

FOR ...

LET...

WHERE...

RETURN...


Xquery1

XQuery

Find all book titles published after 1995:

FOR$xINdocument("bib.xml")/bib/book

WHERE$x/year > 1995

RETURN { $x/title }

Result:

<title> abc </title>

<title> def </title>

<title> ghi </title>


Xquery2

XQuery

Find book titles by the coauthors of “Database Theory”:

FOR$xINbib/book[title/text() = “Database Theory”]/author$yINbib/book[author/text() = $x/text()]/title

RETURN <answer> { $y/text() } </answer>

Result:

<answer> abc </ answer >

< answer > def </ answer >

< answer > ghi </ answer >

The answer willcontain duplicates !


Xquery3

XQuery

Same as before, but eliminate duplicates:

FOR$xINbib/book[title/text() = “Database Theory”]/author$yINdistinct(bib/book[author/text() = $x/text()]/title)

RETURN <answer> { $y/text() } </answer>

Result:

<answer> abc </ answer >

< answer > def </ answer >

< answer > ghi </ answer >

distinct = a function that eliminates duplicates


Xquery nesting

XQuery: Nesting

For each author of a book by Morgan Kaufmann, list all books she published:

FOR$aINdistinct(document("bib.xml")/bib/book[publisher=“Morgan Kaufmann”]/author)

RETURN <result>

{ $a,

FOR$tIN /bib/book[author=$a]/title

RETURN$t}

</result>


Xquery4

XQuery

Result:

<result>

<author>Jones</author>

<title> abc </title>

<title> def </title>

</result>

<result>

<author> Smith </author>

<title> ghi </title>

</result>


Xquery5

XQuery

  • FOR$x in expr -- binds $x to each value in the list expr

  • LET$x = expr -- binds $x to the entire list expr

    • Useful for common subexpressions and for aggregations


Xquery6

XQuery

<big_publishers>

FOR$pINdistinct(document("bib.xml")//publisher)

LET$b := document("bib.xml")/book[publisher = $p]

WHEREcount($b) > 100

RETURN { $p }

</big_publishers>

count = a (aggregate) function that returns the number of elms


Xquery7

XQuery

Find books whose price is larger than average:

LET$a=avg(document("bib.xml")/bib/book/price)

FOR$b in document("bib.xml")/bib/book

WHERE$b/price > $a

RETURN { $b }

Let’s try to write this in SQL…


Xquery8

XQuery

Summary:

  • FOR-LET-WHERE-RETURN = FLWR

FOR/LET Clauses

List of tuples

WHERE Clause

List of tuples

RETURN Clause

Instance of Xquery data model


For v s let

FOR v.s. LET

FOR

  • Binds node variables iteration

    LET

  • Binds collection variables one value


For v s let1

FOR v.s. LET

Returns:

<result> <book>...</book></result>

<result> <book>...</book></result>

<result> <book>...</book></result>

...

FOR$xINdocument("bib.xml")/bib/book

RETURN <result> { $x } </result>

LET$xINdocument("bib.xml")/bib/book

RETURN <result> { $x } </result>

Returns:

<result> <book>...</book>

<book>...</book>

<book>...</book>

...

</result>


Collections in xquery

Collections in XQuery

  • Ordered and unordered collections

    • /bib/book/author = an ordered collection

    • Distinct(/bib/book/author) = an unordered collection

  • LET$a = /bib/book $a is a collection

  • $b/author  a collection (several authors...)

Returns:

<result> <author>...</author>

<author>...</author>

<author>...</author>

...

</result>

RETURN <result> { $b/author } </result>


Collections in xquery1

Collections in XQuery

What about collections in expressions ?

  • $b/price list of n prices

  • $b/price * 0.7  list of n numbers

  • $b/price * $b/quantity  list of n x m numbers ??

  • $b/price * ($b/quant1 + $b/quant2) $b/price * $b/quant1 + $b/price * $b/quant2 !!


Sorting in xquery

Sorting in XQuery

<publisher_list>

FOR$pINdistinct(document("bib.xml")//publisher)

RETURN <publisher> <name> { $p/text() } </name> ,

FOR$bIN document("bib.xml")//book[publisher = $p]

RETURN <book>

{ $b/title ,

$b/price

}

</book> SORTBY(priceDESCENDING)

</publisher> SORTBY(name)

</publisher_list>


If then else

If-Then-Else

FOR$h IN //holding

RETURN <holding>

{ $h/title,

[email protected] = "Journal"

THEN$h/editor

ELSE$h/author

}

</holding> SORTBY (title)


Existential quantifiers

Existential Quantifiers

FOR$b IN //book

WHERESOME$p IN $b//paraSATISFIES

contains($p, "sailing")

AND contains($p, "windsurfing")

RETURN { $b/title }


Universal quantifiers

Universal Quantifiers

FOR$b IN //book

WHEREEVERY$p IN $b//paraSATISFIES

contains($p, "sailing")

RETURN { $b/title }


Other stuff in xquery

Other Stuff in XQuery

  • BEFORE and AFTER

    • for dealing with order in the input

  • FILTER

    • deletes some edges in the result tree

  • Recursive functions

    • Currently: arbitrary recursion

    • Perhaps more restrictions in the future ?


  • Login