dr. alexandra i. cristea acristea/ cs 253: topics in database systems: xquery

65
Dr. Alexandra I. Cristea http://www.dcs.warwick.ac.uk/ ~acristea/ CS 253: Topics in Database Systems: XQuery

Upload: taylor-foster

Post on 28-Mar-2015

218 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

Dr. Alexandra I. Cristea

http://www.dcs.warwick.ac.uk/~acristea/

CS 253: Topics in Database Systems: XQuery

Page 2: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

2

• Previously we looked at:– XPath– Namespaces

• Next:– XQuery

Page 3: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

3

Xqueryhttp://www.w3.org/TR/xquery/

Page 4: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

4

What is XQuery?• XQuery is the language for querying XML data • XQuery for XML is like SQL for databases • XQuery is built on XPath expressions • XQuery is defined by the W3C • XQuery is supported by all the major database

engines (IBM, Oracle, Microsoft, etc.) • XQuery is a W3C recommendation (Jan 2007;

latest 14 Dec 2010) thus a standard

Page 5: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

5

XQuery - Examples of Use

• Extract information to use in a Web Service

• Generate summary reports

• Transform XML data to XHTML

• Search Web documents for relevant information

Page 6: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

6

XQuery compared to XPath

• XQuery 1.0 and XPath 2.0 share the same data model and support the same functions and operators.

• XQuery 1.0 is a strict superset of XPath 2.0 XPath 2.0 expression is directly an XQuery 1.0

expression (a query)• The extra expressive power is the ability to:

– Join information from different sources and– Generate new XML fragments

Page 7: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

7

Xquery ‘compilers’

•Download: http://www.altova.com/altovaxml.html •Or try out at*:•http://support.x-hive.com/xquery/index.html•Syntax check at: http://www.w3.org/2007/01/applets/xqueryApplet.html

Page 8: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

8

XQuery query makeup

• Prolog– Like XPath, XQuery expressions are evaluated

relatively to a context– explicitly provided by a prolog (header)~ header with definitions

• Body– The actual query

• Generate• Join• Select

Page 9: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

9

XQuery Ex.: Prolog + Query

Page 10: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

10

XQuery Prolog (i.e., header(s))• Settings define various parameters for the XQuery processor language,

such as:xquery version "1.0";

declare base-uri "http://example.org";declare default element namespace

"http://example.org/names";declare namespace xs= "http://www.w3.org/2001/XMLSchema";import module "http://www.w3.org/2003/05/xpath-functions"

at "logo.xq";declare variable $x as xs:integer := 7;declare function addLogo($root as node()) as node()*{ };(: etc :)

Page 11: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

Module definition

xquery version “1.0”;module namespace mylib = “http://www.example.com/test_library”;

declare variable $mylib:foo as xs:string := “foo”;

declare function mylib:foobar() as xs:string

{

concat ($mylib:foo, “bar”)

};

11

Page 12: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

12

Body: Constructors

Direct constructors in Xquery:

<XMLfragment>my fragment </XMLfragment>

– Evaluates to the given XML fragment

Page 13: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

13

Explicit constructors

computed constructors

Page 14: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

14

Variable bindings (implicit constructors)

<employee empid="{$id}"> <name>{$name}</name>

{$job} <deptno>{$deptno}</deptno> <salary>{$SGMLspecialist+100000}</salary>

</employee>

Page 15: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

15

How to Select Nodes with XQuery?

• Functions– XQuery uses functions to extract data from

XML documents.

• (X)Path Expressions– XQuery uses path expressions to navigate

through elements in an XML document.

• Predicates– XQuery uses predicates to limit the extracted

data from XML documents.

Page 16: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

16

Functions

• doc() – function to open a file

• Example:– doc("books.xml")

• Note: A call to a function can appear where an expression may appear.

Page 17: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

17

Path Expressions

• Example:select all the title elements in the "books.xml"

file:

doc("books.xml")/bookstore/book/title

Page 18: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

18

Predicates

• Example:select all the book elements under the

bookstore element that have a price element with a value that is less than 30 :

doc("books.xml")/bookstore/book[price<30]

Page 19: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

19

At a glance: function, path, predicate

Page 20: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

20

