Vom XML Schema zur relationalen Datenbank - Homepage

Werbung
Vom XML Schema zur
relationalen Datenbank
Seminararbeit zum Multimedia-Seminar im SS 2002
Erstellt von:
Thomas Dickel
Inhalt
• Was ist XML Schema?
• Warum XML Daten in eine rel. Datenbank?
• Datentypen von XML Schema
– Vergleich zu SQL Datentypen
• Regeln der Konvertierung in eine DB
• Umsetzung
• Ausblick und Fazit
Was ist XML Schema?
• Schema-Definitionssprache
– In XML definiert
– Löst DTD ab
– Microsoft übernimmt XSD anstelle XDR
• W3C Empfehlung seit Mai 2001
• Zweck: Definition und Beschreibung
von XML-Dokumenten
Warum XML Daten in eine rel. DB bringen?
• XML ist ein Standard in der Industrie
• Vorteil von XML Dokumenten:
– Unabhängig von der eingesetzten
Plattform
– Einfache Handhabung der Daten
• Nachteile bei XML Dokumenten:
– Bedingt durch die Verschachtelung der
Elemente schlecht durchsuchbar
– noch schlechter bei mehreren XML
Dokumenten gleichzeitig
Warum XML Daten in eine rel. DB bringen?
• XML als Datenformat in der Industrie erlaubt
den Datenaustausch zwischen verschiedenen
Unternehmen
• XML Schema unterstützt dies, indem es das
Format definiert, aber die Freiheit der
technischen Umsetzung lässt
Datentypen von XML Schema
• Vorgänger DTD hatte keine richtigen Datentypen
• XML Schema erlaubt über 40 verschiedene
Datentypen
• XML Schema ist auch im Hinblick auf die Integration
primitiver SQL Datentypen entwickelt worden
• XML Schema unterstützt durch ein Typsystem den
Import und Export von Daten in Datenbanken
Datentypen von XML Schema
Datentypen von XML Schema
XML Schema
SQL
string
normalizedString
nvarchar/ntext
boolean
bit
true/false zu 1/0
konvertieren
dateTime time date
dateTime
Zeitangabe im ISO
Format
float
float(24)/real
INF u. NAN n.
unterstützt
double
float(53)/double
INF u. NAN n.
unterstützt
decimal
float
integer
decimal
Byte
Smallint
UnsignedByte
Tinyint
Regeln
•XML Schema
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:dt="urn:schemas-microsoft-com:datatypes"
xmlns:msch="urn:schemas-microsoft-com:mapping-schema">
<xsd:element name="daBuch" msch:relation="daBuch"
type="daBuch_type"/>
<xsd:complexType name="daBuch_type">
<xsd:attribute name="intBuchID" type="xsd:int"/>
<xsd:attribute name="strTitel" type="xsd:string"/>
<xsd:attribute name="intAutorID" type="xsd:int"/>
<xsd:attribute name="strISBN" type="xsd:string"/>
<xsd:attribute name="intVerlagID" type="xsd:int"/>
<xsd:attribute name="smnPreis" type="xsd:decimal"/>
<xsd:attribute name="dtmErscheinungsdatum"
type="xsd:dateTime"/>
</xsd:complexType>
</xsd:schema>
Regeln
•XDR (XML Data Reduced)
<Schema name="Schema1"
xmlns="urn:schemas-microsoft-com:xml-data"
xmlns:dt="urn:schemas-microsoft-com:datatypes">
<ElementType name="daBuch" content="empty"
model="closed">
<AttributeType name="intBuchID" dt:type="i4"/>
<AttributeType name="strTitel" dt:type="string"/>
...
<AttributeType name="dtmErscheinungsdatum"
dt:type="dateTime"/>
<attribute type="intBuchID"/>
<attribute type="strTitel"/>
...
<attribute type=
"dtmErscheinungsdatum"/>
</ElementType>
</Schema>
Regeln
Bei jedem Hinzufügen einer Tabelle:
• Primärschlüssel anlegen
• Schlüssel muß autoinkrementierend sein
• Schlüssel mit ID am Ende kennzeichen
• intBuchID
• Jedes Attribut mit Abkürzung des Datentyps
• strTitel
Regeln
Grundlegende Tabellenerzeugung
Für jedes Element
• Erzeuge Tabelle
• Element hat nur genau ein
Elternelement => neue Tabelle
über Fremdschlüssel mit
Elterntabelle verknüpfen
<Verlag strName="Wrox Press" ...>
<Buch strTitel="Professional XML".../>
</Verlag>
Regeln
• Element kann mehrere Elternelement haben und
kommt jeweils nur einmal vor=>Hinzufügen eines
Fremdschlüssels auf die neue Tabelle zu den
Elterntabellen
Regeln
...
<Buch strTitel="Professional XML Databases">
<Verlag strName="Wrox Press"/>
</Buch>
<Zeitschrift strTitel="dotnetpro">
<Verlag strName="redtec Publishing"/>
</Zeitschrift>
...
Regeln
Kommt das Element bei mehreren
Elternelementen mehrmals vor => mittels
einer zusätzlichen Tabelle abbilden
...
<Buch strTitel="Professional XML Databases">
<Schlagwort strSchlagwort="XML"/>
<Schlagwort strSchlagwort="Database"/>
<Schlagwort strSchlagwort="SQL"/>
</Buch>
...
Regeln
• Nur-Text Elemente, einmal vorkommend
...
<Buch>
<strTitel>Professional XML Databases</strTitel>
<strVerlag>Wrox Press</strVerlag>
...
</Buch>
...
Einfügen einer Spalte zur Tabelle des Elternelements
Regeln
• mehrfach vorkommende Nur-Text Elemente
...
<Buch strTitel="Professional XML Databases">
<strSchlagwort>XML</strSchlagwort>
<strSchlagwort>Database</strSchlagwort>
<strSchlagwort>SQL</strSchlagwort>
...
</Buch>
...
=>Anlegen einer Tabelle für die Elemente mit Fremdschlüssel
auf das Elternelement
Regeln
• einige weitere Regeln sind zur vollständigen
Umsetzung erforderlich
• Prüfen auf Namenskollisionen wichtig
• für das Umsetzen einer DTD in eine relationale
Datenbank sind 18 Regeln erforderlich
Umsetzung
• Manuelle Umsetzung
– Anhand der angegebenen Regeln
Umsetzung vom Schema zu einem
Datenbankmodell
– Anlegen der Datenbanktabellen
– Kopieren der XML-Daten über DOM oder
SAX Schnittstellen
• Vorteil
– Flexibel anpassbar auf die gewünschten
Daten
• Nachteil:
– Zeitaufwendig
– wenig Performancegewinn
– Viel Kodierung und Handarbeit
erforderlich
Umsetzung
• SQL Server 2000: Bulkloading XML Data
– Teil von SQLXML 3.0
– SQLXMLBULKLOAD Objekt
– Wahlweise XDR Schema, XSD Schema oder
selbständige Generierung
Visual Basic code
Dim objBL As New SQLXMLBulkLoad
objBL.ConnectionString = "provider=sqloledb.1;data source=PC1;
database=Books;"
objBL.XMLFragment = True
objBL.ErrorLogFile = "c:\Books\Books.log"
objBL.Execute "C:\Books\Books.xsd", "C:\Books\Books.xml"
Umsetzung
• SQL Server 2000: Bulkloading XML Data
...
<xsd:annotation>
<xsd:appinfo>
<sql:relationship name= "VerlagBuch "
parent= "daVerlag" parent-key= "intVerlagID"
child= "daBuch" child-key= "intBuchID" />
</xsd:appinfo>
</xsd:annotation>
...
Umsetzung
• SQL Server 2000: Bulkloading XML Data
XSD Annotations (Auswahl)
sql:relation => Element ist Tabelle
sql:field => Element ist Spalte
sql:is-constant => Element ist nicht verknüpft,
erscheint aber im XML (z.B. für Root Element)
sql:mapped => Nichtverknüpfte Elemente tauchen
nicht mehr auf
sql:relationship (parent, child, parent-key, childkey) Verknüpfung zwischen XML Elementen
Umsetzung
• SQL Server 2000: Bulkloading XML Data
Vorteil:
– Wenig Codierungsaufwand nötig
• VB-Code, XDR bzw. XML Schema optional
– Flexibel anpassbar durch Anpassung des XML
Schemas
– Performant beim Einlesen der Daten
Umsetzung
• Microsoft XMLViewMapper 1.0
Umsetzung
• Microsoft XMLViewMapper 1.0
– Arbeitet mit SQL Server 2000 zusammen
– Setzt XDR Schema in SQL Schema um
– Ähnlich dem Biztalk Mapper aus dem Microsoft
BizTalk Server
– Sinn: XDR Schema bleibt gleich , die Datenbankimplementation ist aber davon unabhängig
Fazit und Ausblick
• Fazit
• Zukunft:
• XML Schema 1.1
• Microsoft SQLXML
• native XML Datenbanken
Vielen Dank
für Ihre Aufmerksamkeit
Herunterladen