Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery...
Transcript of Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery...
![Page 1: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/1.jpg)
BASI DI DATI II 2 mod loBASI DI DATI II − 2 modulo Parte VI: XQueryy
Prof. Riccardo TorloneUniversità Roma TreUniversità Roma Tre
![Page 2: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/2.jpg)
Outline
How XML generalizes relational databases The XQuery language How XML may be supported in databases How XML may be supported in databases
Riccardo Torlone: Basi di Dati 2 2
![Page 3: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/3.jpg)
XQuery 1.0
XML documents naturally generalize database relations
XQuery is the corresponding generalization of Q y p g gSQL
Riccardo Torlone: Basi di Dati 2 3
![Page 4: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/4.jpg)
From Relations to Trees
Riccardo Torlone: Basi di Dati 2 4
![Page 5: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/5.jpg)
Only Some Trees are Relations They have height two The root has an unbounded number of children The root has an unbounded number of children All nodes in the second layer (records) have a
fixed number of child nodes (fields)
Riccardo Torlone: Basi di Dati 2 5
![Page 6: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/6.jpg)
XML Trees Are Not Relations Not all XML trees satisfy the previous
characterizationcharacterization XML trees are ordered, while both rows and
l f t bl b t d ith tcolumns of tables may be permuted without changing the meaning of the data
Riccardo Torlone: Basi di Dati 2 6
![Page 7: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/7.jpg)
A Student Database
Riccardo Torlone: Basi di Dati 2 7
![Page 8: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/8.jpg)
A Natural Model in XML (1/2)<students>
<student id="100026"><student id= 100026 >
<name>Joe Average</name>
<age>21</age>
<major>Biology</major>
<results>
<result course="Math 101" grade="C-"/><result course= Math 101 grade= C- />
<result course="Biology 101" grade="C+"/>
<result course="Statistics 101" grade="D"/>
</results>
</student>
Riccardo Torlone: Basi di Dati 2 8
![Page 9: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/9.jpg)
A More Natural Model in XML (2/2)<student id="100078">
<name>Jack Doe</name><name>Jack Doe</name>
<age>18</age>
<major>Physics</major>
<major>XML Science</major>
<results>
<result course="Math 101" grade="A"/><result course= Math 101 grade= A />
<result course="XML 101" grade="A-"/>
<result course="Physics 101" grade="B+"/>
<result course="XML 102" grade="A"/>
</results>
</student></student>
</students>
Riccardo Torlone: Basi di Dati 2 9
![Page 10: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/10.jpg)
Usage Scenarios for a DML Data-orientedkinds of queries that we performed in thekinds of queries that we performed in the
original relational modelD t O i t d Document-Orientedretrieve parts of documents, perform text-based
searching, generate new documents as combinations of existing ones
Hybridmine hybrid data such as patient recordsmine hybrid data, such as patient records
Riccardo Torlone: Basi di Dati 2 10
![Page 11: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/11.jpg)
XQuery Design Requirements Must have at least one XML syntax and at
least one human-readable syntaxleast one human readable syntax Must be declarative Must be namespace aware Must coordinate with XML Schemaust coo d ate t Sc e a Must support simple and complex datatypes
M t bi i f ti f lti l Must combine information from multiple documents
Must be able to transform and create XML trees
Riccardo Torlone: Basi di Dati 2 11
![Page 12: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/12.jpg)
Relationship to XPath XQuery 1.0 is a strict superset of XPath 2.0 Every XPath 2 0 expression is directly an Every 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 j generate new XML fragments
Riccardo Torlone: Basi di Dati 2 12
![Page 13: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/13.jpg)
Relationship to XSLT XQuery and XSLT are both domain-specific
languages for combining and transforming g g g gXML data from multiple sources
They are vastly different in design, partly for They are vastly different in design, partly for historical reasons
XQuery is designed from scratch XSLT is an XQuery is designed from scratch, XSLT is an intellectual descendant of CSS
Generally: Generally:XSLT: ideal for document-centric applications
XQ id l f d t t i li tiXQuery: ideal for data-centric applications Technically: they may emulate each other
Riccardo Torlone: Basi di Dati 2 13
![Page 14: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/14.jpg)
XQuery Prolog
The prolog of XQuery expressions various parameters and settings, such as:
xquery version "1.0";
declare boundary-space preserve;
declare default element namespace URI;declare default element namespace URI;
declare default function namespace URI;
declare namespace prefix = URI;
import schema at URI;
Riccardo Torlone: Basi di Dati 2 14
![Page 15: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/15.jpg)
Implicit Declarations
declare namespace xml = "http://www.w3.org/XML/1998/namespace";
declare namespace xs = "http://www.w3.org/2001/XMLSchema";http://www.w3.org/2001/XMLSchema ;
declare namespace xsi = "http://www.w3.org/2001/XMLSchema-instance";
declare namespace fn = "http://www.w3.org/2005/11/xpath-functions";
declare namespace xdt = declare namespace xdt "http://www.w3.org/2005/11/xpath-datatypes";
declare namespace local =
"http://www.w3.org/2005/11/xquery-local-functions";
Riccardo Torlone: Basi di Dati 2 15
![Page 16: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/16.jpg)
Context Like XPath expressions, XQuery expressions
are evaluated relatively to a contextare evaluated relatively to a context The initial context node, position, and size are
d fi dundefined The fn:doc() function is used to define the
current context
Riccardo Torlone: Basi di Dati 2 16
![Page 17: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/17.jpg)
Values in XQuery Same atomic values as XPath 2.0 Also lots of primitive simple values using type Also lots of primitive simple values using type
constructors:xs:string("XML is fun")xs:string( XML is fun )xs:boolean("true")xs:decimal("3.1415")xs:float("6 02214199E23")xs:float( 6.02214199E23 )xs:dateTime("1999-05-31T13:20:00-05:00")xs:time("13:20:00-05:00")
d ("1999 0 31")xs:date("1999-05-31")xs:gYearMonth("1999-05")xs:gYear("1999")xs:hexBinary("48656c6c6f0a")xs:base64Binary("SGVsbG8K")xs:anyURI("http://www.brics.dk/ixwt/")
Riccardo Torlone: Basi di Dati 2 17
y ( p // / / )xs:QName("rcp:recipe")
![Page 18: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/18.jpg)
XQuery Expressions XPath expressions are also XQuery
expressionsexpressions XQuery expressions may compute new XML
dnodeselement, character data, comment, and
processing instruction nodes Each node is created with a unique node q
identity Element constructors may be either direct or Element constructors may be either direct or
computed
Riccardo Torlone: Basi di Dati 2 18
![Page 19: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/19.jpg)
Direct Constructors
Uses the standard XML syntax The expression<foo><bar/>baz</foo><foo><bar/>baz</foo>
computes the given XML fragment Nodes are created with a unique identity:<foo/> is <foo/><foo/> is <foo/>
evaluates to false
Riccardo Torlone: Basi di Dati 2 19
![Page 20: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/20.jpg)
Namespaces in Constructors (1/2)declare default element namespace "http://businesscard.org";
<card>
<name>John Doe</name>
<title>CEO, Widget Inc.</title>
<email>[email protected]</email>j g /
<phone>(202) 555-1414</phone>
<logo uri="widget.gif"/>
</card>/ca d
declare namespace b = "http://businesscard.org";
<b:card>
<b:name>John Doe</b:name>
<b:title>CEO, Widget Inc.</b:title>
<b:email>[email protected]</b:email>b e jo doe@ dget co /b e
<b:phone>(202) 555-1414</b:phone>
<b:logo uri="widget.gif"/>
</b:card>
Riccardo Torlone: Basi di Dati 2 20
</b:card>
![Page 21: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/21.jpg)
Namespaces in Constructors (2/2)<card xmlns="http://businesscard.org">
<name>John Doe</name>
<title>CEO, Widget Inc.</title>
<email>[email protected]</email>
<phone>(202) 555-1414</phone>p ( ) /p
<logo uri="widget.gif"/>
</card>
Riccardo Torlone: Basi di Dati 2 21
![Page 22: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/22.jpg)
Enclosed Expressions{ exp }
Denote computed contents May occur within an elementy Enclosed expression is evaluated and the
resulting sequence is converted into XML contentsresulting sequence is converted into XML contents as follows: Sequences of atomic values are converted into a single Sequences of atomic values are converted into a single
character data obtained by converting each value to a string and separating these strings with single space g p g g g pcharacters
Each node is converted into a copy of the tree it roots,
Riccardo Torlone: Basi di Dati 2 22
such that every node has a new, unique node identity
![Page 23: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/23.jpg)
Example of XQuery evaluation<students>
<student id="100026">
<name>Joe Average</name>
<age>21</age>
<major>Biology</major>
<results>
<result course="Math 101" grade="C-"/>
declare boundary-space preserve;
<studentnames>
{f d (" d l")// d / }g /
<result course="Biology 101" grade="C+"/>
<result course="Statistics 101" grade="D"/>
</results>
</student>
{fn:doc("student.xml")//student/name}
</studentnames>
</student>
<student id="100078">
<name>Jack Doe</name>
<age>18</age>
<major>Physics</major><major>Physics</major>
<major>XML Science</major>
<results>
<result course="Math 101" grade="A"/>
<result course="XML 101" grade="A-"/>
<?xml version="1.0" encoding="UTF-8"?>
<studentnames>
<name>Joe Average</name><result course= XML 101 grade= A- />
<result course="Physics 101" grade="B+"/>
<result course="XML 102" grade="A"/>
</results>
</student>
<name>Jack Doe</name>
</studentnames>
Riccardo Torlone: Basi di Dati 2 23
</student>
</students>
![Page 24: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/24.jpg)
Enclosed Expressions<foo>1 2 3 4 5</foo>
<foo>{1 2 3 4 5}</foo><foo>{1, 2, 3, 4, 5}</foo>
<foo>{1, "2", 3, 4, 5}</foo>
<foo>{1 to 5}</foo>
<foo>1 {1+1} {" "} {"3"} {" "} {4 to 5}</foo>
<foo bar="1 2 3 4 5"/>
<foo bar="{1 2 3 4 5}"/><foo bar= {1, 2, 3, 4, 5} />
<foo bar="1 {2 to 4} 5"/>
Riccardo Torlone: Basi di Dati 2 24
![Page 25: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/25.jpg)
Explicit Constructors<card xmlns="http://businesscard.org">
<name>John Doe</name>
<title>CEO, Widget Inc.</title>
<email>[email protected]</email>
<phone>(202) 555-1414</phone>p ( ) /p
<logo uri="widget.gif"/>
</card>
element card {namespace { "http://businesscard.org" },p { p // g },element name { text { "John Doe" } },element title { text { "CEO, Widget Inc." } } ,element email { text { "[email protected]" } },element phone { text { "(202) 555 1414" } }element phone { text { "(202) 555-1414" } },element logo {attribute uri { "widget.gif" }
}
Riccardo Torlone: Basi di Dati 2 25
}}
![Page 26: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/26.jpg)
Computed Element and Attribute Nameselement { "card" } {
namespace { "http://businesscard.org" },namespace { http://businesscard.org },
element { "name" } { text { "John Doe" } },
element { "title" } { text { "CEO, Widget Inc." } },
l { " il" } { { "j h d @ id " } }element { "email" } { text { "[email protected]" } },
element { "phone" } { text { "(202) 555-1414" } },
element { "logo" } {
attribute { "uri" } { "widget.gif" }
}
}}
Riccardo Torlone: Basi di Dati 2 26
![Page 27: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/27.jpg)
Biliingual Business Cards
element { if ($lang=”Italian") then ”biglietto" else "card" }
{ { "h //b i d " }{ namespace { "http://businesscard.org" },
element { if ($lang="Italian") then ”nome" else "name" }
{ text { "John Doe" } },
element { if ($lang="Italian") then ”titolo" else "title" }
{ text { "CEO, Widget Inc." } },
element { "email" }
{ text { "[email protected]" } },
element { if ($lang="Italian") then "telefono" else "phone"}
{ text { "(202) 456-1414" } },{ text { (202) 456 1414 } },
element { "logo" } {
attribute { "uri" } { "widget.gif" }
}}
}
Riccardo Torlone: Basi di Dati 2 27
![Page 28: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/28.jpg)
FLWOR Expressions
Used for general queries:
<doubles>
{ for $s in fn:doc("students.xml")//student
let $m := $s/major
where fn:count($m) ge 2where fn:count($m) ge 2
order by $s/@id
return <double>
{ $ / / () }{ $s/name/text() }
</double>
}
</doubles>
Riccardo Torlone: Basi di Dati 2 28
![Page 29: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/29.jpg)
Evaluation result<students>
<student id="100026">
<name>Joe Average</name>
<age>21</age>
<major>Biology</major>
<results>
<result course="Math 101" grade="C-"/>g /
<result course="Biology 101" grade="C+"/>
<result course="Statistics 101" grade="D"/>
</results>
</student><?xml version="1.0" encoding="UTF-8"?>
</student>
<student id="100078">
<name>Jack Doe</name>
<age>18</age>
<major>Physics</major>
<doubles>
<double>Jack Doe</double>
</doubles>
<major>Physics</major>
<major>XML Science</major>
<results>
<result course="Math 101" grade="A"/>
<result course="XML 101" grade="A-"/><result course= XML 101 grade= A- />
<result course="Physics 101" grade="B+"/>
<result course="XML 102" grade="A"/>
</results>
</student>
Riccardo Torlone: Basi di Dati 2 29
</student>
</students>
![Page 30: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/30.jpg)
The Difference Between For and Let (1/2)for $x in (1, 2, 3, 4)
let $y := ("a", "b", "c")
return ($x, $y)
1, a, b, c, 2, a, b, c, 3, a, b, c, 4, a, b, c
let $x := (1, 2, 3, 4)$ ( , , 3, )
for $y in ("a", "b", "c")
return ($x, $y)
1, 2, 3, 4, a, 1, 2, 3, 4, b, 1, 2, 3, 4, c
Riccardo Torlone: Basi di Dati 2 30
![Page 31: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/31.jpg)
The Difference Between For and Let (2/2)for $x in (1, 2, 3, 4)
for $y in ("a", "b", "c")for $y in ( a , b , c )
return ($x, $y)
1, a, 1, b, 1, c, 2, a, 2, b, 2, c,
3, a, 3, b, 3, c, 4, a, 4, b, 4, c
l t $ (1 2 3 4)let $x := (1, 2, 3, 4)
let $y := ("a", "b", "c")
return ($x, $y)
1 2 3 4 a b c
Riccardo Torlone: Basi di Dati 2 31
1, 2, 3, 4, a, b, c
![Page 32: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/32.jpg)
Computing Joins What recipes can we (sort of) make?
<fridge><fridge><stuff>eggs</stuff><stuff>olive oil</stuff><stuff>ketchup</stuff>stu etc up /stu<stuff>unrecognizable moldy thing</stuff>
</fridge>
declare namespace rcp = "http://www.uniroma3.it/recipes";
for $s in fn:doc("fridge.xml")//stuff
for $r in fn:doc("recipes.xml")//rcp:recipe
for $i in $r//rcp:ingredient/@name
Where $s/text()=$i$ / () $
return fn:distinct-values($r/rcp:title/text())
tuple generate: ($s $r $i)
Riccardo Torlone: Basi di Dati 2 32
tuple generate: ($s, $r, $i)
![Page 33: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/33.jpg)
Nested queriesdeclare namespace rcp = "http://www.brics.dk/ixwt/recipes";
<ingredients><ingredients>
{ for $i in distinct-values (
fn:doc("recipes.xml")//rcp:ingredient/@name
))
return
<ingredient name="{$i}">
{ for $r in fn:doc("recipes.xml")//rcp:recipe
where $r//rcp:ingredient[@name=$i]
return <title>{$r/rcp:title/text()}</title>return <title>{$r/rcp:title/text()}</title>
}
</ingredient>
}
</ingredients>
Riccardo Torlone: Basi di Dati 2 33
![Page 34: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/34.jpg)
The Output<?xml version="1.0" encoding="UTF-8"?>
<ingredients><ingredients>
<ingredient name="beef cube steak">
<title>Beef Parmesan with Garlic Angel Pasta</title>
/i di</ingredient>
...
<ingredient name="filling">
<title>Ricotta Pie</title>
<title>Cailles en Sarcophages</title>
</ingredient></ingredient>
...
</ingredients>
Riccardo Torlone: Basi di Dati 2 34
![Page 35: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/35.jpg)
Sorting the Resultsdeclare namespace rcp = "http://www.uniroma3.it/recipes";
<ingredients><ingredients>
{ for $i in distinct-values(
fn:doc("recipes.xml")//rcp:ingredient/@name
))
order by $i
return
<ingredient name="{$i}">
{ for $r in fn:doc("recipes.xml")//rcp:recipe
where $r//rcp:ingredient[@name=$i]where $r//rcp:ingredient[@name=$i]
order by $r/rcp:title/text()
return <title>{$r/rcp:title/text()}</title>
}
</ingredient>
}
Riccardo Torlone: Basi di Dati 2 35
}
</ingredients>
![Page 36: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/36.jpg)
The Output<?xml version="1.0" encoding="UTF-8"?>
<ingredients><ingredients>
<ingredient name="alchermes liquor">
<title>Zuppa Inglese</title>
/i di</ingredient>
<ingredient name="angel hair pasta">
<title>Beef Parmesan with Garlic Angel Pasta</title>
</ingredient>
<ingredient name="baked chicken">
<title>Cailles en Sarcophages</title><title>Cailles en Sarcophages</title>
</ingredient>
...
</ingredients>
Riccardo Torlone: Basi di Dati 2 36
![Page 37: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/37.jpg)
A More Complicated Sortingfor $s in document("students.xml")//student
order by
fn:count($s/results/result[fn:contains(@grade,"A")]) descending,
fn:count($s/major) descending,
xs:integer($s/age/text()) ascendingg ( / g / ()) g
return $s/name/text()
Riccardo Torlone: Basi di Dati 2 37
![Page 38: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/38.jpg)
Using Functionsdeclare function local:grade($g) {
if ($g="A") then 4.0 else if ($g="A-") then 3.7
else if ($g="B+") then 3.3 else if ($g="B") then 3.0
else if ($g="B-") then 2.7 else if ($g="C+") then 2.3
else if ($g="C") then 2.0 else if ($g="C-") then 1.7g g
else if ($g="D+") then 1.3 else if ($g="D") then 1.0
else if ($g="D-") then 0.7 else 0
};};
declare function local:gpa($s) {
fn:avg(for $g in $s/results/result/@grade return local:grade($g))fn:avg(for $g in $s/results/result/@grade return local:grade($g))
};
<gpas><gpas>
{ for $s in fn:doc("students.xml")//student
return <gpa id="{$s/@id}" gpa="{local:gpa($s)}"/> }
</gpas>
Riccardo Torlone: Basi di Dati 2 38
</gpas>
![Page 39: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/39.jpg)
A Height Functiondeclare function local:height($x) {
if (fn:empty($x/*)) then 1if (fn:empty($x/ )) then 1
else fn:max(for $y in $x/* return local:height($y))+1
};
Riccardo Torlone: Basi di Dati 2 39
![Page 40: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/40.jpg)
Sequence Types
2 instance of xs:integer
2 instance of item()2 instance of item()
2 instance of xs:integer?
() instance of empty()
() instance of xs:integer*() instance of xs:integer*
(1,2,3,4) instance of xs:integer*
(1,2,3,4) instance of xs:integer+
f / i t f it ()<foo/> instance of item()
<foo/> instance of node()
<foo/> instance of element()
f / i f l (f )<foo/> instance of element(foo)
<foo bar="baz"/> instance of element(foo)
<foo bar="baz"/>/@bar instance of attribute()
<foo bar="baz"/>/@bar instance of attribute(bar)
fn:doc("recipes.xml")//rcp:ingredient instance of element()+
fn:doc("recipes.xml")//rcp:ingredient
Riccardo Torlone: Basi di Dati 2 40
instance of element(rcp:ingredient)+
![Page 41: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/41.jpg)
An Untyped Functiondeclare function local:grade($g) {
if ($g="A") then 4.0 else if ($g="A-") then 3.7if ($g A ) then 4.0 else if ($g A ) then 3.7
else if ($g="B+") then 3.3 else if ($g="B") then 3.0
else if ($g="B-") then 2.7 else if ($g="C+") then 2.3
l if ($ " ") h 2 0 l if ($ " ") h 1 7else if ($g="C") then 2.0 else if ($g="C-") then 1.7
else if ($g="D+") then 1.3 else if ($g="D") then 1.0
else if ($g="D-") then 0.7 else 0
};
Riccardo Torlone: Basi di Dati 2 41
![Page 42: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/42.jpg)
The Default Typing of a Functiondeclare function local:grade($g as item()*) as item()* {
if ($g="A") then 4.0 else if ($g="A-") then 3.7if ($g A ) then 4.0 else if ($g A ) then 3.7
else if ($g="B+") then 3.3 else if ($g="B") then 3.0
else if ($g="B-") then 2.7 else if ($g="C+") then 2.3
l if ($ " ") h 2 0 l if ($ " ") h 1 7else if ($g="C") then 2.0 else if ($g="C-") then 1.7
else if ($g="D+") then 1.3 else if ($g="D") then 1.0
else if ($g="D-") then 0.7 else 0
};
Riccardo Torlone: Basi di Dati 2 42
![Page 43: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/43.jpg)
Precisely Typed Functions
declare function local:grade($g as xs:string) as xs:decimal {
if ($g="A") then 4 0 else if ($g="A-") then 3 7if ($g= A ) then 4.0 else if ($g= A- ) then 3.7
else if ($g="B+") then 3.3 else if ($g="B") then 3.0
else if ($g="B-") then 2.7 else if ($g="C+") then 2.3
else if ($g="C") then 2.0 else if ($g="C-") then 1.7
else if ($g="D+") then 1.3 else if ($g="D") then 1.0
else if ($g="D-") then 0.7 else 0else if ($g D ) then 0.7 else 0
};
declare function local:grades($s as element(students))
as attribute(grade)* {
$s/student/results/result/@grade
};
Riccardo Torlone: Basi di Dati 2 43
![Page 44: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/44.jpg)
Runtime Type Checks Type annotations are checked during runtime A runtime type error occurs when: A runtime type error occurs when:an actual argument value does not match the
d l d tdeclared typea function result value does not match the
declared typea valued assigned to a variable does not match g
the declared type
Riccardo Torlone: Basi di Dati 2 44
![Page 45: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/45.jpg)
Built-In Functions Have Signaturesfn:contains($x as xs:string?, $y as xs:string?)
as xs:booleanas xs:boolean
op:union($x as node()*, $y as node()*) as node()*
Riccardo Torlone: Basi di Dati 2 45
![Page 46: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/46.jpg)
XQueryXfor $t in fn:doc("recipes.xml")/rcp:collection/rcp:recipe/rcp:titlereturn $t
<xqx:module
xmlns:xqx="http://www.w3.org/2003/12/XQueryX"q p // g/ / / Q y
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/2003/12/XQueryX xqueryx.xsd">
<xqx:mainModule>
<xqx:queryBody>
<xqx:stepExpr><xqx:xpathAxis>child</xqx:xpathAxis><xqx:elementTest><xqx:nodeName>
QN ll ti / QNxqx:nodeName> <xqx:queryBody>
<xqx:expr xsi:type="xqx:flwrExpr">
<xqx:forClause>
<xqx:forClauseItem>
<xqx:typedVariableBinding>
xqx:varName t /xqx:varName
<xqx:QName>rcp:collection</xqx:QName></xqx:nodeName>
</xqx:elementTest></xqx:stepExpr><xqx:stepExpr><xqx:xpathAxis>child</xqx:xpathAxis>
<xqx:QName>rcp:title</xqx:QName></xqx:nodeName>
</xqx:elementTest></xqx:stepExpr>
</xqx:expr></xqx:forExpr><xqx:varName>t</xqx:varName>
</xqx:typedVariableBinding>
<xqx:forExpr>
<xqx:expr xsi:type="xqx:pathExpr">
<xqx:expr xsi:type="xqx:functionCallExpr">
q p q p<xqx:elementTest><xqx:nodeName><xqx:QName>rcp:recipe</xqx:QName>
</xqx:nodeName></xqx:elementTest>
</xqx:stepExpr>
</xqx:forExpr></xqx:forClauseItem>
</xqx:forClause><xqx:returnClause><xqx:expr xsi:type="xqx:variable"><xqx:name>t</xqx:name>/ <xqx:functionName>doc</xqx:functionName>
<xqx:parameters>
<xqx:expr xsi:type="xqx:stringConstantExpr">
<xqx:value>recipes.xml</xqx:value>
</xqx:expr>
</xqx:stepExpr><xqx:stepExpr><xqx:xpathAxis>child</xqx:xpathAxis>
</xqx:expr></xqx:returnClause>
</xqx:expr></xqx:elementContent>
</xqx:expr></xqx:queryBody>
Riccardo Torlone: Basi di Dati 2 46
/ q p
</xqx:parameters>
q q y y</xqx:mainModule>
</xqx:module>
![Page 47: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/47.jpg)
XML Databases How can XML and databases be merged?
Several different approaches:XML-Enabled DBMS
extract XML views of relationsextract XML views of relationsuse XQuery or SQL/XML to generate XML
h d XML i t l ti l d t b shred XML into relational databasesNative XML DBMS
store and manage XML in a native format
Riccardo Torlone: Basi di Dati 2 47
![Page 48: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/48.jpg)
The Student Database Again
Riccardo Torlone: Basi di Dati 2 48
![Page 49: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/49.jpg)
Automatic XML Views (1/2)<Students>
<record id="100026" name="Joe Average" age="21"/>
<record id="100078" name="Jack Doe" age="18"/>
</Students><Students>
<record>
<id>100026</id>
<name>Joe Average</name><name>Joe Average</name>
<age>21</age>
</record>
d<record>
<id>100078</id>
<name>Jack Doe</name>/
<age>18</age>
</record>
</Students>
Riccardo Torlone: Basi di Dati 2 49
</Students>
![Page 50: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/50.jpg)
Programmable Views in SQL/XMLxmlelement(name, "Students",
select xmlelement(name,select xmlelement(name,
"record",
xmlattributes(s.id, s.name, s.age))
f d from Students as s
)
xmlelement(name, "Students",
select xmlelement(nameselect xmlelement(name,
"record",
xmlforest(s.id, s.name, s.age))
from Students as s
)
Riccardo Torlone: Basi di Dati 2 50
![Page 51: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/51.jpg)
XML Shredding Each element type is represented by a relation Each element node is assigned a unique key in Each element node is assigned a unique key in
document order Each element node contains the key of its
parent The possible attributes are represented as
fields where absent attributes have the nullfields, where absent attributes have the null valueC t t i ti f i l h t d t Contents consisting of a single character data node is inlined as a field
Riccardo Torlone: Basi di Dati 2 51
![Page 52: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/52.jpg)
From XQuery to SQL Any XML document can be faithfully
representedrepresented This takes advantage of the existing database
i l t tiimplementation Queries must now be phrased in ordinary SQL
rather than XQuery But an automatic translation is possible But an automatic translation is possible
//rcp:ingredient[@name="butter"]/@amount
select ingredient.amount
from ingredient
Riccardo Torlone: Basi di Dati 2 52
where ingredient.name="butter"
![Page 53: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/53.jpg)
Alternative approach XML data is directly stored in a special nested
formatformat No standards: the format is proprietary XSLT and XQuery are used to manage the
database
Riccardo Torlone: Basi di Dati 2 53
![Page 54: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/54.jpg)
Full-text searching
declare namespace rcp = "http://www.uniroma3.it/recipes";
for $r in fn:doc(Recipes xml”)//rcp:recipefor $r in fn:doc(Recipes.xml )//rcp:recipe
where $r//rcp:preparation ftcontains
(“chop” with stemming
with default tesaurus ) &&
(“onion” || “onions”)
distance at most 5 wordsdistance at most 5 words
case insensitive
return $r
Riccardo Torlone: Basi di Dati 2 54
![Page 55: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/55.jpg)
Summary
XML trees generalize relational tables XQuery similarly generalizes SQL
XQuery and XSLT have roughly the same iexpressive power
But they are suited for different application ydomains: data-centric vs. document-centric
Riccardo Torlone: Basi di Dati 2 55
![Page 56: Prof. Riccardo Torlone Università Roma TreUniversità Roma Tretorlone/bd2/CBD-6.pdf · XQuery Design Requirements Must have at least one XML syntax and at least one humanone human-readable](https://reader036.fdocuments.in/reader036/viewer/2022070704/5e8c28e3c98289453a14f93b/html5/thumbnails/56.jpg)
Essential Online Resources
http://www.w3.org/TR/xquery/ http://www.galaxquery.org/ http://www w3 org/XML/Query/ http://www.w3.org/XML/Query/
Riccardo Torlone: Basi di Dati 2 56