• Nebyly nalezeny žádné výsledky

MIE-PDB.16: Advanced Database Systems

N/A
N/A
Protected

Academic year: 2022

Podíl "MIE-PDB.16: Advanced Database Systems"

Copied!
53
0
0

Načítání.... (zobrazit plný text nyní)

Fulltext

(1)

MIE-PDB.16: Advanced Database Systems

h p://www.ksi.mff.cuni.cz/~svoboda/courses/201-MIE-PDB/

Lecture 5

XML Databases: XPath, XQuery

Mar n Svoboda

mar n.svoboda@fit.cvut.cz 20. 10. 2020

Charles University, Faculty of Mathema cs and Physics

Czech Technical University in Prague, Faculty of Informa on Technology

(2)

Lecture Outline

XQuery and XPath

• Data model

• Query expressions Paths

Comparisons Constructors FLWOR expressions Condi ons

Quan fiers

(3)

Introduc on

XPath = XML Path Language

Naviga on in an XML tree,

selec on of nodes by a variety of criteria

• Versions: 1.0 (1999), 2.0 (2010), 3.0 (2014), 3.1 (March 2017)

• W3C recommenda on

h ps://www.w3.org/TR/xpath-31/

XQuery = XML Query Language

Complex func onal query language

• Contains XPath

• Versions: 1.0 (2007), 3.0 (2014), 3.1 (March 2017)

• W3C recommenda on

h ps://www.w3.org/TR/xquery-31/

MIE-PDB.16: Advanced Database Systems|Lecture 5: XML Databases: XPath, XQuery|20. 10. 2020 3

(4)

Sample Data

<?xml version="1.1" encoding="UTF-8"?>

<movies>

<movie year="2006" rating="76" director="Jan Svěrák">

<title>Vratné lahve</title>

<actor>Zdeněk Svěrák</actor>

<actor>Jiří Macháček</actor>

</movie>

<movie year="2000" rating="84">

<title>Samotáři</title>

<actor>Jitka Schneiderová</actor>

<actor>Ivan Trojan</actor>

<actor>Jiří Macháček</actor>

</movie>

<movie year="2007" rating="53" director="Jan Hřebejk">

<title>Medvídek</title>

<actor>Jiří Macháček</actor>

<actor>Ivan Trojan</actor>

</movie>

</movies>

(5)

Sample Data

MIE-PDB.16: Advanced Database Systems|Lecture 5: XML Databases: XPath, XQuery|20. 10. 2020 5

(6)

Data Model

XDM = XQuery and XPath Data Model

XML tree consis ng of nodes of different kinds Document, element, a ribute, text, …

Document order / reverse document order The order in which nodes appear in the XML file

– I.e. nodes are numbered using a pre-order depth-first traversal

Query result

• Each query expression is evaluated to a sequence

(7)

Data Model

Sequence = ordered collec on of nodes and/or atomic values

• Can be empty E.g.: ()

• Automa cally fla ened

E.g.: (1, (), (2, 3), (4)) (1, 2, 3, 4)

• Standalone items are treated as singleton sequences E.g.: 1 (1)

• Can be mixed

But usually just nodes, or just atomic values

Duplicate items are allowed More precisely…

– Duplicate nodes are removed

– Duplicate atomic values are preserved

MIE-PDB.16: Advanced Database Systems|Lecture 5: XML Databases: XPath, XQuery|20. 10. 2020 7

(8)

Path Expressions

Path expression

• Describes naviga on within an XML tree

• Consists of individual naviga onal steps

//

step step //

step step //

Absolute paths = path expressions star ng with / Naviga on starts at the document node

Rela ve paths

Naviga on starts at an explicitly specified node / nodes

(9)

Path Expressions

Examples

Absolute paths

/ /movies /movies/movie

/movies/movie/title/text() /movies/movie/@year

Rela ve paths

actor/text()

@director

MIE-PDB.16: Advanced Database Systems|Lecture 5: XML Databases: XPath, XQuery|20. 10. 2020 9

(10)

Path Expressions

Evalua on of path expressions

• Let P be a path expression

• Let C be an ini al context set

If P is absolute, then C contains just the document node Otherwise (i.e. P is rela ve) C is given by the user or context

• If P does not contain any step Then C is the final result

• Otherwise (i.e when P contains at least one step) Let S be the first step, P the remaining steps (if any) Let C = {}

For each node u C :

