Tutorial –XPath, XQuery - University of...
Transcript of Tutorial –XPath, XQuery - University of...
-
Tutorial XPath,XQuery
CSCC43 IntroductiontoDatabases
CSCC43: Intro. to Databases 1
-
XPath TerminologyXPathTerminology Node Node
documentroot,element,attribute,text,comment,... Relationship
parent,child,sibling,ancestor,descendent, Exercise:Identifynodesandrelationshipsinfollowingxmldocument
Harry Potter 79.99
/
Learning XML 69.95
document root does not correspond to anything
i th d tIntro. to Databases39.00
in the document
CSCC43: Intro. to Databases 2
-
Node selectorNodeselector
Expression Description
/ Selects the document root node (absolute path)/ Selects the document root node (absolute path)
node Selects the node (relative path)
// Selects all descendent nodes of the current node that match the selectionSelects the current node. Selects the current node
.. Selects the parent of the current node
@ Selects attribute nodes
CSCC43: Intro. to Databases 3
-
Node selector: exerciseNodeselector:exerciseResult Path ExpressionS l t th d t t d ?Selects the document root node ?
?Selects the bookstore element node ?
?Selects all book element nodes ?
?Selects all price element nodes ?
?S l t ll l tt ib t d ?Selects all lang attribute nodes ?
? ././.
? /bookstore//@lang/../..
? ./book/tilte/@lang
CSCC43: Intro. to Databases 4
@ g
-
Node selector : exercise solNodeselector:exercisesolResult Path ExpressionSelects the document root node /Selects the document root node /
/.Selects the bookstore element node /bookstore
./bookstoreSelects all book element nodes /bookstore/book
//book
Selects all price element nodes bookstore/book/price//price//price
Selects all lang attribute nodes //@langSelects the document root node ././.Selects all the book element nodes /bookstore//@lang/../..Selects the empty set ./book/tilte/@lang
CSCC43: Intro. to Databases 5
-
Node selector: more exerciseNodeselector:moreexerciseResult Path ExpressionResult Path ExpressionSelects text nodes of all price element nodes
?
Select all child nodes of book elementnodes
?
Select all comment nodes ?Select all comment nodes ?
Select all nodes except attribute nodes ?
Select all attribute nodes ?
? /bookstore/book/text()
? /bookstore/book/title/..//@*
CSCC43: Intro. to Databases 6
-
Node selector: more exercise solNodeselector:moreexercisesol
Result Path ExpressionResult Path ExpressionSelects text nodes of all price element nodes
//price/text()
Select all child nodes of book elementnodes
/bookstore/book/*
Select all comment nodes //comment()Select all comment nodes //comment()
Select all nodes except attribute nodes //node()
Select all attribute nodes //@*
Selects empty set /bookstore/book/text()
Select all attribute nodes which are descendant of book element nodes
/bookstore/book/title/..//@*
CSCC43: Intro. to Databases 7
-
XPath Syntax and SemanticsXPathSyntaxandSemantics
S tS t SyntaxSyntax locationStep1/locationStep2/
locationStep = axis::nodeSelector[predicate]locationStep axis::nodeSelector[predicate] Semantics
FindallnodesspecifiedbylocationStep1locationStep1p y pp Findallnodesspecifiedbyaxis::nodeSelectoraxis::nodeSelector Selectonlythosethatsatisfypredicatepredicate
For each such node N:ForeachsuchnodeN: FindallnodesspecifiedbylocationStep2locationStep2 usingNasthecurrentnode
Take union Takeunion ForeachnodereturnedbylocationStep2locationStep2 dothesameusinglocationStep3,locationStep3,
CSCC43: Intro. to Databases 8
-
Complete set of AxesCompletesetofAxes
self thecontextnodeitself child thechildrenofthecontextnode descendant alldescendants(children+) parent theparent(emptyifattheroot) ancestor allancestorsfromtheparenttotheroot descendant or self the union of descendant and self descendantorself theunionofdescendantandself ancestororself theunionofancestorandself
followingsibling siblingstotherightf g g g g precedingsibling siblingstotheleft following allfollowingnodesinthedocument,excludingdescendants
preceding all preceding nodes in the document excluding ancestors preceding allprecedingnodesinthedocument,excludingancestors attribute theattributesofthecontextnode
CSCC43: Intro. to Databases 9
-
Axes: exerciseAxes:exerciseResult Path ExpressionSelects book element nodes ?
Select all isbn attribute nodes ?
Select title and price element nodes ?
? / hild b k? /child::book
? /bookstore/book/following-sibling::booksibling::book
? /bookstore/node()/descendant-or-self::node()
? /descendant::title/@*/parent::title/following::node()
CSCC43: Intro. to Databases 10
-
Axes: exercise (sol)Axes:exercise(sol)Result Path ExpressionSelects book element nodes /descendant::book
Select all isbn attribute nodes //book/attribute::isbn
Select title and price element nodes //book/title | //book/price
S l t t t / hild b kSelects empty set /child::book
Selects the second book element node /bookstore/book/following-sibling::booksibling::book
Select all nodes (except attributes) that are descendants of the bookstore
l t d
/bookstore/node()/descendant-or-self::node()
element nodeSelect all nodes (except attributes) after the first title node
/descendant::title/@*/parent::title/following::node()
CSCC43: Intro. to Databases 11
-
Predicate: summaryPredicate:summary
[position()op#], [last()] op:=,!=,,=p , , , , , testpositionamongsiblings
[attribute::name op value"] [attribute::nameop value ] op:=,!=,,=test equality of an attribute testequalityofanattribute
[axis:nodeSelector]t t tt testpattern
CSCC43: Intro. to Databases 12
-
Predicate: exercisePredicate:exerciseResult Path Expression
Selects the first book element that is the ?Selects the first book element that is the child of the bookstore element.
?
?
Select book element nodes which has a ?Select book element nodes which has a child title element with lang attribute value no equal to eng.
?
S ?Selects the second to last book element ?Selects all nodes which have an attr ?Selects nodes with an attribute named ?Selects nodes with an attribute named lang or has a child element named price.
?
Selects all the title element of all book elements with a price greater than 35 00
/bookstore/book[price>35.00]/titleelements with a price greater than 35.00? /bookstore/book[position()>1 and
attribute::isbn="111111"]
CSCC43: Intro. to Databases 13
? /bookstore/book/title[last()]
-
Predicate: exercise solPredicate:exercisesolResult Path Expression
Selects the first book element that is the /bookstore/book[1]Selects the first book element that is the child of the bookstore element.
/bookstore/book[1]
/bookstore/book[position()=1]
Select book element nodes which has a /bookstore/book[child::title/attriSelect book element nodes which has a child title element with lang attribute value no equal to eng.
/bookstore/book[child::title/attribute::lang!="eng"]
S / / ()Selects the second to last book element /bookstore/book[last()-1]Selects all nodes which have an attr //node()[@*]Selects nodes with an attribute named //node()[@lang or child::price]Selects nodes with an attribute named lang or has a child element named price.
//node()[@lang or child::price]
Selects all the title element of all book elements with a price greater than 35 00
/bookstore/book[price>35.00]/titleelements with a price greater than 35.00Select the empty set /bookstore/book[position()>1 and
attribute::isbn="111111"]
CSCC43: Intro. to Databases 14
Select the last title element node of all book element nodes
/bookstore/book/title[last()]
-
XPath: exerciseXPath:exercise Question: find the title and price of non fiction books with a price more than 50
USDUSD.
Harry Potter 79.99
Learning XML 69.95
Intro. to Databases39.00
Answer: /bookstore/book[attribute::cat!="fiction" and price>50.00]/title |
CSCC43: Intro. to Databases 15
[ p ] |/bookstore/book[attribute::cat!="fiction" and price>50.00]/@isbn
-
XPath: exerciseXPath:exercise Question: find average price of textbooks.
Harry Potter 79.99
Learning XML 69.95
Intro. to Databases39.00
Answer: sum(/bookstore/book[attribute::cat="textbook"]/price/number(text())) div
count(/bookstore/book[attribute::cat="textbook"]/price)
CSCC43: Intro. to Databases 16
count(/bookstore/book[attribute::cat textbook ]/price)
-
XPath: exerciseXPath:exercise Question: find the titles of textbooks on XML.
Harry Potter 79.99
Learning XML 69.95
Intro. to Databases39.00
Answer: /bookstore/book[attribute::cat="textbook" and contains(title, "XML")]/title/text()
CSCC43: Intro. to Databases 17
-
XQuery ExampleXQueryExampleQ1: Create a new document which contain only the isbn and title of textbooksQ1:Createanewdocumentwhichcontainonlytheisbnandtitleoftextbooks.
{for $book indoc("bookstore.xml")//bookwhere $book/@cat="textbook"$ /@return {$book/title}}
Result:
LearningXML
Intro.toDatabases
/
CSCC43: Intro. to Databases 18
-
XQuery Syntax and SemanticsXQuerySyntaxandSemantics
Syntax (FLWR) Syntax(FLWR)for variablebindings (likefrom inSQL)let variablebindings (likefrom inSQL)where condition (like where in SQL)where condition (like where inSQL)return document (like select in SQL)
Semantics The for and let clause binds variables to elements specified by an
XQuery expression. for: bind a variable to each element in the returned set let: bind a variable to the whole set of elements
Filter out nodes that do not satisfy the condition of the where clause . For each retained tuple of bindings instantiate the return clause For each retained tuple of bindings, instantiate the return clause.
CSCC43: Intro. to Databases 19
-
XQuery Example AgainXQueryExampleAgain
{for $book indoc("bookstore.xml")//bookwhere $book/@cat="textbook"return {$book/title}}
/ b k
Harry Potter 79.99
Learning XML
Learning XML 69.95
Intro. to
Databases
Intro. to Databases39.00
CSCC43: Intro. to Databases 20
-
XQuery Example ModifiedXQueryExampleModifiedQ2:Q2:
{let $book :=doc("bookstore.xml")//bookwhere $book/@cat="textbook"return {$book/title}}}
Harry Potter 79.99
Harry Potter Learning XML Intro to Databases
Learning XML 69.95
Intro to Databases
Intro. to Databases
Intro. to Databases39.00
CSCC43: Intro. to Databases 21
-
XQuery Exercise BasicXQueryExercise BasicQ3: Find the title and price of the book with isbn 222222Q3:Findthetitleandpriceofthebookwithisbn 222222
for$bookindoc("bookstore.xml")//bookwhere $book[@isbn="222222"]where$book[@isbn= 222222 ]return{$book/title,$book/price}
Result:
LearningXMLg g g69.95
CSCC43: Intro. to Databases 22
-
XQuery Exercise OrderingXQueryExercise OrderingQ4: Produce a list of non fictions with their title and price sorted by priceQ4:Producealistofnonfictionswiththeirtitleandprice,sortedbyprice.
{for$bookindoc("bookstore.xml")//book,$titlein$book/title,$pricein$book/pricewhere $book/@cat!="fiction"where$book/@cat!= fictionorderby$price/text()return{$title,$price}}
Result:
Intro.toDatabases39.00
LearningXML69.95
CSCC43: Intro. to Databases 23
-
XQuery Exercise AggregationXQueryExercise AggregationQ5: Find title of the the textbook with highest priceQ5:Findtitleofthethetextbookwithhighestprice.
{let$prices:=doc("bookstore.xml")//book[@cat="textbook"]/pricelet$max:=max($prices)$ ($p )return
{for$bookindoc("bookstore.xml")//bookwhere$book/price=$maxreturn$book/title}
}/
Result:
Learning XMLLearningXML
CSCC43: Intro. to Databases 24
-
XQueryExercise RestructuringQ y gQ6:Restructurethedocumenttoorganizebooksbycategories.
{let$categories:=
for$categoryindoc("bookstore.xml")//book/@catt $ treturn$category
for$catindistinctvalues($categories)return
{for$bookindoc("bookstore.xml")//book
where $book[@cat = $cat]where$book[@cat=$cat]return$book}
}
Result:
Harry Potter
Harry Potter
79.99
Learning XML
69 95
79.99
69.95
Intro. to Databases
39.00/b k
Learning XML 69.95
CSCC43: Intro. to Databases 25
-
XQuery Exercise RestructuringQ y gQ7:Restructurethedocumenttoproducethetotalpriceandcountofbooksineachcategory.
{let$categories:=
for$categoryindoc("bookstore.xml")//book/@catreturn $categoryreturn$category
for$catindistinctvalues($categories)return
{let$pricesincat:=doc("bookstore.xml")//book[@cat=$cat]/pricereturn return
}
}
Result:
Harry Potter 79.99
Learning XML
69.95
Intro to
CSCC43: Intro. to Databases 26
Intro. to Databases
39.00