Quilt: Eine XML Anfragesprache für heterogene Datenquellen Matthias Färber 15.01.2002 1 Ablauf: 1. Einleitung 2. Sprachkonzepte 3.Vergleich: Quilt und SQL für rel. DB 4. Ausblick, Diskussion 2 Einleitung Literatur: - Don Chamberlin(IBM, USA), Jonathan Robie(Software AG -USA), Daniela Florescu(INRIA - Frankreich) : Quilt an XML Query Language for heterogeneous Data Sources WebDB 2000 - Obige Autoren sind Mitglieder der XML-Query Working Group - http://www.w3.org/TR/xquery - http://www.almaden.ibm.com/cs/people/chamberlin/quilt.html 3 Einleitung Ursprung von Quilt: - WWW macht alle Arten von Informationen überall verfügbar - Um diese Information verarbeiten zu können benötigt man: Eine universelle Auszeichnungssprache (XML) Eine universelle Anfragesprache (Quilt) - Namensgebung von Quilt (Amerikanischer Flickenteppich): 4 Quilt (Flickenteppich) 5 Einleitung Ursprung von Quilt: - WWW macht alle Arten von Informationen überall verfügbar - Um diese Information verarbeiten zu können benötigt man: Eine universelle Auszeichnungssprache (XML) Eine universelle Anfragesprache (Quilt) - Namensgebung von Quilt (Amerikanischer Flickenteppich): 6 Einleitung Ursprung von Quilt: - WWW macht alle Arten von Informationen überall verfügbar - Um diese Information verarbeiten zu können benötigt man: Eine universelle Auszeichnungssprache (XML) Eine universelle Anfragesprache (Quilt) - Namensgebung von Quilt (Amerikanischer Flickenteppich): 1. Quilt „baut“ aus anderen XML Dokumenten ein neues zusammen 7 Einleitung Ursprung von Quilt: - WWW macht alle Arten von Informationen überall verfügbar - Um diese Information verarbeiten zu können benötigt man: Eine universelle Auszeichnungssprache (XML) Eine universelle Anfragesprache (Quilt) - Namensgebung von Quilt (Amerikanischer Flickenteppich): 1. Quilt „baut“ aus anderen XML Dokumenten ein neues zusammen 2. Quilts Sprachkonzepte haben ihren Ursprung in vielen verschiedenen anderen Sprachen: XPath, XQL, XML-QL, SQL, OQL, Lorel, YATL somit ist Quilt selbst eine Art Flickenteppich 8 Einleitung Anforderungen an Quilt: - klassische DB Operationen wie Joins und Union - Anfragen kurz aber lesbar - Flexibilität (Unterschiedliche Informationsquellen) - Transformierung der Informationsstrukturen - Beibehaltung von Ordnung und Hierarchie in Dokumenten 9 Einleitung Was ist Quilt ? - Funktionale Anfragesprache - Anfragen als Ausdrücke - Ein und Ausgabe für Quilt: XML Dokumente, Sammlungen und Fragmente von XML Dokumenten - Verschiedene Ausdruckkonzepte Navigation in XML Dokumenten Erstellen des Ergebnis-Dokuments Selektion, Projektion, Joins Operatoren und Funktionen Bedingungen, Quantoren Binden von Variablen 10 Ablauf: 1. Einleitung 2. Sprachkonzepte 3.Vergleich: Quilt und SQL für rel. DB 4. Ausblick, Diskussion 11 Sprachkonzepte Ausdruck Konzepte: 1. Pfad Ausdrücke 2. Element Konstruktoren 3. FLWR (Flower) Ausdrücke 4. Ausdrücke zur Verwendung von Operatoren und Funktionen 5. Bedingunsausdrücke 6. Quantoren 7. Binden von Variablen 12 Sprachkonzepte Beispiel Familien: Familien Familienname Familie Mutter Person Vater Kinder Person Person Alter Name Alter Name Alter Name Bsp.xml: <Familien> <Familie Familienname=Müller> <Mutter> <Person Alter=35> <Name> Anne <\Name> <\Person> <\Mutter> <Vater> <Person Alter=38> <Name> Bert <\Name> <\Person> <\Vater> <Kinder> <Person Alter=3> <Name> Paul <\Name> <\Person> <Person Alter=6> <Name> Ernie <\Name> <\Person> <\Kinder> 13 <\Familie> <\Familien> Sprachkonzepte Beispiel Familien: Familien Familienname Müller Familie Mutter Person Vater Kinder Person Person Alter Alter 35 Name Anne Alter 38 Name Bert Person 3 Name Paul Alter 6 Name Ernie Bsp.xml: <Familien> <Familie Familienname=Müller> <Mutter> <Person Alter=35> <Name> Anne <\Name> <\Person> <\Mutter> <Vater> <Person Alter=38> <Name> Bert <\Name> <\Person> <\Vater> <Kinder> <Person Alter=3> <Name> Paul <\Name> <\Person> <Person Alter=6> <Name> Ernie <\Name> <\Person> <\Kinder> 14 <\Familie> <\Familien> Sprachkonzepte 1. Pfad Ausdrücke: - Übernommen von XPath - Zum Navigieren in Dokumenten (entlang der Knoten) - Ein Pfad-Ausdruck besteht aus einer Reihe von Schritten - In jedem Schritt bewegt man sich in einer bestimmten Richtung durch das Dokument - In jedem Schritt kann man mit Hilfe von Prädikaten unerwünschte Knoten elimieren - Das Ergebnis jeden Schrittes ist eine Menge von Knoten die als Startpunkt für den nächsten Schritt dienen können 15 Sprachkonzepte Symbole: Beispiel Familien: Wähle Dokument: document(“Bsp.xml“) Familien Familienname Müller Familie Mutter Person Vater Name Anne Person Alter 38 Name Bert Aktueller Knoten .. Vaterknoten / Sohn/Söhne // Nachkommen @ Attribute * Beliebiger Knoten [] Boolescher Ausdruck (für Prädikate) [n] Integer Prädikat -> 16 Dereferenz Operator Kinder Person Alter 35 . Name Paul Person Alter Alter 3 6 Name Ernie Sprachkonzepte Symbole: Beispiel Familien: Wähle Wurzelknoten: document(“Bsp.xml“) / Familien Familienname Müller Familie Mutter Person Vater Name Anne Person Alter 38 Name Bert Aktueller Knoten .. Vaterknoten / Sohn/Söhne // Nachkommen @ Attribute * Beliebiger Knoten [] Boolescher Ausdruck (für Prädikate) [n] Integer Prädikat -> 17 Dereferenz Operator Kinder Person Alter 35 . Name Paul Person Alter Alter 3 6 Name Ernie Sprachkonzepte Symbole: Beispiel Familien: Wähle Mütter: document(“Bsp.xml“) //Mutter Familien Familienname Müller Familie Mutter Person Vater Name Anne Person Alter 38 Name Bert Aktueller Knoten .. Vaterknoten / Sohn/Söhne // Nachkommen @ Attribute * Beliebiger Knoten [] Boolescher Ausdruck (für Prädikate) [n] Integer Prädikat -> 18 Dereferenz Operator Kinder Person Alter 35 . Name Paul Person Alter Alter 3 6 Name Ernie Sprachkonzepte Symbole: Beispiel Familien: Personenknoten von Paul: document(“Bsp.xml“) //Person[Name=Paul] Familien Familienname Müller Familie Mutter Person Vater Name Anne Person Alter 38 Name Bert Aktueller Knoten .. Vaterknoten / Sohn/Söhne // Nachkommen @ Attribute * Beliebiger Knoten [] Boolescher Ausdruck (für Prädikate) [n] Integer Prädikat -> 19 Dereferenz Operator Kinder Person Alter 35 . Name Paul Person Alter Alter 3 6 Name Ernie Sprachkonzepte Symbole: Beispiel Familien: Zweites Kind: document(“Bsp.xml“) //Kinder/Person[2] Familien Familienname Müller Familie Mutter Person Vater Name Anne Person Alter 38 Name Bert Aktueller Knoten .. Vaterknoten / Sohn/Söhne // Nachkommen @ Attribute * Beliebiger Knoten [] Boolescher Ausdruck (für Prädikate) [n] Integer Prädikat -> 20 Dereferenz Operator Kinder Person Alter 35 . Name Paul Person Alter Alter 3 6 Name Ernie Sprachkonzepte Symbole: Beispiel Familien: Attribut und Dereferenz Operator: document(“Bsp.xml“) //Person[Name=Ernie]/ @MumId->/Person Familien Familienname Müller Familie Mutter Person Vater Person Alter 35 Name Anne Kinder Person Alter 38 Name Bert Name Paul . Aktueller Knoten .. Vaterknoten / Sohn/Söhne // Nachkommen @ Attribute * Beliebiger Knoten [] Boolescher Ausdruck (für Prädikate) [n] Integer Prädikat -> 21 Dereferenz Operator MumId Person Alter Alter 3 6 Name Ernie Sprachkonzepte Ausdruck Konzepte: 1. Pfad Ausdrücke 2. Element Konstruktoren 3. FLWR (Flower) Ausdrücke 4. Ausdrücke zur Verwendung von Operatoren und Funktionen 5. Bedingunsausdrücke 6. Quantoren 7. Binden von Variablen 22 Sprachkonzepte 2. Element Konstruktoren: - Zum Erstellen des Ergebnis-Dokuments - Tags werden explizit ausgeschrieben und mit gebundenen Variablen gefüllt - Beispiel: <AlleNamen> ... Füllen der Variable $n <Name> $n </Name> </AlleNamen> 23 Sprachkonzepte Ausdruck Konzepte: 1. Pfad Ausdrücke 2. Element Konstruktoren 3. FLWR (Flower) Ausdrücke 4. Ausdrücke zur Verwendung von Operatoren und Funktionen 5. Bedingunsausdrücke 6. Quantoren 7. Binden von Variablen 24 Sprachkonzepte 3. FLWR (Flower) Ausdrücke: - steht für: FOR ... LET ... WHERE ... RETURN - Ursprung: SELECT ... FROM ... WHERE SQL Notation - Schachtelung ist möglich FOR / LET Geordnete Liste von Tupeln gebundener Variablen ($x,$y,$z),($x,$y,$z),... WHERE Reduzierte Liste von Tupeln gebundener Variablen RETURN Ergebnis: XML Dokument bzw. Fragment25 Sprachkonzepte 3. FLWR (Flower) Ausdrücke: Beispiel: Alle Namen die im Dokument Bsp.xml vorkommen: <AlleNamen> FOR $x IN document(Bsp.xml)//Name RETURN <Name> $x </Name> Familien Familienname Müller Familie Mutter Person Vater Kinder Person Person Alter 35 Name Anne Alter 38 Name Bert Name Paul Person Alter Alter 3 6 Name Ernie </AlleNamen> 26 Sprachkonzepte 3. FLWR (Flower) Ausdrücke: Beispiel: Alle Namen von Personen die jünger als 10 sind: <Grundschulkinder> Familien Familienname Müller Familie Mutter Person Vater Kinder Person Person Alter 35 Name Anne Alter 38 Name Bert Name Paul Person Alter Alter 3 6 Name Ernie FOR $x IN document(Bsp.xml)//Person LET $y := $x/ WHERE $x@Alter < 10 RETURN <Name> $y </Name> </Grundschulkinder> 27 Sprachkonzepte 3. FLWR (Flower) Ausdrücke: Beispiel: Das Alter von den Müttern die mehr als 1 Kind haben: <Mütter> Familien Familienname Müller Familie Mutter Person Vater Kinder Person Person Alter 35 Name Anne Alter 38 Name Bert Name Paul Person Alter Alter 3 6 Name Ernie FOR $x IN document(Bsp.xml)//Mutter LET $y := $x/Kinder/ WHERE count($y) > 1 RETURN <Alter> $x/@Alter </Alter> </Mütter> 28 Sprachkonzepte Ausdruck Konzepte: 1. Pfad Ausdrücke 2. Element Konstruktoren 3. FLWR (Flower) Ausdrücke 4. Ausdrücke zur Verwendung von Operatoren und Funktionen 5. Bedingunsausdrücke 6. Quantoren 7. Binden von Variablen 29 Sprachkonzepte 4. Ausdrücke zur Verwendung von Operatoren und Funktionen - Von Quilt werden die üblichen arithmetischen und logischen Operatoren sowie Mengenoperatoren wie: UNION, INTERSECT, EXCEPT, ... zur Verfügung gestellt - Von XQL übernimmt Quilt die infix Operatoren BEFORE und AFTER, die dazu dienen die Positionen von Elementen zu vergleichen, die keinen gemeinsamen Vaterknoten haben - Es werden zusätzlich einige Funktionen zur Verfügung gestellt z.B.: document(“...“), count(), sum(), distinct() - Viele dieser Operatoren und Funktionen haben ihren Ursprung in SQL oder XPath - Es ist ebenfalls möglich eigene Funktionen zu definieren (auch rekursive) 30 Sprachkonzepte Ausdruck Konzepte: 1. Pfad Ausdrücke 2. Element Konstruktoren 3. FLWR (Flower) Ausdrücke 4. Ausdrücke zur Verwendung von Operatoren und Funktionen 5. Bedingunsausdrücke 6. Quantoren 7. Binden von Variablen 31 Sprachkonzepte 5. Bedingunsausdrücke - IF ... THEN ... ELSE Konstrukte - Können beliebig verschachtelt werden <Mütter> (Altes Beispiel) - Beispiel Familien Familienname Müller Familie Mutter Person Vater Kinder Person Person Alter 35 Name Anne Alter 38 Name Bert Name Paul Person Alter Alter 3 6 Name Ernie FOR $x IN document(Bsp.xml)//Mutter LET $y := $x/Kinder/ WHERE count($y) > 1 RETURN <Alter> $x/@Alter </Alter> 32 </Mütter> Sprachkonzepte 5. Bedingunsausdrücke - IF ... THEN ... ELSE Konstrukte - Können beliebig verschachtelt werden <Mütter> - Beispiel FOR $x IN document(Bsp.xml)//Mutter Familien LET $y := $x./Kinder/ Familienname Müller Familie RETURN IF count($y)>1 Mutter Vater Kinder THEN <Alter> Person Person Person Person $x/@Alter Alter Alter Alter Alter 35 38 3 </Alter> 6 Name Name Name Name ELSE Anne Bert Paul Ernie 33 </Mütter> Sprachkonzepte Ausdruck Konzepte: 1. Pfad Ausdrücke 2. Element Konstruktoren 3. FLWR (Flower) Ausdrücke 4. Ausdrücke zur Verwendung von Operatoren und Funktionen 5. Bedingunsausdrücke 6. Quantoren 7. Binden von Variablen 34 Sprachkonzepte 6. Quantoren: - und Quantoren : : EVERY und : SOME - Beispiel : Junge Familien <Junge Familien> Familien Familienname Müller Familie Mutter Person Vater Kinder Person Person Alter 35 Name Anne Alter 38 Name Bert Name Paul Person Alter Alter 3 6 Name Ernie FOR $x IN document(Bsp.xml)//Familie WHERE EVERY $p IN $x/Person SATISFIES ($p@Alter<35) RETURN <Familienname> $x@Familienname </Familienname> </Junge Familien> 35 Sprachkonzepte Ausdruck Konzepte: 1. Pfad Ausdrücke 2. Element Konstruktoren 3. FLWR (Flower) Ausdrücke 4. Ausdrücke zur Verwendung von Operatoren und Funktionen 5. Bedingunsausdrücke 6. Quantoren 7. Binden von Variablen 36 Sprachkonzepte 7. Binden von Variablen: - Binden den Wert eines Ausdrucks an eine Variable - Ermöglichen die Wiederverwendung von Zwischenergebnissen LET $a := avg(document(Bsp.xml)//Person@Alter) - Beispiel: Sortiere alle Personen des Dokuments in älter und EVAL jünger als das Durchschnittsalter <Alte> FOR $x IN document(Bsp.xml)//Person WHERE $x@Alter > $a RETURN <Name> $x/Name </Name> </Alte> <Junge> FOR $x IN document(Bsp.xml)//Person WHERE $x@Alter <= $a RETURN <Name> $x/Name </Name> </Junge> 37 Ablauf: 1. Einleitung 2. Sprachkonzepte 3.Vergleich: Quilt und SQL für rel. DB 4. Ausblick, Diskussion 38 Vergleich: Quilt und SQL für rel. DB 1. Teile / Lieferanten Beispiel 2. Einfache Anfragen 3. Gruppieren 4. Joins 39 Vergleich: Quilt und SQL für rel. DB 1. Teile / Lieferanten Beispiel Relationale Daten: Tabelle Lieferanten: L L_Nr L_Name Tabelle Teile: T T_Nr T_Beschr XML Daten: L.xml: <L_tupel> <L_Nr> <L_Name> T.xml <T_tupel> <T_Nr> <T_Beschr> LT.xml Tabelle Preise: LT L_Nr P_Nr Preis <LT_tupel> <L_Nr> <T_Nr> <Preis> 40 Vergleich: Quilt und SQL für rel. DB 2. Einfache Anfragen: SQL: Quilt: SELECT T_Nr FROM T WHERE T_Beschr LIKE ´GEAR´ ORDER BY T_Nr L L_Nr L_Name FOR $t IN document(“T.xml“)//T_tupel WHERE contains( $t/T_Beschr,“GEAR“) RETURN $t/T_Nr SORTBY(.) T T_Nr T_Beschr LT L_Nr P_Nr Preis 41 Vergleich: Quilt und SQL für rel. DB 3. Gruppierung (Grouping): Gebe Teilenummer und Durschnittspreis der Teile aus, die von mehr als 3 Lieferanten geliefert werden: SQL: SELECT T_Nr, avg(Preis) FROM LT GROUP BY T_Nr HAVING count(*) >=3 L L_Nr L_Name Quilt: FOR $tn IN distinct(document(“LT.xml“)//T_Nr) LET $lt := document(“LT.xml“)//T_tupel[T_Nr = $tn] WHERE count( $lt) >= 3 RETURN <oft_vorhanden> $tn <avgPr> avg($lt/Preis) </avgPr> </oft_vorhanden> T T_Nr T_Beschr LT L_Nr P_Nr Preis 42 Vergleich: Quilt und SQL für rel. DB 4. Joins: Inner Join : Lieferantennamen mit den dazugehörigen Teilebeschreibungen: SQL: Quilt: SELECT L_Name, T_Beschr FROM LT, L ,T WHERE T.T_Nr=LT.T_Nr AND L.L_Nr=LT.L_Nr L L_Nr L_Name FOR $lt IN document(“LT.xml“)//LT_tupel) $l IN document(“L.xml“)//L_tupel[L_Nr=$lt/L_Nr]) $t IN document(“T.xml“)//T_tupel[T_Nr=$lt/T_Nr]) RETURN <lt_paar> $l/L_Name, $t/T_Beschr </lt_paar> T T_Nr T_Beschr LT L_Nr P_Nr Preis 43 Ablauf: 1. Einleitung 2. Sprachkonzepte 3.Vergleich: Quilt und SQL für rel. DB 4. Ausblick, Diskussion 44 Ausblick, Diskussion Derzeitiger Stand von Quilt: - Quilt hat zu der Entwicklung von XQuery maßgeblich beigetragen (Die Autoren von Quilt sind Mitglieder der Working Group) - Von der Navigationssprache XPath, die als Quelle für Quilt diente, ist am 20.12.2001 die Version 2.0 veröffentlicht worden. Hier wird als Quilt als `Background Reference´ genannt. - Quilt wurde an einigen Universitäten (UCLA, Washington, Pennsylvania) und bei INRIA(Frankreich) implementiert. Es wurden Parser, und Übersetzer (nach SQL) geschrieben und getestet. 45 Ausblick, Diskussion Zukunft von Quilt: - lebt in leicht abgeänderter Syntax in XQuery weiter - XQuery: - Zur Zeit noch Working Draft (Letzte Version 20.12.2001) - Wird von der W3C XML Query Working Group entwickelt - Beteiligte Firmen: IBM, Software AG, AT&T Labs, Bell Labs, Concentric Visions - Anwendungsgebiete: - Suche im Intranet (z.B. UNIVIS) - WWW ? Sinnvoll ? 46