Tutorial –XPath, XQuery - University of...

download Tutorial –XPath, XQuery - University of Torontoleijiang/teaching/cscc43-s09/content/tutorial/... · Node selector: exercise Result Path Expression Sl t thSelects the dttdocument

If you can't read please download the document

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