SlideShare uma empresa Scribd logo
1 de 23
XQuery
The Thuong
In this lecture
• Summary of XQuery
• Default data type mapping(
http://en.wikipedia.org/wiki/XQuery_API_for_Java)
• FLWOR expressions
• FOR and LET expressions
• Collections and sorting
Resources
W3C recommendation: www.w3.org/TR/xquery/
Google
XQuery
• Based on XPath
• http://www.w3.org/TR/xquery/
XQuery 2.0
FLWR Expressions
What does FLWR stand for
F - for
L - let
W - where
R - return
XQuery
Find all book titles published after 1995:
FOR $x IN doc ("books")/bib/book
WHERE $x/year > 1995
RETURN $x/title
FOR $x IN doc ("books")/bib/book
WHERE $x/year > 1995
RETURN $x/title
Result:
<title> abc </title>
<title> def </title>
<title> ghi </title>
XQuery
For each author of a book by Morgan
Kaufmann, list all books she published:
FOR $a IN distinct-values(doc ("books.xml")
/bib/book[publisher=“Morgan Kaufmann”]/author)
RETURN <result>
$a,
FOR $t IN /bib/book[author=$a]/title
RETURN $t
</result>
FOR $a IN distinct-values(doc ("books.xml")
/bib/book[publisher=“Morgan Kaufmann”]/author)
RETURN <result>
$a,
FOR $t IN /bib/book[author=$a]/title
RETURN $t
</result>
distinct = a function that eliminates duplicates
XQuery
Result:
<result>
<author>Jones</author>
<title> abc </title>
<title> def </title>
</result>
<result>
<author> Smith </author>
<title> ghi </title>
</result>
XQuery
• FOR $x in expr -- binds $x to each element
in the list expr
• LET $x = expr -- binds $x to the entire list
expr
– Useful for common subexpressions and for
aggregations
XQuery
count = a (aggregate) function that returns the number of elms
<big_publishers>
FOR $p IN distinct-values(doc ("books.xml")//publisher)
LET $b := doc ("books.xml")/book[publisher = $p]
WHERE count($b) > 100
RETURN $p
</big_publishers>
<big_publishers>
FOR $p IN distinct-values(doc ("books.xml")//publisher)
LET $b := doc ("books.xml")/book[publisher = $p]
WHERE count($b) > 100
RETURN $p
</big_publishers>
XQuery
Find books whose price is larger than
average:
LET $a=avg(doc(“books.xml")/bib/book/@price)
FOR $b in doc("books.xml")/bib/book
WHERE $b/@price > $a
RETURN $b
LET $a=avg(doc(“books.xml")/bib/book/@price)
FOR $b in doc("books.xml")/bib/book
WHERE $b/@price > $a
RETURN $b
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
FOR v.s. LET
FOR
• Binds node variables  iteration
LET
• Binds collection variables  one value
FOR v.s. LET
FOR $x IN doc ("books.xml")/bib/book
RETURN <result> $x </result>
FOR $x IN doc ("books.xml")/bib/book
RETURN <result> $x </result>
Returns:
<result> <book>...</book></result>
<result> <book>...</book></result>
<result> <book>...</book></result>
...
LET $x := doc ("books.xml")/bib/book
RETURN <result> $x </result>
LET $x := doc ("books.xml")/bib/book
RETURN <result> $x </result>
Returns:
<result> <book>...</book>
<book>...</book>
<book>...</book>
...
</result>
Collections in XQuery
• Ordered and unordered collections
– /bib/book/author = an ordered collection
– Distinct-values(/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>RETURN <result> $b/author </result>
Returns:
<result> <author>...</author>
<author>...</author>
<author>...</author>
...
</result>
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
<publisher_list>
FOR $p IN distinct-values(doc("books.xml")//publisher)
RETURN <publisher> <name> $p/text() </name> ,
FOR $b IN doc("books.xml")//book[publisher = $p]
RETURN <book>
$b/title ,
$b/@price
</book> SORTBY(price DESCENDING)
</publisher> SORTBY(name)
</publisher_list>
<publisher_list>
FOR $p IN distinct-values(doc("books.xml")//publisher)
RETURN <publisher> <name> $p/text() </name> ,
FOR $b IN doc("books.xml")//book[publisher = $p]
RETURN <book>
$b/title ,
$b/@price
</book> SORTBY(price DESCENDING)
</publisher> SORTBY(name)
</publisher_list>
Sorting in XQuery
• Sorting arguments: refer to the name space
of the RETURN clause, not the FOR clause
• To sort on an element you don’t want to
display, first return it, then remove it with
an additional query.
If-Then-Else
FOR $h IN //holding
RETURN <holding>
$h/title,
IF $h/@type = "Journal"
THEN $h/editor
ELSE $h/author
</holding> SORTBY (title)
FOR $h IN //holding
RETURN <holding>
$h/title,
IF $h/@type = "Journal"
THEN $h/editor
ELSE $h/author
</holding> SORTBY (title)
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 ?
Group-By in Xquery ??
• No GROUPBY currently in XQuery
• A recent proposal (next)
– What do YOU think ?
Group-By in Xquery ??
FOR $b IN doc ("http://www.bn.com")/bib/book,
$y IN $b/@year
WHERE $b/publisher="Morgan Kaufmann"
RETURN GROUPBY $y
WHERE count($b) > 10
IN <year> $y </year>
FOR $b IN doc ("http://www.bn.com")/bib/book,
$y IN $b/@year
WHERE $b/publisher="Morgan Kaufmann"
RETURN GROUPBY $y
WHERE count($b) > 10
IN <year> $y </year>
SELECT year
FROM Bib
WHERE Bib.publisher="Morgan Kaufmann"
GROUPBY year
HAVING count(*) > 10
SELECT year
FROM Bib
WHERE Bib.publisher="Morgan Kaufmann"
GROUPBY year
HAVING count(*) > 10
 with GROUPBY
Equivalent SQL 
Group-By in Xquery ??
FOR $b IN doc("http://www.bn.com")/bib/book,
$a IN $b/author,
$y IN $b/@year
RETURN GROUPBY $a, $y
IN <result> $a,
<year> $y </year>,
<total> count($b) </total>
</result>
FOR $b IN doc("http://www.bn.com")/bib/book,
$a IN $b/author,
$y IN $b/@year
RETURN GROUPBY $a, $y
IN <result> $a,
<year> $y </year>,
<total> count($b) </total>
</result>
FOR $Tup IN distinct-values(FOR $b IN doc("http://www.bn.com")/bib,
$a IN $b/author,
$y IN $b/@year
RETURN <Tup> <a> $a </a> <y> $y </y> </Tup>),
$a IN $Tup/a/node(),
$y IN $Tup/y/node()
LET $b = doc("http://www.bn.com")/bib/book[author=$a,@year=$y]
RETURN <result> $a,
<year> $y </year>,
<total> count($b) </total>
</result>
FOR $Tup IN distinct-values(FOR $b IN doc("http://www.bn.com")/bib,
$a IN $b/author,
$y IN $b/@year
RETURN <Tup> <a> $a </a> <y> $y </y> </Tup>),
$a IN $Tup/a/node(),
$y IN $Tup/y/node()
LET $b = doc("http://www.bn.com")/bib/book[author=$a,@year=$y]
RETURN <result> $a,
<year> $y </year>,
<total> count($b) </total>
</result>
 with GROUPBY
Without GROUPBY 
Group-By in Xquery ??
FOR $b IN doc("http://www.bn.com")/bib/book,
$a IN $b/author,
$y IN $b/@year,
$t IN $b/title,
$p IN $b/publisher
RETURN
GROUPBY $p, $y
IN <result> $p,
<year> $y </year>,
GROUPBY $a
IN <authorEntry>
$a,
GROUPBY $t
IN $t
<authorEntry>
</result>
 Nested GROUPBY’s

Mais conteúdo relacionado

Semelhante a X Query for beginner

Practical PHP 5.3
Practical PHP 5.3Practical PHP 5.3
Practical PHP 5.3Nate Abele
 
Xquery basics tutorial
Xquery basics  tutorialXquery basics  tutorial
Xquery basics tutorialDivya Bodkhe
 
DBIx::Class introduction - 2010
DBIx::Class introduction - 2010DBIx::Class introduction - 2010
DBIx::Class introduction - 2010leo lapworth
 
JAZOON'13 - Paul Brauner - A backend developer meets the web: my Dart experience
JAZOON'13 - Paul Brauner - A backend developer meets the web: my Dart experienceJAZOON'13 - Paul Brauner - A backend developer meets the web: my Dart experience
JAZOON'13 - Paul Brauner - A backend developer meets the web: my Dart experiencejazoon13
 
Hive Bucketing in Apache Spark
Hive Bucketing in Apache SparkHive Bucketing in Apache Spark
Hive Bucketing in Apache SparkTejas Patil
 
MongoDB Aggregation Framework
MongoDB Aggregation FrameworkMongoDB Aggregation Framework
MongoDB Aggregation FrameworkCaserta
 
Enough suffering, fix your architecture!
Enough suffering, fix your architecture!Enough suffering, fix your architecture!
Enough suffering, fix your architecture!Luís Cobucci
 
Scala Data Pipelines @ Spotify
Scala Data Pipelines @ SpotifyScala Data Pipelines @ Spotify
Scala Data Pipelines @ SpotifyNeville Li
 
Fixing Individual titles in discontinued collections
Fixing Individual titles in discontinued collectionsFixing Individual titles in discontinued collections
Fixing Individual titles in discontinued collectionsJeff Siemon
 
Async and Non-blocking IO w/ JRuby
Async and Non-blocking IO w/ JRubyAsync and Non-blocking IO w/ JRuby
Async and Non-blocking IO w/ JRubyJoe Kutner
 
Scala in practice - 3 years later
Scala in practice - 3 years laterScala in practice - 3 years later
Scala in practice - 3 years laterpatforna
 
Scala in-practice-3-years by Patric Fornasier, Springr, presented at Pune Sca...
Scala in-practice-3-years by Patric Fornasier, Springr, presented at Pune Sca...Scala in-practice-3-years by Patric Fornasier, Springr, presented at Pune Sca...
Scala in-practice-3-years by Patric Fornasier, Springr, presented at Pune Sca...Thoughtworks
 
Learn Ruby 2011 - Session 4 - Objects, Oh My!
Learn Ruby 2011 - Session 4 - Objects, Oh My!Learn Ruby 2011 - Session 4 - Objects, Oh My!
Learn Ruby 2011 - Session 4 - Objects, Oh My!James Thompson
 
SPARQL introduction and training (130+ slides with exercices)
SPARQL introduction and training (130+ slides with exercices)SPARQL introduction and training (130+ slides with exercices)
SPARQL introduction and training (130+ slides with exercices)Thomas Francart
 

Semelhante a X Query for beginner (19)

Practical PHP 5.3
Practical PHP 5.3Practical PHP 5.3
Practical PHP 5.3
 
Xquery basics tutorial
Xquery basics  tutorialXquery basics  tutorial
Xquery basics tutorial
 
DBIx::Class introduction - 2010
DBIx::Class introduction - 2010DBIx::Class introduction - 2010
DBIx::Class introduction - 2010
 
Xquery1
Xquery1Xquery1
Xquery1
 
JAZOON'13 - Paul Brauner - A backend developer meets the web: my Dart experience
JAZOON'13 - Paul Brauner - A backend developer meets the web: my Dart experienceJAZOON'13 - Paul Brauner - A backend developer meets the web: my Dart experience
JAZOON'13 - Paul Brauner - A backend developer meets the web: my Dart experience
 
Hive Bucketing in Apache Spark
Hive Bucketing in Apache SparkHive Bucketing in Apache Spark
Hive Bucketing in Apache Spark
 
MongoDB Aggregation Framework
MongoDB Aggregation FrameworkMongoDB Aggregation Framework
MongoDB Aggregation Framework
 
Rails vu d'un Javaiste
Rails vu d'un JavaisteRails vu d'un Javaiste
Rails vu d'un Javaiste
 
Enough suffering, fix your architecture!
Enough suffering, fix your architecture!Enough suffering, fix your architecture!
Enough suffering, fix your architecture!
 
Php introduction
Php introductionPhp introduction
Php introduction
 
Scala Data Pipelines @ Spotify
Scala Data Pipelines @ SpotifyScala Data Pipelines @ Spotify
Scala Data Pipelines @ Spotify
 
Fixing Individual titles in discontinued collections
Fixing Individual titles in discontinued collectionsFixing Individual titles in discontinued collections
Fixing Individual titles in discontinued collections
 
Async and Non-blocking IO w/ JRuby
Async and Non-blocking IO w/ JRubyAsync and Non-blocking IO w/ JRuby
Async and Non-blocking IO w/ JRuby
 
Scala in practice - 3 years later
Scala in practice - 3 years laterScala in practice - 3 years later
Scala in practice - 3 years later
 
Scala in-practice-3-years by Patric Fornasier, Springr, presented at Pune Sca...
Scala in-practice-3-years by Patric Fornasier, Springr, presented at Pune Sca...Scala in-practice-3-years by Patric Fornasier, Springr, presented at Pune Sca...
Scala in-practice-3-years by Patric Fornasier, Springr, presented at Pune Sca...
 
Web page concept Basic
Web page concept  BasicWeb page concept  Basic
Web page concept Basic
 
Web page concept final ppt
Web page concept  final pptWeb page concept  final ppt
Web page concept final ppt
 
Learn Ruby 2011 - Session 4 - Objects, Oh My!
Learn Ruby 2011 - Session 4 - Objects, Oh My!Learn Ruby 2011 - Session 4 - Objects, Oh My!
Learn Ruby 2011 - Session 4 - Objects, Oh My!
 
SPARQL introduction and training (130+ slides with exercices)
SPARQL introduction and training (130+ slides with exercices)SPARQL introduction and training (130+ slides with exercices)
SPARQL introduction and training (130+ slides with exercices)
 

Mais de Nguyen Quang

Deep Reinforcement Learning
Deep Reinforcement LearningDeep Reinforcement Learning
Deep Reinforcement LearningNguyen Quang
 
Deep Dialog System Review
Deep Dialog System ReviewDeep Dialog System Review
Deep Dialog System ReviewNguyen Quang
 
Sequence to Sequence Learning with Neural Networks
Sequence to Sequence Learning with Neural NetworksSequence to Sequence Learning with Neural Networks
Sequence to Sequence Learning with Neural NetworksNguyen Quang
 
Redistributable introtoscrum
Redistributable introtoscrumRedistributable introtoscrum
Redistributable introtoscrumNguyen Quang
 
A holistic lexicon based approach to opinion mining
A holistic lexicon based approach to opinion miningA holistic lexicon based approach to opinion mining
A holistic lexicon based approach to opinion miningNguyen Quang
 

Mais de Nguyen Quang (7)

Apache Zookeeper
Apache ZookeeperApache Zookeeper
Apache Zookeeper
 
Apache Storm
Apache StormApache Storm
Apache Storm
 
Deep Reinforcement Learning
Deep Reinforcement LearningDeep Reinforcement Learning
Deep Reinforcement Learning
 
Deep Dialog System Review
Deep Dialog System ReviewDeep Dialog System Review
Deep Dialog System Review
 
Sequence to Sequence Learning with Neural Networks
Sequence to Sequence Learning with Neural NetworksSequence to Sequence Learning with Neural Networks
Sequence to Sequence Learning with Neural Networks
 
Redistributable introtoscrum
Redistributable introtoscrumRedistributable introtoscrum
Redistributable introtoscrum
 
A holistic lexicon based approach to opinion mining
A holistic lexicon based approach to opinion miningA holistic lexicon based approach to opinion mining
A holistic lexicon based approach to opinion mining
 

Último

Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusZilliz
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxRustici Software
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontologyjohnbeverley2021
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDropbox
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Victor Rentea
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWERMadyBayot
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfOrbitshub
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistandanishmna97
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...apidays
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...apidays
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingEdi Saputra
 

Último (20)

Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 

X Query for beginner

  • 2. In this lecture • Summary of XQuery • Default data type mapping( http://en.wikipedia.org/wiki/XQuery_API_for_Java) • FLWOR expressions • FOR and LET expressions • Collections and sorting Resources W3C recommendation: www.w3.org/TR/xquery/ Google
  • 3. XQuery • Based on XPath • http://www.w3.org/TR/xquery/ XQuery 2.0
  • 4. FLWR Expressions What does FLWR stand for F - for L - let W - where R - return
  • 5. XQuery Find all book titles published after 1995: FOR $x IN doc ("books")/bib/book WHERE $x/year > 1995 RETURN $x/title FOR $x IN doc ("books")/bib/book WHERE $x/year > 1995 RETURN $x/title Result: <title> abc </title> <title> def </title> <title> ghi </title>
  • 6. XQuery For each author of a book by Morgan Kaufmann, list all books she published: FOR $a IN distinct-values(doc ("books.xml") /bib/book[publisher=“Morgan Kaufmann”]/author) RETURN <result> $a, FOR $t IN /bib/book[author=$a]/title RETURN $t </result> FOR $a IN distinct-values(doc ("books.xml") /bib/book[publisher=“Morgan Kaufmann”]/author) RETURN <result> $a, FOR $t IN /bib/book[author=$a]/title RETURN $t </result> distinct = a function that eliminates duplicates
  • 7. XQuery Result: <result> <author>Jones</author> <title> abc </title> <title> def </title> </result> <result> <author> Smith </author> <title> ghi </title> </result>
  • 8. XQuery • FOR $x in expr -- binds $x to each element in the list expr • LET $x = expr -- binds $x to the entire list expr – Useful for common subexpressions and for aggregations
  • 9. XQuery count = a (aggregate) function that returns the number of elms <big_publishers> FOR $p IN distinct-values(doc ("books.xml")//publisher) LET $b := doc ("books.xml")/book[publisher = $p] WHERE count($b) > 100 RETURN $p </big_publishers> <big_publishers> FOR $p IN distinct-values(doc ("books.xml")//publisher) LET $b := doc ("books.xml")/book[publisher = $p] WHERE count($b) > 100 RETURN $p </big_publishers>
  • 10. XQuery Find books whose price is larger than average: LET $a=avg(doc(“books.xml")/bib/book/@price) FOR $b in doc("books.xml")/bib/book WHERE $b/@price > $a RETURN $b LET $a=avg(doc(“books.xml")/bib/book/@price) FOR $b in doc("books.xml")/bib/book WHERE $b/@price > $a RETURN $b
  • 11. 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
  • 12. FOR v.s. LET FOR • Binds node variables  iteration LET • Binds collection variables  one value
  • 13. FOR v.s. LET FOR $x IN doc ("books.xml")/bib/book RETURN <result> $x </result> FOR $x IN doc ("books.xml")/bib/book RETURN <result> $x </result> Returns: <result> <book>...</book></result> <result> <book>...</book></result> <result> <book>...</book></result> ... LET $x := doc ("books.xml")/bib/book RETURN <result> $x </result> LET $x := doc ("books.xml")/bib/book RETURN <result> $x </result> Returns: <result> <book>...</book> <book>...</book> <book>...</book> ... </result>
  • 14. Collections in XQuery • Ordered and unordered collections – /bib/book/author = an ordered collection – Distinct-values(/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>RETURN <result> $b/author </result> Returns: <result> <author>...</author> <author>...</author> <author>...</author> ... </result>
  • 15. 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 !!
  • 16. Sorting in XQuery <publisher_list> FOR $p IN distinct-values(doc("books.xml")//publisher) RETURN <publisher> <name> $p/text() </name> , FOR $b IN doc("books.xml")//book[publisher = $p] RETURN <book> $b/title , $b/@price </book> SORTBY(price DESCENDING) </publisher> SORTBY(name) </publisher_list> <publisher_list> FOR $p IN distinct-values(doc("books.xml")//publisher) RETURN <publisher> <name> $p/text() </name> , FOR $b IN doc("books.xml")//book[publisher = $p] RETURN <book> $b/title , $b/@price </book> SORTBY(price DESCENDING) </publisher> SORTBY(name) </publisher_list>
  • 17. Sorting in XQuery • Sorting arguments: refer to the name space of the RETURN clause, not the FOR clause • To sort on an element you don’t want to display, first return it, then remove it with an additional query.
  • 18. If-Then-Else FOR $h IN //holding RETURN <holding> $h/title, IF $h/@type = "Journal" THEN $h/editor ELSE $h/author </holding> SORTBY (title) FOR $h IN //holding RETURN <holding> $h/title, IF $h/@type = "Journal" THEN $h/editor ELSE $h/author </holding> SORTBY (title)
  • 19. 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 ?
  • 20. Group-By in Xquery ?? • No GROUPBY currently in XQuery • A recent proposal (next) – What do YOU think ?
  • 21. Group-By in Xquery ?? FOR $b IN doc ("http://www.bn.com")/bib/book, $y IN $b/@year WHERE $b/publisher="Morgan Kaufmann" RETURN GROUPBY $y WHERE count($b) > 10 IN <year> $y </year> FOR $b IN doc ("http://www.bn.com")/bib/book, $y IN $b/@year WHERE $b/publisher="Morgan Kaufmann" RETURN GROUPBY $y WHERE count($b) > 10 IN <year> $y </year> SELECT year FROM Bib WHERE Bib.publisher="Morgan Kaufmann" GROUPBY year HAVING count(*) > 10 SELECT year FROM Bib WHERE Bib.publisher="Morgan Kaufmann" GROUPBY year HAVING count(*) > 10  with GROUPBY Equivalent SQL 
  • 22. Group-By in Xquery ?? FOR $b IN doc("http://www.bn.com")/bib/book, $a IN $b/author, $y IN $b/@year RETURN GROUPBY $a, $y IN <result> $a, <year> $y </year>, <total> count($b) </total> </result> FOR $b IN doc("http://www.bn.com")/bib/book, $a IN $b/author, $y IN $b/@year RETURN GROUPBY $a, $y IN <result> $a, <year> $y </year>, <total> count($b) </total> </result> FOR $Tup IN distinct-values(FOR $b IN doc("http://www.bn.com")/bib, $a IN $b/author, $y IN $b/@year RETURN <Tup> <a> $a </a> <y> $y </y> </Tup>), $a IN $Tup/a/node(), $y IN $Tup/y/node() LET $b = doc("http://www.bn.com")/bib/book[author=$a,@year=$y] RETURN <result> $a, <year> $y </year>, <total> count($b) </total> </result> FOR $Tup IN distinct-values(FOR $b IN doc("http://www.bn.com")/bib, $a IN $b/author, $y IN $b/@year RETURN <Tup> <a> $a </a> <y> $y </y> </Tup>), $a IN $Tup/a/node(), $y IN $Tup/y/node() LET $b = doc("http://www.bn.com")/bib/book[author=$a,@year=$y] RETURN <result> $a, <year> $y </year>, <total> count($b) </total> </result>  with GROUPBY Without GROUPBY 
  • 23. Group-By in Xquery ?? FOR $b IN doc("http://www.bn.com")/bib/book, $a IN $b/author, $y IN $b/@year, $t IN $b/title, $p IN $b/publisher RETURN GROUPBY $p, $y IN <result> $p, <year> $y </year>, GROUPBY $a IN <authorEntry> $a, GROUPBY $t IN $t <authorEntry> </result>  Nested GROUPBY’s