SlideShare a Scribd company logo
Web Data Management
Xpath & XQuery
Xpath: Wildcard
Result: <first-name> Rick </first-name>
<last-name> Hull </last-name>
* Matches any element
//author/*
3
Xpath: Attribute Nodes
Result: “55”
@price means that price is an attribute
/bib/book/@price
4
Xpath: Predicates
Result: <author> <first-name> Rick </first-name>
<last-name> Hull </last-name>
</author>
/bib/book/author[firstname]
5
Xpath: More Predicates
Result: <lastname> … </lastname>
<lastname> … </lastname>
/bib/book/author[firstname][address[//zip][city]]/lastname
6
Xpath: More Predicates
/bib/book[@price < “60”]
/bib/book[author/@age < “25”]
/bib/book[author/text()]
7
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…
8
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?
9
XQuery
• Based on Quilt, which is based on XML-QL
• Uses XPath to express more complex queries
10
FLWR (“Flower”) Expressions
FOR ...
LET...
WHERE...
RETURN...
11
XQuery
Find all book titles published after 1995:
FOR $x IN document("bib.xml")/bib/book
WHERE $x/year > 1995
RETURN { $x/title }
Result:
<title> abc </title>
<title> def </title>
<title> ghi </title>
12
XQuery
Find book titles by the coauthors of “Database Theory”:
FOR $x IN bib/book[title/text() = “Database Theory”]/author
$y IN bib/book[author/text() = $x/text()]/title
RETURN <answer> { $y/text() } </answer>
Result:
<answer> abc </ answer >
< answer > def </ answer >
< answer > ghi </ answer >
The answer will
contain duplicates !
13
XQuery
Same as before, but eliminate duplicates:
FOR $x IN bib/book[title/text() = “Database Theory”]/author
$y IN distinct(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
14
XQuery: Nesting
For each author of a book by Morgan Kaufmann, list all
books she published:
FOR $a IN distinct(document("bib.xml")
/bib/book[publisher=“Morgan Kaufmann”]/author)
RETURN <result>
{ $a,
FOR $t IN /bib/book[author=$a]/title
RETURN $t
}
</result>
15
XQuery
<result>
<author>Jones</author>
<title> abc </title>
<title> def </title>
</result>
<result>
<author> Smith </author>
<title> ghi </title>
</result>
Result:
16
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
17
XQuery
count = a (aggregate) function that returns the number of elms
<big_publishers>
FOR $p IN distinct(document("bib.xml")//publisher)
LET $b := document("bib.xml")/book[publisher = $p]
WHERE count($b) > 100
RETURN { $p }
</big_publishers>
18
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…
19
XQuery
Summary:
• FOR-LET-WHERE-RETURN = FLWR
FOR/LET Clauses
WHERE Clause
RETURN Clause
List of tuples
List of tuples
Instance of Xquery data model
20
FOR v.s. LET
FOR
• Binds node variables  iteration
LET
• Binds collection variables  one value
21
FOR v.s. LET
FOR $x IN document("bib.xml")/bib/book
RETURN <result> { $x } </result>
Returns:
<result> <book>...</book></result>
<result> <book>...</book></result>
<result> <book>...</book></result>
...
LET $x IN document("bib.xml")/bib/book
RETURN <result> { $x } </result>
Returns:
<result> <book>...</book>
<book>...</book>
<book>...</book>
...
</result>
22
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...)
RETURN <result> { $b/author } </result>
Returns:
<result> <author>...</author>
<author>...</author>
<author>...</author>
...
</result>
23
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 !!
24
Sorting in XQuery
<publisher_list>
FOR $p IN distinct(document("bib.xml")//publisher)
RETURN <publisher> <name> { $p/text() } </name> ,
FOR $b IN document("bib.xml")//book[publisher = $p]
RETURN <book>
{ $b/title ,
$b/price
}
</book> SORTBY(price DESCENDING)
</publisher> SORTBY(name)
</publisher_list>
25
If-Then-Else
FOR $h IN //holding
RETURN <holding>
{ $h/title,
IF $h/@type = "Journal"
THEN $h/editor
ELSE $h/author
}
</holding> SORTBY (title)
26
Existential Quantifiers
FOR $b IN //book
WHERE SOME $p IN $b//para SATISFIES
contains($p, "sailing")
AND contains($p, "windsurfing")
RETURN { $b/title }
27
Universal Quantifiers
FOR $b IN //book
WHERE EVERY $p IN $b//para SATISFIES
contains($p, "sailing")
RETURN { $b/title }
28
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 ?
29
Prepared by:-
Meghavi Patel 30
Thank You 

More Related Content

PPT
X Query for beginner
PDF
My First Ruby
PPTX
MooseX::Datamodel - Barcelona Perl Workshop Lightning talk
PDF
Php 2
PPTX
PHP Lecture 4 - Working with form, GET and Post Methods
PPTX
PHP Lecture 6 - Php file uploading
PDF
New in cakephp3
PDF
Advanced Querying with CakePHP 3
X Query for beginner
My First Ruby
MooseX::Datamodel - Barcelona Perl Workshop Lightning talk
Php 2
PHP Lecture 4 - Working with form, GET and Post Methods
PHP Lecture 6 - Php file uploading
New in cakephp3
Advanced Querying with CakePHP 3

What's hot (20)

PDF
CakeFest 2013 keynote
KEY
Introducing CakeEntity
PPTX
Ch5(ms access with php)
PDF
Xquery basics tutorial
KEY
Introducing CakeEntity
PDF
Future of HTTP in CakePHP
PDF
How I Learned to Stop Worrying and Love Email::: The 2007 PEP Talk!!
PPT
Basic Object Oriented Concepts
PDF
Framework agnostic application Will it fit with Symfony? - Symfony live warsa...
PPTX
Tax management-system
PDF
WordCamp Portland 2018: PHP for WordPress
PPTX
Powershell function
DOCX
Php update and delet operation
PDF
Not Really PHP by the book
PDF
JOOQ and Flyway
PDF
The love child of Android and .NET: App development with Xamarin
PDF
SULTHAN's - PHP MySQL programs
PDF
SXML: S-expression eXtensible Markup Language
KEY
Php 101: PDO
PDF
Drupal vs WordPress
CakeFest 2013 keynote
Introducing CakeEntity
Ch5(ms access with php)
Xquery basics tutorial
Introducing CakeEntity
Future of HTTP in CakePHP
How I Learned to Stop Worrying and Love Email::: The 2007 PEP Talk!!
Basic Object Oriented Concepts
Framework agnostic application Will it fit with Symfony? - Symfony live warsa...
Tax management-system
WordCamp Portland 2018: PHP for WordPress
Powershell function
Php update and delet operation
Not Really PHP by the book
JOOQ and Flyway
The love child of Android and .NET: App development with Xamarin
SULTHAN's - PHP MySQL programs
SXML: S-expression eXtensible Markup Language
Php 101: PDO
Drupal vs WordPress
Ad

Similar to Xpath & xquery (20)

PPT
xquery.ppt Add more information to your upload
PDF
DBIx::Class introduction - 2010
PDF
DBIx::Class beginners
KEY
MongoDB Aggregation Framework
ODP
Php 102: Out with the Bad, In with the Good
PDF
A single language for backend and frontend from AngularJS to cloud with Clau...
PDF
A single language for backend and frontend from AngularJS to cloud with Clau...
PDF
MongoDB Aggregation Framework
KEY
(Ab)Using the MetaCPAN API for Fun and Profit
KEY
PHP API
PPTX
"Powerful Analysis with the Aggregation Pipeline (Tutorial)"
KEY
Rails vu d'un Javaiste
PDF
Neatly Hashing a Tree: FP tree-fold in Perl5 & Perl6
PDF
First java-server-faces-tutorial-en
PDF
Let’s Talk About Ruby
KEY
1 the ruby way
PPTX
Big Data Everywhere Chicago: Unleash the Power of HBase Shell (Conversant)
PPTX
Bash and regular expressions
PDF
A piece of sugar in your client-side development
PDF
Dynamic languages, for software craftmanship group
xquery.ppt Add more information to your upload
DBIx::Class introduction - 2010
DBIx::Class beginners
MongoDB Aggregation Framework
Php 102: Out with the Bad, In with the Good
A single language for backend and frontend from AngularJS to cloud with Clau...
A single language for backend and frontend from AngularJS to cloud with Clau...
MongoDB Aggregation Framework
(Ab)Using the MetaCPAN API for Fun and Profit
PHP API
"Powerful Analysis with the Aggregation Pipeline (Tutorial)"
Rails vu d'un Javaiste
Neatly Hashing a Tree: FP tree-fold in Perl5 & Perl6
First java-server-faces-tutorial-en
Let’s Talk About Ruby
1 the ruby way
Big Data Everywhere Chicago: Unleash the Power of HBase Shell (Conversant)
Bash and regular expressions
A piece of sugar in your client-side development
Dynamic languages, for software craftmanship group
Ad

Recently uploaded (20)

PPTX
human mycosis Human fungal infections are called human mycosis..pptx
PDF
Microbial disease of the cardiovascular and lymphatic systems
PDF
Anesthesia in Laparoscopic Surgery in India
PDF
Classroom Observation Tools for Teachers
PDF
O5-L3 Freight Transport Ops (International) V1.pdf
PDF
Computing-Curriculum for Schools in Ghana
PPTX
Pharmacology of Heart Failure /Pharmacotherapy of CHF
PDF
O7-L3 Supply Chain Operations - ICLT Program
PDF
Chinmaya Tiranga quiz Grand Finale.pdf
PDF
01-Introduction-to-Information-Management.pdf
PPTX
Microbial diseases, their pathogenesis and prophylaxis
PDF
3rd Neelam Sanjeevareddy Memorial Lecture.pdf
PDF
RMMM.pdf make it easy to upload and study
PPTX
Final Presentation General Medicine 03-08-2024.pptx
PPTX
Introduction-to-Literarature-and-Literary-Studies-week-Prelim-coverage.pptx
PPTX
IMMUNITY IMMUNITY refers to protection against infection, and the immune syst...
PDF
102 student loan defaulters named and shamed – Is someone you know on the list?
PDF
A systematic review of self-coping strategies used by university students to ...
PDF
Saundersa Comprehensive Review for the NCLEX-RN Examination.pdf
PDF
ANTIBIOTICS.pptx.pdf………………… xxxxxxxxxxxxx
human mycosis Human fungal infections are called human mycosis..pptx
Microbial disease of the cardiovascular and lymphatic systems
Anesthesia in Laparoscopic Surgery in India
Classroom Observation Tools for Teachers
O5-L3 Freight Transport Ops (International) V1.pdf
Computing-Curriculum for Schools in Ghana
Pharmacology of Heart Failure /Pharmacotherapy of CHF
O7-L3 Supply Chain Operations - ICLT Program
Chinmaya Tiranga quiz Grand Finale.pdf
01-Introduction-to-Information-Management.pdf
Microbial diseases, their pathogenesis and prophylaxis
3rd Neelam Sanjeevareddy Memorial Lecture.pdf
RMMM.pdf make it easy to upload and study
Final Presentation General Medicine 03-08-2024.pptx
Introduction-to-Literarature-and-Literary-Studies-week-Prelim-coverage.pptx
IMMUNITY IMMUNITY refers to protection against infection, and the immune syst...
102 student loan defaulters named and shamed – Is someone you know on the list?
A systematic review of self-coping strategies used by university students to ...
Saundersa Comprehensive Review for the NCLEX-RN Examination.pdf
ANTIBIOTICS.pptx.pdf………………… xxxxxxxxxxxxx

Xpath & xquery

  • 3. Xpath: Wildcard Result: <first-name> Rick </first-name> <last-name> Hull </last-name> * Matches any element //author/* 3
  • 4. Xpath: Attribute Nodes Result: “55” @price means that price is an attribute /bib/book/@price 4
  • 5. Xpath: Predicates Result: <author> <first-name> Rick </first-name> <last-name> Hull </last-name> </author> /bib/book/author[firstname] 5
  • 6. Xpath: More Predicates Result: <lastname> … </lastname> <lastname> … </lastname> /bib/book/author[firstname][address[//zip][city]]/lastname 6
  • 7. Xpath: More Predicates /bib/book[@price < “60”] /bib/book[author/@age < “25”] /bib/book[author/text()] 7
  • 8. 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… 8
  • 9. 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? 9
  • 10. XQuery • Based on Quilt, which is based on XML-QL • Uses XPath to express more complex queries 10
  • 11. FLWR (“Flower”) Expressions FOR ... LET... WHERE... RETURN... 11
  • 12. XQuery Find all book titles published after 1995: FOR $x IN document("bib.xml")/bib/book WHERE $x/year > 1995 RETURN { $x/title } Result: <title> abc </title> <title> def </title> <title> ghi </title> 12
  • 13. XQuery Find book titles by the coauthors of “Database Theory”: FOR $x IN bib/book[title/text() = “Database Theory”]/author $y IN bib/book[author/text() = $x/text()]/title RETURN <answer> { $y/text() } </answer> Result: <answer> abc </ answer > < answer > def </ answer > < answer > ghi </ answer > The answer will contain duplicates ! 13
  • 14. XQuery Same as before, but eliminate duplicates: FOR $x IN bib/book[title/text() = “Database Theory”]/author $y IN distinct(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 14
  • 15. XQuery: Nesting For each author of a book by Morgan Kaufmann, list all books she published: FOR $a IN distinct(document("bib.xml") /bib/book[publisher=“Morgan Kaufmann”]/author) RETURN <result> { $a, FOR $t IN /bib/book[author=$a]/title RETURN $t } </result> 15
  • 16. XQuery <result> <author>Jones</author> <title> abc </title> <title> def </title> </result> <result> <author> Smith </author> <title> ghi </title> </result> Result: 16
  • 17. 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 17
  • 18. XQuery count = a (aggregate) function that returns the number of elms <big_publishers> FOR $p IN distinct(document("bib.xml")//publisher) LET $b := document("bib.xml")/book[publisher = $p] WHERE count($b) > 100 RETURN { $p } </big_publishers> 18
  • 19. 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… 19
  • 20. XQuery Summary: • FOR-LET-WHERE-RETURN = FLWR FOR/LET Clauses WHERE Clause RETURN Clause List of tuples List of tuples Instance of Xquery data model 20
  • 21. FOR v.s. LET FOR • Binds node variables  iteration LET • Binds collection variables  one value 21
  • 22. FOR v.s. LET FOR $x IN document("bib.xml")/bib/book RETURN <result> { $x } </result> Returns: <result> <book>...</book></result> <result> <book>...</book></result> <result> <book>...</book></result> ... LET $x IN document("bib.xml")/bib/book RETURN <result> { $x } </result> Returns: <result> <book>...</book> <book>...</book> <book>...</book> ... </result> 22
  • 23. 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...) RETURN <result> { $b/author } </result> Returns: <result> <author>...</author> <author>...</author> <author>...</author> ... </result> 23
  • 24. 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 !! 24
  • 25. Sorting in XQuery <publisher_list> FOR $p IN distinct(document("bib.xml")//publisher) RETURN <publisher> <name> { $p/text() } </name> , FOR $b IN document("bib.xml")//book[publisher = $p] RETURN <book> { $b/title , $b/price } </book> SORTBY(price DESCENDING) </publisher> SORTBY(name) </publisher_list> 25
  • 26. If-Then-Else FOR $h IN //holding RETURN <holding> { $h/title, IF $h/@type = "Journal" THEN $h/editor ELSE $h/author } </holding> SORTBY (title) 26
  • 27. Existential Quantifiers FOR $b IN //book WHERE SOME $p IN $b//para SATISFIES contains($p, "sailing") AND contains($p, "windsurfing") RETURN { $b/title } 27
  • 28. Universal Quantifiers FOR $b IN //book WHERE EVERY $p IN $b//para SATISFIES contains($p, "sailing") RETURN { $b/title } 28
  • 29. 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 ? 29