280 likes | 408 Views
Strukturbasierte Abbildung von XML auf relationale Datenbanken. XML & Datenbanken SS 2004 Marcel Keller. Inhalt des Vortrags. 1.Einführung in das Thema 1.1 Motivation 1.2 Art der zu speichernden Dokumente 2.Automatisches Mapping 2.1. Prinzipielle Abbildungsvorschrift 2.2. Anfragen
E N D
Strukturbasierte Abbildung von XML auf relationale Datenbanken XML & Datenbanken SS 2004 Marcel Keller
Inhalt des Vortrags • 1.Einführung in das Thema • 1.1 Motivation • 1.2 Art der zu speichernden Dokumente • 2.Automatisches Mapping • 2.1. Prinzipielle Abbildungsvorschrift • 2.2. Anfragen • 2.3. Eigenschaften • 3.Benutzerdefiniertes Mapping • 3.1. Abbildungsvorschrift • 3.2. Anfragen • 3.3. Eigenschaften • 4. Was machen die Hersteller? • 4.1.Oracle 9i • 4.2. IBM DB2
1.1.Motivation Warum XML in DB speichern? • Bewährte Datenbanktechnologie nutzen: • Transaktionsmanagement • Logging und Recovery • Synchronisation • Integritätsregeln • Anfrageoptimierung RDBS XML
Einordnung der strukturbasierten Abbildung Speicherung von XML- Dokumenten Textbasierte Abbildung Modellbasierte Abbildung Strukturbasierte Abbildung Benutzerdefiniertes Mapping Vollständiges Automatisches Mapping • Bourret • Deutsch/Fernandez/ • Suciu:STORED • IBM DB2 Extender • Klettke/Meyer • Shanmugasundaram et al • Deutsch/Fernandez/Suciu:STORED • Bourret • Oracle 9i XSU
1.2. Art der zu speichernden XML-Dokumente • Abbildung auf DB-Struktur besonders geeignet für datenzentrierte XML- Dokumente • Bei XML als Medium zum Datenaustausch zwischen Systemen sehr strukturierte Daten • Beispiele: Übermittlung von Bestellungen, Produktdaten usw. • Leichte Abbildung in relationales Schema möglich • Gemischte Inhalte treten selten auf • Reihenfolge von Geschwisterelementen spielt in der Regel keine Rolle • Hierarchische Strukturen lassen sich auf mehrere Tabellen mit entsprechenden Fremdschlüsselbeziehungen abbilden
2. Automatisches Mapping • DTD,XML-Schema muss vorhanden sein • Datenbankentwurf richtet sich nach Struktur der Dokumente • automatische Abbildung eines Schemas von XML-Dokumenten auf Datenbankschema mit Hilfe einer Defaultmappingvorschrift • Das Bedeutet:XML-Strukturen werden von allgemeingültigem, vom Schema unabhängigem, Konzept umgesetzt • bildet ganzes XML-Dokument ab
Anwendung der Vorschrift Beispiel-DTD: CREATE TABLE Hotel ( ID INTEGER PRIMARY KEY, Hotelname VARCHAR(50) NOT NULL, Kategorie INTEGER NOT NULL, Adresse VARCHAR(5) NOT NULL, Telefon VARCHAR(5) NOT NULL, Fax VARCHAR(30) NOT NULL ); <!ELEMENT hotel (hotelname, kategorie, adresse, telefon+, fax)> <!ATTLIST hotel id ID #REQUIRED> <!ELEMENT hotelname (#PCDATA)> <!ELEMENT kategorie (#PCDATA)> <!ELEMENT adresse (plz, ort, strasse, nummer)> <!ELEMENT plz (#PCDATA)> <!ELEMENT ort (#PCDATA)> <!ELEMENT strasse (#PCDATA)> <!ELEMENT nummer (#PCDATA)> <!ELEMENT telefon (#PCDATA)> <!ELEMENT fax (#PCDATA)> Datenbankentwurf: CREATE TABLE Adresse ( ID INTEGER PRIMARY KEY, Plz INTEGER NOT NULL, Ort VARCHAR(50) NOT NULL, Strasse VARCHAR(30) NOT NULL, Nummer INTEGER NOT NULL, FOREIGN KEY (ID) references Hotel (ID) ); CREATE TABLE Telefon ( ID INTEGER NOT NULL, Telefon VARCHAR(30) NOT NULL, PRIMARY KEY (ID,Telefon), FOREIGN KEY (ID) references Hotel (ID) );
Relationenschema für die DTD Hotel Adresse Telefon
Abbildung von Alternativen • Elementnamen werden zu Attributnamen einer Relation • Problem: Viele Nullwerte in der Tabelle (Speicherplatzverschwendung) • Beispiel: .... <!ELEMENT Kontakt (Telefon|Fax|Email)*> <!ELEMENT Telefon (#PCDATA)> <!ELEMENT Fax (#PCDATA)> <!ELEMENT Email (#PCDATA)> .... .... <Kontakt> <Telefon>0381/7774</Telefon> <Fax>0381/7775</Fax> <Email>vertrieb@db-Solutions.de </Email> <Kontakt> .... Kontakt
Abbildung von rekursiven Datendefinitionen • DTD's können beispielsweise rekursiv sein • Unendliche Rekursion auf der Instanzenebene einer Datenbank nicht möglich • Vorgehensweise: • Aufspaltung in separate Tabellen • Verwendung von Primär-/Fremdschlüssel .... <!ELEMENT ort (name, einwohnerzahl, ausflugsziel*)> <!ELEMENT ausflugsziel (ort, entfernung, beschreibung)> .... • Beispiel: Ort Ausflugsziel
Abbildung von Elementordnungen • Dokumentordnung von XML-Dokumenten aus DB nicht erkennbar • Reihenfolge kann aber von Bedeutung sein (Beispiel:Wissenschaftliche Publikationen) • In diesen Fällen: zusätzliches ordnungserhaltendes Attribut • Beispiel: <Buch> <Kapitel>Einführung</Kapitel> <Kapitel>Theoretische Grundlagen</Kapitel> <Kapitel>Konzeption</Kapitel> <Kapitel>Beispiel</Kapitel> <Kapitel>Zusammenfassung</Kapitel> </Buch>
Darstellung von Mixed-Content • Speicherung von Mixed-Content-Elementen in relationalen Datenbanken sehr umständlich • Keine effizienten Anfragen möglich • Selten bei datenzentrierten Dokumenten • Andere Form der Speicherung wählen bei häufigem Vorkommen! • Beispiel: <anreisebeschreibung> Sie können unser Haus auf verschiedenen Wegen erreichen: <bahn>per Bahn: 1km ab Bahnhof Warnemünde</bahn> <auto>per Auto: 19km ab Autobahn A19 Rostock-Berlin</auto> Sie finden uns direkt an der Uferpromenade. </anreisebeschreibung> <!ELEMENT anreisebeschreibung (#PCDATA | auto | bahn)*>
2.2. Anfragen • Datenbankanfragen mit SQL: • Struktur der Datenbank muss bekannt sein • Joins, Aggregatfunktionen usw. lassen sich ausführen • Optimierung übernimmt das DBMS • XML-Anfragen mit den XML-QL:XPath oder XQuery: • Prozess der Abbildung XML auf Datenbank muss protokolliert sein • Datenbankanfrage für XML-Anfrage muss automatisch generiert werden können • Ergebnis für die XML-Anfrage muss generiert werden können
2.3. Eigenschaften der Speicherung mit automatischem Mapping
3. Benutzerdefiniertes Mapping • Art der Speicherung in der Datenbank konnte bisher nicht beeinflusst werden • Mappingvorschrift spezifiziert welche Informationen aus XML-Dokument auf welche Datenbankstruktur abgebildet wird (vollständig oder nur Ausschnitt) • Sehr flexible Methode • Unabhängiges Entwerfen von XML-Schema und Datenbankschema möglich • Speicherung von XML-Dokumenten in existierende Datenbanken möglich • Zusammenführen von XML-Dokumenten mit in anderer Form gespeicherter Daten möglich • Erstellen von Mappingvorschrift erfordert großen manuellen Aufwand
3.1. Beispiel einer Mappingvorschrift nach Ronald Bourret <ClassMap> <ElementType Name="Hotel“/> <ToClassTable> <Table Name="Preise"> </ToClassTable> <PropertyMap> <Attribute Name="url"/> <ToColumn> <Column Name="Hotel_url"> </ToColumn> </PropertyMap> <PropertyMap> <ElementType Name="hotelname"/> <ToColumn> <Column Name="Name"/> </ToColumn> </PropertyMap> <PropertyMap> <ElementType Name="Einzelzimmer"/> <ToColumn> <Column Name="Einzelzimmer"/> </ToColumn> </PropertyMap> ..... </ClassMap> <Hotel url= "www.hotel-huebner.de“> <HotelID>H0001</HotelID> <Name>Hotel Huebner </Name> <Adresse> <PLZ>18119</PLZ> <Ort>Warnemünde</Ort> <Strasse>Seestrasse</Strasse> <Nr>12</Nr> </Adresse> <Preise> <Einzelzimmer>198</Einzelzimmer> </Preise> </Hotel> Preise
3.2. Anfragen • Datenbankanfragen mit SQL: • Struktur der Datenbank muss bekannt sein • XML-Anfragen: (nur sehr eingeschränkt) • Nur möglich wenn Abbildungsprozess in Metadaten protokolliert wird • Alle für Anfrage relevanten Daten müssen dabei gespeichert sein • Problem:unvollständige Speicherung,Art der Speicherung gegenüber Originaldokument stark verändert
3.3. Eigenschaften der Speicherung mit benutzerdefiniertem Mapping
4. Was machen die Hersteller? 4.1. Oracle 9i (automatisches Mapping) • Shredding Storage zur strukturierten Speicherung von XML-Dokumenten • Programm XSU (XML SQL Utility) kann Ergebnisse von SQL-Anfragen in XML ausgeben und Daten aus XML-Dokumente in Tabellen einlesen (Export & Import von XML-Daten) <ROWSET> <ROW num="1"> <PersNr>234<PersNr> <Name>Müller<Name> <Gehalt>4000<Gehalt> </ROW> <ROW num="2"> ... </ROW> ... </ROWSET> Oracle DB
Import von XML-Daten mit XSU • Import: • Name der bestehenden Tabelle und des XML-Dokumentes müssen als Parameter an XSU übergeben werden • XSU erzeugt automatisch SQL-Insert-Befehle • XML- und relationales Schema müssen exakt übereinstimmen • Ist dies nicht der Fall, Anpassung des relationalen Schemas oder Transformation des XML-Dokumentes mit XSLT
4.2. IBM DB2 UDB (benutzerdefiniertes Mapping) • DB2 XML-Extender (ab V.7.1. Bestandteil): • 2 Zugriffs- bzw. Speicherungsformen für XML: • XML-Collection (<Xcollection>): Abbildung auf relationale Strukturen • XML-Column: XML-Datentyp,Speicherung von ganzen XML-Dokumenten oder Fragmenten • Genaue Form der Speicherung wir in DAD-Datei (Document Access Definition) beschrieben • DAD-Datei ist XML-formatiertes Dokument welches auf Client gespeichert ist
Weitere Eigenschaften der DAD-Datei • DAD-Datei muss beim Aktivieren einer XML-Collection (Gruppe relationaler Tabellen die XML enthalten) angegeben werden • dxxEnableCollection(): Eingabe: DB-Name, Name der Collection, DAD als CLOB, Tablespace • Stored-Procedures: • dxxShredXML(): Eingabe: DAD-Datei und XML-Objekt (!Tabellen müssen vorhanden sein!) • dxxInsertXML():Eingabe: Name der aktivierten XML-Collection, XML-Objekt • Verwendung von <Xcollection> in DAD: • 2 Abbildungsmethoden: • SQL-Zuordnung (nur bei Export) • RDB-node-Zuordnung (Import & Export)
Shredding unter Verwendung von RDB-node (Beispiel) Beispiel-DTD: <!ELEMENT Order (Customer, Part+)> <!ATTLIST Order order_key ID #REQUIRED> <!ELEMENT Customer (Name, Email)> <!ELEMENT Name (#PCDATA)> <!ELEMENT Email (#PCDATA)> <!ELEMENT Part (Key, Quantity, ExtendedPrice,Tax,Shipment)> <!ATTLIST Part color CDATA #IMPLIED> <!ELEMENT Key (#PCDATA)> <!ELEMENT Quantity (#PCDATA)> <!ELEMENT ExtendedPrice (#PCDATA)> <!ELEMENT Tax (#PCDATA)> <!ELEMENT Shipment (ShipDate, ShipMode)> <!ELEMENT ShipDate (#PCDATA)> <!ELEMENT ShipMode (#PCDATA)> order_tab relationaler Entwurf: part_tab
XML-Dokumentstruktur und mögliche Zuordnung von Elementen/Attributen zu Spalten von relationalen Tabellen: order_tab part_tab
<?xml version="1.0"?> <!DOCTYPE DAD SYSTEM "dxx_install_verz/samples/db2xml/dtd/dad.dtd"> <DAD> <dtdid>dxx_install_verz/samples/dad/getstart.dtd</dtdid> <validation>YES</validation> <Xcollection> <prolog>?xml version="1.0"?</prolog <doctype>! DOCTYPE Order SYSTEM "dxx_install_verz /samples/db2xml/dtd/getstart.dtd"</doctype> <root_node> <element_node name="Order"> <RDB_node> <table name="order_tab" key="order_key"/> <table name="part_tab" key="part_key order_key"/> <condition> order_tab.order_key = part_tab.order_key </condition> <RDB_node> <attribute_node name="key"> <RDB_node> <table name="order_tab"/> <column name="order_key" type="integer"/> </RDB_node> </attribute_node <element_node name="Customer"> <element_node name="Name"> <text_node> <RDB_node> <table name="order_tab"/> <column name="customer_name" type="varchar(30)"/> </RDB_node> </text_node> </element_node> <element_node name="Email"> <text_node> <RDB_node> <table name="order_tab"/> <column name="email_name" type="varchar(30)"/> </RDB_node> </text_node> </element_node> </element_node> ................ .......... </element_node> </root_node>. </Xcollection> </DAD> DAD-Fragment:Zerlegung mit Xcollection & RDB_node <?xml version="1.0"?> <!DOCTYPE DAD SYSTEM "dxx_install_verz/samples/db2xml/dtd/dad.dtd"> <DAD> <dtdid>dxx_install_verz/samples/dad/getstart.dtd</dtdid> <validation>YES</validation> <Xcollection> <prolog>?xml version="1.0"?</prolog> <doctype>! DOCTYPE Order SYSTEM "dxx_install_verz/samples/db2xml/dtd/getstart.dtd"</doctype> <root_node> <element_node name="Order"> <RDB_node> <table name="order_tab" key="order_key"/> <table name="part_tab" key="part_key order_key"/> <condition>order_tab.order_key = part_tab.order_key</condition> </RDB_node> <attribute_node name="key"> <RDB_node> <table name="order_tab"/> <column name="order_key" type="integer"/> </RDB_node> </attribute_node>
Fortsetzung DAD-Fragment <element_node name="Customer"> <element_node name="Name"> <text_node> <RDB_node> <table name="order_tab"/> <column name="customer_name" type="varchar(30)"/> </RDB_node> </text_node> </element_node> <element_node name="Email"> <text_node> <RDB_node> <table name="order_tab"/> <column name="email_name" type="varchar(30)"/> </RDB_node> </text_node> </element_node> </element_node> ................ .......... </element_node> </root_node>. </Xcollection> </DAD>