• Aucun résultat trouvé

Updating XML with XQuery Web Data Management and Distribution Serge Abiteboul Philippe Rigaux Marie-Christine Rousset Pierre Senellart

N/A
N/A
Protected

Academic year: 2022

Partager "Updating XML with XQuery Web Data Management and Distribution Serge Abiteboul Philippe Rigaux Marie-Christine Rousset Pierre Senellart"

Copied!
21
0
0

Texte intégral

(1)

Updating XML with XQuery

Web Data Management and Distribution

Serge Abiteboul Philippe Rigaux Marie-Christine Rousset Pierre Senellart

http://gemo.futurs.inria.fr/wdmd

January 18, 2010

(2)

Why XQuery Update

XQuery is a read-only language: it canreturn (compute)an instance of the XQuery Data Model, but it cannot modifyan existing instance.

SQL parallel:

select... from... where...

without

insert into table... update table...

Applications require reading andupdating XML data.

XQuery Update Facility: a working draft, not yet a specification http://www.w3.org/TR/xquery-update-10/

(3)

Principles

Requirements for the XQuery Update language

Expressive power:

Insert Delete

Update

Copy with new identity Extension of XQuery itself:

Simplifies understanding and learning the language Difficulty to introduce side effects...

Well-defined semantics Conciseness

Amenable to efficient implementation...

(4)

XQuery Update concepts

All XQuery expressions can be classified into:

Updating expressions Non-updating expressions

XQuery Update introduces five new kind of expressions:

insert,delete,replace,rename: updating expressions transform: non-updating expression

XQuery Update specifies:

how all XQuery expressions are classified into updating and non-updating

places where each type of expression can appear syntax and semantics of each new expression

(5)

Principles

XQuery Update processing model

The evaluation of an expression produces:

an instance of the XQuery Data Model and

apending update list: set of update primitives, i.e. node stat changes that have to be applied.

In the current specification, one of the two has to be empty. This may change in the future.

(The evaluation of a simple XQuery produces an instance of the XQuery Data Model.)

Each update primitive has a target node.

Update primitives are checked for conflicts, and if no conflict appears, they are applied.

(6)

Insert expressions

Insert is an updating expression.

General form:

insert (constructor|({expr})) (as (first|last))? into (after|before) expr

The first expression is called the source, and the second the target.

The source and target expressions must not be updating.

insert < year >2005 </ year >

after doc (" bib . xml ")/ books / book [1]/ p u b l i s h e d insert $ a r t i c l e/ author

as last into doc (" bib . xml ")/ books / book [3]

(7)

XQuery updates

Insert expressions

The pending update list is obtained as follows:

evaluate the update target (which are the nodes that should get new children)

for each such node, add to thepul the corresponding add-child operation

insert { $new - police - report } as last

into doc (" i n s u r a n c e. xml ")// p o l i c i e s/ policy [ id = $pid ] / driver [ l i c e n c e= $ l i c e n c e ]/ a c c i d e n t[ date = $ d a t e a c c]

/ police - r e p o r t s

locate the proper police-reportselement

for each element in$new-police-report, add an add-last-child operation to the pul

(8)

Delete expressions

Delete is an updating expressions. Its produces a non-empty pending update list.

General form:

delete expr

delete doc (" bib . xml")/ books / book [1]/ author [last()]

delete / email / m e s s a g e[ fn : c u r r e n t D a t e () - date >

xdt : d a y T i m e D u r a t i o n ( P365D )]

(9)

XQuery updates

Replace expressions

Replace is an updating expression. It produces a non-empty pending update list.

General form:

replace expr withexpression

r e p l a c e doc (" bib . xml ")/ books / book [1]/ p u b l i s h e r with doc (" bib . xml ")/ books / book [2]/ p u b l i s h e r

r e p l a c e value of doc (" bib . xml ")/ books / book [1]/ price with doc (" bib . xml ")/ books / book [1]/ price *1.1

(10)

Rename expression

Rename is an updating expression.

General form:

rename exprto expr

rename doc (" bib . xml")/ books / book [1]/ author [1]

to main - author

rename doc (" bib . xml")/ books / book [1]/ author [1]

to $ n e w n a m e

(11)

XQuery updates

Transform expressions (1)

Transform is a non-updating expression.

General form:

copy $varName:=expr (, $varName :=expr )*

modify exprreturn expr

Example: return all managers, omiting their salaries and replacing them with an attribute xsi:nil.

Remark

It can be done with XQuery. But it’s painful!

Transform returns a modified copy, without impacting the original database (it is a non-updating expression).

(12)

Transform expressions (2)

Document

<employees>

<employee mgr="true" dept="Toys">

<name>Smith</name>

<salary>100000</salary>

</employee>

<employee dept="Toys">

<name>Jones</name>

<salary>60000</salary>

</employee>

<employee mgr="true" dept="Shoes">

<name>Roberts</name>

<salary>150000</salary>

</employee>

</employees>

Desired result

<employee mgr="true" dept="Toys">

<name>Smith</name>

<salary xsi:nil="true"/>

</employee>

<employee mgr="true" dept="Shoes">

<name>Roberts</name>

<salary xsi:nil="true"/>

</employee>

(13)

XQuery updates

Transform expressions (3)

Return all managers, omiting their salaries and replacing them with an attributexsi:nil.

for $e in doc (" e m p l o y e e s. xml ")// e m p l o y e e where $e / @ m a n a g e r = true()

return

copy $emp := $e modify (

r e p l a c e value of node $emp / salary with " " , insert nodes (a t t r i b u t e xsi : nil {" true "})

into $emp / salary )

return $em

(14)

Programming with XQuery Update

