PRAKTIKUM ZUR VL NEUE KONZEPTE UND TECHNIKEN FÜR DATENBANKSYSTEME Humboldt-Universität zu Berlin Martin Kost Agenda 2 Export von Datenbankinhalten Motivation Strategien Abbilden von Datenbanken Abbildungsvorschriften hier: Vollständige Abbildung mithilfe von XML-Schema Beispiel Laender Exportieren von Daten Einsatz von erweiterten Datenbankanfragesprachen SQL/XML Beispiele Praktikum 3 - Export von Datenbanken 18.12.2008 Export von Datenbankinhalten Motivation 3 Datenaustausch über DB-Produkt hinweg umständlich RDBMS ACID Datenbankprodukt X … Große Datenmengen verfügbar ID as re fg 0 s we 34 1 aa gg 89 2 k ds 0 asdf KLOUG 123456 Verschiedene Formate Dumpfiles nicht vom Menschen lesbar Nutzerdefinierte Formate nur schwer erzeugbar Exportvarianten: 1. Vollständige Abbildung von Datenbankinhalten … 2. Abbildung von Anfrageergebnissen oder Views z.B. SQL/XML 3. Einsatz individueller Transformationsregeln XML XML XML Dokumente Dokumente Dokumente … 101120 Praktikum 3 - Export von Datenbanken 18.12.2008 Export von Datenbankinhalten Allgemeine Problemstellungen 4 Abbildung von Daten und Metadaten: Datenbank XML-Dokument Relationen- und Attributnamen Element- und Attributnamen SQL Datentypen Datentypen von XML Schema Datenwerte aus Datenbanken Inhalte in XML-Dokumenten SQL/XML Standardisierung durch verschiedene Hersteller von Datenbanksystemen Teil des SQL-Standards Praktikum 3 - Export von Datenbanken 18.12.2008 Export von Datenbankinhalten Transformationsstrategien 5 Erweiterte Datenbankanfrage mit Transformationsregeln 1 2 Datenbank virtuelle XML-Sicht Standardtransformation Standardtransformation XML-Dokument XML-Anfragesprache 3 Standardisiertes XML-Dokument XSLTStylesheet Praktikum 3 - Export von Datenbanken 18.12.2008 Export von Datenbankinhalten Vorgehen für das Praktikum 6 Vollständige/Partielle Abbildung Modellierung Schemabeschreibung Datenbank Generierungsstrategie Generierungsalgorithmus Praktikum 3 - Export von Datenbanken XML XML XML Dokumente Dokumente Dokumente 18.12.2008 Abbilden von Datenbanken Vollständige Abbildung 7 Vollständige (schematische) Abbildung von Datenbanken Informationserhaltend: (Alle) Gewünschte Informationseinheiten der Datenbank müssen sich vollständig und konsistent im XML-Dokument wiederfinden. Grundprinzip Darstellung von Relationen, Tupeln und Attributen durch XMLElemente oder -Attribute Abbildung von Schlüsseln und Fremdschlüsseln Abbilden von Typinformationen Ableitung von Elementhierarchien Praktikum 3 - Export von Datenbanken 18.12.2008 Abbilden von Datenbanken Vollständige Abbildung – Bsp. Laender 8 Praktikum 3 - Export von Datenbanken 18.12.2008 Abbilden von Datenbanken Abbildungsvorschrift 9 vierstufige Verschachtelung: Bezeichnung der Datenbank Relationennamen Tupel Attributnamen <Datenbankname> <Relationnenname> <Tupel> <Attributname> </Attributname> <Attributname> … Beispiel Laenderinformationen: CREATE TABLE Laender( ID VARCHAR(13) NOT NULL, BevoelkerungsVerweis INTEGER, Hauptstadt VARCHAR(50), PRIMARY KEY(ID), FOREIGN KEY(BevoelkerungsVerweis ) REFERENCES Bevoelkerungen); <Laenderinformationen> <Laender> <Laender_Tupel> <ID>GER</ID> <Bevoelkerungsverweis> 0</Bevoelkerungsverw eis> <Hauptstadt>Berlin</Ha uptstadt> … Praktikum 3 - Export von Datenbanken 18.12.2008 Abbilden von Datenbanken Abbildungsvorschrift 10 Abbilden des DB-Schema auf XML-Schema Vermeidung der Probleme, die bei der Verwendung von XML-DTD auftreten Elementnamen können lokal deklariert werden Vermeidung von Namenskonflikten genauere Abbildung von Schlüssel und Fremdschlüssel Verwendung von XML-Schema-Typen Praktikum 3 - Export von Datenbanken 18.12.2008 Abbilden von Datenbanken Abbildungsvorschrift 11 vierstufige Verschachtelung Relationen- und Attributnamen auf Elementnamen SQL-Datentypen auf Datentypen von XML-Schema Tupel auf Elemente mit der Bezeichnung: Relationenname + „_Tupel“ Ableiten von Elementhierarchien Auswertung von Schlüssel-Fremdschlüssel-Beziehungen Kardinalitäten beachten 1:1 – Kardinalität = 1; 1:n – Kardinalität = unbounded & Fremdschlüssel ist unique; m:n – Kardinalität = unbounded meist sinnvoll per Hand festzulegen, da Verweise oft das bessere Mittel sind Praktikum 3 - Export von Datenbanken 18.12.2008 Abbilden von Datenbanken Abbildungsvorschrift 12 Ableiten von Elementhierarchien bisher: direkte Darstellung von Relationen in XML-Dokumenten keine hierarchischen Beziehungen zwischen Relationen durch Auswertung von Schlüsseln und Fremdschlüsseln Ableitung von hierarchischen Strukturen möglich Vorgehen: Root-Tabelle der Datenbank wählen XML-Element erstellen, das der Relation entspricht (Attribute der Relation werden als XML-Kindelemente eingefügt) falls ein Attribut der Relation als Fremdschlüssel definiert ist zugehörige Tupelmenge entsprechender Relation (über Schlüssel) hierarchisch einsortieren 1. 2. 3. Dabei Anwenden des zweiten Schrittes für die referenzierte Tupelmenge Abbildungsprozess nur eindeutig, falls Fremdschlüssel-Beziehungen der Datenbank einen Baum darstellen falls Datenbank durch Normalisierung zum Erreichen der ersten Normalform entstanden ist, macht dieses Verfahren den Normalisierungsprozess rückgängig Praktikum 3 - Export von Datenbanken 18.12.2008 Abbilden von Datenbanken Abbildungsvorschrift – Bsp. Laender 13 Praktikum 3 - Export von Datenbanken 18.12.2008 Exportieren von Daten Einsatz von erweiterten DB-Anfragesprachen 14 Anteile von Datenbank- und XML-Anfragesprachen Datenbankanfrage zur Auswahl der dazustellenden Daten (= relevante Anteile): erweiterte Datenbankanfrage RDBMS individuelles XML Dokument SELECT Name, Hauptstadt, Einwohnerzahl FROM Namen, Laender, Bevoelkerungen WHERE Name = ' Spanien' AND Namen.Laenderverweis = Laender.ID AND Laender.ID = Bevoelkerungen.ID XML-„Anfrage“ zur Bestimmung der Syntax und Struktur des Zielformates Ergebnis: <rowset> <row no=´1´> <Name>Spanien</Name> <Hauptstadt>Madrid</Hauptstadt> <Einwohnerzahl>40280780</Einwohnerzahl> </row> </rowset> Praktikum 3 - Export von Datenbanken 18.12.2008 Exportieren von Daten Einsatz von erweiterten DB-Anfragesprachen 15 SELECT * FROM Namen, Laender, Bevoelkerungen WHERE Name = 'Spanien' AND Namen.Laenderverweis = Laender.ID AND Laender.ID = Bevoelkerungen.ID construct <Land> <name>{name}</name> <hauptstadt>{hauptstadt} </hauptstadt> <Bevoelkerung> <einwohnerzahl> {einwohnerzahl} </einwohnerzahl> <geburtenrate>{geburtenrate} </geburtenrate> </Bevoelkerung> </Land> <Land> <name>Spanien</name> <hauptstadt>Madrid</hauptstadt> <Bevoelkerung> <einwohnerzahl>40280780</einwohnerzahl> <geburtenrate>10.11 Geburten/1000 Einwohner</geburtenrate> </Bevoelkerung> </Land> Viele Sprach-Vorschläge Siehe auch SQL/XML Praktikum 3 - Export von Datenbanken 18.12.2008 Exportieren von Daten SQL/XML – Übersicht 16 Neuer Basisdatentyp „XML“ Abbildung zwischen SQL und XML Besonderheiten Was wird wie abgebildet? Auf was wird abgebildet? SQL/XML Funktionen XMLQUERY XMLELEMENT XMLFOREST XMLCONCAT XMLAGG SQL/XML 2005 Praktikum 3 - Export von Datenbanken 18.12.2008 Exportieren von Daten SQL/XML – Grundidee 17 Stellt neuen Datentyp XML mit darauf operierenden Funktionen bereit Definiert Abbildungen zwischen SQL und XML XML XML XML Dokumente Speicherung von XML-Dokumenten in der Datenbank als Wert des XML-Datentyps Generierung von XML-Dokumenten mittels SQL/XML-Funktionen SQL XQuery DBMS XML-Datentyp Praktikum 3 - Export von Datenbanken 18.12.2008 Exportieren von Daten SQL/XML – Basis-Datentyp XML 18 Ermöglicht Speicherung von XML-Werten in Tabellenspalten Name Hauptstadt XML-Werte NULL XML-Dokument Spanien Madrid <Bevoelkerung> <einwohnerzahl> 40280780 </einwohnerzahl> <geburtenrate>10.11 </geburtenrate> </Bevoelkerung> Deutschland Berlin <Bevoelkerung> <einwohnerzahl> 82424609 </einwohnerzahl> <geburtenrate>8,45 </geburtenrate> </Bevoelkerung> mit/ohne Prolog XML-Element Wald von XML-Elementen keine eindeutige Wurzel CREATE TABLE Land (Name VARCHAR (100), Hauptstadt VARCHAR (100), Bevoelkerung XML); Praktikum 3 - Export von Datenbanken 18.12.2008 Exportieren von Daten SQL/XML – Funktionen 19 XMLQUERY Generiert ein XML-Dokument mittels einer XQuery-Anfrage XMLELEMENT Erzeugt ein XML-Element aus einer Werteliste XMLATTRIBUTES erzeugt dazu XML-Attribute XMLFOREST XMLCONCAT Erzeugt aus beliebigen Werten einen Wald aus XMLElementen Konkatiniert mehrere XML-Elemente zu einem Wald XMLAGG Aggregiert die XML-Elemente einer Gruppe Praktikum 3 - Export von Datenbanken 18.12.2008 Exportieren von Daten Einsatz von SQL/XML – Bibliothek-Datenbank 20 Praktikum 3 - Export von Datenbanken 18.12.2008 Exportieren von Daten SQL/XML – Funktionen 21 XMLELEMENT Erzeugt ein XML-Element aus einer Werteliste XMLATTRIBUTES erzeugt dazu XML-Attribute Syntax: XMLELEMENT (NAME "<Elementname>", [XMLATTRIBUTES(<Attributliste>), Wertausdrucksliste]) [AS <Name>] [FROM <Relation> AS <R>]; Beispiel: SELECT XMLELEMENT(NAME "Person", XMLATTRIBUTES(ID), Name) AS PersonenInXML FROM Personen; Praktikum 3 - Export von Datenbanken 18.12.2008 Exportieren von Daten SQL/XML – Funktionen 22 XMLQUERY Generiert ein XML-Dokument mittels einer XQuery-Anfrage Syntax: XMLQUERY (‘<XQuery-Konstruktor> ‘ [PASSING BY REF <R>.<Attribut> AS "<Variablenname>"] ) [AS <Name>] [FROM <Relation> AS <R>]; Beispiel: XQUERY for $m in db2-fn:sqlquery( 'SELECT XMLELEMENT(name "Name", P.Name) FROM Personen P') where $m/text()='Lam' return <Nachname> {$m/text()} </Nachname>; Praktikum 3 - Export von Datenbanken 18.12.2008 Exportieren von Daten SQL/XML – Funktionen 23 XMLFOREST Erzeugt aus beliebigen Werten einen Wald aus XMLElementen Syntax: XMLFOREST (<XML-Elementliste>) [AS <Name>] [FROM <Relation> AS <R>]; Beispiel: SELECT XMLFOREST( Name, XMLFOREST(Straße, Stadt) AS Adresse) AS PersonenAdressen FROM Personen; Praktikum 3 - Export von Datenbanken 18.12.2008 Exportieren von Daten SQL/XML – Funktionen 24 XMLCONCAT Konkatiniert mehrere XML-Elemente zu einem Wald Syntax: XMLCONCAT (<XML-Wertausdrucksliste>) [AS <Name>] [FROM <Relation> AS <R>]; Beispiel: SELECT XMLCONCAT( XMLELEMENT(NAME "Name", Name), XMLELEMENT (NAME "Alter", YEAR(DATE('2008-1217') - Geburtstag) - Geburtstag))) AS Personen FROM Personen; Praktikum 3 - Export von Datenbanken 18.12.2008 Exportieren von Daten SQL/XML – Funktionen 25 XMLAGG Aggregiert die XML-Elemente einer Gruppe Syntax: XMLAGG (<XML-Wertausdruck> [ORDER BY <Sortierausdruck>]) [AS <Name>] [FROM <Relation> AS <R>]; Beispiel: SELECT XMLAGG( XMLCONCAT( XMLELEMENT(NAME "Name", Name), XMLELEMENT (NAME "Alter", YEAR(DATE('2008-1217') – Geburtstag))) ORDER BY Name) AS Personen FROM Personen; Praktikum 3 - Export von Datenbanken 18.12.2008 Exportieren von Daten Einsatz von SQL/XML 26 Bestandteile für den Export Quelle Hilfsmittel aus SQL/XML Relationen Tupel Attribute Schlüssel/Fremdschlüssel Ziel SQL-Anfragen XQuery-Anfragen XMLQUERY … XML-Funktionen XML-Deklaration Dokumentknoten Wurzelknoten Referenz des entsprechenden Schemas Verschachtelung von Elementen Select … XMLELEMENT … XMLFOREST … … Verschachtelung 1. 2. 3. SELECT … FROM …, (SELECT … FROM … UNION SELECT … FROM …) AS AA …; xmlquery for $l in db2fn:sqlquery('SELECT …; SELECT XMLQUERY('… $VN ' PASSING BY REF Vorname AS "VN“) FROM Personen; Praktikum 3 - Export von Datenbanken 18.12.2008 Exportieren von Daten Einsatz von SQL/XML – Bibliothek-Datenbank 27 Praktikum 3 - Export von Datenbanken 18.12.2008 Exportieren von Daten Einsatz von SQL/XML – Bibliothek-Datenbank 28 SELECT XMLELEMENT(NAME "Person", XMLATTRIBUTES(ID), Name) AS PersonenInXML FROM Personen; AUTOREN -----------------------------------------------<Person ID="1">Aho</Person> <Person ID="2">Lam</Person> <Person ID="3">Sethi</Person> <Person ID="4">Ullman</Person> <Person ID="5">Davies</Person> <Person ID="6">Studer</Person> <Person ID="7">Warren</Person> <Person ID="8">Greenfield</Person> <Person ID="9">Short</Person> <Person ID="101">Meier</Person> <Person ID="102">Müller</Person> 11 record(s) selected. Praktikum 3 - Export von Datenbanken 18.12.2008 Exportieren von Daten Einsatz von SQL/XML – Bibliothek-Datenbank 29 XQUERY for $m in db2-fn:sqlquery( 'SELECT XMLELEMENT(name "Name", P.Name) FROM 1 -----------------------------------------------<Nachname>Lam</Nachname> 1 record(s) selected. Personen P') where $m/text()='Lam' return <Nachname> {$m/text()} </Nachname>; Praktikum 3 - Export von Datenbanken 18.12.2008 Exportieren von Daten Einsatz von SQL/XML – Bibliothek-Datenbank 30 SELECT XMLQUERY( '<Autor Vorname="{$VN}" Name="{$N}"/>' PASSING BY REF Vorname AS "VN", Name AS "N") AS Autoren FROM Personen AS P; AUTOREN -----------------------------------------------<Autor Vorname="Alfred V." Name="Aho"/> <Autor Vorname="Monica S." Name="Lam"/> <Autor Vorname="Ravi" Name="Sethi"/> <Autor Vorname="Jeffrey D." Name="Ullman"/> <Autor Vorname="John" Name="Davies"/> <Autor Vorname="Rudi" Name="Studer"/> <Autor Vorname="Paul" Name="Warren"/> <Autor Vorname="Jack" Name="Greenfield"/> <Autor Vorname="Keith" Name="Short"/> <Autor Vorname="Knut" Name="Meier"/> <Autor Vorname="Lisa" Name="Müller"/> 11 record(s) selected. Praktikum 3 - Export von Datenbanken 18.12.2008 Exportieren von Daten Einsatz von SQL/XML – Bibliothek-Datenbank 31 SELECT XMLQUERY('<Autor Vorname="{$VN}" Name="{$N}"> <Buch>{$T}</Buch> </Autor>' PASSING BY REF P.Vorname AS "VN", P.Name AS "N", B.Titel AS "T") AS AutorenMitBuchtitel FROM Personen AS P, Autoren AS A, Buecher AS B, ZuweisungBuchAutor AS Z WHERE A.PersonenVerweis = P.ID AND Z.AutorenID = A.ID AND Z.BuchISBN = B.ISBN; AUTORENMITBUCHTITEL -----------------------------------------------<Autor Vorname="Jeffrey D." Name="Ullman"><Buch>Compilers Principles, Techniques, &amp; Tools</Buch></Autor> … <Autor Vorname="John" Name="Davies"><Buch>Semantic Web Technologies</Buch></Autor> … <Autor Vorname="Jack" Name="Greenfield"><Buch>Software Factories</Buch></Autor> 9 record(s) selected. Praktikum 3 - Export von Datenbanken 18.12.2008 Exportieren von Daten Einsatz von SQL/XML – „Laenderinformationen“ 32 XML, QPath, XQuery: Neue Konzepte für Datenbanken WS 07/08 Martin Kost Exportieren von Daten Ausschnitt für vollständige Abbildung 33 XQUERY document {<Laenderinformationen> {attribute xsi:noNamespaceSchemaLocation {'Laenderinformationen.xsd'}} <Laender> {for $l in db2-fn:sqlquery( 'SELECT XMLELEMENT(name "Laender", XMLELEMENT(name "ID", L.ID), XMLELEMENT(name "BevoelkerungsVerweis", L.BevoelkerungsVerweis), XMLELEMENT(name "Hauptstadt", L.Hauptstadt) ) FROM Laender AS L') return <Laender_Tupel>{$l/node()}</Laender_Tupel>} </Laender> </Laenderinformationen>}; Praktikum 3 - Export von Datenbanken 18.12.2008 Exportieren von Daten Ausschnitt für vollständige Abbildung 34 <?xml version="1.0" encoding="UTF-8"?> <Laenderinformationen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Laenderinformationen.xsd"> <Laender> <Laender_Tupel> <ID>GER</ID> <BevoelkerungsVerweis>0</BevoelkerungsVerweis> <Hauptstadt>Berlin</Hauptstadt> </Laender_Tupel> <Laender_Tupel> <ID>ES</ID> <BevoelkerungsVerweis>1</BevoelkerungsVerweis> <Hauptstadt>Madrid</Hauptstadt> </Laender_Tupel> </Laender> </Laenderinformationen> Praktikum 3 - Export von Datenbanken 18.12.2008 Übungen 35 ~fünf XML-Parsing Praktikum 3 - Export von Datenbanken 18.12.2008 3. Übung – Aufgabenstellung Export von Datenbankinhalten mit XML 36 dbprakU8 Erstellen einer vollständigen Abbildung … Autoren ID as re fg 0 s we 34 1 aa gg 89 2 k ds 0 asdf KLOUG 123456 … Daten mit SQL/XML anfragen XML XML XML Dokumente Dokumente Dokumente … 101120 Praktikum 3 - Export von Datenbanken 18.12.2008 3. Übung – Aufgabenstellung 37 Exportieren von Datenbankinhalten mit XML Erstellen einer vollständigen Abbildung für das vorgegebene Relationenschema der BibliothekDatenbank 1. 2. Zielschema: XML-Schema Optional: Schreiben von SQL/XML Anweisungen, welche die Tabellen dem Schema entsprechend exportieren Erstellen von Anfragen in SQL/XML zum Exportieren von Daten aus der Datenbank Bibliothek in ein XMLDokument Beantworten von gestellten Fragen Praktikum 3 - Export von Datenbanken 18.12.2008 3. Übung – Aufgabenstellung Bibliothek-Datenbank 38 Praktikum 3 - Export von Datenbanken 18.12.2008 3. Übung – Aufgabenstellung DB2 39 Umgebung bereitstellen Verbindung mit Datenbank herstellen db2 db2 –t '<SQL-Statement> { ; <SQL-Statement> }' db2–Kommandointerpreter beenden CONNECT TO <datenbankname> Z. B. „dbprakU8“ von Amsel oder Star (dort katalogisiert) db2–Kommandointerpreter starten Bash: source ~db2lehre/sqllib/db2profile C-Shell: source ~db2lehre/sqllib/db2cshrc Windows :db2cmd quit Verbindung mit Datenbank beenden DISCONNECT <datenbankname> CONNECT RESET Praktikum 3 - Export von Datenbanken 18.12.2008 3. Übung – Aufgabenstellung DB2 40 Ausführen von Skripten db2 -tvf script -d -i > filename t = "terminate each statement with a semi-colon" v = "verbose" f = "the file that follows contains the commands to run" d = "add XML-Declaration, …" i = "pretty print for XML" Dokumentationen http://www.ibm.com/developerworks/db2/library/techarticle/dm0604saracco/ http://db2.mi.hdmstuttgart.de/db2help/help/topic/com.ibm.db2.xquery.doc/xqrcontainer.html http://publib.boulder.ibm.com/infocenter/dzichelp/v2r2/topic/com.ibm.db29.d oc/db2z_xml.htm http://www.research.ibm.com/journal/sj/452/ozcan.html Praktikum 3 - Export von Datenbanken 18.12.2008 3. Übung – Aufgabenstellung Anmerkungen 41 Verwendung eines eigenen DBMS Datenbank muss UTF-8 als Encoding verwenden Eingabedaten müssen als UTF-8 übergeben werden, sonst Konflikte bei der XML-Serialisierung In DB2 Hilfreich bei Fehlern mit Bezeichnung SQL… ist der Aufruf von „db2 ? SQL…“ Praktikum 3 - Export von Datenbanken 18.12.2008 Literaturangaben 42 http://www.w3.org http://www.w3.org/TR/2004/REC-xml-20040204/ http://www.w3.org/XML/Schema#dev http://www.w3.org/TR/xmlschema-0/ http://www.edition-w3c.de/TR/2001/REC-xmlschema-020010502/ Klettke/Meyer: XML & Datenbanken, dpunkt, 2003 http://www.ibm.com/developerworks/db2/library/techarticle/dm0604saracco/ http://db2.mi.hdmstuttgart.de/db2help/help/topic/com.ibm.db2.xquery.doc/xqrconta iner.html http://publib.boulder.ibm.com/infocenter/dzichelp/v2r2/topic/com. ibm.db29.doc/db2z_xml.htm http://www.research.ibm.com/journal/sj/452/ozcan.html Praktikum 3 - Export von Datenbanken 18.12.2008 Literaturangaben 43 http://www.ibm.com/developerworks/db2/library /techarticle/dm-0511melnyk/ http://www-01.ibm.com/software/data/db2/xml/ http://www.idealliance.org/proceedings/xml04/p apers/218/querying-xml.html http://www.ibm.com/developerworks/db2/library /techarticle/dm-0602saracco/ Praktikum 3 - Export von Datenbanken 18.12.2008