XQuery and XPath

dong_lin

贡献于2014-05-30

字数:0 关键词: XML解析

Tutorial  – XPath, XQuery CSCC43 ‐ Introduction to Databases CSCC43: Intro. to Databases 1 XPath TerminologyXPath Terminology • Node• Node – document root, element, attribute, text, comment, ... • Relationship – parent, child, sibling, ancestor, descendent, … • Exercise: Identify nodes and relationships in following xml document Harry Potter 79.99 / Learning XML 69.95 document root does not correspond to anything ithd t Intro. to Databases 39.00 in the document CSCC43: Intro. to Databases 2 Node selectorNode selector 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 selection Selects the current node. Selects the current node .. Selects the parent of the current node @ Selects attribute nodes CSCC43: Intro. to Databases 3 Node selector: exerciseNode selector: exercise Result Path Expression Sl t th dttd ?Selects the document root node ? ? Selects the bookstore element node ? ? Selects all book element nodes ? ? Selects all price element nodes ? ? Sl t lll tt ib t d ?Selects all lang attribute nodes ? ? ././. ? /bookstore//@lang/../.. ? ./book/tilte/@lang CSCC43: Intro. to Databases 4 @g Node selector : exercise solNode selector : exercise sol Result Path Expression Selects the document root node /Selects the document root node / /. Selects the bookstore element node /bookstore ./bookstore Selects all book element nodes /bookstore/book //book Selects all price element nodes bookstore/book/price //price//price Selects all lang attribute nodes //@lang Selects 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 exerciseNode selector: more exercise Result Path ExpressionResult Path Expression Selects text nodes of all price element nodes ? Select all child nodes of book element nodes ? 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 solNode selector: more exercise sol Result Path ExpressionResult Path Expression Selects text nodes of all price element nodes //price/text() Select all child nodes of book element nodes /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 SemanticsXPath Syntax and Semantics StSt•• SyntaxSyntax – locationStep1/locationStep2/… • locationStep = axis::nodeSelector[predicate]locationStep   axis::nodeSelector[predicate] • Semantics – Find all nodes specified by locationStep1locationStep1p y pp • Find all nodes specified by axis::nodeSelectoraxis::nodeSelector • Select only those that satisfy predicatepredicate – For each such node N:For each such node N: • Find all nodes specified by locationStep2locationStep2 using N as the current  node • Take union• Take union – For each node returned by locationStep2locationStep2 do the same  using locationStep3, …locationStep3, … CSCC43: Intro. to Databases 8 Complete set of AxesComplete set of Axes • self ‐‐ the context node itself • child ‐‐ the children of the context node • descendant ‐‐ all descendants (children+) • parent ‐‐ the parent (empty if at the root) • ancestor ‐‐ all ancestors from the parent to the root • descendant or self the union of descendant and self• descendant‐or‐self ‐‐ the union of descendant and self • ancestor‐or‐self ‐‐ the union of ancestor and self • following‐sibling ‐‐ siblings to the rightfgg g g • preceding‐sibling ‐‐ siblings to the left • following ‐‐ all following nodes in the document, excluding descendants • preceding all preceding nodes in the document excluding ancestors• preceding ‐‐ all preceding nodes in the document, excluding ancestors • attribute ‐‐ the attributes of the context node CSCC43: Intro. to Databases 9 Axes: exerciseAxes: exercise Result Path Expression Selects 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/f ollowing::node() CSCC43: Intro. to Databases 10 Axes: exercise (sol)Axes: exercise (sol) Result Path Expression Selects book element nodes /descendant::book Select all isbn attribute nodes //book/attribute::isbn Select title and price element nodes //book/title | //book/price Sl 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 ltd /bookstore/node()/descendant-or- self::node() element node Select all nodes (except attributes) after the first title node /descendant::title/@*/parent::title/f ollowing::node() CSCC43: Intro. to Databases 11 Predicate: summaryPredicate: summary • [position() op #], [last()] – op: =, !=, <, >, <=, >=p , , , , , – test position among siblings • [attribute::name op “value"]• [attribute::name op  value ] – op: =, !=, <, >, <=, >= test equality of an attribute– test equality of an attribute • [axis:nodeSelector] tt tt– test pattern CSCC43: Intro. to Databases 12 Predicate: exercisePredicate: exercise Result 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]/title elements 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: exercise sol Result 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/attri bute::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]/title elements with a price greater than 35.00 Select 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 Databases 39.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 Databases 39.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 Databases 39.00 • Answer: – /bookstore/book[attribute::cat="textbook" and contains(title, "XML")]/title/text() CSCC43: Intro. to Databases 17 XQuery ExampleXQuery Example Q1: Create a new document which contain only the isbn and title of textbooksQ1: Create a new document which contain only the isbn and title of textbooks. { for $book in doc("bookstore.xml")//book where $book/@cat="textbook"$ /@ return {$book/title} } Result:  Learning XML Intro. to Databases / CSCC43: Intro. to Databases 18 XQuery Syntax and SemanticsXQuery Syntax and Semantics • Syntax (FLWR)• Syntax (FLWR) for variable bindings   (like from in SQL) let variable bindings (like from in SQL) where condition (like where in SQL)where condition  (like where in SQL) 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 AgainXQuery Example Again { for $book in doc("bookstore.xml")//book where $book/@cat="textbook" return {$book/title} } / bk Harry Potter 79.99 Learning XML Learning XML 69.95 Intro. to Databases Intro. to Databases 39.00 CSCC43: Intro. to Databases 20 XQuery Example ModifiedXQuery Example Modified Q2:Q2:  { let $book := doc("bookstore.xml")//book where $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 Databases 39.00 CSCC43: Intro. to Databases 21 XQuery Exercise BasicXQuery Exercise ‐ Basic Q3: Find the title and price of the book with isbn “222222”Q3: Find the title and price of the book with isbn  222222   for $book in doc("bookstore.xml")//book where $book[@isbn="222222"]where $book[@isbn= 222222 ] return { $book/title, $book/price} Result:  Learning XML gg g 69.95  CSCC43: Intro. to Databases 22 XQuery Exercise OrderingXQuery Exercise ‐ Ordering Q4: Produce a list of non fictions with their title and price sorted by priceQ4: Produce a list of non‐fictions with their title and price, sorted by price.  { for $book in doc("bookstore.xml")//book, $title in $book/title, $price in $book/price where $book/@cat!="fiction"where $book/@cat!= fiction order by $price/text() return { $title, $price} } Result:  Intro. to Databases  39.00  Learning XML  69.95  CSCC43: Intro. to Databases 23 XQuery Exercise AggregationXQuery Exercise ‐ Aggregation  Q5: Find title of the the textbook with highest priceQ5: Find title of the the textbook with highest price.  { let $prices := doc("bookstore.xml")//book[@cat="textbook"]/price let $max := max($prices)$ ($p ) return    {for $book in doc("bookstore.xml")//book where $book/price = $max return $book/title } } / Result:  Learning XMLLearning XML  CSCC43: Intro. to Databases 24 XQuery Exercise ‐ RestructuringQy g Q6: Restructure the document  to organize books by categories.   { let $categories :=  for $category in doc("bookstore.xml")//book/@cat t $treturn $category for $cat in distinct‐values($categories) return  { for $book in doc("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 ‐ RestructuringQy g Q7: Restructure the document  to produce the total price and count  of books in each category.   { let $categories :=  for $category in doc("bookstore.xml")//book/@cat return $categoryreturn $category for $cat in distinct‐values($categories) return  { let $prices‐in‐cat := doc("bookstore.xml")//book[@cat=$cat]/price return return  } }  Result:  Harry Potter 79.99 Learning XML 69.95 Intro to <price total="108.95" count="2" /> </category> </price-by-category> CSCC43: Intro. to Databases 26 <title lang= eng >Intro. to Databases 39.00

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 5 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档

相关文档