xpath to xquery
Download
Skip this Video
Download Presentation
Xpath to XQuery

Loading in 2 Seconds...

play fullscreen
1 / 29

Xpath to XQuery - PowerPoint PPT Presentation


  • 63 Views
  • Uploaded on

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 >

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Xpath to XQuery' - merle


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: Rick

Hull

* Matches any element

//author/*

xpath attribute nodes
Xpath: Attribute Nodes

/bib/book/@price

Result: “55”

@price means that price is an attribute

xpath predicates
Xpath: Predicates

/bib/book/author[firstname]

Result: Rick

Hull

xpath more predicates
Xpath: More Predicates

Result:

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

xpath more predicates1
Xpath: More Predicates

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

/bib/book[author/@age < “25”]

/bib/book[author/text()]

xpath summary
Xpath: Summary

bib matches a bib element

* matches any element

/ matches the root element

/bib matches a bib element under root

bib/paper matches a paper in bib

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

//paper matches a paper at any depth

paper|book matches a paper or a book

@price matches a price attribute

bib/book/@price matches 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:

abc

def

ghi

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 { $y/text() }

Result:

abc

< answer > def

< answer > ghi

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 { $y/text() }

Result:

abc

< answer > def

< answer > ghi

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

{ $a,

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

RETURN$t}

xquery4
XQuery

Result:

Jones

abc

def

Smith

ghi

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

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

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

WHEREcount($b) > 100

RETURN { $p }

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:

...

...

...

...

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

RETURN { $x }

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

RETURN { $x }

Returns:

...

...

...

...

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:

...

...

...

...

RETURN { $b/author }

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

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

RETURN { $p/text() } ,

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

RETURN

{ $b/title ,

$b/price

}

SORTBY(priceDESCENDING)

SORTBY(name)

if then else
If-Then-Else

FOR$h IN //holding

RETURN

{ $h/title,

IF$h/@type = "Journal"

THEN$h/editor

ELSE$h/author

}

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 ?
ad