1. 2. 3. 4. 5. 6. 7. 8. 9. Einführung DTD XML Schema XPath XSLT XSL-FO XQuery Web Services XML und Datenbanken Grundlagen: Datenbank im XML-Kontext Einsatzszenarien MS SQL Server und Oracle Datenbank im XML-Kontext Datenbank kann Quelle und Ziel von XML-Daten sein Verarbeitung innerhalb der Datenbank oder außerhalb .NET Java PHP T-SQL / PL/SQL Datenbank XPath .xquery .html .xml .xml Abfrage Transformation Verarbeitung .pdf .rtf Validierung .xsd .dtd Regeln .txt .csv .sql .xslt .xsl (FO) Daten Validierung Transformation / Abfrage Transformation Ausgabe Einsatzszenarien Import-/Export-Schnittstellen können notwendig sein, weil andere Systeme bestimmte Datenausschnitte der exportierenden Datenbank benötigen, oder weil die eigene Datenbank als Ziel für solche Daten vorhanden ist. Techniken der Serialisierung und Deserialisierung können interessant sein, wenn per XML die Serialisierung durchgeführt werden soll und die Daten nicht in Form einer reinen XML-Datei gespeichert werden soll, sondern stattdessen die Daten relational zerlegt und in einer Datenbank gespeichert werden sollen. Direkte Speicherung von XML oder Zerlegung von XML in relationale Daten kann sinnvoll sein, wenn komplexe Nachrichten im Rahmen von Transaktionen mit anderen Systemen ausgetauscht werden und deren Inhalt dauerhaft gespeichert werden soll. Hier ist es dann möglich, sich zu entscheiden, ob man XML-Daten bei Bedarf dynamisch erstellt und sie beim Speichervorgang relational zerlegt oder ob sie im jeweiligen XML-Datentyp der Datenbank oder sogar in eine native XMLDatenbank in einer Ordnerstruktur gespeichert werden. MS SQL Server und Oracle Bereich Oracle MS SQL Server XML-Datentyp Ja, XMLType Ja, XML Direkte Speicherung Validierung mit XML Schema XML-Bearbeitung Ja Ja Mit PL/SQL und Java Unterstützung für DOM, XSLT durch PL/SQL Weitere Pakete für XMLVerarbeitung in PL/SQL Ja Verschiedene alternative Werkzeuge sind umgesetzt. Ja Ja Mit .NET T-SQL bietet nicht die Werkzeuge wie PL/SQL Ja Umfangreiche Unterstützung bei Integration und Entwicklung Ja (bis Version 2008) Unterstützung zur allgemeinen Verwendung. Aufgrund von Unterschieden bei der XMLUmsetzung nicht die gleiche Bedeutung wie bei Oracle. XPath und XQuery XML-Erzeugung bei Abfrage Native Webservices XML Schema Ja Verschiedene alternative Werkzeuge sind umgesetzt. Fragen... Einsatz von XML: Integration De-/Serialisierung Import/Export Einsatz von XML: Integration De-/Serialisierung Import/Export XML: Integration Möglichkeiten der XML-Integration: Einsatz des Dateisystems: Die XML-Daten werden gar nicht in der Datenbank gespeichert, sondern stattdessen im Dateisystem gespeichert. Relationale Speicherung: Die XML-Daten werden vollständig zerlegt und die einzelnen Datenfelder (Elemente, Attribute) komplett oder soweit es das eigene Datenmodell erfordert, in Spalten gespeichert. Objektrelationale Speicherung: Die Daten werden teilweise in einfachen relationalen Spalten und teilweise in Objekte Objekt-Sammlungen zerlegt und gespeichert. Einsatz von XML-Datentyp: Die Daten werden vollständig oder teilweise als XML im Datentyp XML(Type) gespeichert. XML: Integration Einsatz des Dateisystems Die XML-Daten werden gar nicht in der Datenbank gespeichert, sondern stattdessen im Dateisystem gespeichert. In der Datenbank befinden sich dann nur Verweise auf die einzelnen Dateien. Bei Bedarf können sie von der Festplatte geladen und verarbeitet werden. Als zusätzliche Variante können sie in Form von BFILEs gespeichert werden. XML: Integration Datenbank Dateisystem Tabelle 1 Tabelle 2 XML: Integration Relationale Speicherung Die XML-Daten werden vollständig zerlegt und die einzelnen Datenfelder (Elemente, Attribute) komplett oder soweit es das eigene Datenmodell erfordert, in Spalten gespeichert. Die Eltern-Kind-Strukuren werden wieder zu einzelnen Tabellen(beziehungen) aufgelöst. Es findet gar keine XML-Speicherung statt, sondern nur ein Austausch und eine Umwandlung. Dieses Verfahren ist nur bei datenorientierten Dokumenten ohne gemischtem Inhaltsmodell denkbar. XML: Integration Dozent Themenverteilung XML: Integration Objektrelationale Speicherung Die Daten werden teilweise in einfachen relationalen Spalten und teilweise in Objekte Objekt-Sammlungen zerlegt und gespeichert. Die Eltern-Kind-Strukturen führen dabei in jedem Fall zu Objektsammlungen pro einzelnem Eltern-Datensatz. Untervarianten lassen sich bilden, wenn nur objektrelationale Aufbereitung stattfindet und das gesamte Dokument als Objekt gespeichert wird, oder wenn auf unterschiedliche Weise relationale und objektrelationale Techniken gemischt werden. Es findet gar keine XML-Speicherung statt, sondern eine Zerlegung. Dieses Verfahren ist nur bei datenorientierten Dokumenten ohne gemischtes Inhaltsmodell denkbar. XML: Integration Name Dozent Adresse Objekt Spalten Oracle Themenverteilung Collection mit Objekten XML: Integration Einsatz von XML(Type) Die Daten werden vollständig oder teilweise als XML im Datentyp XML(Type) gespeichert. Untervarianten lassen sich denken, wenn verschiedene Bereiche in unterschiedlichen Datentypen und mit unterschiedlicher oder auch keiner Zerlegung gespeichert werden. Weitere Untervarianten ergeben sich, wenn Datentypen wie CLOB/binary oder VARCHAR(2), die allerdings nicht die Vorteile wie XML(Type) bieten, genutzt werden. Dieses Verfahren ist sowohl bei datenorientierten Dokumenten als auch bei dokumentenorientierten Dokumenten mit gemischtem Inhaltsmodell denkbar. XML: Integration Name Dozent Adresse Objekt Spalten Themenverteilung Oracle XMLType XML: Integration Dozent Name / Adresse / Thema-Liste XMLType Oracle Einsatz von XML: Integration De-/Serialisierung Import/Export XML: De-/Serialisierung Serialisierung bedeutet, dass der Zustand eines Objekts in eine Zeichenkette zerlegt wird. Dies ist im Normalfall eine in jeder objektorientierten Sprache bereits vorhandene Möglichkeit. Es entstehen dabei automatisch generierte Zeichenketten, die durchaus kein XML-Format besitzen (müssen). Neben der automatischen Serialisierung in eine beliebige, jedoch von der Programmiersprache vorgegebene Zeichenkette gibt es auch die Möglichkeit, eine eigene Serialisierung vorzunehmen. Dies ist je nach Programmiersprache einfacher oder schwieriger. Durch die Serialisierung ist es möglich, den Objektzustand dauerhaft zu speichern. Dies erlaubt es, ein Objekt in eben diesem Zustand zu einem späteren Zeitpunkt wieder zu aktivieren. XML: De-/Serialisierung Software .xml XMLSchnittstelle XMLSchnittstelle Datenbank Tab 1 Tab 2 Tab 1 Tab 2 Tab 2 ... Bereich 1 Tab 3 ... Bereich 2 XML: De-/Serialisierung Als mögliche Lösungen für die konkrete Implementierung einer solchen Schnittstelle stehen für den Export Prozeduren, Funktionen und Sichten, für den Import dagegen hauptsächlich Funktionen und Prozeduren zur Verfügung. Unterschiede bei Funktionen und Prozeduren Während eine Funktion rechtsseitig einer Zuweisung aufgerufen werden kann und ihre XML-Daten daher in Form des Rückgabewerts zurückliefert, wird normalerweise eine Prozedur verwendet, welche über einen Ausgabeparameter die benötigten Daten der Anwendung zur Verfügung stellt. Eine Prozedur ist auch geeignet, XML-Daten entgegenzunehmen und sie dann passend zu zerlegen. Eine Funktion bietet zwar auch eine analoge Möglichkeit an, Parameter zu empfangen, sie muss allerdings auch einen Rückgabewert liefern, der möglicherweise gar nicht benötigt wird. Eine Sicht eignet sich insbesondere für die Zusammenstellung der Daten im Bereich des Exports. XML: De-/Serialisierung Einsatz von XML: Integration De-/Serialisierung Import/Export XML: Import/Export Grundsätzlich muss man unterscheiden, ob der Exportvorgang zu konkreten XML-Dokumenten und damit auch Dateien führt, oder ob es sich um reine Datenströme handelt. Während die Datenströme in jedem Fall nur auf Bedarf erzeugt werden und damit nicht notwendigerweise mit Hilfe von zeitgesteuerten DB-Jobs erzeugt werden können, kann hier auch keine zusätzliche Speicherung möglich sein. Daher werden die XMLDatenströme sowohl in Form eines Webservices als auch durch Interaktion mit einem Formular erzeugt und bereitgestellt. Die Dokumente dagegen werden als physische Dateien erzeugt und können auf unterschiedliche Weise in einem öffentlichen Ordner(verzeichnis) platziert und damit erneut persistent gespeichert werden. In vielen Fällen dürften dies auch FTP- oder WebDAV-Ordner sein, die über eine sichere Verbindung genutzt werden können. XML: Import/Export XML: Import/Export Funktion: Eine Funktion ermöglicht die Erzeugung von XML-Daten mit allen XMLTechniken von T-SQL/PL/SQL und liefert die Daten über einen Rückgabewert zurück. Prozedur: Eine Prozedur liefert die Daten nur über einen Ausgabe-Parameter. Im Normalfall gibt es allerdings eine Vielzahl an äußeren Programmiersprachen, welche genau diesen Ausgabeparameter viel einfacher abfangen können als den Rückgabewert einer Funktion. Die Übergabe von Parametern für Filter gelingt über die Übergabeparameter. Sicht: Eine Sicht stellt in Form einer virtuellen Tabelle die Möglichkeit dar, XMLDaten so anzubieten, dass man eine einfache Abfrage nutzen kann. In diesem Fall muss allerdings sicher gestellt sein, dass die äußere Anwendung dieses Abfrageergebnis auch verarbeiten kann. Eine Filterung der Daten kann dann über SQL durchgeführt werden, was zu umfangreicheren Filtermöglichkeiten führt als eine begrenzte Anzahl an Parametern. XML: Import/Export Oracle XML: Import/Export Der Import-Vorgang ist nicht nur aus einfach nachzuvollziehenden Gründen das zum Export passenden Pendant. Dieser Umstand wirkt sich auch sehr auf die allgemeine Architektur der Import-/ExportSchnittstelle aus. Bedeutsam ist, dass auf der einen Seite natürlich auch verschiedene Wege genutzt werden können (Export über Webservice, Import dagegen über Upload-Formular), dass aber grundsätzlich auch die Option besteht, beide Vorgänge über den gleichen Kanal durchzuführen, sofern ein wechselseitiger Datenaustausch überhaupt innerhalb des Systemumfangs liegen soll. XML: Import/Export XML: Import/Export Prozedur: Eine Prozedur erwartet als Übergabeparameter die XML-Daten und zerlegt sie relational. Als Ausgabeparameter kann dann eine Erfolgsmeldung übergeben werden. Im Normalfall ist dies die beste Lösung. Funktion: Eine Funktion erwartet die Daten ebenfalls als Übergabeparameter, kann insbesondere auch eine Erfolgsmeldung als Rückgabewert liefern. Sie muss allerdings in Form eines längeren T-SQLSkripts genutzt werden und auf der rechten Seite der Zuweisung erscheinen, was nicht immer gewünscht/vorteilhaft sein wird. Tabelle: Eine Tabelle kann über einen INSERT-Befehl die XML-Daten erwarten, validieren und dann speichern. Ein Trigger oder eine weitere Prozedur könnte sie dann weiter relational zerlegen. Dies erlaubt die Zwischenspeicherung von XML-Daten zur Kontrolle durch einen Benutzer oder eine Automatik, die nicht unmittelbar mit dem Speichervorgang gleichzeitig abläuft. XML: Import/Export Oracle Fragen... XML-Verarbeitung: XML-APIs ISO-Standard: SQLX-Funktionen XML APIs: Oracle XMLType: PL/SQL, C und C++ APIs mit XML-Operationen für XMLType-Daten – Validierung, Transformation. DBMS_XMLDOM: PL/SQL Implementierung der DOM API für XMLType. DBMS_XMLGEN: PL/SQL API für die Transformation von SQL Abfrageergebnissen nach XML. DBMS_XMLPARSER: PL/SQL Implementierung der DOM Parser API für XMLType. DBMS_XMLSAVE: PL/SQL API für XML-zu-DB Umwandlung. DBMS_XMLSCHEMA: PL/SQL API für Verwaltung von XML Schema in Oracle DB – Registrierung, Löschen. DBMS_XMLSTORE: PL/SQL API für Speicherung von XML in relationalen Tabellen. DBMS_XSLPROCESSOR: PL/SQL Implementierung eines XSLT-Prozessors. XML APIs: MS SQL Server XML-Datentyp: T-SQL-Datentyp mit XML-Operationen für Validierung und Abfrage. SELECT…FOR XML: Funktionen zur Abfrage von relationalen Daten und Transformation in XML. XML Schema: T-SQL-Funktionen für Validierung mit XML Schema. XQuery/XPath: T-SQL-Funktionen für Abfragen von XML-Daten. XML-Verarbeitung: XML-APIs ISO-Standard: SQLX-Funktionen ISO-Standard: SQLX-Funktionen Die SQLX-Funktionen sind die erste und einfachste Möglichkeit, aus gegebenen relationalen Daten mit Hilfe von Abfragen XML-Daten zu erzeugen. Umgesetzt in Oracle und IBM DB2, nicht aber in MS SQL Server Unterschiedliche Abdeckung der definierten Funktionen in den jeweiligen Datenbanken und DB-Versionen. ISO-Standard: SQLX-Funktionen Funktion Beschreibung XMLElement () Erzeugt ein Element im Ausgabestrom und nimmt als Werte entweder einen Textknoten (gültiger Spaltenausdruck, fester Vorgabewert) oder weitere Elemente auf. XMLAttributes() Erzeugt für ein gegebenes Element ein Attribut, das als Wert entweder einen gültigen Spaltenausdruck oder einen festen Wert übernimmt. XMLForest() Erzeugt mehrere Elemente im Ausgabestrom, besitzt allerdings im Vergleich zu XMLElement()eine verkürzte Syntax. XMLCdata Erstellt einen CDATA-Bereich in der Form <![CDATA[ inhalt]]>. XMLComment Erstellt einen XML-Kommentar in der Form <!--inhalt-->. XMLParse Erstellt eine XML-Instanz unter Angabe der drei Schlüsselwörter DOCUMENT (Ausgabe muss unter einem einzigen Elternelement liegen) oder CONTENT (einfache Erstellung des XML-Inhalts) sowie optional in beiden Fällen WELLFORMED (Angabe der Wohlgeformtheit ohne Prüfung durch DB). XMLPI Erstellt eine Prozessoranweisung in der Form <?name inhalt?> mit zwei Parametern für Name und Inhalt. ISO-Standard: SQLX-Funktionen Funktion Beschreibung XMLConcat() Verbindet über Konkatenation alle übergebenen Ausdrücke zu einem XML-Ausdruck. Dabei setzen sich diese Ausdrücke aus einzelnen XMLType-Ausdrücken in Form eines XMLSequenceType-Ausdrucks zusammen, wobei die Funktion als Rückgabewert nur einen einzigen XMLType-Ausdruck liefert. XMLAGG() Erzeugt aus einer Liste übergebener bzw. abgefragter Reihen, die zusätzlich über ORDER BY und GROUP BY eingerichtet werden können, Kind-Elemente eines Elements. Diese Funktion eignet sich besonders, um Hierarchien korrekt abzubilden und die Form des ursprünglichen relationalen Ergebnisses mit Wiederholungen (z. B. bei Tabellenverknüpfungen) zu vermeiden. XMLColAttVal() Liefert eine Reihe von Elementen mit dem Namen column, die im name-Attribut den Spaltennamen oder einen vorgegebenen Namen tragen und als Textknoten den Wert enthalten. Diese Funktion eignet sich für die Erzeugung von attributorientiertem Inhalt. XMLQuery Führt eine XQuery-Abfrage durch, wobei die allgemeine Syntax XMLQuery(abfrage PASSING [BY VALUE] ausdruck [AS name] RETURNING CONTENT) lautet und abfrage für die XQuery-Abfrage steht und RETURNING CONTENT angibt, dass das Ergebnis ein XML-Dokument/Fragment ist. XMLRoot Erstellt einen XML-Prolog in der Form <?xml version = "version" [ STANDALONE = "{yes | no}" ]?>. XMLSerialize Erstellt unter Angabe der beiden Schlüsselwörter DOCUMENT (Ausgabe muss unter einem einzigen Elternelement liegen) oder CONTENT (einfache Erstellung des XML-Inhalts) eine Zeichenkette oder einen LOB, der den XML-Inhalt enthält. Es ist alternativ eine Datentypangabe von VARCHAR2, VARCHAR oder CLOB erlaubt. XMLTable Wandelt das XML-Ergebnis einer XQuery-Abfrage wieder in eine relationale Ergebnismenge um. XMLTransform Erlaubt unter Verwendung eines XSLT-Dokuments im Datentyp XMLType und einer XML-Eingabe als XMLType eine Umwandlung der Eingabedaten. ISO-Standard: SQLX-Funktionen 9i R2 10g R1 10g R2 XMLAGG XMLCOLATTVAL XMLCONCAT XMLELEMENT XMLFOREST XMLSEQUENCE XMLTRANSFORM XMLAGG XMLCOLATTVAL XMLCONCAT XMLELEMENT XMLFOREST XMLSEQUENCE XMLTRANSFORM XMLAGG XMLCDATA XMLCOLATTVAL XMLCOMMENT XMLCONCAT XMLELEMENT XMLFOREST XMLPARSE XMLPI XMLQUERY XMLROOT XMLSEQUENCE XMLSERIALIZE XMLTABLE XMLTRANSFORM http://downloadwest.oracle.com/docs/cd/ A91202_01/901_doc/ server.901/ a90125/toc.htm http://downloadwest.oracle.com/docs/cd/ B14117_01/server.101/ b10759/toc.htm http://www.oracle.com/ pls/db102/to_toc? pathname=server.102% 2Fb14200%2Ftoc.htm& remark=portal+ %28Books%29 Fragen... Durchgehende Modellierung Durchgehende Modellierung Häufige Integration von Datenbank und relationale Modellierung Objektorientierte Software und OO-Modellierung XML und hierarchische/XML-Modellierung Verschiedene Sichten auf Daten Relationale Sicht in der Datenbank Objektorientierte Sicht für Software und DB Formulare, Berichte, Importe/Exporte Möglichkeit und Gelegenheit, überlappende und sich ergänzende Datenstrukturen zu identifizieren und gleichartig über die Schichten hinweg zu modellieren und zu nutzen Durchgehende Modellierung Durchgehende Modellierung Die Abbildung stellt zwei verschiedene Vorgehensweisen dar: Setzt man den traditionellen Weg über SQL und Ergebnismengen ein, so ruft man Daten in einem nicht weiter typisierten Format ab und formt aus diesen dann die benötigten Objektstrukturen. Sollen Daten wieder zur Datenbank geschickt werden, muss man sie in einzelne SQLAnweisungen umwandeln, die dann die relationalen Strukturen referenzieren und die entsprechenden Daten einhalten. Setzt man auf die XML Schema-Bindung, dann erhält man direkt von der Datenbank das benötigte XML, welches dann in die benötigten Objekte umgewandelt wird. Der umgekehrte Weg ist genauso einfach, denn hier wandelt man die Objektstruktur in XML um und übergibt dieses an die Datenbank, die dann die XML-Daten relational zerlegen muss. Durchgehende Modellierung Bedeutung von XML Schema Primär-Fokus: Modellierung von XML-Daten Bindung an Java-/.NET-Klassen und Mapping zwischen XML- und OO-Strukturen Generierung von XML Schema aus OO-Klassen oder Generierung von OO-Klassen aus XML Schema Relationale Zerlegung von XML und OO-Strukturen für DB-Speicherung Durchgehende Modellierung Fragen...