Tutorial XML-Validierung in Oracle XML-DB

von Karsten Besserdich

In diesem Praxisbeispiel möchte ich den Einsatz einer flexiblen XML-Schemavalidierung unter Einsatz von Oracle XML-DB erläutern.
Dabei gehe ich auf die notwendigen Arbeitsschritte ein. Dazu zählen u.a. die Auwahl und Definition des Datentypen XMLType, die Registrierung der XSD-Schemata sowie die Wahl der notwendigen Validierungsmethoden.

Als Voraussetzung zur Durchführung dieses Tutorials wird eine installierte Oracle Datenbank in der Version 11R2 benötigt. Des Weiteren ist eine installierte und konfigurierte Oracle XML-DB notwendig.

Anwendungsbeispiel

Es wird eine Tabelle bereitgestellt in der verschiedene XML-Dokumente abgelegt werden können. Beim Einfügen dieser XML-Dokumente wird eine automatisierte Validierung gegen ein im XML-Dokument hinterlegtes XSD-Schema vorgenommen. Diese Tabelle kann z.B. als Importtabelle verwendet werden, die wiederum als Ausgangsbasis für eine weitere Verarbeitung genutzt werden kann.

Tabelle anlegen

Es wird der Oracle Datentyp XMLType mit der Storageoption BINARY XML verwendet. Dieser hat den Vorteil, dass das XML-Dokument pre-parsed im Binärformat in der Oracle Datenbank vorliegt. Dadurch ergeben sich laut Oracle Dokumentation Speicherplatzeinsparungen und schnellere Zugriffe auf Elemente innerhalb des XML-Dokumentes.
Der Spalte xmldaten wird als Binary XMLType ohne Angabe eines konkreten XSD-Schema angelegt. Man spricht dann von einem „non-schema-based binary XMLType„.

XSD-Schema in der Oracle XML-DB registrieren

Ich habe ein XSD-Schema entwickelt, welches eine Bestellung widerspiegeln soll. Es muss eine Lieferadresse sowie mindestens ein Artikel angegeben werden.
Diese XSD-Schema wird wie folgt in der Oracle XML-DB registriert.

Wichtig ist hier die Option dbms_xmlschema.register_binaryxml. Das XSD-Schema ist nun unter dem Qualifier http://www.besserdich.com/bestellung_besserdich_V01_00.xsd innerhalb der Oracle Datenbank erreichbar.

Mit dem folgenden SELECT kann man sich alle lokal registrierten XSD-Schemata ansehen.

Trigger mit Logik zur Validierung des XML-Dokumentes

Beim Einfügen eines Datensatzen in die Tabelle besserdich_bestellungen wird mittels Trigger die XML-Validierung angestoßen.
Hier wende ich einen kleinen Trick an, um einen „non-schema-based XMLType“ in einen „schema-based XMLType“ umzuwandeln, um die XMLType-Methode schemaValidate verwenden zu können. Diese führt die XML-Validierung gegen das im Parameter angegebene XSD-Schema durch. Dieses XSD-Schema muss natürlich in der Oracle XML-DB registriert sein.

Warum verwende ich nicht die XMLType Methode isSchemaValid?

  • ist um den Faktor 3 langsamer als schemaValidate
  • liefert keine qualifizierte Fehlermeldung (Parser Error) sondern nur 0 oder 1 zurück

 

Einfügen eines XML-Dokumentes

1 KOMMENTAR

avatar placeholder
26
.
04
.
2016
 von  Mandy Eichmann
Hallo, mir ist beim Codeblock im Abschnitt "XSD-Schema in der Oracle XML-DB registrieren" aufgefallen, dass hier ein großer bereich leer geblieben ist. Welche Informationen müssen darin stehen bzw. ist dieser Block versehentlich entstanden? Mit freundlichen Grüßen M.E.

SCHREIBEN SIE EINEN KOMMENTAR