Xml query xquery
This presentation is the property of its rightful owner.
Sponsored Links
1 / 23

XML Query: xQuery PowerPoint PPT Presentation


  • 95 Views
  • Uploaded on
  • Presentation posted in: General

XML Query: xQuery. Reference: Xquery By Priscilla Walmsley , Published by O’Reilly. XQuery. Enormous amount of information is now stored in XML, both in XML databases and in documents on a filesystem All of this data is used for a variety of purposes

Download Presentation

XML Query: xQuery

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Xml query xquery

XML Query: xQuery

Reference:

Xquery By Priscilla Walmsley, Published by O’Reilly


Xquery

XQuery

  • Enormous amount of information is now stored in XML, both in XML databases and in documents on a filesystem

  • All of this data is used for a variety of purposes

  • XQuery is a query language designed by the W3C to address these needs

  • It allows you to select the XML data elements of interest, reorganize and possibly transform them, and return the results in a structure as you want


Capabilities of xquery

Capabilities of XQuery

  • Selecting information based on specific criteria

  • Filtering out unwanted information

  • Searching for information within a document or set of documents

  • Joining data from multiple documents or collections of documents

  • Sorting, grouping, and aggregating data

  • Transforming and restructuring XML data into another XML vocabulary or structure

  • Performing arithmetic calculations on numbers and dates

  • Manipulating strings to reformat text


Path expressions

Path Expressions

  • Simply selects elements or attributes from an input document: Examples

  • doc("catalog.xml")/catalog/product

  • doc("catalog.xml")[email protected]

  • doc("catalog.xml")[email protected]

  • doc("catalog.xml")/catalog/product[@dept = "ACC"]

  • doc("catalog.xml")/catalog/product[2]


Path expressions1

Path Expressions

  • Path expressions are convenient because of their compact, easy-to-remember syntax.

  • However, they have a limitation:

    • they can only return elements and attributes as they appear in input documents.

    • Any elements selected in a path expression appear in the results with the same names, the same attributes and contents,

    • and in the same order as in the input document.


Flwors

FLWORs

  • stands for “for, let, where, order by, return”

  • FLWORs, unlike path expressions, allow you to manipulate, transform, and sort your results.

  • A Simple Query

for $prod in doc("catalog.xml")/catalog/product

where [email protected] = "ACC"

order by $prod/name

return $prod/name


Flwors1

FLWORs

  • For

    • This clause sets up an iteration through the product nodes, and the rest of the FLWOR is evaluated once for each of the four products.

    • Each time, a variable named $prod is bound to a different product element.

    • Dollar signs are used to indicate variable names in XQuery.

for $prod in doc("catalog.xml")/catalog/product

where [email protected] = "ACC"

order by $prod/name

return $prod/name


Flwors2

FLWORs

  • where

    • This clause selects only products in the ACC department.

    • This has the same effect as a predicate ([@dept = "ACC"]) in a path expression.

for $prod in doc("catalog.xml")/catalog/product

where [email protected] = "ACC"

order by $prod/name

return $prod/name


Flwors3

FLWORs

  • order by

    • This clause sorts the results by product name, something that is not possible with path expressions.

for $prod in doc("catalog.xml")/catalog/product

where [email protected] = "ACC"

order by $prod/name

return $prod/name


Flwors4

FLWORs

  • order by

    • This clause sorts the results by product name, something that is not possible with path expressions.

for $prod in doc("catalog.xml")/catalog/product

where [email protected] = "ACC"

order by $prod/name

return $prod/name


Flwors5

FLWORs

  • return

    • This clause indicates that the product element’s name children should be returned.

for $prod in doc("catalog.xml")/catalog/product

where [email protected] = "ACC"

order by $prod/name

return $prod/name


Flwors6

FLWORs

  • The let clause (the L in FLWOR) is used to set the value of a variable

    • second line is a let clause that assigns the product element’s name child to a variable called $name.

    • The $name variable is then referenced later in the FLWOR, in both the order by clause and the return clause

for $product in doc("catalog.xml")/catalog/product

let $name := $product/name

where [email protected] = "ACC"

order by $name

return $name


Flwors7