FLWOR

• For, Let, Where, Order by, Return

= main engine

~ SQL syntax (SFW(GH)O)

~ programs and function calls

Page 21: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

21

FLWOR by comparison with Path expressions

• select all the title elements under the book elements that are under the bookstore element that have a price element with

a value that is higher than 30.

• Path expression:doc("books.xml")/bookstore/book[price>30]/title

• FLWOR expression: for $x in doc("books.xml")/bookstore/book where $x/price>30 return $x/title

Page 22: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

22

Sorting in FLWOR• for $x in doc("books.xml")/bookstore/book

where $x/price>30

order by $x/title

return $x/title

Page 23: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

23

Present the Result In an HTML List

<ul>

{

for $x in doc("books.xml")/bookstore/book/title

order by $x

return <li>{$x}</li>

}

</ul>

Page 24: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

24

Result HTML List

<ul> <li><title lang="en">Everyday

Italian</title></li> <li><title lang="en">Harry Potter</title></li> <li><title lang="en">Learning XML</title></li> <li><title lang="en">XQuery Kick

Start</title></li> </ul>

Page 25: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

25

Eliminate element (here: title)

<ul>

{

for $x in doc("books.xml")/bookstore/book/title

order by $x

return <li>{data($x)}</li> (: also text{} :)

}

</ul>

Page 26: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

26

New result HTML List

<ul>

<li>Everyday Italian</li>

<li>Harry Potter</li>

<li>Learning XML</li>

<li>XQuery Kick Start</li>

</ul>

Page 27: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

27

Another FLWOR Expression

<doubles>{ for $s in doc("students.xml")//student let $m := $s/major where count($m) ge 2 order by $s/@id return <double>

{ $s/name/text()} </double>}</doubles>

Page 28: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

28

The Difference between for and let

Page 29: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

29

The Difference between for and let

:=in

Page 30: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

30

The Difference between for and let

Page 31: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

31

The Difference between for and let

Page 32: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

32

FLWOR Basic Building Blocks

Page 33: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

33

General rules

• for and let may be used many times in any order

• only one where is allowed

• many different sorting criteria can be specified (descending, ascending, etc.)

Page 34: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

34

Reversing order

• Reverses the order of a sequence, for nodes or atomic values

• reverse (( 1, 2, 3))

-> 321

Page 35: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

35

Joining documentsfor $p in doc("www.irs.gov/taxpayers.xml")//person

for $n in doc("neighbors.xml")//neighbor[ssn = $p/ssn]

return

<person>

<ssn> { $p/ssn } </ssn>

{ $n/name }

<income> { $p/income } </income>

</person>

Page 36: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

36

Two-way join in a where Clause

for $item in doc(“ord.xml”)//item,

$product in doc(“cat.xml”)//product

where $item/@num = $product/number

return

<item num=“{$item/@num}”

name=“{$product/name}”

quan=“{$item/@quantity}” />

Page 37: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

37

Aggregating

• Make summary calculations on grouped data

• Functions:– sum, avg, max, min, count

Page 38: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

38

Conditionalsfor $b in doc(“bib.xml”)/book

return  <short>   {$b/title}   <author>    {if ( count($b/author) < 3 )      then   $b/author      else        ( $b/author[1], <author>and others</author>)      }    </author>  </short>

Page 39: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

39

Nesting Conditional Expressions

• Conditional expressions can be nested• ‘else if’ functionality is provided

• if ( count($b/author) = 1 )      then   $b/author      else if (count($b/author) = 2 )then (: .. :)        else ( $b/author[1], <author>and others</author>)

Page 40: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

40

Logical Expressions• and, or operators:

– and has precedence over or– Parentheses can change precedence

if ($isDiscounted and ($discount > 5 or $discount < 0 ) ) then 5 else $discount

• not function for negations: if (not($isDiscounted)) then 0 else $discount

Page 41: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

41

XQuery Built-in Functions

XQuery function namespace URI is:http://www.w3.org/2005/02/xpath-functions

default prefix: fn:.

• E.g.: fn:string() or fn:concat().

• fn: is the default prefix of the namespace, the function names does not need to be prefixed when called.

Page 42: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

42

Built-in Functions• String-related

