Home ORDIX AG             Dienstleistung             Trainingsshop    Kunden / Referenzen Aktuelles    Kontakt
Home  Pfeil  ORDIX News  Pfeil  2/2010  Pfeil  Datenbanken
suche: 
Dieser Artikel richtet sich an Datenbankentwickler und Software-Architekten, die XML im Zusammenspiel mit Oracle-Datenbanken einsetzen möchten.

Glossar

DOM
Document Object Model. DOM ist ein API für den Zugriff auf XML- Dokumente. Das API erlaubt, dynamisch die Struktur, das Layout und den Inhalt von XML-Dokumenten zu ändern.
XML
Extensible Markup Language (XML). XML ist eine so genannte META-Sprache zur Beschreibung von Dokumenten. Ein Vorteil von XML ist der vereinfachte Austausch von Daten, da XML-Formate in einer strengen Grammatik definiert werden können und so die Implementierung von zuverlässigen Schnittstellen erlauben.
XML-Schema
Ein XML-Schema beschreibt die Struktur von XML-Dokumenten und erlaubt ihre inhaltliche Überprüfung.
XMLType
XMLType ist ein Oracle Datentyp, durch den SQL-Operationen auf XML-Inhalte genauso ermöglicht werden wie XML-Operationen auf SQL-Inhalte.
XPath
XPath stellt Funktionen und Ausdrücke zur Verfügung, um Knoten innerhalb von XML-Dokumenten zu lokalisieren. Mit XPath können auch Ausdrücke ausgewertet und Berechnungen durchgeführt werden. Es dient als Grundlage für XSLT, XPointer und Xquery.
Titelbild


Oracle und XML: Datentyp XMLType (Teil IV)

Verwendung von „Binary XML“

Seit der Oracle-Version 9i steht XMLType als neuer Datentyp in der Datenbank zur Verfügung. In der Version Oracle 11g gibt es darüber hinaus die neue Speicherungsmethode „Binary XML“ für XMLType-Daten. Diese Speicherungsform und ihre Verwendung werden wir in diesem Artikel vorstellen.

BEGIN
  DBMS_XMLSCHEMA.registerSchema(
    SCHEMAURL => 'http://www.ordix.de/binary_xml.xsd',
    SCHEMADOC => '<XMLSCHEMA>',
    LOCAL     => FALSE,
    GENTYPES  => FALSE,
    GENBEAN   => FALSE,
    GENTABLES => FALSE,
    FORCE     => FALSE,
    OPTIONS   => DBMS_XMLSCHEMA.REGISTER_BINARYXML,
    OWNER     => USER);