evaluate S with respect to u and add the result to C

Evaluate P with respect to C

(11)

Path Expressions

Step

• Each step consists of (up to) 3 components

axis

axis :::: node testnode test

predicate predicate

Axis

Specifies the rela on of nodes to be selected for a given node u

Node test

Basic condi on the selected nodes must further sa sfy

Predicates

Advanced condi ons the selected nodes must further sa sfy

MIE-PDB.16: Advanced Database Systems|Lecture 5: XML Databases: XPath, XQuery|20. 10. 2020 11

(12)

Path Expressions: Axes

Axis

• Specifies the rela on of nodes to be selected for a given node Forward axes

• self, child, descendant(-or-self), following(-sibling)

• The order of the nodes corresponds to the document order Reverse axes

• parent, ancestor(-or-self), preceding(-sibling)

• The order of the nodes is reversed A ribute axis

• attribute – the only axis that selects a ributes

(13)

Path Expressions: Axes

MIE-PDB.16: Advanced Database Systems|Lecture 5: XML Databases: XPath, XQuery|20. 10. 2020 13

(14)

Path Expressions: Axes

Available axes

self self child child descendant descendant descendant-or-self descendant-or-self following-sibling following-sibling following following parent parent ancestor ancestor ancestor-or-self ancestor-or-self preceding-sibling preceding-sibling preceding preceding attribute attribute

(15)

Path Expressions

Examples

Axes

/child::movies

/child::movies/child::movie/child::title/child::text() /child::movies/child::movie/attribute::year

/descendant::movie/child::title

/descendant::movie/child::title/following-sibling::actor

MIE-PDB.16: Advanced Database Systems|Lecture 5: XML Databases: XPath, XQuery|20. 10. 2020 15

(16)

Path Expressions: Node Tests

Node test

• Filters the nodes selected by the axis using basic tests

name name

**

node() node() text() text()

Available node tests

name – all elements / a ributes with a given name

* – all elements / a ributes

node() – all nodes (i.e. no filtering takes place)

text() – all text nodes

(17)

Path Expressions

Examples

Node tests

/movies /child::movies