– substring, contains, matches, concat, normalize-space, tokenize

• Date-related– current-date, month-from-date, adjust-time-to-

timezone• Number-related

– round, avg, sum, ceiling• Sequence-related

– index-of, insert-before, reverse, subsequence, distinct-values

Page 43: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

43

Built-in Functions (2)• Node-related

– data, empty, exists, id, idref

• Name-related– local-name, in-scope-prefixes, QName, resolve-

QName

• Error handling and trapping– error, trace, exactly-one

• Document and URI-related– collection, doc, root, base-uri

Page 44: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

44

Function calls

doc("books.xml")//book[substring(title,1,5)='Harry']

let $name := (substring($booktitle,1,4))

<name>{upper-case($booktitle)}</name>

Page 45: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

45

for $x in doc("http://www.dcs.warwick.ac.uk/~acristea/courses/CS253/2009/books.xml")//book/title

for $y in data($x)for $name in (substring($y,1,4))

return $name

Page 46: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

46

User Defined Functions

declare function prefix:function_name($parameter AS datatype)

AS returnDatatype

{ (: ...function code here... :) };

Page 47: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

47

User-defined Functionsdeclare function depth($e AS xsd:integer) AS xsd:integer

{  if (empty($e/*) then 1  else max(for $c in $e/* return depth($c)) ) +1};

(: usage :) for $b in doc(“bib.xml”)/book

return depth($b)

Page 48: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

48

Existential and Universal Quantifiers

• for $b in doc(“bib.xml”)/bookwhere some $author in $b/author   satisfies $author/text() = “Ullman”return $b

• for $b in doc(“bib.xml”)/bookwhere every $author in $b/author           satisfies $author/text() = “Ullman”return $b

Return books where all authors are “Ullman”

Return books where at least one author is “Ullman”

Page 49: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

49

Comments

Page 50: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

50

Comparisons• Value comparisons

Eq, ne, lt, le, gt, ge

Used to compare individual values

Each operand must be a single atomic value (or a node containing a single atomic value)

• General comparisons=, !=, <, <=, >, >=

Can be used with sequences of multiple items

Page 51: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

51

Example

Page 52: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

52

XQuery Syntax• Declarative, functional language

~ SQL

• Nested expressions• Case sensitive• White spaces:

– Tabs, space, CR, LF– Ignored between language constructs– Significant in quoted strings

• No special EOL character

Page 53: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

53

Keywords and names• Keywords and operators

– Case-sensitive, generally lower case– May have several meanings depending on the

context• E.g. “*” or “in”

– No reserved words

• All names must be valid XML names – variables, functions, elements, attributes– Can be associated with a namespace

Page 54: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

54

XQuery gives you a choice:

• Path Expressions:– If you just want to copy certain elements

and attributes as is

• FLWOR Expressions:– Allow sorting– Allow adding elements/attributes– Verbose, but can be clearer

Page 55: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

55

XQuery tools

• XStylus Studio 2007 http://www.stylusstudio.com/xml_download.html (free trial version)– See also short XQuery intro at:

http://www.stylusstudio.com/xquery_primer.html

Page 56: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

56

Other info:

–XQuery on Distributed Resources

–Extensions for generic programming with XML

Page 57: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

57

XQuery on Distributed Sources

Page 58: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

58

Page 59: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

59

Page 60: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

60

Page 61: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

61

Page 62: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

62

Page 63: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

63

XML and programming

• XSLT, XPath and XQuery provide tools for specialized tasks.

• But many applications are not covered: – domain-specific tools for concrete XML

languages – general tools that nobody has thought of yet

Page 64: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

64

XML in general-purpose programming languages

• parse XML documents into XML trees

• navigate through XML trees

• construct XML trees

• output XML trees as XML documents

• DOM and SAX are corresponding APIs that are language independent and supported by numerous languages. JDOM is an API that is tailored to Java.

Page 65: Dr. Alexandra I. Cristea acristea/ CS 253: Topics in Database Systems: XQuery

65

XQuery Conclusion

• We have learned:– XQuery definition– Usage scenarios– Comparison w. XSLT and XPath– Capabilities– Functions, path expressions and

predicates– FLWOR