END;
Abb. 1: Registrierung des XML-Schemas.
CREATE TABLE binary_xml_test1(
id NUMBER(2),
doc XMLTYPE)
XMLTYPE COLUMN doc STORE AS BINARY XML;
Abb. 2: STORE AS BINARY XML.
CREATE TABLE binary_xml_test2(
id NUMBER(2),
doc XMLTYPE)
XMLTYPE COLUMN doc STORE AS BINARY XML
XMLSCHEMA "http://www.ordix.de/binary_xml.xsd"
ELEMENT "Auto";
Abb. 3: STORE AS BINARY XML XMLSCHEMA.
CREATE TABLE binary_xml_test3(
id NUMBER(2),
doc XMLTYPE)
XMLTYPE COLUMN doc STORE AS BINARY XML
XMLSCHEMA "http://www.ordix.de/binary_xml.xsd"
ELEMENT "Auto" ALLOW NONSCHEMA;
Abb. 4: STORE AS BINARY XML XMLSCHEMA ... ALLOW NONSCHEMA.
CREATE TABLE binary_xml_test4(
id NUMBER(2),
doc XMLTYPE)
XMLTYPE COLUMN doc STORE AS BINARY XML
ALLOW ANYSCHEMA;
Abb. 5: STORE AS BINARY XML ALLOW ANYSCHEMA.
CREATE TABLE binary_xml_test5(
id NUMBER(2),
doc XMLTYPE)
XMLTYPE COLUMN doc STORE AS BINARY XML
ALLOW ANYSCHEMA ALLOW NONSCHEMA;
Abb. 6: STORE AS BINARY XML ALLOW ANYSCHEMA ALLOW NONSCHEMA.
INSERT INTO binary_xml_test2
VALUES (1,XMLType('<?xml version="1.0" encoding="UTF-8"?>
       <Auto xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:noNamespaceSchemaLocation="http://www.ordix.de/
       binary_xml.xsd">
          <Herstellerliste>
             <Hersteller id="1">
               <Name>Motorenwerke Rüdesheim</Name>
             </Hersteller>
          </Herstellerliste>
</Auto>'));
Abb. 7: Einfügen von Werten.

Speichermethoden bisher

XMLType-Daten konnten bisher auf zwei verschiedene Arten gespeichert werden:

Bei der strukturierten Speicherung ist das Abspeichern der XML-Dokumente und der Zugriff auf die Dokumente wesentlich performanter, da nicht mehr das ganze XML-Dokument gelesen werden muss. Zudem können Indizes bei der strukturierten Speicherung für eine bessere Performance sorgen. Darüber hinaus wird weniger Speicherplatz benötigt, da nicht zu jedem in der XMLType-Spalte abgelegten XML-Dokument jeder Tag-Name abgespeichert werden muss.

Binary XML

Binary XML ist eine neue Speicherungsmethode für XMLType-Daten. Dabei soll diese Speicherungsform die bisherigen nicht ablösen, sondern ergänzen. Die Speicherungsmethode Binary XML speichert XML-Dokumente in einem speziell für XML-Daten entworfenen Binärformat in der Datenbank.

Ressourcen

Die Verwendung von Binary XML führt zu einer effizienteren Speicher-, CPU- und Netzwerkauslastung. Da die XML-Dokumente im speziellen Binärformat in der Datenbank abgelegt werden, wird der Speicherplatz, der für das Speichern der XML-Dokumente benötigt wird, reduziert. Es ist nicht mehr nötig, andere Kompressionstechniken, wie z. B. das Zippen von Dokumenten, zu verwenden. Die Speicherung als Binary XML sorgt für eine effektivere Speicher- und CPU-Auslastung, da das Parsen und Serialisieren der XML- Daten beim Austausch der Daten zwischen den einzelnen Applikationsschichten bzw. vor dem Speichern in der Datenbank wegfällt. Bei der Verwendung von Binary XML als Speichermethode für XML-Dokumente wird der Netzwerk-Overhead verringert, da für die Übertragung das kompakte, interne Format verwendet wird und nicht das traditionelle serialisierte Textformat.

Nachteilig ist dabei allerdings, dass die XML-Dokumente nicht mehr ohne weiteres editiert werden können. Hier müssen dann die entsprechenden Funktionen des Datentyps XMLType verwendet werden. Weitere Informationen über XMLType finden Sie in dem ORDIX News Artikel der Ausgabe 1/2007 [1] .

Streaming XPath Evaluierung

Nutzt man die Speichermethode Binary XML, so kann man Knoten und Dokumentteile effizient aus dem XML-Dokument extrahieren. Das Format Binary XML erlaubt Streaming XPath Evaluierung, womit mehrere Knoten oder mehrere Teile des XML-Dokuments in einem einzigen Dokumentdurchlauf extrahiert werden können.

Neuer Parser/XML-Schema-Validator

Für die Speichermethode Binary XML liefert Oracle einen neuen Parser und einen neuen XML-Schema-Validator mit. Weder der Parser noch der Validator nutzen einen DOM-Baum zum Parsen bzw. Validieren der Daten. Dies führt zu einer geringeren CPU-Auslastung, weil der DOM-Baum immer im Hauptspeicher aufgebaut wird. Zudem wird der Overhead beim Update von XML-Dokumenten verringert, da nach einem Update nicht mehr das komplette XML-Dokument sondern nur der aktualisierte Teil des Dokuments neu validiert wird.

Flexibler XML-Schema-Support

Binary XML bietet einen flexiblen XML-Schema-Support. So können beim Anlegen einer Tabelle verschiedene Encodings angegeben werden. Über diese Encodings wird geregelt, ob die zu speichernden XML-Dokumente einem XML-Schema genügen müssen oder nicht. Im Gegensatz zur strukturierten Speicherung des XMLType kann hier aber nicht nur ein Schema angegeben werden, das in der gesamten Tabelle verwendet wird. Es können mehrere XML-Schemata angegeben werden, denen die zu speichernden XML-Dokumente genügen müssen.

Standard W3C XLIFF

Binary XML unterstützt den Standard W3C XLIFF. Wenn das Dokument sprachspezifische Inhalte enthält, so wird beim Zugriff auf das XML-Dokument nur der Inhalt zurückgeliefert, der zu den entsprechenden Locale-Einstellungen passt.

Verwendung

Nachdem wir erfahren haben, was Binary XML ausmacht, wenden wir uns nun der eigentlichen Verwendung dieser Speicherungsform zu. Dabei wird vor allem auf die einzelnen Encoding-Optionen dieser Speicherungsform eingegangen.

Registrierung des XML-Schemas

Damit ein XML-Schema für das Encoding einer XMLType-Spalte, die die Speicherungsform Binary XML verwendet, eingesetzt werden kann, muss es zunächst in der Datenbank registriert werden. Es reicht dabei nicht, das Schema auf dem herkömmlichen Weg zu registrieren. Es muss die Option DBMS_XMLSCHEMA.REGISTER_BINARYXML mitgegeben werden. Erst dann kann das XML-Schema beim Anlegen von Tabellen und beim Einfügen von Werten verwendet werden (siehe Abbildung 1).

Wird das XML-Schema auf dem herkömmlichen Weg (DBMS_XMLSCHEMA.registerSchema('http://www.ordix.de/binary_xml.xsd',xml_schema);) registriert, so kommt es beim Anlegen einer Tabelle mit einer XMLType-Spalte mit der Speicherungsform Binary XML, zu folgendem Fehler:

FEHLER in Zeile 1: ORA-44424: BINARY-XML-Speicher erfordert, dass XML-Schema für BINARY-Gebrauch registriert ist.

Um den Fehler zu beheben, muss das XML-Schema, wie in Abbildung 1 beschrieben, registriert werden.

Anlegen einer Tabelle

Beim Anlegen von Tabellen mit XMLType-Spalten gibt man im Storage Clause an, welche Speicherungsform verwendet werden soll. Wird die Speicherungsform nicht angegeben, so nimmt die Datenbank die textbasierte Speicherung. Soll die Speicherungsform Binary XML verwendet werden, so gibt man im Storage Clause die Option „STORE AS BINARY XML“ an. Zusätzlich zu dieser Option kann auch noch angegeben werden, ob und wie ein XML-Schema verwendet werden soll. Dazu muss beim Anlegen der Tabelle das Encoding mit angegeben werden. Die einzelnen Optionen werden in den folgenden Absätzen beschrieben.

STORE AS BINARY XML

Beim Speichern von XML-Dokumenten in einer mit diesem Encoding angelegten Spalte, wird kein XML-Schema verwendet. Die XML-Dokumente werden beim Insert und beim Update nicht gegen ein XML-Schema validiert. Wenn im XML-Dokument ein XML-Schema angegeben worden ist, wird dieses ignoriert (siehe Abbildung 2).

STORE AS BINARY XML XMLSCHEMA

Diese Option wird verwendet, wenn das zu speichernde XML-Dokument einem einzelnen XML-Schema entsprechen soll. Das entsprechende CREATE TABLE Statement ist in Abbildung 3 dargestellt. Dieses Schema muss zunächst, wie oben beschrieben, in der Datenbank registriert werden. Möchte man in eine solche Spalte XML-Dokumente einfügen, die nicht dem registrierten XML-Schema entsprechen, so kommt es zu einem Fehler.

STORE AS BINARY XML XMLSCHEMA ... ALLOW NONSCHEMA

Beim Speichern von XML-Dokumenten in einer mit diesem Encoding angelegten Spalte, wird für alle XML-Schema-basierten XML-Dokumente ein auf dem referenzierten Schema basierendes Encoding verwendet. Für alle nicht-XML-Schema-basierten XML-Dokumente wird ein nicht-schema-basierendes Encoding verwendet. Die Abbildung 4 zeigt das entsprechende CREATE TABLE Statement. Das angegebene Schema muss zunächst, wie in Abbildung 1 beschrieben, in der Datenbank registriert werden. Versucht man in eine Spalte ein XML-Dokument einzufügen, welches ein XML-Schema referenziert, diesem aber nicht entspricht, kommt es zu einem Fehler. Versucht man in eine Spalte ein XML-Dokument einzufügen, das kein XML-Schema referenziert, kommt es nicht zu Fehlern.

STORE AS BINARY XML ALLOW ANYSCHEMA

Beim Speichern von XML-Dokumenten in einer mit diesem Encoding angelegten Spalte, wird für alle XML-Dokumente ein auf dem referenzierten XML-Schema basierendes Encoding verwendet. Es wird jeweils das XML-Schema verwendet, das im XML-Dokument referenziert wird. Abbildung 5 zeigt das entsprechende CREATE TABLE Statement. Das angegebene Schema muss zunächst in der Datenbank registriert werden. Versucht man in eine solche Spalte ein XML-Dokument einzufügen, das kein XML-Schema referenziert oder das nicht dem referenzierten XML-Schema entspricht, so kommt es zu einem Fehler.

STORE AS BINARY XML ALLOW ANYSCHEMA ALLOW NONSCHEMA

Beim Speichern von XML-Dokumenten in einer mit diesem Encoding angelegten Spalte, wird für alle XML-Schema-basierten XML-Dokumente ein auf dem referenzierten Schema basierendes Encoding verwendet. Es wird jeweils das XML-Schema verwendet, das im XML-Dokument referenziert wird. Das angegebene Schema muss zunächst an der Datenbank registriert werden. Für alle nicht-XML-Schema-basierten XML-Dokumente wird ein nicht-schema-basierendes Encoding verwendet. Das entsprechende CREATE TABLE Statement ist in Abbildung 6 dargestellt.

Einfügen von Werten

Wenn nun ein XML-Dokument in die Tabelle eingefügt werden soll (siehe Abbildung 7), muss dieses XML-Dokument nicht nur wie bisher wellformed sondern auch valid sein, d. h. es muss dem registrierten XML-Schema entsprechen. Ansonsten kann das XML-Dokument nicht in die Datenbank eingefügt werden und es wird ein Fehler ausgegeben.

Fazit

Die neue Speicherungsform Binary XML bietet sehr viele Möglichkeiten, XML-Dokumente in der Datenbank abzuspeichern. Der flexible Schema-Support sorgt dafür, dass komplett unterschiedliche XML-Dokumente in einer Spalte abgespeichert werden können und trotzdem gegen ein Schema validiert werden. Doch auch wenn kein XML-Schema verwendet wird, bietet die neue Speicherungsform durch die geringere Nutzung von Ressourcen große Vorteile.

Wann welche Speicherungsform einsetzen?

Nun gibt es drei Speicherungsformen für den Datentyp XMLType. Da stellt sich die Frage, welche Speicherungsform wann eingesetzt werden sollte. Diese Frage werden wir im nächsten Teil dieser Reihe beleuchten.

 

Kathrin Hammerschmidt (info@ordix.de).