/descendant::movie/title/text() /movies/*

/movies/movie/attribute::*

MIE-PDB.16: Advanced Database Systems|Lecture 5: XML Databases: XPath, XQuery|20. 10. 2020 17

(18)

Path Expressions: Predicates

Predicate

• Further filters the nodes based on advanced condi ons

[[ expressionexpression ]]

• When more predicates are provided, they must all be sa sfied Commonly used condi ons

Comparisons

Path expressions

Treated as true when evaluated to a non-empty sequence

Posi on tests

Based on the order as defined by the axis, star ng with 1

Logical expressions: and, or, not connec ves

(19)

Path Expressions

Examples

Predicates

/movies/movie[actor]

/movies/movie[actor]/title/text()

/descendant::movie[count(actor) >= 3]/title /descendant::movie[@year > 2000 and @director]

/descendant::movie[@director][@year > 2000]

/descendant::movie/actor[position() = last()]

MIE-PDB.16: Advanced Database Systems|Lecture 5: XML Databases: XPath, XQuery|20. 10. 2020 19

(20)

Path Expressions: Abbrevia ons

Mul ple (mostly syntax) abbrevia ons are provided

• …/… (i.e. no axis is specified) …/child::…

• …/@… …/attribute::…

• …/.… …/self::node()…

• …/..… …/parent::node()…

• …//… …/descendant-or-self::node()/…

• …/…[number]… …/…[position() = number]…

(21)

Path Expressions

Examples

Abbrevia ons

/movie/title

/child::movie/child::title /movie/@year

/child::movie/attribute::year /movie/actor[2]

/child::movie/child::actor[position() = 2]

//actor

/descendant-or-self::node()/child::actor

MIE-PDB.16: Advanced Database Systems|Lecture 5: XML Databases: XPath, XQuery|20. 10. 2020 21

(22)

Path Expressions: Conclusion

Path expressions

• Absolute / rela ve Step components

• Axis

• Node test

• Predicates Path expression result

• Evaluated from le to right, step by step

Result of the en re path expression is the result of its last step

• Nodes are ordered in the document order

Duplicate nodes are removed (based on the iden ty of nodes)

(23)

Comparison Expressions

Comparisons

General comparisons

Two sequences of values are expected to be compared

=, !=, <, <=, >=, >

E.g.: (0,1) = (1,2)

Value comparisons

Two standalone values (singleton sequences) are compared eq, ne, lt, le, ge, gt

E.g.: 1 lt 3

Node comparisons

is – tests iden ty of nodes

<<, >> – test posi ons of nodes (preceding, following) Similar behavior as in case of value comparisons

MIE-PDB.16: Advanced Database Systems|Lecture 5: XML Databases: XPath, XQuery|20. 10. 2020 23

(24)

Comparison Expressions

General comparison (existen ally quan fied comparisons)

Both the operands can be evaluated to sequences of values of any length

• The result is true if and only if there exists at least one pair of individual values sa sfying the given rela onship

value expression value expression ==

!=

!=

<

<

<=

<=

>=

>=

>

>

value expression value expression

(25)

Comparison Expressions

General comparison: examples

• J (1) < (2) K = true

• J 1 < (2) K = true

• J (1) < (1,2) K = true

• J (1) < () K = false

• J (0,1) = (1,2) K = true

• J (0,1) != (1,2) K = true

MIE-PDB.16: Advanced Database Systems|Lecture 5: XML Databases: XPath, XQuery|20. 10. 2020 25

(26)

Comparison Expressions

Value comparison

Both the operands are expected to be evaluated to singleton sequences

Then these values are mutually compared in a standard way

• Empty sequence () is returned…

when at least one operand is evaluated to an empty sequence

• Type error is raised…

when at least one operand is evaluated to a longer sequence

value expression value expression eqeq

ne ne lt lt le le gt gt ge ge

value expression value expression

(27)

Comparison Expressions

Value comparison: examples

• J (1) le (2) K = true

• J 1 le (2) K = true

• J (1) le () K = ()

• J (1) le (1,2) K error

• J () le (1,2) K = ()

MIE-PDB.16: Advanced Database Systems|Lecture 5: XML Databases: XPath, XQuery|20. 10. 2020 27

(28)

Comparison Expressions

Value and general comparisons

• Atomiza on of values – takes place automa cally Atomic values are preserved untouched

Nodes are transformed to atomic values

• In par cular…

Element node is transformed to a string with concatenated text values it contains (even indirectly)

– E.g.: <movie year="2006">Vratné lahve</movie>

is atomized to a string Vratné lahve – Note that attribute values are not included!

A ribute node is transformed to its value

Text node is transformed to its value

(29)

Comparison Expressions

Value and general comparisons: examples

• J <a>5</a> eq <b>5</b> K = true

• J <a>12</a> = <a><b>1</b>2</a> K = true

• J <a t="1">5</a> lt 3 K = false

MIE-PDB.16: Advanced Database Systems|Lecture 5: XML Databases: XPath, XQuery|20. 10. 2020 29

(30)

Expressions

XQuery expressions

Path expressions (tradi onal XPath) Selec on of nodes of an XML tree

FLWOR expressions

for … let … where … order by … return …

Condi onal expressions if … then … else …

Quan fied expressions

some|every … satisfies …

(31)

Expressions

XQuery expressions

Boolean expressions

and, or, not logical connec ves

Primary expressions

Literals, variable references, func on calls, constructors, …

• …

path expression path expression

FLWOR expression FLWOR expression conditional expression conditional expression switch expression switch expression quantified expression quantified expression boolean expression boolean expression primary expression primary expression ...

...

MIE-PDB.16: Advanced Database Systems|Lecture 5: XML Databases: XPath, XQuery|20. 10. 2020 31

(32)

Constructors

Constructors

• Allow us to create new nodes for elements, a ributes, …

Direct constructor

Well-formed XML fragment with nested query expressions – E.g.: <movies>{ count(//movie) }</movies>

Names of elements and a ributes must be fixed, their content can be dynamic

Computed constructor Special syntax

– E.g.: element movies { count(//movie) }

Both names and content can be dynamic

(33)

Constructors

Direct constructor

<

< namename

attribute constructor attribute constructor

// >>

<

< namename

attribute constructor attribute constructor

>

>

element content constructor

element content constructor << // namename >>

• Both a ribute value and element content may contain an arbitrary number of nested query expressions

Enclosed by curly braces {}

Escaping sequences: {{ and }}

MIE-PDB.16: Advanced Database Systems|Lecture 5: XML Databases: XPath, XQuery|20. 10. 2020 33

(34)

Constructors

Direct constructor

• A ribute

name

name == "" characterscharacters {{ expressionexpression }}

"

"

• Element content

characters characters direct constructor direct constructor

{{ expressionexpression }}

(35)

Constructors

Example: Direct Constructor

Create a summary of all movies

<movies>

<count>{ count(//movie) }</count>

{

for $m in //movie return

<movie year="{ data($m/@year) }">{ $m/title/text() }</movie>

}

</movies>

<movies>

<count>3</count>

<movie year="2006">Vratné lahve</movie>

<movie year="2000">Samotáři</movie>

<movie year="2007">Medvídek</movie>

</movies>

MIE-PDB.16: Advanced Database Systems|Lecture 5: XML Databases: XPath, XQuery|20. 10. 2020 35

(36)

Constructors

Computed constructor

element

element element nameelement name {{ expressionexpression }}

{{ expressionexpression ,,

}}

attribute

attribute attribute nameattribute name {{ expressionexpression }}

{{ expressionexpression }}

text

text {{ expressionexpression }}

(37)

Constructors

Example: Computed Constructor

Create a summary of all movies

element movies {

element count { count(//movie) }, for $m in //movie

return

element movie {

attribute year { data($m/@year) }, text { $m/title/text() }

} }

<movies>

<count>3</count>

<movie year="2006">Vratné lahve</movie>

<movie year="2000">Samotáři</movie>

<movie year="2007">Medvídek</movie>

</movies>

MIE-PDB.16: Advanced Database Systems|Lecture 5: XML Databases: XPath, XQuery|20. 10. 2020 37

(38)

FLWOR Expressions

FLWOR expression

• Versa le construct allowing for itera ons over sequences

for clause for clause let clause let clause

where clause

where clause order by clauseorder by clause return clausereturn clause

Clauses

• for – selec on of items to be iterated over

• let – bindings of auxiliary variables

• where – condi ons to be sa sfied (by a given item)

• order by – order in which the items are processed

• return – result to be constructed (for a given item)

(39)

FLWOR Expressions

Example

Find tles of movies with ra ng 75 and more

for $m in //movie let $r := $m/@rating where $r >= 75 order by $m/@year return $m/title/text() Samotáři

Vratné lahve

MIE-PDB.16: Advanced Database Systems|Lecture 5: XML Databases: XPath, XQuery|20. 10. 2020 39

(40)

FLWOR Clauses

For clause

• Specifies a sequence of values or nodes to be iterated over

• Mul ple sequences can be specified at once

Then the behavior is iden cal as when more single-variable for clauses would be provided

for

for $$ variable namevariable name inin expressionexpression ,,

Let clause

• Defines one or more auxiliary variable assignments

let

let $$ variable namevariable name :=:= expressionexpression ,,

(41)

FLWOR Clauses

Where clause

• Allows to describe complex filtering condi ons

• Items not sa sfying the condi ons are skipped

where

where expressionexpression

Order by clause

• Defines the order in which the items are processed

order by

order by expressionexpression

ascending ascending descending descending ,,

MIE-PDB.16: Advanced Database Systems|Lecture 5: XML Databases: XPath, XQuery|20. 10. 2020 41

(42)

FLWOR Clauses

Return clause

Defines how the result sequence is constructed

• Evaluated once for each suitable item

return

return expressionexpression

Various supported use cases

• Querying, joining, grouping, aggrega on, integra on,

transforma on, valida on, …

(43)

FLWOR Examples

Find tles of movies filmed in 2000 or later such that they have at most 3 actors and a ra ng above the overall average

let $r := avg(//movie/@rating) for $m in //movie[@rating >= $r]

let $a := count($m/actor)

where ($a <= 3) and ($m/@year >= 2000) order by $a ascending, $m/title descending return $m/title

<title>Vratné lahve</title>

<title>Samotáři</title>

MIE-PDB.16: Advanced Database Systems|Lecture 5: XML Databases: XPath, XQuery|20. 10. 2020 43

(44)

FLWOR Examples

Find movies in which each individual actor stared

for $a in distinct-values(//actor) return <actor name="{ $a }">

{

for $m in //movie[actor[text() = $a]]

return <movie>{ $m/title/text() }</movie>

}

</actor>

<actor name="Zdeněk Svěrák">

<movie>Vratné lahve</movie>

</actor>

<actor name="Jiří Macháček">

<movie>Vratné lahve</movie>

<movie>Samotáři</movie>

<movie>Medvídek</movie>

</actor>

...

(45)

FLWOR Examples

Construct an HTML table with data about movies

<table>

<tr><th>Title</th><th>Year</th><th>Actors</th></tr>

{

for $m in //movie return

<tr>

<td>{ $m/title/text() }</td>

<td>{ data($m/@year) }</td>

<td>{ count($m/actor) }</td>

</tr>

}

</table>

MIE-PDB.16: Advanced Database Systems|Lecture 5: XML Databases: XPath, XQuery|20. 10. 2020 45

(46)

FLWOR Examples

Construct an HTML table with data about movies

<table>

<tr><th>Title</th><th>Year</th><th>Actors</th></tr>

<tr><td>Vratné lahve</td><td>2006</td><td>2</td></tr>

<tr><td>Samotáři</td><td>2000</td><td>3</td></tr>

<tr><td>Medvídek</td><td>2007</td><td>2</td></tr>

</table>

(47)

Condi onal Expressions

Condi onal expression

if

if (( expressionexpression )) thenthen expressionexpression elseelse expressionexpression

• Note that the else branch is compulsory Empty sequence () can be returned if needed Example

if (count(//movie) > 0)

then <movies>{ string-join(//movie/title, ", ") }</movies>

else ()

<movies>Vratné lahve, Samotáři, Medvídek</movies>

MIE-PDB.16: Advanced Database Systems|Lecture 5: XML Databases: XPath, XQuery|20. 10. 2020 47

(48)

Quan fied Expressions

Quan fier

• Returns true if and only if…

in case of some at least one item in case of every all the items

• … of a given sequence/s sa sfy the provided condi on

some some every every

$

$ variable namevariable name inin expressionexpression ,,

satisfies

satisfies expressionexpression

(49)

Quan fied Expressions

Examples

Find tles of movies in which Ivan Trojan played

for $m in //movie where

some $a in $m/actor satisfies $a = "Ivan Trojan"

return $m/title/text() Samotáři

Medvídek

Find names of actors who played in all movies

for $a in distinct-values(//actor) where

every $m in //movie satisfies $m/actor[text() = $a]

return $a Jiří Macháček

MIE-PDB.16: Advanced Database Systems|Lecture 5: XML Databases: XPath, XQuery|20. 10. 2020 49

(50)

Primary Expressions

Primary expression

numeric literal numeric literal

"

" string literalstring literal ""

'' string literalstring literal ''

$

$ variable namevariable name function name function name ((

expression expression

,,

))

((

expression expression

,,

))

direct constructor direct constructor computed constructor computed constructor ...

...

(51)

Final Observa ons

XQuery

Keywords must always be in lowercase

• XQuery is a func onal query language

• Whenever expression is men oned in any diagram, expression of any kind can be used (without any limita ons)

MIE-PDB.16: Advanced Database Systems|Lecture 5: XML Databases: XPath, XQuery|20. 10. 2020 51

(52)
(53)

Lecture Conclusion

XPath expressions

• Absolute / rela ve paths

• Axes, node tests, predicates XQuery expressions

• Constructors: direct, computed

• FLWOR expressions

• Condi onal, quan fied, comparison, …

MIE-PDB.16: Advanced Database Systems|Lecture 5: XML Databases: XPath, XQuery|20. 10. 2020 53

Odkazy

Související dokumenty

Found: Ali at depth: 1 Found: Engin at depth: 1 Found: Burcu at depth: 1 Found: Can at depth: 1 Found: Demet at depth: 2 Found: Gul at depth: 2 Found: Fuat at depth: 2 Found: Hakan

 Used for deciding at each position: should the traversal continue, and/or should the node be included in the result.

Collection of related data pieces we wish to treat as a unit (with respect to data manipulation and data consistency).

If the decomposition is not limited, we can decompose the table into several single-column ones that surely are all in BCNF. Clearly, there is something wrong with such

Destination Plane Day Paris Boeing #1 Monday Paris Boeing #2 Tuesday Berlin Airbus #1 Monday. Destination

 FsImage – entire file system namespace + mapping of blocks to files + file system properties.  Stored in a file in NameNode’s local

Map: JavaScript implementation of the Map function Reduce: JavaScript implementation of the Reduce function

MIE‐PDB.16: Advanced Database Systems | Lecture 5: XML Databases: XPath, XQuery | 26...