Address book synchronization:

One archive version and two copies

c1=a and c26=a propagate c2 to aand c1 c16=a,c26=a

If possible, merge differences and propagate them toa, then toc1, c2

Otherwise, raise an error.

Agenda entries are of the form:

< entry >

< name > Benjamin </ name >

< contact > b e n j a m i n @ i n r i a . fr </ contact >

</ entry >

< entry >

< name > Anthony </ name >

(15)

More complex example

Programming with XQuery Update

for $a in doc (" a r c h i v e. xml")// entry ,

$v1 in doc (" copy1 . xml ")/v e r s i o n/ entry ,

$v2 in doc (" copy2 . xml ")/v e r s i o n/ entry where $a / name = $v1 / name and $v1 / name = $v2 / name return

if ( $a / c o n t a c t= $v1 / c o n t a c t and $v1 / c o n t a c t= $v2 / c o n t a c t) then ()

else

if ( $v1 / c o n t a c t= $v2 / c o n t a c t) then

r e p l a c e value of node $a / c o n t a c t with $v1 / c o n t a c t else

if ( $a / c o n t a c t= $v1 / c o n t a c t) then (

r e p l a c e value of $a / c o n t a c t with $v2 / contact , r e p l a c e value of $v1 / c o n t a c t

with $v2 / c o n t a c t ...

(16)

Programming with XQueryUpdate

...

if ( $a / c o n t a c t = $v1 / c o n t a c t) then ...

else

if ( $a / c o n t a c t = $v2 / c o n t a c t) then ( r e p l a c e value of $a / c o n t a c t

with $v1 / contact , r e p l a c e value of $v2 / c o n t a c t

with $v1 / c o n t a c t ) else ( insert node

< fail > < arch >{ $a } </ arch >

<v1 >{ $v1 } </ v1 > <v2 >{ $v2 } </ v2 >

</ fail >

into doc (" log . xml ")/ log ) , r e p l a c e value of node doc (" a r c h i v e. xml ")

(17)

Perspective on XQuery dialects

XQuery - SQL comparison

Function

Query (read-only) Update

Full-text Scripting

Relational SQL select SQL update SQL MMS PL/SQL

XML XQuery

XQuery Update XQuery Full-Text

XQuery Scripting Extension XQuery update is not a programming language. Missing:

Control over thescope of snapshots, i.e. when do my updates become visible to another query? XQuery Update: after the current query has finished executing.

Control over atomicity, i.e. which expressions must be executed atomically?

The possibility toboth return a result and have side effects. XQuery Update: one or the other is empty.

(18)

An XQuery scripting language: XQuery-P

D.Chamberlin, M.Carey, D.Florescu, D.Kossman: "Programming with XQuery", XIME-P 2006

1 Define asequential execution mode: the statements must be evaluated in order, and each statement sees the side effect of the previous one

2 Define blocks, which are units of code to be executed sequentially.

New variables can be defined inside a block. The returned result is that of the last expression.

3 Introduceassignments to bind variables to new values.

for $item in / c a t a l o g/ item [ price < 100]

return

{ r e p l a c e value of $item / price with $item / price * 1.1;

$item }

(19)

Perspective on XQuery dialects

An XQuery scripting language: XQuery-P

Forces to define evaluation order on an XQuery expression:

for,let,where,order by executed in the order of their appearance;

then, return

ifevaluated first, then evaluate thenor else

,: evaluate from left to right, apply all the updates after each item function call: evaluate the arguments before the body

Specifying evaluation order is a big departure from traditional query language style. (Which of select,from and whereis evaluated first?)

(20)

Programming with XQuery-P

d e c l a r e u p d a t i n g f u n c t i o n local : t r a n s f e r

( $from - acctno as xs :string, $to - acctno as xs :string,

$ a m o u n t as xs : d e c i m a l) as xs : i n t e g e r { d e c l a r e $from - acct as e l e m e n t( a c c o u n t)

:= / bank / a c c o u n t[ acctno eq $from - acctno ] ,

$to - acct as e l e m e n t( a c c o u n t) := / bank / a c c o u n t[ acctno eq $to - acctno ];

if ( $from - acct / b a l a n c e > $ a m o u n t) then atomic {

do r e p l a c e value of $from - acct / b a l a n c e with $from - acct / b a l a n c e - $ a m o u n t;

do r e p l a c e value of $to - acct / b a l a n c e with $to - acct / b a l a n c e + $ a m o u n t;

0 } (: end of atomic region :) else -1

(21)

Perspective on XQuery dialects

Implementations

XQuery Update:

eXist MonetDB

XQuery-P and similar proposals: preliminary prototypes

Références

Documents relatifs

The serialized form is a textual, linear representation of the tree; it complies to a (sometimes complicated) syntax;.. There exist an object-oriented model for the tree form:

It provides a hierarchical representation, where each node is an object instance of a DOM class.. Normalized by the W3C

The expression “textual value of an Element N” denotes the concatenation of all the Text node values which are descendant of N, taken in the document order.. Gemo, Lamsade, LIG,

Calls with xsl:apply-templates : find and instantiate a template for each node selected by the XPath expression select. Template call substitution: any call to other templates

Multiple document input, and multiple document output document function, &lt;xsl:document&gt; element (XSLT 2.0, but widely implemented in XSLT 1.0 as an extension

a native XML atomic type, which can be queried in XQuery style a set of XML publishing functions: extracting XML elements out of relational data by querying. mapping rules:

Single keyword query: just consult the index and return the documents in index order. Boolean

Gemo, Lamsade, LIG, Télécom (WDMD) Distributed Indexing and Computing February 2, 2010 1 / 21...