XML und Datenbanken XML
Transcription
XML und Datenbanken XML
PDFMAILER.DE PROVIDED BY THE WEBMASTERS SOURCE - www.IPWD.de XML XML und Datenbanken XML-Abfragesprachen R. Oßwald, 2003 (nach einem Vortrag von J. Pokorny, Karls-Univ. Prag, Dresden, Datenbankstammtisch, April 2003) XML-Anwendung: § als Standard-Protokoll für den Datenaustausch § zur Darstellung beliebiger logischer Datenstrukturen § als Grundlage für Anwendungen jenseits der bisher gebräuchlichen Datenmodelle § als Datenmodell in Datenbanken für XML-Dokumente XML und Datenbanken: § Datenbank aus XML-Dokumenten § "Mix" aus (relationaler) DB und XML-Daten § XML-Sicht über Nicht-XML-Daten (und XML-Dokumenten) § Strukturtransformationen: rel. Tabellen à XML-Dokument sowie XML-Dokument à el. Tabellen PDFMAILER.DE PROVIDED BY THE WEBMASTERS SOURCE - www.IPWD.de native XML-DBMS: Tamino (Beispiele) Hersteller: Software AG (Germany) URL: http://www.softwareag.com/tamino/ Anfragesprache: X-Query (now XQuery) XHive/DB Hersteller: X-Hive Corporation URL: http://www.x-hive.com/products/db/ Anfragesprache: XQuery XIndice Hersteller: The Apache Software Foundation URL: http://xml.apache.org/xindice/ Anfragesprache: XPath, XUpdate XIS Hersteller: eXcelon Corp. URL: http://www.xmlquickstart.com/ Anfragesprache: XQuery dbXML Hersteller: dbXML Group URL: http://www.dbxml.com/product.html/ Anfragesprache: XPath eXist Hersteller: Open Source XML Database URL: http://exist.sourceforge.net/ Anfragesprache: XPath (restricted) PDFMAILER.DE PROVIDED BY THE WEBMASTERS SOURCE - www.IPWD.de XML-Grundlagen: Elemente § Element: Abschnitt eines XML-Dokuments mit Start- und End-Tag § Elementinhalt: Text zwischen zusammengehörenden Tags <person> <name> Emil Eichhorn </name> <phone> 221 914 286 </phone> <phone> 221 914 264 </phone> <email> [email protected] </email> </person> Element kein Element Ein Element kann leer sein, d.h. es hat keinen Inhalt, z.B.: <email> </email> bzw. nur </email> § Subelement Attribute: Das Start-Tag jedes Elements kann Attribute enthalten. Mit ihnen kann der Elementinhalt näher beschrieben werden. <picture> <height dim = "cm"> 2400 </height> <width dim = "in"> 96 </width> <data coding = "gif" compression = "zip"> sasvh678ahl17e </data> </picture> PDFMAILER.DE PROVIDED BY THE WEBMASTERS SOURCE - www.IPWD.de Beschreibung des Dokumenttyps: DTD = document type desctriptor § ordnet dem Dokument eine Struktur zu, § ist eine rein syntaktische (strukturelle) Beschreibung, § vergleichbar mit einem Datenbankschema Beispiel: Adressbuch <!DOCTYPE addressbook [ <!ELEMENT addressbook (person*)> <!ELEMENT person (name, withtitle?, address*, (fax | phone)*, email*)> <!ATTLIST ssn CDATA #REQUIRED> <!ELEMENT name (#PCDATA)> <!ELEMENT withtitle (#PCDATA)> <!ELEMENT address (#PCDATA)> <!ELEMENT phone (#PCDATA)> <!ELEMENT fax (#PCDATA)> <!ELEMENT email (#PCDATA)> ]> <person> <name ssn=“ 420529/102” > Emil Eichhorn </name> <withtitle> Dr. E. Eichhorn </ withtitle> <address> Eichenstr. 25 </address> <address> Erfurt, 50000 </address> <phone> 221 914 286 </phone> <fax> 221 914 323 </fax> <phone> 221 914 264 </phone> <email> [email protected] </email> </person> genau ein Name; max. ein Name; so viele Adressenzeilen wie nötig; so viele Telefon-, Fax- und Mailzeilen wie nötig in beliebiger Folge; PDFMAILER.DE Vergleich: PROVIDED BY THE WEBMASTERS SOURCE - www.IPWD.de DTD ----- Datenbankschema § DTD ordnet dem XML-Dokument eine Struktur zu (ähnlich wie das DB-Schema den DB-Tabellen eine Struktur zuordnet) § Es gibt nur einen elementaren Datentyp: PCDATA. § Es gibt keine Agrregierungen, wie z.B. Mengen (sets). § IDREFs besitzen keinen Typ (untyped): Sie verweisen auf etwas, aber es ist unbekannt, was das ist. § Element-Tags sind global. § Es gibt keine Methoden (vergleiche OO!). Entsprechende Erweiterungsvorschläge für XML liegen inzwischen vor: W3C-Entwurf von 1999; ODMG 3.0 § XML-Struktur entspricht einem gerichteten markierten Graphen. § Die Tags entsprechen den Kanten des Graphen. § Die Paare von Attributname und Attributwert entsprechen den Knotenmarkierungen des Graphen. PDFMAILER.DE PROVIDED BY THE WEBMASTERS SOURCE - www.IPWD.de XML-Anfragesprachen: § XML-QL (proposal of W3C, 1998) § XPath Version 1.0 (proposal of W3C, 1999) § XQL (Microsoft, Texcel, webMethods, 1998) § XQuery 1.0 (proposal of W3C, 2003) § XSQL (draft ISO/IEC/JTC1/SC32WG4) § ... Beispieldokument: <addressbook> <Person ssn=“ 420529/102” > <name> Emil Eichhorn </name> <withtitle> Dr. E. Eichhorn </ withtitle> <address> Eichenstr. 25 </address> <address> Erfurt, 50000 </address> <phone> 221 914 286 </phone> <fax> 221 914 323 </fax> <phone> 221 914 264 </phone> <email> [email protected] </email> </person> </addressbook> PDFMAILER.DE XML-QL: Datenselektion: PROVIDED BY THE WEBMASTERS SOURCE - www.IPWD.de pattern matching (Extraktion) 1.) Finde die Mail-Adresse von Eichhorn: … where <addressbook> <person> <name> Emil Eichhorn </name> <email> $e </email> </person> </addressbook> in “ http://www.fhtw-berlin.de/.../add.xml” construct $e Ergebnis: <XML> [email protected] </XML> PDFMAILER.DE PROVIDED BY THE WEBMASTERS SOURCE - www.IPWD.de 2.) Zu wem gibt es elektronische Kontakte? … where <addressbook> <person> <withtitle>$g</withtitle> <email>$e</email> </person> </addressbook> in “ http://…“ construct <e-contact> <who>$g</who> <where>$e</where> </e-contact> Ergebnis: <XML> <e-contact> <who> Dr. E. Eichhorn </who> <where> [email protected] </where> </e-contact> <e-contact> <who> Prof. K. Kral </who> <where> [email protected] </where> </e-contact> ... </XML> 3.) Finde alle Mail-Adressen und Faxnummern: … where <addressbook._*.(email | fax)>$ef</> in “ http://www.fhtw-berlin.de/.../address.xml” construct <emailfax>$ef</> PDFMAILER.DE XML-QL: PROVIDED BY THE WEBMASTERS SOURCE - www.IPWD.de schema browsing 4.) Finde die Tags der Subelemente von Person: … where <addressbook.person.$tag></> in “ http://www.fhtw-berlin.de/.../add.xml” construct <personelements> $tag</> 5.) Finde die Attribute der Personenelemente: … where <_*.person $attrname=$h> </> in “ http://www.fhtw-berlin.de/.../ab.xml” construct <personattr> <name> $attrname </> <value> $h </> </> weitere Möglichkeiten für Abfragen: § geschachtelte Anfragen (nested queries) § Anweisungsblöcke § ein Element in eine Variable speichern (element_as) § den Inhalt eines Elements in eine Variable speichern (content_as) PDFMAILER.DE PROVIDED BY THE WEBMASTERS SOURCE - www.IPWD.de XQL: ähnelt XSL Authoren: Microsoft, Texcel.webMethods Syntax: § Wurzelelement § Elementbegrenzer § beliebiger Nachfolger § Attributspecifikation § Reguläre Ausdrücke § Bedingungen § logische Operatoren § Vergleichsoperatoren § Datentypen § / /book/title / section/heading // /book//heading @ @class * /book/*/section [ ] chapter[section] $and$ $or$ $not$ $gt$ (>) $lt$ (<) = string integer float date PDFMAILER.DE PROVIDED BY THE WEBMASTERS SOURCE - www.IPWD.de Beispieldokument für XQL-Abfragen: book class=“H.3.3” author title Peter Schäuble chapter chapter heading MM IR heading IS are … section section In this… heading heading Introduction Weighted... Text Retrieval HMM PDFMAILER.DE PROVIDED BY THE WEBMASTERS SOURCE - www.IPWD.de XQL-Abfrage: 6.) Finde alle Elemente heading und deren Inhalt: book class=“H.3.3” author Peter Schäuble MM IR Ergebnis: grün title chapter chapter heading heading IS are ... section section In this… heading heading Introduction Weighted... Text Retrieval HMM PDFMAILER.DE PROVIDED BY THE WEBMASTERS SOURCE - www.IPWD.de XQL-Abfrage: 7.) Finde alle Elemente chapter/heading und deren Inhalt: ("heading" als direkter Nachfolger von "chapter") book class=“H.3.3” author title Peter Schäuble MM IR Ergebnis: orange chapter chapter heading heading IS are ... section section In this… heading heading Introduction Weighted... Text Retrieval HMM PDFMAILER.DE PROVIDED BY THE WEBMASTERS SOURCE - www.IPWD.de XQL-Abfrage: 8.) Finde alle Elemente chapter/heading und deren Inhalt: ("heading" als beliebiger Nachfolger von "chapter") book class=“H.3.3” author title Peter Schäuble MM IR Ergebnis: orange chapter chapter heading heading IS are ... section section heading In this… heading Introduction Weighted... Text Retrieval HMM PDFMAILER.DE PROVIDED BY THE WEBMASTERS SOURCE - www.IPWD.de XQL-Abfrage: 9.) Finde alle Elemente chapter[heading] und deren Inhalt: ("chapter" mit "heading" als direktem Nachfolger) book class=“H.3.3” author title Peter Schäuble MM IR Ergebnis: grün/orange chapter chapter heading heading IS are ... section section In this… heading heading Introduction Weighted... Text Retrieval HMM PDFMAILER.DE PROVIDED BY THE WEBMASTERS SOURCE - www.IPWD.de XQL-Abfrage: 10.) Finde alle Elemente chapter/section[2] und deren Inhalt: (zweites Auftreten von "section" in "chapter") Ergebnis: orange book class=“H.3.3” author title Peter Schäuble MM IR chapter chapter heading heading IS are ... section section In this… heading heading Introduction Weighted... Text Retrieval HMM PDFMAILER.DE PROVIDED BY THE WEBMASTERS SOURCE - www.IPWD.de XQL-Abfrage: 11.) Finde alle Elemente /book[@class="H.3.3" $and$ author="Peter Schäuble"] (alle Bücher der Klasse H.3.3 vom Autor Peter Schäuble) Ergebnis: orange book class=“H.3.3” author title Peter Schäuble MM IR chapter chapter heading heading IS are ... section section In this… heading heading Introduction Weighted... Text Retrieval HMM PDFMAILER.DE XQL-Abfrage: PROVIDED BY THE WEBMASTERS SOURCE - www.IPWD.de semijoin 12.) Finde alle Elemente /addressbook/person[name=/book/author] (die Adressen der Personen, die auch Autor eines Buchs sind) PDFMAILER.DE PROVIDED BY THE WEBMASTERS SOURCE - www.IPWD.de XQuery: § XQuery ist eine funktionale Sprache: – Eine Abfrage ist ein Ausdruck. – Ausdrücke können beliebig vielfältig werden. – Eigene Funktionen können wahlweise definiert werden. – Ein Abfrageausdruck kann aus (Teil-) Abfrageausdrücken zusammengesetzt werden. § Elemente: – Pfad-Ausdrücke – FLWR-Ausdrücke: FOR ... LET ... WHERE ... RETURN – Elementkonstruktoren: <e> ... </e> – Variable und Konstanten: $x, 5 – Operatoren und Funktionsaufrufe: x + y, -z, avg() – Bedingte Anweisungen: IF ... THEN ... ELSE – Quantifikatoren: EVERY var IN expr SATISFIES expr – Sortierung: expr SORTBY (expr ASCENDING, ...) – vorläufige Vorschläge für: INSERT, REPLACE, DELETE Beispieldokument für XQuery-Abfragen: <bib> <book year="1994"> <title>Multimedia IR</title> <author> <last>Schäuble</last> <first>Peter</first> </author> <publisher>Kluwer Academic</publisher> <price> 98</price> </book> </bib> PDFMAILER.DE PROVIDED BY THE WEBMASTERS SOURCE - www.IPWD.de XQuery-Abfragen: 13.) Pfad-Ausdrücke: # XQuery benutzt die vereinfachte Syntax # von XPath für Pfad-Ausdrücke document(“ bib.xml” ) /bib/book/author //author[last=“ Schäuble”and first=“ Peter” ] document(“ bib.xml” )//author # Bereichsausdruck: /bib/book/author[1 TO 2] # BEFORE und AFTER: //book[author[last=“ Viannu” ] BEFORE author[last=“ Abiteboul” ]] # Namespaces: NAMESPACE rev = "www.reviews.com” //rev:rating # Dereferenz: //publisher/web/@href->html PDFMAILER.DE PROVIDED BY THE WEBMASTERS SOURCE - www.IPWD.de XQuery-Abfragen: 14.) FLWR-Ausdruck: (vergleichbar mit SELECT... FROM ... WHERE von SQL) FOR $book IN document("bib.xml")//book WHERE $book/publisher = "Kluwer Academic" RETURN <book> { $book/title, $book/author } </book> 15.) Verwendung von FOR bzw. LET: § FOR führt eine Anweisungsfolge (Sequenz) für jeden Knoten wiederholt aus und bindet eine Variable bei jedem Durchlauf an den gerade bearbeiteten Knoten. § LET bindet eine Variable an die Anweisungsfolge als Ganzes. FOR $book IN document("bib.xml")//book LET $a := $book/author WHERE contains($book/publisher, "Kluwer Academic” ) RETURN <book> { $book/title, <count> Number of authors: { count($a) } </count> } </book> PDFMAILER.DE PROVIDED BY THE WEBMASTERS SOURCE - www.IPWD.de XQuery-Abfragen: 16.) Inner Join: FOR $book IN document("www.bib.com/bib.xml")//book, $quote IN document("www.bookstore.com/quotes.xml")//listing WHERE $book/isbn = $quote/isbn RETURN <book> { $book/title } { $quote/price } </book> SORTBY (title) 17.) Outer Join: FOR $book IN document("bib.xml")//book RETURN <book> { $book/title } { FOR $review IN document("reviews.xml")//review WHERE $book/isbn = $review/isbn RETURN $review/rating } </book> SORTBY (title) PDFMAILER.DE PROVIDED BY THE WEBMASTERS SOURCE - www.IPWD.de XQuery-Abfragen: 18.) Kombination von Ausdrücken: <bibliography> {FOR $book IN document("bib.xml")//book RETURN <book> { $book/author, $book/title } </book> SORTBY (author, title) } </bibliography> <bibliography> { FOR $book IN Expression RETURN Expression } </bibliography> <bibliography> {FOR $book IN document("bib.xml")//book RETURN <book> { $book/author, $book/title } </book> SORTBY (author, title) } </bibliography> PDFMAILER.DE PROVIDED BY THE WEBMASTERS SOURCE - www.IPWD.de XQuery-Funktionen: § Built-in-Funktionen: – max(), min(), sum(), count(), avg() – distinct(), empty(), contains() – Die normative Menge ist noch nicht endgültig festgelegt worden § nutzerdefinierte Funktionen – entsprechend den Regeln der XQuery-Syntax – rekursive Funktionen sind möglich – können typbehaftet (typed) sein § Erweiterungen sind geplant 19.) Anwendung von Funktionen in einer Abfrage: FUNCTION depth(ELEMENT $e) RETURNS integer { -- Ein leeres Element entspricht der Tiefe 1, -- anderenfalls addiere 1 bis zur maximalen Anzahl der Kinder. IF empty($e/*) THEN 1 ELSE max(depth($e/*)) + 1 } depth(document("partlist.xml")) PDFMAILER.DE PROVIDED BY THE WEBMASTERS SOURCE - www.IPWD.de 20.) Umkehrung der Hierarchie: <bib> <book year="1994"> <title>Multimedia IR</title> <author> <last>Schäuble</last> <first>Peter</first> </author> <publisher>Kluwer Academic</publisher> price> 98</price> </book> </bib> aktuelle Forderungen: § Datensuche per Schlüsselwort (ähnlich wie in Volltextsystemen), § nutzerdefinierte Funktionen, § automatische Abstract-Generierung (basierend auf dem Begriff der Dokumentenähnlichkeit bzw. der Verwandtschaft von Ausdrücken) § Indexierung § Darstellung von Ergebnisdaten in XML-Form (auf externen Medien) PDFMAILER.DE PROVIDED BY THE WEBMASTERS SOURCE - www.IPWD.de Grundregel für den Sprachentwurf: C.A.R. Hoare: "The language designer should be familiar with many alternative features designed by others, and should have excellent judgment in choosing the best and rejecting any that are mutually inconsistent... One thing he should not do is to include untried ideas of his own. His task is consolidation, not innovation."