Ueb16

Werbung
Datenbanken
16. Übung
XML (eXTensible Markup Language) ist eine standardisierte Syntax zur Beschreiubung von
hierarchischen Daten.
XML ist keine Programmiersprache sondern ein universelles Format für strukturierte Dokumente und
Daten. Die Tag-basierte Syntax ähnelt der von HTML (Hypertext Markup Language). Während HTML
einem Web-Browser vorgibt, wie die Daten anzuzeigen sind, teilt XML den Applikationen mit, was die
Daten bedeuten.
XML eignet sich zur Lösung von Austauschproblemen zwischen heterogenen Systemen. XML und die
dazugehörigen Toolkits werden stetig weiterentwickelt 1.
Aufgabe: XML und Oracle9i bzw. Oracle 10g
JDBC-Applikation
Browser
SQL-NetZugriff
Externe Tools
HTTP
ftp, WebDAV
Oracle 10g Datenbank
XML - DB
XML – Repository
XMLType - Tabellen
Abb.: XML-DB
Lösungsschritte:
Folgende Komponenten in Oracle9i bieten XML-Unterstützung, oder sind speziell für XML entwickelt
worden:
• Speichern von XML-Daten in einer Tabelle vom Typ XMLType
• XML Dokumente als Daten speichern
• XML Dokumente als Dokumente speichern
• XML Parser und XSL Processors (Java, C, C++, PL/SQL)
• XML Class Generator (Java, C++)
• XML SQL Utilities für Java
• XSQL Servlet
• XML Transviewer Beans
• XDK-Tools (Software-Devoloper-Kits)
• iFS (Internet File System)
• Oracle9i und interMedia
1
Aktuelle Informationen unter http://www.w3.org
1
Datenbanken
1. Speichern von XML-Daten in einer Tabellenspalte vom Typ XMLType
XML-Datentyp
Mit der Einführung des neuen XML-spezifischen Datentyps XMLType machte Oracle einen großen
Schritt in Richtung einer echten XML-Integration. Der neue Datentyp kann wie die bisher vorhandenen
Datentypen verwendet werden, also z.B. als Datentyp für eine Tabellenspalte oder in Prozeduren der
von Oracle entwickelten Scriptsprache PL/SQL. XMLType werwendet die eingebauten XML Parser
und den XML Prozessor.
Mit XMLType kann man XML-Daten in der Datenbank speichern und abfragen. XMLType besitzt
Member-Funktionen für den Zugriff, das Extrahieren und Abfragen von XML-Daten mit einer Klasse
von Operationen, die man XPath-Ausdrücke nennt.
XMLType