FLWORs

  • The let clause serves as a programmatic convenience that avoids repeating the same expression multiple times.

  • Using some implementations, it can also improve performance, because the expression is evaluated only once instead of each time it is needed.


Wrap the results

Wrap the results

  • wrap the results of your query in a different XML vocabulary

Query

<ul>{

for $product in doc("catalog.xml")/catalog/product

where [email protected]='ACC'

order by $product/name

return $product/name

}</ul>

…….

Results

<ul>

<name language="en">Deluxe Travel Bag</name>

<name language="en">Floppy Sun Hat</name>

</ul>


Another example

Another Example

Query:

<h1>There are {count(doc("catalog.xml")//product)} products.</h1>

Results:

<h1>There are 4 products.</h1>


Xml query xquery

  • You can include element constructors at various places in your query

Query:

<ul>{

for $product in doc("catalog.xml")/catalog/product

where [email protected]='ACC'

order by $product/name

return <li>{$product/name}</li>

}</ul>

Results:

<ul>

<li><name language="en">Deluxe Travel Bag</name></li>

<li><name language="en">Floppy Sun Hat</name></li>

</ul>


Attributes to results and data function

attributes to results and data function

  • You can also add your own attributes to results using an XML-like syntax

Query

<ultype="square">{

for $product in doc("catalog.xml")/catalog/product

where [email protected]='ACC'

order by $product/name

return <li class="[email protected]}">{data($product/name)}</li>

}</ul>

Results

<ul type="square">

<li class="ACC">Deluxe Travel Bag</li>

<li class="ACC">Floppy Sun Hat</li>

</ul>


Functions

Functions

  • There are over 100 functions built into XQuery, covering a broad range of functionality.

  • Functions can be used to manipulate strings and dates, perform mathematical calculations, combine sequences of elements, and perform many other useful jobs.

  • You can also define your own functions, either in the query itself, or in an external library

  • Both built-in and user-defined functions can be called from almost any place in a query.


Xml query xquery

  • Typical function call

    • substring($prodName, 1, 5)

  • where the name of the function is substring and there are three arguments, separated by commas and surrounded by parentheses. The first argument is a variable reference, whereas the other two are numeric literals.

  • XQuery comments, delimited by (: and :)

    • (: This query returns the <number> children :)


Evaluation order and parentheses

Evaluation Order and Parentheses

  • if ($x < 12 and $y > 0) then $x + $y else $x - $y

  • if (($x < 12) and ($y > 0)) then ($x + $y) else ($x - $y)

  • any and operators are evaluated before or operators

    • true() and true() or false() and false( )

    • (true() and true( )) or (false() and false( ))


Conditional if then else expressions

Conditional (if-then-else) Expressions

Query

for $prod in (doc("catalog.xml")/catalog/product)

return if ([email protected] = 'ACC')

then <accessoryNum>{data($prod/number)}</accessoryNum>

else <otherNum>{data($prod/number)}</otherNum>

Results

<otherNum>557</otherNum>

<accessoryNum>563</accessoryNum>

<accessoryNum>443</accessoryNum>

<otherNum>784</otherNum>


Conditional expression returning multiple expressions

Conditional expression returning multiple expressions

Query

for $prod in (doc("catalog.xml")/catalog/product)

return if ([email protected] = 'ACC')

then (<accessoryNum>{data($prod/number)}</accessoryNum>,

<accessoryName>{data($prod/name)}</accessoryName>)

else <otherNum>{data($prod/number)}</otherNum>

Results

<otherNum>557</otherNum>

<accessoryNum>563</accessoryNum>

<accessoryName>Floppy Sun Hat</accessoryName>

<accessoryNum>443</accessoryNum>

<accessoryName>Deluxe Travel Bag</accessoryName>

<otherNum>784</otherNum>


Xquery and xml schema

XQuery and XML Schema

  • XQueryuses the type system of XML Schema, which includes built-in types that represent common datatypessuch as decimal, date, and string.

  • XML Schema also specifies a language for defining your own types based on the built-in types.

  • For example, if your item element has a quantity attribute, and you know from the schema that the type of the quantity attribute is xs:integer, you can perform sorts or other operations on that attribute’s value without converting it to an integer in the query


  • Login