Kapitel 14
Die XML-Datenbank
316
Ein XML-Dokument wird in der Datenbank durch ein Objekt vom Typ order143_T
repräsentiert. Wenn ein XML-Dokument gespeichert wird, wird ein Objekt dieses
Typs erzeugt und in die Tabelle gespeichert.
Es ist natürlich auch möglich, eigene Tabellen mit objektrelationaler Speiche-
rungsform anzulegen. Ein bereits registriertes XML-Schema muss dann explizit
referenziert werden.
In eine solche Tabelle können nun XML-Dokumente mit SQL-Anweisungen ein-
gefügt, geändert oder gelöscht werden.
Wenn XML-Dokumente in diese Tabellen gespeichert werden, wird dieses Objekt-
modell genutzt. Die Objekttypen werden mit den Daten des XML-Dokuments
instanziiert und dann in die Tabelle gespeichert. Das XML-Dokument liegt
anschließend als Objekt und nicht mehr als Text in der Datenbank vor. Wenn das
XML-Dokument abgerufen wird, erzeugt die Datenbank die Textrepräsentation
anhand der gespeicherten Objekte neu.
14.3 XML-Dokumente abfragen
Analog zum Einfügen können XML-Dokumente auch per FTP, WebDAV oder
SQL abgerufen werden. Ein XML-Dokument wird am einfachsten mit FTP oder
WebDAV wieder abgerufen. Dazu wird einfach die Datei, die hochgeladen wurde,
wieder heruntergeladen. Da FTP und WebDAV dateiorientierte Protokolle sind,
kann auf diesem Weg nur das vollständige XML-Dokument abgerufen werden.
Zum Zugriff muss man den Pfad im XML DB Repository kennen, und Zugriffe
auf einzelne Elemente oder Teildokument sind nicht möglich.
Eine weitere einfache Möglichkeit zum Abfragen der XML-Dokumente bietet die
Oracle-Datenbank über das HTTP-Protokoll. Somit können XML-Informationen
durch Angabe einer URL abgerufen werden.
Diese Form des HTTP-Zugriffs kann für alle, also auch für relationale Tabellen in
der Oracle-Datenbank genutzt werden.
SQL> create table MEINE_ORDER_TABELLE(
2 id number(10),
3 order_dokument XMLTYPE
4 )
5 xmltype column order_dokument
6 store as object relational
7 xmlschema "XML_Struktur_Der_Order"
8 element "order"
Listing 14.10: Eigene Tabelle mit objektrelationaler XML-Speicherung
14.3
XML-Dokumente abfragen
317
Im Vergleich zu den eingangs dargestellten Zugriffen über das XML DB Reposi-
tory, in dem über Pfad und Dateinamen auf Dokumente zugegriffen wird, erfolgt
der Zugriff hier über Tabellennamen und mit der Möglichkeit der Einschränkung
über XPath. Die Oracle-Datenbank bietet also je nach Anforderung den nötigen
Zugriffsweg an.
XPath ist eine vom W3C standardisierte Abfragesprache für XML-Dokumente.
XPath navigiert in den hierarchischen XML-Dokumenten und verwendet dabei
eine Syntax, die dem Dateisystem auf der Festplatte ähnlich ist. Die folgende
Tabelle stellt die wichtigsten Elemente von XPath kurz vor:
Natürlich erlaubt die Oracle-Datenbank auch den Zugriff mit SQL. Der einfachste
denkbare Zugriff auf die XML-Dokumente ist mit der folgenden SQL-Anweisung
möglich.
Diese SQL-Anweisung selektiert das ganze XML-Dokument. object_value ist ein
vordefiniertes Schlüsselwort. Eine Tabellenspalte kann man hier nicht verwenden,
XPath-Syntax-Element Beschreibung
/
/order
Bezeichnet das Wurzelelement (
Root-Element) des
XML-Dokumentes.
/
/order/customer
Pfadtrennzeichen zur Navigation zu den Kindelementen des
jeweiligen Knotens. Das Beispiel selektiert, ausgehend vom
Knoten
order den Knoten customer.
*
/order/*
Identifiziert alle Kindelemente des jeweiligen Knotens. Das
Beispiel selektiert alle Kindknoten des Wurzelknotens
order.
//
//name
Identifiziert alle Nachkommen des jeweiligen Knotens, gleich-
gültig, ob es direkte Kindelemente sind oder ob sie in der Hierar-
chie weiter unten stehen. Das Beispiel selektiert alle Elemente
mit dem Tag name, egal wo sie im Dokument vorkommen.
@
/order/@id
Kennzeichnet ein XML-Attribut. Das Beispiel selektiert das
Attribut im Wurzelknoten
order.
[]
/order[@id=1]
Bezeichnet ein sogenanntes XPath-
Predicate, also eine ein-
schränkende Bedingung. Das Beispiel selektiert den Wurzelkno-
ten
order, aber nur, wenn das Attribut id den Wert 1 hat. In die
eckigen Klammern kann auch eine Zahl (x) eingetragen werden,
dann wird in einer 1:n-Beziehung das x-te Element ausgewählt.
Tabelle 14.1: Die XPath-Syntax
SQL> select object_value from "order145_TAB"
Kapitel 14
Die XML-Datenbank
318
da diese Tabelle eine Objekttabelle ohne Spalten ist. Verwenden Sie object_value,
wenn Sie wie in diesem Beispiel keine Tabellenspalte nutzen können. Wenn Sie
eine Tabellenspalte nutzen können, verwenden Sie diese.
Die Oracle-Datenbank speichert ein XML-Dokument in einer Tabellenzeile. Nach-
dem man per FTP zwei Dokumente eingefügt hat, lässt sich dies mit bekannter
SQL-Syntax überprüfen:
Mit SQL kann demnach einfach auf ganze XML-Dokumente zugegriffen werden.
Da jedes XML-Dokument in einer Tabellenzeile abgelegt ist, werden spezielle
SQL-Funktionen benötigt, um auf Teile der Dokumente oder auf einzelne Ele-
mente zuzugreifen.
Im Einzelnen stehen folgende Funktionen zur Verfügung:
EXTRACT (doc XMLTYPE, xpath VARCHAR2)
Diese Funktion extrahiert aus einem XML-Dokument den durch den XPath-
Ausdruck festgelegten Teil.
EXTRACTVALUE (doc XMLTYPE, xpath VARCHAR2)
Diese Funktion arbeitet wie EXTRACT, jedoch liefert sie nur skalare Werte zu-
rück. Wenn der XPath-Ausdruck größere XML-Fragmente selektiert, wird eine
Fehlermeldung ausgelöst.
EXISTSNODE (doc XMLTYPE, xpath VARCHAR2)
Diese Funktion prüft, ob der Knoten existiert, auf den der XPath-Ausdruck
zeigt. Wenn ja, liefert die Funktion eine 1 zurück, ansonsten eine 0.
SQL> select count(object_value) from "test"
COUNT(OBJECT_VALUE)
-------------------
2
SQL> select
2 EXTRACTVALUE(object_value,'/order/customer/name')
3 from "test";
EXTRACTVALUE(OBJECT_VALUE,'/ORDER/CUSTOMER/NAME')
--------------------------------------------------
Test1
Test2
Listing 14.11: SQL-Abfrage in der XML-DB

Get Oracle 12c - Das umfassende Handbuch now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.