Updates for XQuery Übersicht Übersicht INSERT

Werbung
Übersicht
Updates for XQuery
Web-Informationssysteme
Wintersemester 2002 / 2003
Donald Kossmann
•
•
•
•
Erste Version vom 15.10.2002
http://www.w3.org/TR/2002/WD-xupdate-20021015
Ziel: Syntax zur Modifikation von XML
Prinzip: Erweiterung von Xquery
–
–
–
–
Statische und strenge Typisierung
Deklarative Programmierung
Xquery Datenmodell konform, erhält die Identität von Knoten
...
• Organisation: Interest Group innerhalb Xquery WG
– Don Chamberlin (IBM), Daniela Florescu (XQRL),
Patrick Lehti (IPSI), Jim Melton (Oracle), Jonathan Robie (DD)
Michael Rys (Microsoft), Jerome Simeon (Lucent)
Übersicht
• Insert
– Einfügen neuer XML Instanzen
• Delete
– Löschen von XML Instanzen
• Replace
– Ersetzen von XML Instanzen
• Empty Update
– No operation
• FLWUpdate
– Komplexes Update: bulk update (Schleife)
• Conditional Update
– Komplexes Update: bedingtes update (Verzweigung)
INSERT Variante 1
• Füge Buch in Bibliothek ein (ans Ende)
insert <book> <title>Die wilde Wutz</title> </book>
into document(„www.uni-bib.de“)//bib
• Füge Buch in Bibliothek ein (am Anfang)
insert <book> <title>Die wilde Wutz</title> </book>
as first into document(„www.uni-bib.de“)//bib
• Füge Attribut und Element in Kaspar Hauser ein
insert (attribute age { 13 }, <parents xsi:nil = „true“/>)
into document(„ewm.de“)//person[@name = „KD“]
INSERT - Variante 1
• Einfügen in ein Dokument oder Element
insert UpdateContent into TargetNode
• UpdateContent: Beliebige Sequenz (Knoten, Werte)
• TargetNode: Genau ein Dokument oder Element
– Ansonsten ERROR
• Spezifikation, ob am Anfang oder Ende eingefügt
– as last: Content sind letzte Kinder von Target (default)
– as first: Content sind ersten Kinder von Target
• Knoten im Content erhalten neue Identität
• Whitespace, Textkonv. von Xquery ElementConstr.
INSERT - Variante 2
• Einfügen an einer bestimmten Stelle in einem Dokument
insert UpdateContent (after | before) TargetNode
• UpdateContent: Attribute nicht erlaubt!
• TargetNode: Genau ein Element, Comment oder PI.
– Ansonsten ERROR
• Spezifikation, ob vor oder nach Target eingefügt wird
– before: Content wird vor Target eingefügt (dasselbe Parent)
– after: Content wird nach dem Target eingefügt (dasselbe
Parent)
• Knoten im Content erhalten neue Identität
• Whitespace, Textkonv. von Xquery ElementConstr.
1
INSERT - Offene Fragen
Insert - Variante 2
• Insert in Schema-validated Dokumenten?
• Füge Autor in einen Artikel ein
insert <author>Florescu</author>
– Wann und wie findet Typprüfung statt?
– Welchen Typ hat das neue Dokument?
• Insert (V2): TargetNode hat keinen Parent?
before //article[title = „XL“]/author[. = „Grünhagen“]
– Ist das ein Fehler?
• TargetNode ist leer?
– No op anstatt Fehler?
DELETE
• Löscht Knoten aus einem Dokument
delete TargetNodes
• TargetNodes: Beliebige Folge von Knoten
• Lösche alle Paper über XML.
Delete //article[header/keyword = „XML“]
• (Knoten werden durch Ihre Identität angegeben.)
• Lösche alle 2en aus (1, 1, 2, 1, 2, 3) nicht möglich
(Hierzu: Replace und Cast und reguläre Ausdrücke von Xquery.)
EMPTY UPDATE
• Syntax: ()
• Semantik: tue nichts
• Zweck: Baustein für komplexe Updates
REPLACE
• Variante 1: Ersetze einen Knoten
replace TargetNode with UpdateContent
• Variante 2: Ersetze den Inhalt eines Knotens
replace value of TargetNode with UpdateContent
•
•
•
•
•
TargetNode: Genau ein Knoten (mit Id)
UpdateContent: Beliebige Sequenz.
Whitespace und Textkonventionen wie gehabt.
Viele weitere subtile Einschränkungen!!!
Typ- und Integritätsprüfung (noch) offen.
Bulk Updates: FLWUpdate
• Bisher konnten INSERT und REPLACE nur auf
einzelne Knoten wirken.
• Idee: Passe FLWR Syntax von Xquery an
update (ForClause | LetClause)+ WhereClause?
SimpleUpdate
– SimpleUpdate: insert, delete, replace oder empty
– So etwas Ähnliches haben wir auch in XL gemacht
• Semantik: Führe SimpleUpdate für jeden Knoten
durch, der sich als Ergebnis von FLW qualifiziert.
2
FLWUpdate - Beispiele
FLWUpdate - Offene Fragen
• „Müller“ heiratet „Lüdenscheid“.
update
for $n in //article/author/lastname
where $n/text() = „Müller“
replace value of $n with „Müller-Lüdenscheid“
• Führe eine 16 Prozent Mehrwertsteuer ein.
• Seiteneffekte vom Update zum FLW
– Halloween Problem von SQL
– Spekulation: 2-stufige Semantik wie bei SQL
• Reihenfolge des neuen Contents?
– Könnte in Kombination mit Halloween und //
tatsächlich problematisch werden
update
for $n in //book
insert attribute vat { $n/@price * 1.16 } into $n
Conditional Update
• Angelehnt an Xquery if then else Ausdruck
update
if (condition) then
SimpleUpdate
else
SimpleUpdate
• Ohne „else“ durch SimpleUpdate darstellbar
• (N.B. XL hat auch ein „if then else“ Statement)
Zusammenfassung
• Basiert auf Identität von Knoten im Datenmodell
• Updates auf „Werten“ nicht möglich.
• Vermutlich mächtig genug für typische XML
Anwendungen.
• Implementierung? (Werden wir bald wissen.)
• Kompatibilität mit XL? (Werden wir bald wissen.)
• Nicht ausgereift. Viele offene Fragen. Insbesondere
zur Typisierung.
• Kein Transaktionskonzept! (-> XML Protocol)
• Die Arbeitsgruppe freut sich über Kommentare.
Übungsaufgaben
• Löschen Sie alle 2en aus dem folgenden
Dokument: <a>1 2 3 2 1</a>
3
Herunterladen