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