ist ein Datentyp in der Oracle-Datenbank
wird im nativen Datenbankformat gespeichert
ist über alle Oracle-Schnittstellen mit SQL-Zugriff zugänglich und wird folgendermaßen
gespeichert
als CLOB
oder Objekt-relational in Tabellen und Views
Bsp.: Tabelle mit dem XMLType-Datentyp
-- Anlegen der Tabelle
create table my_xml_table
(
schluessel NUMBER,
xml_column SYS.XMLTYPE
);
-- Anzeigen der Spalten mit desc
desc my_xml_table
-- Erhöhen der Beschreibungstiefe
-- fuehrt zur Sichtbarmachung der Member-Funktionen
-- für die XMLType-Spalte
set describe depth 5
desc my_xml_table
Name
Null?
----------------------------------------- -------SCHLUESSEL
XML_COLUMN
Typ
----------------------NUMBER
SYS.XMLTYPE
METHOD
-----STATIC FUNCTION CREATEXML RETURNS XMLTYPE
Argument Name
Typ
In/Out Defaultwert?
------------------------------ ----------------------- ------ -------XMLDATA
CLOB
IN
METHOD
-----STATIC FUNCTION CREATEXML RETURNS XMLTYPE
Argument Name
Typ
In/Out Defaultwert?
------------------------------ ----------------------- ------ -------XMLDATA
VARCHAR2
IN
METHOD
-----MEMBER FUNCTION EXTRACT RETURNS XMLTYPE
Argument Name
Typ
In/Out Defaultwert?
------------------------------ ----------------------- ------ -------XPATH
VARCHAR2
IN
2
Datenbanken
METHOD
-----MEMBER FUNCTION EXISTSNODE RETURNS NUMBER
Argument Name
Typ
In/Out Defaultwert?
------------------------------ ----------------------- ------ -------XPATH
VARCHAR2
IN
METHOD
-----MEMBER FUNCTION ISFRAGMENT RETURNS NUMBER
METHOD
-----MEMBER FUNCTION GETCLOBVAL RETURNS CLOB
METHOD
-----MEMBER FUNCTION GETBLOBVAL RETURNS BLOB
Argument Name
Typ
In/Out Defaultwert?
------------------------------ ----------------------- ------ -------CSID
NUMBER
IN
METHOD
-----MEMBER FUNCTION GETSTRINGVAL RETURNS VARCHAR2
METHOD
-----MEMBER FUNCTION GETNUMBERVAL RETURNS NUMBER
METHOD
-----STATIC FUNCTION CREATEXML RETURNS XMLTYPE
Argument Name
Typ
------------------------------ ----------------------XMLDATA
CLOB
SCHEMA
VARCHAR2
VALIDATED
NUMBER
WELLFORMED
NUMBER
In/Out
-----IN
IN
IN
IN
Defaultwert?
--------
METHOD
-----STATIC FUNCTION CREATEXML RETURNS XMLTYPE
Argument Name
Typ
------------------------------ ----------------------XMLDATA
BLOB
CSID
NUMBER
SCHEMA
VARCHAR2
VALIDATED
NUMBER
WELLFORMED
NUMBER
In/Out
-----IN
IN
IN
IN
IN
Defaultwert?
--------
METHOD
-----STATIC FUNCTION CREATEXML RETURNS XMLTYPE
Argument Name
Typ
------------------------------ ----------------------XMLDATA
BINARY FILE LOB
CSID
NUMBER
SCHEMA
VARCHAR2
VALIDATED
NUMBER
WELLFORMED
NUMBER
In/Out
-----IN
IN
IN
IN
IN
Defaultwert?
--------
METHOD
3
DEFAULT
DEFAULT
DEFAULT
DEFAULT
DEFAULT
DEFAULT
Datenbanken
-----STATIC FUNCTION CREATEXML RETURNS XMLTYPE
Argument Name
Typ
------------------------------ ----------------------XMLDATA
VARCHAR2
SCHEMA
VARCHAR2
VALIDATED
NUMBER
WELLFORMED
NUMBER
In/Out
-----IN
IN
IN
IN
Defaultwert?
--------
METHOD
-----STATIC FUNCTION CREATEXML RETURNS XMLTYPE
Argument Name
Typ
------------------------------ ----------------------XMLDATA
UNDEFINED
SCHEMA
VARCHAR2
ELEMENT
VARCHAR2
VALIDATED
NUMBER
In/Out
-----IN
IN
IN
IN
Defaultwert?
--------
METHOD
-----STATIC FUNCTION CREATEXML RETURNS XMLTYPE
Argument Name
Typ
------------------------------ ----------------------XMLDATA
REF CURSOR
SCHEMA
VARCHAR2
ELEMENT
VARCHAR2
VALIDATED
NUMBER
In/Out
-----IN
IN
IN
IN
Defaultwert?
--------
METHOD
-----STATIC FUNCTION CREATEXML RETURNS XMLTYPE
Argument Name
Typ
------------------------------ ----------------------XMLDATA
ANYDATA
SCHEMA
VARCHAR2
ELEMENT
VARCHAR2
VALIDATED
NUMBER
In/Out
-----IN
IN
IN
IN
Defaultwert?
--------
METHOD
-----MEMBER FUNCTION EXTRACT RETURNS XMLTYPE
Argument Name
Typ
------------------------------ ----------------------XPATH
VARCHAR2
NSMAP
VARCHAR2
In/Out Defaultwert?
------ -------IN
IN
METHOD
-----MEMBER FUNCTION EXISTSNODE RETURNS NUMBER
Argument Name
Typ
------------------------------ ----------------------XPATH
VARCHAR2
NSMAP
VARCHAR2
In/Out Defaultwert?
------ -------IN
IN
METHOD
-----MEMBER FUNCTION TRANSFORM RETURNS XMLTYPE
Argument Name
Typ
------------------------------ ----------------------XSL
XMLTYPE
PARAMMAP
VARCHAR2
In/Out Defaultwert?
------ -------IN
IN
DEFAULT
4
DEFAULT
DEFAULT
DEFAULT
DEFAULT
DEFAULT
DEFAULT
DEFAULT
DEFAULT
DEFAULT
DEFAULT
DEFAULT
Datenbanken
METHOD
-----MEMBER PROCEDURE TOOBJECT
Argument Name
-----------------------------OBJECT
SCHEMA
ELEMENT
Typ
----------------------UNDEFINED
VARCHAR2
VARCHAR2
In/Out
-----OUT
IN
IN
Defaultwert?
-------DEFAULT
DEFAULT
METHOD
-----MEMBER FUNCTION ISSCHEMABASED RETURNS NUMBER
METHOD
-----MEMBER FUNCTION GETSCHEMAURL RETURNS VARCHAR2
METHOD
-----MEMBER FUNCTION GETROOTELEMENT RETURNS VARCHAR2
METHOD
-----MEMBER FUNCTION CREATESCHEMABASEDXML RETURNS XMLTYPE
Argument Name
Typ
In/Out Defaultwert?
------------------------------ ----------------------- ------ -------SCHEMA
VARCHAR2
IN
DEFAULT
METHOD
-----MEMBER FUNCTION CREATENONSCHEMABASEDXML RETURNS XMLTYPE
METHOD
-----MEMBER FUNCTION GETNAMESPACE RETURNS VARCHAR2
MEMBER PROCEDURE SCHEMAVALIDATE
METHOD
-----MEMBER FUNCTION ISSCHEMAVALIDATED RETURNS NUMBER
METHOD
-----MEMBER PROCEDURE SETSCHEMAVALIDATED
Argument Name
Typ
In/Out Defaultwert?
------------------------------ ----------------------- ------ -------FLAG
UNDEFINED
IN
DEFAULT
METHOD
-----MEMBER FUNCTION ISSCHEMAVALID RETURNS NUMBER
Argument Name
Typ
------------------------------ ----------------------SCHURL
VARCHAR2
ELEM
VARCHAR2
In/Out
-----IN
IN
METHOD
-----MEMBER FUNCTION INSERTXMLBEFORE RETURNS XMLTYPE
Argument Name
Typ
------------------------------ ----------------------XPATH
VARCHAR2
VALUE_EXPR
XMLTYPE
In/Out Defaultwert?
------ -------IN
IN
5
Defaultwert?
-------DEFAULT
DEFAULT
Datenbanken
NAMESPACE
VARCHAR2
IN
RETURNS XMLTYPE
Typ
----------------------VARCHAR2
XMLTYPE
VARCHAR2
In/Out Defaultwert?
------ -------IN
IN
IN
DEFAULT
METHOD
-----MEMBER FUNCTION DELETEXML RETURNS XMLTYPE
Argument Name
Typ
------------------------------ ----------------------XPATH
VARCHAR2
NAMESPACE
VARCHAR2
In/Out Defaultwert?
------ -------IN
IN
DEFAULT
METHOD
-----MEMBER FUNCTION APPENDCHILDXML
Argument Name
-----------------------------XPATH
VALUE_EXPR
NAMESPACE
METHOD
-----FINAL CONSTRUCTOR FUNCTION XMLTYPE RETURNS SELF AS RESULT
Argument Name
Typ
In/Out
------------------------------ ----------------------- -----XMLDATA
CLOB
IN
SCHEMA
VARCHAR2
IN
VALIDATED
NUMBER
IN
WELLFORMED
NUMBER
IN
METHOD
-----FINAL CONSTRUCTOR FUNCTION XMLTYPE RETURNS SELF AS RESULT
Argument Name
Typ
In/Out
------------------------------ ----------------------- -----XMLDATA
BLOB
IN
CSID
NUMBER
IN
SCHEMA
VARCHAR2
IN
VALIDATED
NUMBER
IN
WELLFORMED
NUMBER
IN
METHOD
-----FINAL CONSTRUCTOR FUNCTION XMLTYPE RETURNS SELF AS RESULT
Argument Name
Typ
In/Out
------------------------------ ----------------------- -----XMLDATA
BINARY FILE LOB
IN
CSID
NUMBER
IN
SCHEMA
VARCHAR2
IN
VALIDATED
NUMBER
IN
WELLFORMED
NUMBER
IN
METHOD
-----FINAL CONSTRUCTOR FUNCTION XMLTYPE RETURNS SELF AS RESULT
Argument Name
Typ
In/Out
------------------------------ ----------------------- -----XMLDATA
VARCHAR2
IN
SCHEMA
VARCHAR2
IN
VALIDATED
NUMBER
IN
WELLFORMED
NUMBER
IN
METHOD
-----6
DEFAULT
Defaultwert?
-------DEFAULT
DEFAULT
DEFAULT
Defaultwert?
-------DEFAULT
DEFAULT
DEFAULT
Defaultwert?
-------DEFAULT
DEFAULT
DEFAULT
Defaultwert?
-------DEFAULT
DEFAULT
DEFAULT
Datenbanken
FINAL CONSTRUCTOR FUNCTION XMLTYPE RETURNS SELF AS RESULT
Argument Name
Typ
In/Out
------------------------------ ----------------------- -----XMLDATA
UNDEFINED
IN
SCHEMA
VARCHAR2
IN
ELEMENT
VARCHAR2
IN
VALIDATED
NUMBER
IN
METHOD
-----FINAL CONSTRUCTOR FUNCTION XMLTYPE RETURNS SELF AS RESULT
Argument Name
Typ
In/Out
------------------------------ ----------------------- -----XMLDATA
ANYDATA
IN
SCHEMA
VARCHAR2
IN
ELEMENT
VARCHAR2
IN
VALIDATED
NUMBER
IN
METHOD
-----FINAL CONSTRUCTOR FUNCTION XMLTYPE RETURNS SELF AS RESULT
Argument Name
Typ
In/Out
------------------------------ ----------------------- -----XMLDATA
REF CURSOR
IN
SCHEMA
VARCHAR2
IN
ELEMENT
VARCHAR2
IN
VALIDATED
NUMBER
IN
Defaultwert?
-------DEFAULT
DEFAULT
DEFAULT
Defaultwert?
-------DEFAULT
DEFAULT
DEFAULT
Defaultwert?
-------DEFAULT
DEFAULT
DEFAULT
Jetzt können mit der CREATEXML-Methode von XMLType Werte in my_xml_table eingefügt
werden:
insert into my_xml_table (schluessel,xml_column)
values (1,SYS.XMLTYPE.CREATEXML
('<skriptum>
<title> Datenbanken </title>
<kapitel num = "1 ">
<title> Typologie der Datenbanksysteme </title>
<text> Erstes Kapitel aus dem Skript Datenbanken
von Prof. Sauer
</text>
</kapitel>
</skriptum>')
);
Die Daten lassen sich mit der Methode GETCLOBVAL abfragen:
select m.xml_column.GETCLOBVAL() as XML_Daten
from my_xml_table m
where schluessel = 1;
XMLType-Funktion
getClobVal
isFragment
getStringVal
getNumberVal
extract
existsNode
Beschreibung
Gibt den Inhalt von XMLType als CLOB-Value zurück
Handelt es sich bei dem Dokument tatsächlich um ein Fragment
Ruft einen Zeichenfolgewert aus einem XML-Knoten ab
Ruft einen numerischen Wert aus einem XML-Knoten ab
Extrahiert einen teil des Dokuments mit einer Xpath-ähnlichen Syntax und
gibt einen XMLType zurück
Überprüft den Xpath-Ausdruck auf resultierende Knoten
Zur Verbesserung der Performance von Abfragen mit dem XMLType-Datentyp können auf Spalten
funktionale Indizes angelegt werden:
create index xml_index on my_xml_table (xml_column)
7
Datenbanken
indextype is ctxsys.context;
XMLType und XML-Schema
Beim Erstellen des Datentyps XMLType kann angegeben werden, daß
-
er einem vorregistrierten Schema entspricht
er in einem Objekt-relationalen Format mit Hilfe einer Zuordnung gespeichert wird, die im
XML-Schema spezifiziert ist und als XML-Schemaobjekt bezeichnet wird.
XML-Schemas werden mit Hilfe des DBMS_XMLSCHEMA-Package registriert.
2. Generierung von XML
Lösungsmöglichkeiten: Oracle eigene SQL-Funktionen,
Oracle-eigene SQL-Funktionen
SYS.XMLGEN(), SYS_XMLAGG() legen aus bestehenden objektrelationalen Daten XMLType-Werte
an. Falls eine Spalte mit dem XMLType-Datentyp angelegt wird, speichert Oracle die Daten in einem
CLOB-Datentyp.
SYS_XMLGEN SQL-Funktion
fmt
SYS_XMLGEN
(
expr
)
(konvertiert den als Parameter angegebenen Ausdruck als XML-Dokument)
Mit Hilfe der Funktion SYS_XMLGEN ist es möglich, einen als Parameter übergebenen Ausdruck in
ein XML-Dokument zu transformieren. Der Ausdruck kann ein skalarer Wert, ein Objekttyp oder eine
XMLType Instanz sein. Die Transformationen geschieht dabei nach z.T. einfachen Regeln. Skalare
Werte werden zu Textknoten, Objekttypen werden zu verschachtelten Elementen. Sie übernimmt auch
ein optionales XMLGenFormatType-Objekt zur Definition von Formatierungsoptionen für das
Ergebnis.
SYS_XMLGEN übernimmt einen Ausdruck, der auf eine bestimmte Zeile und Spalte der Datenbank
evaluiert, und liefert eine Instanz des Typs SYS.XMLType mit einem XML-Dokument.
Bsp.: Mit Hilfe der SQL-Anweisung
select SYS_XMLGEN(name).getStringVal()
from angestellte
erhält man in Oracle9i ein XML-Dokument mit dem folgenden Aussehen:
SYS_XMLGEN(NAME).GETSTRINGVAL()
-------------------------------<?xml version="1.0"?>
<NAME>Fritz</NAME>
Die Speicherung dieses Datentyps erfolgt als CLOB. Für zukünftige Versionen plant Oracle
zusätzliche objekt-relationale Speichermöglichkeiten.
Die Abfragemöglichkeiten auf dem Datentyp XMLType basieren auf XPath. Mit Funktionen wie
existsNode(XPath_zum_Knoten) kann bspw. überprüft werden, ob der mit dem XPath-Ausdruck
angegebene Knoten innerhalb des zu durchsuchenden Dokuments existiert.
SYS_XMLAGG SQL-Funktion2
fmt
SYS_XMLAGG
2
(
expr
)
Siehe auch XMLAGG
8
Datenbanken
erzeugt ein einziges XML-Dokument aus einer Menge von XMLType-Werten. Dazu werden die XMLFragmente verkettet und zusätzlich ein Top-Level-Tag eingeführt, das standarmäßig ein ROWSET ist.
SYS_XMLAGG aggregiert alle XML-Dokumnete oder –Fragmente, die von expr repräsentiert werden
und produziert ein einziges XML-Dokument. Sie fügt ein neues einschließendes Element mit dem
Namen ROWSET ein. Falls das XML-Dokument anders formatiert werden soll, ist das über fmt zu
erreichen, dass eine Instanz des SYS.XMLGenFormatType-Objekts ist.
Bsp.: select SYS_XMLAGG(SYS_XMLGEN(name)).getClobVal()
from angestellte
where name like 'W%';
SYS_XMLAGG(SYS_XMLGEN(NAME)).GETCLOBVAL()
-----------------------------------------<?xml version="1.0"?>
<ROWSET>
<NAME>Werner</NAME>
<NAME>Willi</NAME>
</ROWSET>
DBMS_XMLGEN PL/SQL Paket
- DBMS_XMLGEN PL/SQL-Paket generiert XML-Dokumente nach SQL-Abfrage
- Dokument in CLOB-Datenfeld
- liefert Optionen zum Ändern von Tag-Name für ROWSET, ...
- ist in C implementiert und im Datenbank-Kernel implementiert.
SQLX-Standard (noch in Entwicklung)
(Versuch, die Schnittstelle zwischen SQL und XML zu standardisieren).
Oracle bietet eine Auswahl von SQL-Funktionen3: XMLElement(), XML-Forrest(), XMLAgg(),
XMLConcat()
3. XPath
Ausgangspunkt ist eine Baumstruktur (ähnlich DOM) eines XML-Dokumentss mit 7 Knotenarten
(Wuzelelement, Element, Text (#PCDATA), Attribut, Kommentar, Processing Instruction,
Namensraumangaben) und 4 Datentypen (Knotenmenge, string, boolean, number). Die Struktur setzt
sich aus 3 Bestandteilen zusammen: Pfadausdrücke (zentrales Konzept), logische und
mathematische Verrknüpfungen), Funktionsausdrücke.
Pfadausdruck:
- Schägstrich ’/’ ist Pfadseperator
- zerlegt Pfadausdruck in Schritte: /Schritt/Schritt/…/Schritt
XML DB Path: Standard zur Navigation durch XML-Dokumnete.
existsnode()
extractValue()
extract()
4. XML-Schema
- W3C-Standard zur Festlegung von Inhalt und Struktur von XML-Dokumenten
DBMS_XMLSCHEMA
3
Ähnlich den Oracleeigenen Funktionen: SYS_XMLGEN(), SYS_XMLAGG()
9
Datenbanken
Die XML-Schmafunktionalität ist über DBMS_XMLSCHEMA verfügbar. DBMS_XMLSCHEMA
unterstützt


-
das Registrieren von Schemas. XML-Scemas können folgendermaßen registriert werden:
lokal, sichbar nur für den Eigentümer
globla, sichtbar und verwendbar für alle Datenbankbenutzer
das Generieren von Schemas
das Löschen von Schemas
5. XML-Repository
6. XML Developer’s Kit
Oracle bietet XML-Developper-Kit (XDK) an für Java, JavaBeans, C, C++, PL/SQL. XDK (Sammlung
von Tools für die Schnittstelle von XML und Oracle DB) besteht aus:
-
XMLParser
XLST Prozessor (unterstützt XSLT 1.0)
XML Schema Prozessor
XML Class Generator
XML SQL Utility (XSU)
XSQL Servlet (auf SQL Abfragen aufbauend können XML-Dokumente generiert werden und
mit Hilfe von XSLT in beliebige Formate umgewandelt werden
Oracle SOAP
Einsatzgebiet: Anbindung von XML_Systemen an bestehende Datenbanken mit relational
gespeicherten Daten. Der Einsatz kann mit jeder DB erfolgen, für die es JDBC-Treiber gibt. Der Vorteil
liegt in der klaren Trennung zwischen XML und SQL (KnowHow-Trennung zwischen XML-Entwickler
und DB-Entwickler).
XDK-Komponente
XML Parser
XSLT Prozessor
XML Schema Prozessor
XML Class Generator
XML SQL Utilty
XSQL Servlet
XML Transviewer Beans
TransXUtility
Oracle SOAP
XML Compressor
Java
x
x
x
x
x
x
x
x
x
x
C++
x
x
x
x
C
x
x
x
PL/SQL
x
x
x
x
XML Parser
Oracle stellt XML-Parser für verschiedene Programmiersprachen bereit, die auf allen Plattformen
angeboten werden, für die Oracle angeboten wird. Die Parser unterstützen DOM (Document Object
Model) und SAX (Simple API for XML) und beinhalten ab der Version 2 einen integrierten XSLTProzessor.
XML-Parser gibt es für DOM 2.0, SAX 2.0, JAXP 1.1.
XML-Parser dienen zur DTD-, XML Schema-Validierung
XML-Parser werden aufgerufen über die Java-Klassen DOMParser und SAXParser bzw. über das
Kommandozeilentool oraxml.
XML-Parser sind Grundlage bzw. Bestandteil der weiteren XDK-Komponeten
XML Schema Prozessor
-
baut auf XML-Parser auf
10
Datenbanken
-
Aufruf über DOMParser.setSchemaValidationMode()
XSLT Prozessor
-
Formatumwandlung von XML-Dateien mit einer Vielzahl von Zielformaten: http, ASCII, XML,
…
Aufruf über Java-Klassen XSL-Prozessor oder Kommandozeilentool oraxsl
XML Class Generator
-
Automatische Generierung von Java/C++-Klassen auf der Basis von DTD- oder XMLSchema-Definitionen
Aufruf über Java-Klassen SchemaClassGenerator bzw. DTDClassGenerator oder
Kommandozeilentoll oracg
Auf den XML-Parsern baut ein spezieller XML-Klassengenerator auf, der Javaklassen aus einer XMLDTD erzeugt. Werden diese Java-Klassen benutzt, können Java-Anwendungen XML-Dokumente
erstellen, die zur gegebenen DTD passen. Der Klassengenerator arbeitet in Verbindung mit dem
Oracle XML-Parser für Java, welcher die DTD parst und das geparste Dokument an dem
Klassengenerator übergibt.
XML SQL Utility (XSU)
ist
1. Das Werkzeug zur Umwandlung der relationalen Daten in XML-Format
2. Das Werkzeug zum stückweisen (piecewice) Update von XML-Dokumenten
3. ein Werkzeug, dessen Funktionalitäten erreichbar sind über: Java API, PL/SQL, Java-Befehl
Mit der XML_SQL Utility (XSU) können Ergebnisse einer SQL-Abfrage in XML konvertiert werden.
XSU unterstützt das dynamische Generieren von DTDs und das Einfügen von XML in Datenbanken.
Mit XSU können auch Zeichen in Datenbankobjekten aktualisiert oder gelöscht werden.
Auf XSU greift man über Java und PL/SQL-API zu. Die XSU-Klassen sind Teil der OracleKernelsoftware.
Das XML SQL Werkzeug für Java besteht aus Java-Klassen, die z.B. eine Anfrage auf die Datenbank
weiterleiten und ein XML-Dokument (Text oder DOM) aus den Ergebnissen generieren, oder XMLDaten in eine Datenbank schreiben.
Durch eine zusätzliche Funktionalität des XML SQL Utility ist es ebenso möglich, eine DTD zu
generieren, die auf dem Schema einer Tabelle basiert. Diese DTD kann als Eingabe für den XML
Klassengenerator benutzt werden.
Da ein PL/SQL-API verfügbar ist, kann man direkt mit SQL auf die XSU-Funktionalitäten zugreifen. So
kann bspw. Die XML-Version der Tabelle „angestellte“ über die XSU PL/SQL-Prozeduren generiert
werden:
set serveroutput on
DECLARE
queryCtx DBMS_XMLQuery.ctxType;
result
CLOB;
xmlstr
varchar2(32767); -- Variable zur Konvertierung lob nach varchar
line
varchar2(2000);
begin
queryCtx := DBMS_XMLQuery.newContext('select * from angestellte');
-- bestimme das Ergebnis
result := DBMS_XMLQuery.getXML(queryCtx);
-- Das Resultat kann nun in Tabellen aufgenommen werden
xmlstr := DBMS_LOB.substr(result,32767);
LOOP
exit when xmlstr is null;
line := substr(xmlstr,1,instr(xmlstr,chr(10))-1);
DBMS_OUTPUT.put_line('| ' || line);
xmlstr := substr(xmlstr,instr(xmlstr,chr(10))+1);
END LOOP;
-- Schliessen Query
DBMS_XMLQuery.closeContext(QueryCtx);
11
Datenbanken
end;
/
Das Ergebnis ist die „angestellte“-Tabelle, formatiert mit XML-Tags
<?xml version = '1.0'?>
<ROWSET>
<ROW num="1">
<ANG_ID>A1</ANG_ID>
<NAME>Fritz</NAME>
<GEBDATUM>1/2/1950 0:0:0</GEBDATUM>
<ABT_ID>OD</ABT_ID>
<JOB_ID>SY</JOB_ID>
</ROW>
<ROW num="2">
<ANG_ID>A2</ANG_ID>
<NAME>Tom</NAME>
<GEBDATUM>3/2/1951 0:0:0</GEBDATUM>
<ABT_ID>KO</ABT_ID>
<JOB_ID>IN</JOB_ID>
</ROW>
<ROW num="3">
<ANG_ID>A3</ANG_ID>
<NAME>Werner</NAME>
<GEBDATUM>1/23/1948 0:0:0</GEBDATUM>
<ABT_ID>OD</ABT_ID>
<JOB_ID>PR</JOB_ID>
</ROW>
<ROW num="4">
<ANG_ID>A4</ANG_ID>
<NAME>Gerd</NAME>
<GEBDATUM>11/3/1955 0:0:0</GEBDATUM>
<ABT_ID>VT</ABT_ID>
<JOB_ID>KA</JOB_ID>
</ROW>
<ROW num="5">
<ANG_ID>A5</ANG_ID>
<NAME>Emil</NAME>
<GEBDATUM>3/2/1960 0:0:0</GEBDATUM>
<ABT_ID>PA</ABT_ID>
<JOB_ID>PR</JOB_ID>
</ROW>
<ROW num="6">
<ANG_ID>A6</ANG_ID>
<NAME>Uwe</NAME>
<GEBDATUM>4/3/1952 0:0:0</GEBDATUM>
<ABT_ID>RZ</ABT_ID>
<JOB_ID>OP</JOB_ID>
</ROW>
<ROW num="7">
<ANG_ID>A7</ANG_ID>
<NAME>Erna</NAME>
<GEBDATUM>11/17/1955 0:0:0</GEBDATUM>
<ABT_ID>KO</ABT_ID>
<JOB_ID>TA</JOB_ID>
</ROW>
<ROW num="8">
<ANG_ID>A8</ANG_ID>
<NAME>Rita</NAME>
<GEBDATUM>12/2/1957 0:0:0</GEBDATUM>
<ABT_ID>KO</ABT_ID>
<JOB_ID>TA</JOB_ID>
</ROW>
12
Datenbanken
<ROW num="9">
<ANG_ID>A9</ANG_ID>
<NAME>Ute</NAME>
<GEBDATUM>8/8/1962 0:0:0</GEBDATUM>
<ABT_ID>OD</ABT_ID>
<JOB_ID>SY</JOB_ID>
</ROW>
<ROW num="10">
<ANG_ID>A10</ANG_ID>
<NAME>Willi</NAME>
<GEBDATUM>7/7/1956 0:0:0</GEBDATUM>
<ABT_ID>KO</ABT_ID>
<JOB_ID>IN</JOB_ID>
</ROW>
<ROW num="11">
<ANG_ID>A12</ANG_ID>
<NAME>Anton</NAME>
<GEBDATUM>7/5/1948 0:0:0</GEBDATUM>
<ABT_ID>OD</ABT_ID>
<JOB_ID>SY</JOB_ID>
</ROW>
<ROW num="12">
<ANG_ID>A13</ANG_ID>
<NAME>Josef</NAME>
<GEBDATUM>8/2/1952 0:0:0</GEBDATUM>
<ABT_ID>KO</ABT_ID>
<JOB_ID>SY</JOB_ID>
</ROW>
<ROW num="13">
<ANG_ID>A14</ANG_ID>
<NAME>Maria</NAME>
<GEBDATUM>9/17/1964 0:0:0</GEBDATUM>
<ABT_ID>PA</ABT_ID>
<JOB_ID>KA</JOB_ID>
</ROW>
</ROWSET>
Zum Einfügen eines Dokuments in eine Tabelle oder View dient das DBMS_XMLSave-Package. XSU
parst das Dokument und legt eine insert-Anweisung an, die Werte in alle Spalten oder View einfügt.
Ein fehlendes Element wird als NULL-Wert behandelt.
Man kann auch die XSU DML-Operationen über Aufrufe an Java-Klassen ausführen. Zur Ausführung
kommt dann die oracle.xml.sql.query.OracleXMLQuery-Klasse. Anstatt des DBMS_XMLSavePackage wird oracle.xml.sql.dml.OracleXMLSave verwendet.
XSQL-Servlet
Das XSQL Servlet ist ein Werkzeug, das SQL Abfragen erzeugt und das Ergebnis in XML zurückgibt.
Dieser Prozessor ist als Java Servlet implementiert und akzeptiert als Eingabe ein XML-Dokument,
das SQL Abfragen enthält. Das XSQL Servlet benutzt sowohl den XML Parser für Java als auch das
XML SQL Utility. XSQL ist für direkte Anfragen auf Webseiten entworfen.
13
Datenbanken
Web-Server
XSQL – Servlet
HTTP
Client
XMLParser
XSLT-Prozessor
XML-SQL-Utility
(XSU)
JDBC
-Datenbank
HTML,
XML
Stylesheets
Abb.: XSQL-Servlet
Ausgabngsbasis: XSQL-Page
7. XML Dokumente als Daten speichern
Wenn das XML-Dokument eine wohldefinierte Struktur hat und Daten enthält, die geändert werden, ist
das Dokument datenorientiert (data-centric). Typischerweise enthalten XML-Dokumente Elemente
und Attribute, die eine komplexe Struktur haben (Bsp: Rechnungen, Flugpläne,...).
Oracle9i besitzt die Möglichkeit, diese Struktur auszulesen und daraus eine Datenbankstruktur zu
erstellen, indem Objekte, Objektreferenzen, usw. benutzt werden.
Es gibt zwei Möglichkeiten die XML-Daten in objekt-relationaler Form zu speichern und vorzuhalten:
• Die Attribute der Elemente werden in einer Tabelle gespeichert und Objektsichten werden definiert,
um die Struktur des XMLDokuments abzubilden.
• Die strukturierten XML-Elemente werden in einer Objekt-Tabelle gespeichert.
Sind die Daten erst mal in objekt-relationaler Form gespeichert, ist es jederzeit möglich, die Daten zu
aktualisieren, abzufragen, zu formatieren oder neu anzuordnen. In diesem Zusammenhang seien die
XMLEnabled “Section Searches” in ConText, womit SQL-Abfragen auf strukturierten Daten und
indizierten Fragmenten durchgeführt werden können, sowie die Möglichkeit erwähnt, Sichten mit XML
und SQL zu kombinieren.
8. XML Dokumente als Dokumente speichern
Diese Strategie wird gewählt, wenn das XML-Dokument statischen Inhalt enthält, der nicht geändert
wird, es sei denn, daß das komplette Dokument ausgetauscht wird (Bsp: Bücher, Artikel, etc.). Diese
Art von Dokumenten wird als dokumentorientiert bezeichnet (document-centric) und sind von einer
Datenbank als Ganzes abrufbar. Das Dokument selbst kann in Oracle8i gespeichert und verwaltet
werden, es ist aber auch möglich, einen Link zum Objekt außerhalb der Datenbank zu erstellen.
9. Das Internet File System iFS
Schon in früheren Versionen des Datenbanksystems von Oracle gab es das iFS, eine JavaAnwendung innerhalb von Oracle9i’s Java Virtual Machine, die Daten der Datenbank in der gleichen
Struktur darstellt, wie Daten auf einem Netzlaufwerk.
Aus den unterschiedlichsten Anwendungen heraus, kann mit Hilfe der Standardprotokolle HTTP,
SMB, SMTP, IMAP4, POP3 und FTP auf die Daten der Datenbank zugegriffen werden. Unter Einsatz
eines Webbrowsers können die Daten beispielsweise wie eine Website oder ein FTP-Verzeichnis
dargestellt werden, Email-Clients nutzen die Datenbank wie ein anderes Email-System. Die
Darstellung der Daten ist in jeder Anwendung dieselbe. Benutzer können die Dateien, die relationalen
14
Datenbanken
Daten enthalten, aber auch Hybrid-Dokumente mit relationalen und nicht-relationalen Daten mittels
Drag- und Drop-Funktionen aus iFS herausziehen oder direkt in iFS bearbeiten und verändern.
Mit iFS können neue Dateitypen definiert werden, die beispielsweise auf XML basieren. Bei dieser
Definition wird die Struktur des neuen Dateityps festgelegt und damit auch, wie Dateien dieses Typs in
der Datenbank zu speichern sind. Wird nun ein Dokument dieses Typs an iFS gesendet, erkennt das
Dateisystem diesen Typ, parst die Datei und speichert die enthaltenen Daten nach der Vorgabe ab.
Sind Instanzen eines Dokuments einmal in der Datenbank gespeichert, ist es möglich, den
Inhalt mit Standard SQL-Abfragen zu durchsuchen. Auch einer Organisation
der Daten mit dem Windows Explorer oder einer Suchanfrage über selbigen steht nichts mehr im
Weg.
10. Oracle9i und interMedia
Mit interMedia ist es möglich XML-Dokumente, die in Oracle9i gespeichert sind zu durchsuchen. Das
XML kann z.B. als “nur”-Text indiziert werden, oder es werden Dokumentenabschnitte in XMLDokumenten für genauere Suchen definiert.
Beispiel: “FIND Oracle WITHIN title”, wobei “title” ein Abschnitt im XML-Dokument ist.
Auch die objekt-relationalen Eigenschaften von Oracle9i können genutzt werden, um die komplexe
Struktur der XML-Daten zu erfassen.
Damit ist es möglich, XML Daten auf einer höheren Ebene zu extrahieren, was zu einer schnelleren
und effizienteren Konstruktion dynamischer XML Dokumente, die aus diesen extrahierten Fragmenten
erstellt werden, führt.
Es gibt 4 grundlegende Strategien, um XML Daten in Oracle9i zu speichern:
• Das XML-Dokument als einzelnes, voll funktionsfähiges Objekt, mit seinen Tags in einen CLOB oder
BLOB zu speichern.
• Das XML-Dokument als Daten zu speichern und die Daten ohne Tags auf die relationalen Tabellen
zu verteilen.
• Speichern von XML-Daten in einer Tabellenspalte vom Typ des in Oralce9i eingeführten Datentyps
XMLType.
• Kombinationen der ersten drei Strategien.
Welche Wahl man zum speichern eines XML-Dokuments trifft, hängt dabei von der zugrunde
liegenden Struktur der Datei ab.
15
Datenbanken
7. Oracle XML SQL Utilities
8. XSQL Servlet
Apache 1.3.9 mit JServ und Tomcat, Sun JavaServer, Oracle Application Server.
11. XML Transviewer Java Beans
Mit den XML Transviewer Java Beans stellt Oracle XML-Komponenten für Java-Anwendungen bereit,
mit denen es Entwicklern ermöglicht wird, auf XML basierende Datenbankanwendungen schnell zu
entwikkeln.
Die zur Verfügung gestellten Beans umfassen das DOM Builder Bean, zum parsen von XMLDokumenten, das XML Source Viewer Bean, für die verbesserte Darstellung von XML- und XSLDateien, das XML Tree Viewer Bean, zur grafischen Darstellung der Baumstruktur von XMLDokumenten, sowie das XSL Transformer Bean, welches die Umwandlung von XML-Dokumenten in
fast jedes textbasierte Format, wie XML, HTML, etc. umzuwandeln, indem ein XSL Stylesheet
verwendet wird.
10. XDK-Tools (Software-Developper-Kits)
16
Herunterladen