Ü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