Download presentation
Presentation is loading. Please wait.
Published byStella Fletcher Modified over 5 years ago
1
XML, XML Schema, XPath and XQuery Query Languages
CS561 Slides collated from several sources, including D. Suciu at Univ. of Washington
2
XML Data
3
XML W3C standard to complement HTML origins: structured text SGML
motivation: HTML describes presentation XML describes content HTML e XML subset SGML CS Spring 2007.
4
From HTML to XML HTML describes the presentation CS Spring 2007.
5
HTML <h1> Bibliography </h1>
<p> <i> Foundations of Databases </i> Abiteboul, Hull, Vianu <br> Addison Wesley, 1995 <p> <i> Data on the Web </i> Abiteboul, Buneman, Suciu <br> Morgan Kaufmann, 1999 CS Spring 2007.
6
XML XML describes the content <bibliography>
<book> <title> Foundations… </title> <author> Abiteboul </author> <author> Hull </author> <author> Vianu </author> <publisher> Addison Wesley </publisher> <year> 1995 </year> </book> … </bibliography> XML describes the content CS Spring 2007.
7
XML Terminology tags: book, title, author, …
start tag: <book>, end tag: </book> elements: <book>…<book>,<author>…</author> elements are nested empty element: <red></red> abbrv. <red/> an XML document: single root element well formed XML document: if it has matching tags CS Spring 2007.
8
XML: Attributes <book price = “55” currency = “USD”>
<title> Foundations of Databases </title> <author> Abiteboul </author> … <year> 1995 </year> </book> attributes are alternative ways to represent data CS Spring 2007.
9
More XML: Oids and References
<person id=“o555”> <name> Jane </name> </person> <person id=“o456”> <name> Mary </name> <children idref=“o123 o555”/> </person> <person id=“o123” mother=“o456”><name>John</name> oids and references in XML are just syntax CS Spring 2007.
10
So Far Differences between “xml data” versus “relational data” ?
Data model? Typed? Homogeneity? Correctness? Usage/Purpose ? CS Spring 2007.
11
“XML Data Model” Numerous competing models:
Document Object Model (DOM): class hierarchy (node, element, attribute,…) defines API to inspect/modify the document XML query data model (formal) CS Spring 2007.
12
XML Namespaces http://www.w3.org/TR/REC-xml-names
name ::= [prefix:]localpart <book xmlns:isbn=“ <title> … </title> <number> 15 </number> <isbn:number> …. </isbn:number> </book> CS Spring 2007.
13
XML Namespaces syntactic: <number> , <isbn:number>
semantic: provide URL for “shared” schema <tag xmlns:mystyle = “ … <mystyle:title> … </mystyle:title> <mystyle:number> … </tag> defined here CS Spring 2007.
14
So Far What are “namespaces” good for ?
Are they typically available for relational databases? CS Spring 2007.
15
Schemas for XML
16
DTD - Element Type Definitions
<!ELEMENT paper (title,author*, year, (journal|conference) )> CS Spring 2007.
17
XML Schemas generalizes DTDs (SGML derivative)
now, instead uses XML syntax two main documents: structure and data types XML Schema more powerful but more complex CS Spring 2007.
18
DTD: <!ELEMENT paper (title,author*,year, (journal|conference))>
XML Schema <xsd:element name=“paper” type=“papertype”/> <xsd:complexType name=“papertype”> <xsd:sequence> <xsd:element name=“title” type=“xsd:string”/> <xsd:element name=“author” minOccurs=“0”/> <xsd:element name=“year”/> <xsd: choice> < xsd:element name=“journal”/> <xsd:element name=“conference”/> </xsd:choice> </xsd:sequence> </xsd:complexType </xsd:element> DTD: <!ELEMENT paper (title,author*,year, (journal|conference))> CS Spring 2007.
19
So Far Differences between “xml schema” versus “relational schema” ?
Purpose ? Do we need it ? Definition time? Strictness of typing ? Underlying model ? CS Spring 2007.
20
Elements versus Types in XML Schema
DTD: <!ELEMENT person (name, address) > <xsd:element name=“person”> <xsd:complexType> <xsd:sequence> <xsd:element name=“name” type=“xsd:string”/> <xsd:element name=“address” type=“xsd:string”/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=“person” type=“ttt” /> <xsd:complexType name=“ttt”> <xsd:sequence> <xsd:element name=“name” type=“xsd:string”/> <xsd:element name=“address” type=“xsd:string”/> </xsd:sequence> </xsd:complexType> CS Spring 2007.
21
Elements versus Types in XML Schema
Simple types (integers, strings, ...) Complex types (regular expressions, like in DTDs) Element-type-element alternation: Root element has a complex type Complex type is a regular expression of elements Those elements have their complex types ... ... Leaves have simple types CS Spring 2007.
22
Local and Global Types in XML Schema
Local type: <xsd:element name=“person”> [define locally the person’s type] </xsd:element> Global type: <xsd:element name=“person” type=“ttt”/> <xsd:complexType name=“ttt”> [define here the type ttt] </xsd:complexType> Global types: can be reused in other elements CS Spring 2007.
23
Local v.s. Global Elements in XML Schema
Local element: <xsd:complexType name=“ttt”> <xsd:sequence> <xsd:element name=“address” type=“...”/> </xsd:sequence> </xsd:complexType> Global element: <xsd:element name=“address” type=“...”/> <xsd:complexType name=“ttt”> <xsd:sequence> <xsd:element ref=“address”/> </xsd:sequence> </xsd:complexType> Global elements: like in DTDs CS Spring 2007.
24
Regular Expressions in XML Schema
Recall the element-type-element alternation: <xsd:complexType name=“....”> [regular expression on elements] </xsd:complexType> Regular expressions: <xsd:sequence> A B C </...> <xsd:choice> A B C </...> <xsd:group> A B C </...> <xsd:... minOccurs=“0” maxOccurs=“unbounded”> ..</...> <xsd:... minOccurs=“0” maxOccurs=“1”> ..</...> CS Spring 2007.
25
Regular Expressions in XML Schema
<xsd:sequence> A B C </...> = A B C <xsd:choice> A B C </...> = A | B | C <xsd:group> A B C </...> = (A B C) <xsd:... minOccurs=“0” maxOccurs=“unbounded”> ..</...> = (...)* <xsd:... minOccurs=“0” maxOccurs=“1”> ..</...> = (...)? CS Spring 2007.
26
Derived Types by Extensions
<complexType name="Address"> <sequence> <element name="street" type="string"/> <element name="city" type="string"/> </sequence> </complexType> <complexType name="USAddress"> <complexContent> <extension base= "ipo:Address"> <sequence> <element name="state" type="ipo:USState"/> <element name="zip" type="positiveInteger"/> </extension> </complexContent> Corresponds to inheritance CS Spring 2007.
27
Key Constraints in XML
28
Keys in XML Schema XML: XML Schema for Key : <key name="NumKey">
<purchaseReport> <regions> <zip code="95819"> <part number="872-AA" quantity="1"/> <part number="926-AA" quantity="1"/> <part number="833-AA" quantity="1"/> <part number="455-BX" quantity="1"/> </zip> <zip code="63143"> <part number="455-BX" quantity="4"/> </regions> <parts> <part number="872-AA">Lawnmower</part> <part number="926-AA">Baby Monitor</part> <part number="833-AA">Lapis Necklace</part> <part number="455-BX">Sturdy Shelves</part> </parts> </purchaseReport> XML Schema for Key : <key name="NumKey"> <selector xpath="parts/part"/> <field </key> CS Spring 2007.
29
Keys in XML Schema In general, syntax is : Notes:
<key name=“someDummyNameHere"> <selector xpath=“p"/> <field xpath=“p1"/> <field xpath=“p2"/> <field xpath=“pk"/> </key> Notes: All XPath expressions “start” at the element currently being defined The fields must identify a single “node”. CS Spring 2007.
30
Keys in XML Schema Unique = guarantees uniqueness
Key = guarantees uniqueness and existence All XPath expressions are “restricted”: /a/b | /a/c OK for selector //a/b/*/c OK for field Note: better than DTD’s ID mechanism CS Spring 2007.
31
Examples of Keys in XML Schema
<key name="fullName"> <selector xpath=".//person"/> <field xpath="firstname"/> <field xpath="surname"/> </key> <unique name="nearlyID"> <selector xpath=".//*"/> <field </unique> Note: Must have single firstname, Single surname CS Spring 2007.
32
Foreign Keys in XML Schema
Example <keyref name="personRef" refer="fullName"> <selector xpath=".//personPointer"/> <field <field </keyref> CS Spring 2007.
33
So Far Differences between “keys/foreign-keys”in xml versus relational model? Purpose ? Underlying model ? CS Spring 2007.
34
“The Basic Building Block”
XPath “The Basic Building Block”
35
XPath Goal = Permit access some nodes from document
XPath main construct : Axis navigation Navigation step : axis + node-test + predicates Examples descendant::node() child::author attribute::booktitle =“XML” CS Spring 2007.
36
XPath XPath path consists of one or more navigation steps, separated by “/” Navigation step : axis + node-test + predicates Examples /descendant::node() /child::author /descendant::node() /child::author [parent /attribute::booktitle =“XML”][2] XPath offers shortcuts : no axis means child // º /descendant-or-self::node()/ CS Spring 2007.
37
XPath- Child Axis Navigation
author is shorthand for child::author. Examples: aaa -- all the children nodes labeled aaa aaa/bbb -- all the bbb grandchildren of aaa children */bbb all the bbb grandchildren of any child Notes: . -- the context node / -- the root node aaa bbb ccc 1 2 3 4 5 6 7 context node CS Spring 2007.
38
XPath- Child Axis Navigation
/doc -- all doc children of the root ./aaa -- all aaa children of the context node (equivalent to aaa) text() -- all text children of context node node() -- all children of the context node (includes text and attribute nodes) parent of the context node .// -- the context node and all its descendants // -- the root node and all its descendants //text() -- all the text nodes in the document CS Spring 2007.
39
Predicates [2] -- the second child node of the context node
chapter[5] -- the fifth chapter child of context node [last()] -- the last child node of the context node chapter[title=“introduction”] -- the chapter children of the context node that have one or more title children whose string-value is “introduction” (string-value is concatenation of all text on descendant text nodes) person[.//firstname = “joe”] -- the person children of the context node that have in their descendants a firstname element with string-value “Joe” CS Spring 2007.
40
Axis navigation So far, our expressions have moved us down by moving to children nodes. Exceptions are : stay where you are / go to the root // all descendants of the root .// all descendants of the context node CS Spring 2007.
41
Axis navigation XPath has several axes: ancestor, ancestor-or-self, attribute, child, descendant, descendant-or-self, following, following-sibling, namespace, parent, preceding, preceding-sibling, self Some of these describe single nodes: self, parent Some describe sequences of nodes: All others CS Spring 2007.
42
XPath Navigation Axes CS561 - Spring 2007. ancestor preceding-sibling
following-sibling self child attribute preceding following namespace descendant CS Spring 2007.
43
XPath Abbreviated Syntax
(nothing) child:: @ attribute:: // /descendant-or-self::node() . self::node() .// descendant-or-self::node .. parent::node() / (document root) CS Spring 2007.
44
So Far Differences between SQL and XPATH?
What are similar query capabilities? What features does SQL have, but not XPATH? What features does XPATH support, but not SQL? Is XPath a full-fledged query language? CS Spring 2007.
45
Query Languages - XQuery
46
Summary of XQuery Resources FLWR expressions FOR and LET expressions
Collections and sorting Resources XQuery: A Query Language for XML Chamberlin, Florescu, et al. W3C recommendation: CS Spring 2007.
47
XQuery Designed based on Quilt (which is based on XML-QL)
XML Query data model (ordered) CS Spring 2007.
48
FLWR (“Flower”) Expressions
FOR ... LET... FOR... LET... WHERE... RETURN... CS Spring 2007.
49
XQuery Find the titles of all books published after 1995:
FOR $x IN document("bib.xml")/bib/book WHERE $x/year > 1995 RETURN $x/title How does result look like? CS Spring 2007.
50
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> CS Spring 2007.
51
XQuery Example FOR $a IN (document("bib.xml") /bib/book[publisher=“Morgan Kaufmann”]/author) RETURN <result> $a, FOR $t IN /bib/book[author=$a]/title RETURN $t </result> CS Spring 2007.
52
XQuery Example What is query result ?
For each author of a book by Morgan Kaufmann, list all books she published: FOR $a IN (document("bib.xml") /bib/book[publisher=“Morgan Kaufmann”]/author) RETURN <result> $a, FOR $t IN /bib/book[author=$a]/title RETURN $t </result> What is query result ? CS Spring 2007.
53
XQuery Result: <result> <author>Jones</author>
<title> abc </title> <title> def </title> </result> <author> Smith </author> <title> ghi </title> CS Spring 2007.
54
XQuery Example: Duplicates
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> distinct = a function that eliminates duplicates CS Spring 2007.
55
Example XQuery Result Result: <result>
<author>Jones</author> <title> abc </title> <title> def </title> </result> <author> Smith </author> <title> ghi </title> CS Spring 2007.
56
XQuery FOR $x in expr LET $x = expr
binds $x to each element in the list expr Useful for iteration over some input list LET $x = expr binds $x to the entire list expr Useful for common subexpressions and for grouping and aggregations CS Spring 2007.
57
XQuery with LET Clause <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> count = a (aggregate) function that returns number of elements CS Spring 2007.
58
XQuery Find books whose price is larger than average:
LET $a = FOR $b in document("bib.xml")/bib/book WHERE > $a RETURN $b CS Spring 2007.
59
FOR versus LET FOR Binds node variables iteration LET
Binds collection variables one value CS Spring 2007.
60
FOR v.s. LET FOR $x IN document("bib.xml")/bib/book
Returns: <result> <book>...</book></result> ... FOR $x IN document("bib.xml")/bib/book RETURN <result> $x </result> Returns: <result> <book>...</book> <book>...</book> ... </result> LET $x := document("bib.xml")/bib/book RETURN <result> $x </result> CS Spring 2007.
61
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...) Returns: <result> <author>...</author> <author>...</author> ... </result> RETURN <result> $b/author </result> CS Spring 2007.
62
XQuery Summary FOR-LET-WHERE-RETURN = FLWR FOR/LET Clauses
List of tuples WHERE Clause List of tuples RETURN Clause Instances of XQuery data model CS Spring 2007.
63
XQuery Some more query features CS Spring 2007.
64
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 , </book> SORTBY (price DESCENDING) </publisher> SORTBY (name) </publisher_list> CS Spring 2007.
65
Sorting in XQuery Sorting arguments: refer to name space of RETURN clause, not of FOR clause TIP: To sort on an element you don’t want to display, first return it, then remove it with an additional query. CS Spring 2007.
66
If-Then-Else FOR $h IN //holding RETURN <holding> $h/title,
IF = "Journal" THEN $h/editor ELSE $h/author </holding> SORTBY (title) CS Spring 2007.
67
Existential Quantifiers
FOR $b IN //book WHERE SOME $p IN $b//para SATISFIES contains($p, "sailing") AND contains($p, "windsurfing") RETURN $b/title CS Spring 2007.
68
Universal Quantifiers
FOR $b IN //book WHERE EVERY $p IN $b//para SATISFIES contains($p, "sailing") RETURN $b/title CS Spring 2007.
69
So Far Similarities between SQL and XQuery?
Differences between SQL and XQuery? CS Spring 2007.
70
XML, XML Data Model XML Schema, XPath XQuery
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.