XML-Unterstützung in Oracle. © Prof. T. Kudraß, HTWK Leipzig 2 2 Überblick XML Architekturformen...

49
XML-Unterstützung in Oracle

Transcript of XML-Unterstützung in Oracle. © Prof. T. Kudraß, HTWK Leipzig 2 2 Überblick XML Architekturformen...

Page 1: XML-Unterstützung in Oracle. © Prof. T. Kudraß, HTWK Leipzig 2 2 Überblick XML Architekturformen und Speicherungsarten XML Schema und Mapping Laden von.

XML-Unterstützung in Oracle

Page 2: XML-Unterstützung in Oracle. © Prof. T. Kudraß, HTWK Leipzig 2 2 Überblick XML Architekturformen und Speicherungsarten XML Schema und Mapping Laden von.

2<<<Nr.>

© Prof. T. Kudraß, HTWK Leipzig

2

Überblick

XML Architekturformen und Speicherungsarten

XML Schema und MappingLaden von DatenZugriff

Page 3: XML-Unterstützung in Oracle. © Prof. T. Kudraß, HTWK Leipzig 2 2 Überblick XML Architekturformen und Speicherungsarten XML Schema und Mapping Laden von.

4<<<Nr.>

© Prof. T. Kudraß, HTWK Leipzig

4

Clob

Relational

Die Speicherart richtetsich nach den Anforderungen der Anwendung:

• Konkurrierender Zugriff• Vokabularänderung• Ladeperformance• Abfrage-Performance• Redundanzen• XML Schema Support

Unterschiedliche Speicherarten in Oracle

Nativ alsDokument

NativObjektrelational

Page 4: XML-Unterstützung in Oracle. © Prof. T. Kudraß, HTWK Leipzig 2 2 Überblick XML Architekturformen und Speicherungsarten XML Schema und Mapping Laden von.

5<<<Nr.>

© Prof. T. Kudraß, HTWK Leipzig

5

XML Werkzeuge relational / CLOB XSQL Servlet XML SQL Utility

XML Werkzeuge relational / CLOB XSQL Servlet XML SQL Utility

XML Datentyp dokumentbasiert XPath Zugriffe Indizes

XML Werkzeuge relational / CLOB XSQL Servlet XML SQL Utility

XML Datentyp dokumentbasiert XPath Zugriffe Indizes

Objektrelational XML Schema Zugriffe mit

WebDAV, DOM

Geschichte

XML Werkzeuge relational / CLOB XSQL Servlet XML SQL Utility

XML Datentyp dokumentbasiert XPath Zugriffe Indizes

Objektrelational XML Schema Zugriffe mit

WebDAV, DOM

SQL/XML XQuery

Oracle8i Oracle9i Oracle10g

Release1 Release2

Entwicklung der XML-Features von Oracle

Page 5: XML-Unterstützung in Oracle. © Prof. T. Kudraß, HTWK Leipzig 2 2 Überblick XML Architekturformen und Speicherungsarten XML Schema und Mapping Laden von.

6<<<Nr.>

© Prof. T. Kudraß, HTWK Leipzig

6

Oracle und XML Schema

Typen

Tabellen

Java Beans

Security

generiert

SQL DataSQL Data

Schema

in der Datenbank

Page 6: XML-Unterstützung in Oracle. © Prof. T. Kudraß, HTWK Leipzig 2 2 Überblick XML Architekturformen und Speicherungsarten XML Schema und Mapping Laden von.

8<<<Nr.>

© Prof. T. Kudraß, HTWK Leipzig

8

Terminologie: "annotated" XML Schema

XML Schema mit "Zusatzinformationen" Herstellerspezifische Tags und Attribute zur Steuerung

der Persistenz Namespace-Konzept Bei der Schema-Prüfung ignoriert der Parser gemäß

W3C alle Namespaces, die er nicht kennt"– Datenbankunabhängige Parser beachten nur das allgemeine

XML Schema– Bei Registrieren in der Datenbank wird nur das allgemeine

XML Schema und die eigenen "Annotations " berücksichtigt.

Page 7: XML-Unterstützung in Oracle. © Prof. T. Kudraß, HTWK Leipzig 2 2 Überblick XML Architekturformen und Speicherungsarten XML Schema und Mapping Laden von.

11

© Prof. T. Kudraß, HTWK Leipzig

11

Schema-Registrierung

EXECUTE dbms_xmlschema.registerschema ('http://www.personal.xyz/Personal.xsd‘,-- schemaURL IN varchar2 getFileContent(bfilename('XML_DIR',Personal.xsd')),TRUE, --local IN BOOLEANTRUE, --genTypes IN BOOLEAN := TRUEFALSE, --genbean IN BOOLEAN := FALSETRUE, --genTables IN BOOLEAN := TRUEFALSE, --force IN BOOLEAN := FALSE'XMLUSER' --owner IN VARCHAR2 := '');

EXECUTE dbms_xmlschema.registerschema ('http://www.personal.xyz/Personal.xsd‘,-- schemaURL IN varchar2 getFileContent(bfilename('XML_DIR',Personal.xsd')),TRUE, --local IN BOOLEANTRUE, --genTypes IN BOOLEAN := TRUEFALSE, --genbean IN BOOLEAN := FALSETRUE, --genTables IN BOOLEAN := TRUEFALSE, --force IN BOOLEAN := FALSE'XMLUSER' --owner IN VARCHAR2 := '');

Parameter: Schema-Name bzw. Schema-URL Schema-Quelle als Instanz von XMLType, CLOB, VARCHAR2 oder URI Flags zur Steuerung der Generierung von DB-Objekten (Tabellen, Types)

Page 8: XML-Unterstützung in Oracle. © Prof. T. Kudraß, HTWK Leipzig 2 2 Überblick XML Architekturformen und Speicherungsarten XML Schema und Mapping Laden von.

12

© Prof. T. Kudraß, HTWK Leipzig

12

Der Datentyp XMLType

Ablage als CLOB

CREATE TABLE letter OF XMLTYPE;-- STORE AS CLOB erzwingt Speicherung als CLOB

CREATE TABLE letter OF XMLTYPE;-- STORE AS CLOB erzwingt Speicherung als CLOB

Ablage als XML Schemabasierenden Tabelle

CREATE TABLE emp_tab2 OF XMLTYPE XMLSCHEMA "http://xmluser.de.oracle.com/xsd/deptemp.xsd" ELEMENT "emptable";

CREATE TABLE emp_tab2 OF XMLTYPE XMLSCHEMA "http://xmluser.de.oracle.com/xsd/deptemp.xsd" ELEMENT "emptable";

Ablage als XML Schemabasierende Spalte

CREATE TABLE dept_tab2 (deptno NUMBER, employee XMLTYPE)XMLTYPE employee STORE AS OBJECT RELATIONALXMLSCHEMA "http://xmluser.de.oracle.com/xsd/deptemp.xsd" ELEMENT "emptable";

CREATE TABLE dept_tab2 (deptno NUMBER, employee XMLTYPE)XMLTYPE employee STORE AS OBJECT RELATIONALXMLSCHEMA "http://xmluser.de.oracle.com/xsd/deptemp.xsd" ELEMENT "emptable";

Page 9: XML-Unterstützung in Oracle. © Prof. T. Kudraß, HTWK Leipzig 2 2 Überblick XML Architekturformen und Speicherungsarten XML Schema und Mapping Laden von.

14<<<Nr.>

© Prof. T. Kudraß, HTWK Leipzig

14

Laden von XML-Daten in die Datenbank

Mit SQL, PL/SQL und Java– INSERT INTO .. VALUES …– als CLOB – Oracle Text– zusätzliche Indexierung erforderlich

Mit Hilfe von Protokollen: – FTP – WEBDAV– HTTP

Page 10: XML-Unterstützung in Oracle. © Prof. T. Kudraß, HTWK Leipzig 2 2 Überblick XML Architekturformen und Speicherungsarten XML Schema und Mapping Laden von.

15<<<Nr.>

© Prof. T. Kudraß, HTWK Leipzig

15

Arbeit mit CLOBs (PL/SQL)

declare theClob CLOB; theBFile BFILE;begin insert into xmldocs(filename,document) values (‘Sample.xml‘, empty_clob()) returning document into theClob; theBFile:=BFileName(‘XMLFILES‘,‘Sample.xml‘); dbms_lob.fileOpen (theBFile); dbms_lob.loadFromFile (dest_lob=>theClob,

src=>theBFile,amount=>dbms_lob.getLength(theBFile));

dbms_lob.fileClose(theBFile); commit;end;

Speicherung von XML Files mittels DBMS_LOB Package

BFILE mit Source File assoziiert, Logical Directory Object XMLFILES vorher in Datenbank anlegen, z.B.>CREATE DIRECTORY xmlfiles as ‘c:\work‘

Page 11: XML-Unterstützung in Oracle. © Prof. T. Kudraß, HTWK Leipzig 2 2 Überblick XML Architekturformen und Speicherungsarten XML Schema und Mapping Laden von.

16<<<Nr.>

© Prof. T. Kudraß, HTWK Leipzig

16

Indizieren XML mit interMedia Text

Voraussetzung für tag-basierte Queries: Index auf den Anfragespalten

in SQL: CREATE INDEX erweitern um Klausel INDEXTYPE IS ctxsys.context

– erlaubt CONTAINS in WHERE-Klausel Sectioner: Sammlung von XML-Tags, die indiziert

werden sollen– repräsentiert durch section group im CREATE INDEX-

Befehl / PARAMETERS Klausel– erlauben inhaltsbasiertes Retrieval, beschränkt auf spezifische

XML-Tags vordefinierte (für jedes Tag) vs. benutzerdefinierte

Sectioner

Page 12: XML-Unterstützung in Oracle. © Prof. T. Kudraß, HTWK Leipzig 2 2 Überblick XML Architekturformen und Speicherungsarten XML Schema und Mapping Laden von.

17<<<Nr.>

© Prof. T. Kudraß, HTWK Leipzig

17

Beispiel: Arbeit mit interMedia Text (1)

CREATE TABLE ins_claim(id NUMBER(7) PRIMARY KEY, when DATE, doc CLOB);

Speicherung von XML-Dokumenten einer Versicherungsgesellschaft

Spalte doc ist indiziert mit auto_section_group:

CREATE INDEX doc_ix ON ins_claim(doc)INDEXTYPE IS ctxsys.contextPARAMETERS (‘section group ctxsys.auto_section_group‘);

Page 13: XML-Unterstützung in Oracle. © Prof. T. Kudraß, HTWK Leipzig 2 2 Überblick XML Architekturformen und Speicherungsarten XML Schema und Mapping Laden von.

18<<<Nr.>

© Prof. T. Kudraß, HTWK Leipzig

18

Beispiel: Arbeit mit interMedia Text (2)

The insured‘s <VEHICLE>car</VEHICLE>broke through the guard rail and plummeted into a ravine. The cause was determined to be <CAUSE>faulty braked</CAUSE> Amazingly there were no casualties.

Beispiel-Dokument in der Spalte doc:

XML Section <cause> kann abgefragt werden:

SELECT id, whenFROM ins_claimWHERE contains (doc,‘brakes WITHIN cause‘) > 0;

ID WHEN DOC------- ------ -------1 12-OCT-00 The insured‘s <VEHICLE>car...

Page 14: XML-Unterstützung in Oracle. © Prof. T. Kudraß, HTWK Leipzig 2 2 Überblick XML Architekturformen und Speicherungsarten XML Schema und Mapping Laden von.

19<<<Nr.>

© Prof. T. Kudraß, HTWK Leipzig

19

Beispiel: Arbeit mit interMedia Text (3)

ctx_ddl.create_section_group(‘my_section‘, ‘XML_SECTION_GROUP‘);

ctx_ddl.add_zone_section(‘my_section‘,‘cause‘,‘Cause‘);...ctx_ddl.add_attr_section(‘my_section‘,‘make‘,‘Make@Vehicle‘);...CREATE INDEX my_doc_ix ON ins_claim(doc)INDEXTYPE IS ctxsys.contextPARAMETERS(‘section group my_section‘);

Alternative zu vordefiniertem Auto-Sectioner:Definition eines eigenen Sectioners und Verwendung im Index

Mögliche Abfrage ist Suche nach Attributwerten: ... where contains (doc, ‘Audi within Make@Vehicle‘)Findet: <Vehicle Make=“Audi“>

section name tag name

Page 15: XML-Unterstützung in Oracle. © Prof. T. Kudraß, HTWK Leipzig 2 2 Überblick XML Architekturformen und Speicherungsarten XML Schema und Mapping Laden von.

20

© Prof. T. Kudraß, HTWK Leipzig

20

Laden von Daten über INSERT

SQL> INSERT INTO Personalakten VALUES 2 (XMLTYPE(' 3 <? xmlversion="1.0"?> 4 <Personalakte Personalnummer="2234"> 5 <Personalien> 6 <Nachname>Meier</Nachname> 7 <Vorname>Otto></Vorname> 8 <Geburtsdatum>1.1.1970</Geburtsdatum> 9 </Personalien> 10 <Gehaltsdaten Steuerklasse="1" 11 Kirchensteuer="RK" Kinder="0" /> 12 <Zeugnisse/> 13 </Personalakte> 14 '));

1 row created.

SQL> INSERT INTO Personalakten VALUES 2 (XMLTYPE(' 3 <? xmlversion="1.0"?> 4 <Personalakte Personalnummer="2234"> 5 <Personalien> 6 <Nachname>Meier</Nachname> 7 <Vorname>Otto></Vorname> 8 <Geburtsdatum>1.1.1970</Geburtsdatum> 9 </Personalien> 10 <Gehaltsdaten Steuerklasse="1" 11 Kirchensteuer="RK" Kinder="0" /> 12 <Zeugnisse/> 13 </Personalakte> 14 '));

1 row created.

mittels XMLType-Konstruktor

Page 16: XML-Unterstützung in Oracle. © Prof. T. Kudraß, HTWK Leipzig 2 2 Überblick XML Architekturformen und Speicherungsarten XML Schema und Mapping Laden von.

21<<<Nr.>

© Prof. T. Kudraß, HTWK Leipzig

21

Laden über Internet Protokolle

Page 17: XML-Unterstützung in Oracle. © Prof. T. Kudraß, HTWK Leipzig 2 2 Überblick XML Architekturformen und Speicherungsarten XML Schema und Mapping Laden von.

23<<<Nr.>

© Prof. T. Kudraß, HTWK Leipzig

23

Sichtweise auf das Repository

TableName ACL

Property 1

Property N

Property N

XML TableB TreeIndex

TextIndex

HierarchicalIndex

resource_view

FTP

HTTP

xdb$resource

Page 18: XML-Unterstützung in Oracle. © Prof. T. Kudraß, HTWK Leipzig 2 2 Überblick XML Architekturformen und Speicherungsarten XML Schema und Mapping Laden von.

24<<<Nr.>

© Prof. T. Kudraß, HTWK Leipzig

24

XML Zugriff mit SQL

Schnittstellen– JDBC– ODBC– native OCI– XQuery– SQL/XML

Nutzung von Datenbankfeatures– relationale Tabellen– objektrelationaler Zugriff– gespeicherte Prozeduren und Funktionen– Kombination mit AQ (Advanced Queues)

Page 19: XML-Unterstützung in Oracle. © Prof. T. Kudraß, HTWK Leipzig 2 2 Überblick XML Architekturformen und Speicherungsarten XML Schema und Mapping Laden von.

25<<<Nr.>

© Prof. T. Kudraß, HTWK Leipzig

25

Funktionen auf XMLType

Zugriff auf den Inhalt eines Objekts von XMLType über Funktionen:

– extract um das Ergebnis eines XPath-Ausdrucks zu erhalten,– getClobVal, getStringVal und getNumVal, um das Ergebnis

von extract in einen SQL-Datentyp zu überführen,– extractValue, um das Ergebnis eines XPath-Ausdrucks direkt

in einen SQL-Wert umzuwandeln,– existsNode, um zu prüfen, ob ein XPath-Ausdruck ein

Ergebnis liefert.– createXML erzeugt aus einer SQL-Zeichenkette einen Wert

des Typs XML (bei inhaltsorientierter Zerlegung wieder auf SQL-Tabellen abgebildet)

Page 20: XML-Unterstützung in Oracle. © Prof. T. Kudraß, HTWK Leipzig 2 2 Überblick XML Architekturformen und Speicherungsarten XML Schema und Mapping Laden von.

26

© Prof. T. Kudraß, HTWK Leipzig

26

Funktionen auf XMLType - Beispiele

Anzahl der Kinder des Angestellten Meier als numerischer Wert

SELECT P.Personalakte.extract((‘//@Kinder‘).getNumVal()AS Kinderzahl

FROM Personalakten PWHERE P.Personalakte.extract(‘//Personalien/Nachname/text()‘).

getstringVal() = ‘Meier‘;

SELECT P.Personalakte.extract((‘//@Kinder‘).getNumVal()AS Kinderzahl

FROM Personalakten PWHERE P.Personalakte.extract(‘//Personalien/Nachname/text()‘).

getstringVal() = ‘Meier‘;

gleiche Anfrage unter Verwendung eines XPath-Ausdrucks in WHERE-Klausel

SELECT P.Personalakte.extract((‘//@Kinder‘).getNumVal()AS Kinderzahl

FROM Personalakten PWHERE P.Personalakte.existsNode(‘//Personalien[Nachname="Meier"]‘);

SELECT P.Personalakte.extract((‘//@Kinder‘).getNumVal()AS Kinderzahl

FROM Personalakten PWHERE P.Personalakte.existsNode(‘//Personalien[Nachname="Meier"]‘);

Page 21: XML-Unterstützung in Oracle. © Prof. T. Kudraß, HTWK Leipzig 2 2 Überblick XML Architekturformen und Speicherungsarten XML Schema und Mapping Laden von.

27

© Prof. T. Kudraß, HTWK Leipzig

27

Funktionen auf XMLType – Beispiele (2)

extract liefert Markup mit extractValue() entspricht extract.text() Erweiterung von XPath durch Oracle durch weitere Funktionen, z.B. ora:contains

– vergleichbar mit CONTAINS-Operator in SQL– aber: kein Textindex erforderlich

SELECT P.Personalakte.extractValue('//Nachname') AS NachnameFROM Personalakten PWHERE P.Personalakte.existsNode( ‘//Zeugnis[ora:contains(Zwischenzeugnis,"vollen" OR "vollsten")>0]‘);

SELECT P.Personalakte.extractValue('//Nachname') AS NachnameFROM Personalakten PWHERE P.Personalakte.existsNode( ‘//Zeugnis[ora:contains(Zwischenzeugnis,"vollen" OR "vollsten")>0]‘);

Page 22: XML-Unterstützung in Oracle. © Prof. T. Kudraß, HTWK Leipzig 2 2 Überblick XML Architekturformen und Speicherungsarten XML Schema und Mapping Laden von.

28

© Prof. T. Kudraß, HTWK Leipzig

28

Änderungen von XML-Dokumenten

UPDATE Personalakten p SET p.Personalakte = createXML (' <?xml version="1.0"?> <Personalakte Personalnummer="2234"> <Personalien> <Nachname>Meier>/Nachname> <Vorname>Otto></Vorname> <Geburtsdatum>1970-01-01</Geburtsdatum> </Personalien> <Gehaltsdaten Steuerklasse="1" Kirchensteuer="RK" Kinder="0" /> <Zeugnisse/> </Personalakte> ')

WHERE p.Personalakte.extractValue('/Personalakte/@Personalnummer' ) = 2234;

UPDATE Personalakten p SET p.Personalakte = createXML (' <?xml version="1.0"?> <Personalakte Personalnummer="2234"> <Personalien> <Nachname>Meier>/Nachname> <Vorname>Otto></Vorname> <Geburtsdatum>1970-01-01</Geburtsdatum> </Personalien> <Gehaltsdaten Steuerklasse="1" Kirchensteuer="RK" Kinder="0" /> <Zeugnisse/> </Personalakte> ')

WHERE p.Personalakte.extractValue('/Personalakte/@Personalnummer' ) = 2234;

Variante 1: ganzes Dokument angeben, um XMLType-Spalte zu ersetzen

Page 23: XML-Unterstützung in Oracle. © Prof. T. Kudraß, HTWK Leipzig 2 2 Überblick XML Architekturformen und Speicherungsarten XML Schema und Mapping Laden von.

29

© Prof. T. Kudraß, HTWK Leipzig

29

Änderungen von XML-Dokumenten

UPDATE Personalakten p SET p.Personalakte = UpdateXML (p.Personalakte, ‘/Personalakte/Personalien/Nachname/text()‘, ‘Schulz‘,

‘/Personalakte/Gehaltsdaten/@Steuerklasse‘, ‘3‘)WHERE p.Personalakte.extractValue(‘/Personalakte/@Personalnummer‘)

= 2234;

UPDATE Personalakten p SET p.Personalakte = UpdateXML (p.Personalakte, ‘/Personalakte/Personalien/Nachname/text()‘, ‘Schulz‘,

‘/Personalakte/Gehaltsdaten/@Steuerklasse‘, ‘3‘)WHERE p.Personalakte.extractValue(‘/Personalakte/@Personalnummer‘)

= 2234;

Variante 2: Update nur für die zu ändernden Teile beschreiben

Beispiel beschreibt Änderungen während einer Heirat Funktion UpdateXML kann mehrere XPath-Ausdrücke

verarbeiten neuer Wert kann selbst auch vom Typ XMLType sein

Page 24: XML-Unterstützung in Oracle. © Prof. T. Kudraß, HTWK Leipzig 2 2 Überblick XML Architekturformen und Speicherungsarten XML Schema und Mapping Laden von.

30<<<Nr.>

© Prof. T. Kudraß, HTWK Leipzig

30

SQL/XML in Oracle Oracle unterstützt SQL/XML-Funktionen aus dem

Standard– XMLELEMENT

ohne Keyword NAME auch Werte von SQL-Objekttypen erlaubt (row types)

– XMLCONCAT– XMLAGG

Gegenüber Standard erweiterte Funktionen: – XMLSEQUENCE

liefert ein VARRAY von XMLType-Instanzen (daraus lässt sich mittels TABLE-Funktion Tabelle konstruieren)

liefert dabei alle Elemente auf der höchsten Ebene zurück macht Konkatenation rückgängig, die durch Funktion extract

verursacht wird. – XMLCOLLATTVAL

erzeugt für jede Spalte ein Element des festen Namens column

Page 25: XML-Unterstützung in Oracle. © Prof. T. Kudraß, HTWK Leipzig 2 2 Überblick XML Architekturformen und Speicherungsarten XML Schema und Mapping Laden von.

31<<<Nr.>

© Prof. T. Kudraß, HTWK Leipzig

31

SQL/XML in Oracle (Beispiel)

<Personalakte Personalnummer="2234"> <Personalien> <Nachname>Müller>/Nachname> <Vorname>Otto></Vorname> <Geburtsdatum>1960-01-01</Geburtsdatum> </Personalien> <Gehaltsdaten Steuerklasse="3"

Kirchensteuer="RK" Kinder="3"> <Gehalt Start="1997-01-01" >7500</Gehalt> <Gehalt Start="1999-01-01" >8000</Gehalt> <Gehalt Start="2001-01-01" >8500</Gehalt>

</Gehaltsdaten></Personalakte>

<Personalakte Personalnummer="2234"> <Personalien> <Nachname>Müller>/Nachname> <Vorname>Otto></Vorname> <Geburtsdatum>1960-01-01</Geburtsdatum> </Personalien> <Gehaltsdaten Steuerklasse="3"

Kirchensteuer="RK" Kinder="3"> <Gehalt Start="1997-01-01" >7500</Gehalt> <Gehalt Start="1999-01-01" >8000</Gehalt> <Gehalt Start="2001-01-01" >8500</Gehalt>

</Gehaltsdaten></Personalakte>

Ermittle alle Gehaltselemente, die einen Wert von mindestens 8000 beinhalten

SELECT value(g).getClobValFROM PersonalaktenX p,

TABLE(XMLSequence(extract(value(p),‘//Gehalt‘))) g WHERE extractValue(value(g), ‘/Gehalt‘) >= 8000;

SELECT value(g).getClobValFROM PersonalaktenX p,

TABLE(XMLSequence(extract(value(p),‘//Gehalt‘))) g WHERE extractValue(value(g), ‘/Gehalt‘) >= 8000;

Page 26: XML-Unterstützung in Oracle. © Prof. T. Kudraß, HTWK Leipzig 2 2 Überblick XML Architekturformen und Speicherungsarten XML Schema und Mapping Laden von.

32<<<Nr.>

© Prof. T. Kudraß, HTWK Leipzig

32

XQuery-Unterstützung in Oracle drei Funktionen, die XQuery unterstützen

– XMLQuery– XMLTable– XQuery (seit 10R2)

einige Bestandteile des XQuery-Standards in früheren Oracle-Versionen nicht verfügbar

Funktion ora:view– zur Anbindung von Tabellen an XQuery– erzeugt eine XML-Struktur von Tabellen (SQL/XML konform)

Beispiel

xqueryfor $i in ora:view("Auftrag")return <Auftraggeber>{$i/Firma}</Auftraggeber>

xqueryfor $i in ora:view("Auftrag")return <Auftraggeber>{$i/Firma}</Auftraggeber>

Weitere Details im XQuery-Tutorial im Internet: http://xquery-tutorial.de.vu

Page 27: XML-Unterstützung in Oracle. © Prof. T. Kudraß, HTWK Leipzig 2 2 Überblick XML Architekturformen und Speicherungsarten XML Schema und Mapping Laden von.

33<<<Nr.>

© Prof. T. Kudraß, HTWK Leipzig

33

Das XML SQL Utility (XSU) Prinzip:

– Generierung von XML-Dokumenten aus SQL-Abfragen (in String-Darstellung oder DOM)

– Speichern von XML-Dokumenten durch Einfügen von Daten aus Dokumenten (“generated“ XML)

– Aktualisieren und Löschen von Daten aus XML-Dokumenten in der Datenbank

Schnittstellen:– XSU Java API– XSU PL/SQL API (Packages DBMS_XMLQuery und

DBMS_XMLSave)– Kommandozeilen-Interface

Verwendung der XSU- Funktionen durch Aufruf der Java-Klasse OracleXML

Aufruf in Kommandozeile:java OracleXML [putXML | getXML] optionen

Page 28: XML-Unterstützung in Oracle. © Prof. T. Kudraß, HTWK Leipzig 2 2 Überblick XML Architekturformen und Speicherungsarten XML Schema und Mapping Laden von.

34<<<Nr.>

© Prof. T. Kudraß, HTWK Leipzig

34

XSU-Umgebung

JDBC Driver

XML Parser

Applikation

XSU

XML-Dokument Oracle-Datenbank

XSU kann installiert werden:

• auf Client-Seite (nur für Java)

• in der Datenbank (erfordert Jserver)

• in der Middle Tier (Web oder Application Server u.a. Oracle Tools

Page 29: XML-Unterstützung in Oracle. © Prof. T. Kudraß, HTWK Leipzig 2 2 Überblick XML Architekturformen und Speicherungsarten XML Schema und Mapping Laden von.

35<<<Nr.>

© Prof. T. Kudraß, HTWK Leipzig

35

Aufruf von XSU: getXML

C:\work\Oracle\XSU12\lib>java OracleXML getXML -user “xuser/xuser“ “select * from dept“

<?xml version=‘1.0‘?><ROWSET> <ROW num=“1“> <DEPTNO>10</DEPTNO> <DNAME>ACCOUNTING</DNAME> <LOC>NEW YORK</LOC> </ROW> <ROW num=“2“> <DEPTNO>20</DEPTNO> <DNAME>RESEARCH</DNAME> <LOC>DALLAS</LOC> </ROW> ...</ROWSET>

Page 30: XML-Unterstützung in Oracle. © Prof. T. Kudraß, HTWK Leipzig 2 2 Überblick XML Architekturformen und Speicherungsarten XML Schema und Mapping Laden von.

36<<<Nr.>

© Prof. T. Kudraß, HTWK Leipzig

36

Aufruf von XSU: putXML

Anmerkungen: Insert-Operationen erfordern kanonisches XML-

Format – Format muß der Ausgabe der XSU entsprechen

(einschließlich <rowset> und <row> Tags)

Kommandozeilen-Interface erlaubt keine Update- und Delete-Operationen, d.h. nur über API möglich

C:\work\Oracle\XSU12\lib>java OracleXML putXML -user “xuser/xuser“ –fileName sampdoc.xml xmltab

Successfully inserted 3 rows into xmltab

Page 31: XML-Unterstützung in Oracle. © Prof. T. Kudraß, HTWK Leipzig 2 2 Überblick XML Architekturformen und Speicherungsarten XML Schema und Mapping Laden von.

37<<<Nr.>

© Prof. T. Kudraß, HTWK Leipzig

37

SELECT (XSU Java API)

import java.sql.*;

import oracle.xml.sql.query.*;

import oracle.jdbc.*;

public class sampGetXML {

public static void main(String args[]) throws SQLException {

DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());

Connection conn = DriverManager.getConnection("jdbc:oracle:oci8:scott/tiger @");

OracleXMLQuery qry = new OracleXMLQuery(conn,"select * from emp");

String xmlString = qry.getXMLString();

System.out.println(" OUTPUT IS:\n"+xmlString);

qry.close();

conn.close();

}

}

import java.sql.*;

import oracle.xml.sql.query.*;

import oracle.jdbc.*;

public class sampGetXML {

public static void main(String args[]) throws SQLException {

DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());

Connection conn = DriverManager.getConnection("jdbc:oracle:oci8:scott/tiger @");

OracleXMLQuery qry = new OracleXMLQuery(conn,"select * from emp");

String xmlString = qry.getXMLString();

System.out.println(" OUTPUT IS:\n"+xmlString);

qry.close();

conn.close();

}

}

Page 32: XML-Unterstützung in Oracle. © Prof. T. Kudraß, HTWK Leipzig 2 2 Überblick XML Architekturformen und Speicherungsarten XML Schema und Mapping Laden von.

38<<<Nr.>

© Prof. T. Kudraß, HTWK Leipzig

38

SELECT (XSU Java API), Forts. zur Generierung von XML wird die Java-Klasse OracleXMLQuery verwendet

Erzeugung einer Instanz von OracleXMLQuery mit Übergabe des SQL-Statements und der Verbindung als Parameter

Beispiel:

OracleXMLQuery qry = new OracleXMLQuery(conn, "SELECT * FROM emp");

OracleXMLQuery qry = new OracleXMLQuery(conn, "SELECT * FROM emp");

Generierung der DOM-Darstellung anstelle String-Darstellung

XML Document domDOC = (XMLDocument)qry.getXMLDOM();XML Document domDOC = (XMLDocument)qry.getXMLDOM();

Page 33: XML-Unterstützung in Oracle. © Prof. T. Kudraß, HTWK Leipzig 2 2 Überblick XML Architekturformen und Speicherungsarten XML Schema und Mapping Laden von.

39<<<Nr.>

© Prof. T. Kudraß, HTWK Leipzig

39

INSERT (XSU Java API)

public class sampInsert{

public static void main(String args[]) throws SQLException{

String tabName = "emp"; String fileName = "sampdocins.xml";

DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());

Connection conn = DriverManager.getConnection("jdbc:oracle:oci8:scott/tiger@");

OracleXMLSave sav = new OracleXMLSave(conn, tabName);

URL url = sav.getURL(fileName);

int rowCount = sav.insertXML(url);

System.out.println(" successfully inserted "+rowCount+" rows into "+tabName);

conn.close();

}

}

public class sampInsert{

public static void main(String args[]) throws SQLException{

String tabName = "emp"; String fileName = "sampdocins.xml";

DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());

Connection conn = DriverManager.getConnection("jdbc:oracle:oci8:scott/tiger@");

OracleXMLSave sav = new OracleXMLSave(conn, tabName);

URL url = sav.getURL(fileName);

int rowCount = sav.insertXML(url);

System.out.println(" successfully inserted "+rowCount+" rows into "+tabName);

conn.close();

}

}

Beispiel für INSERT mit Werten in allen Spalten

Page 34: XML-Unterstützung in Oracle. © Prof. T. Kudraß, HTWK Leipzig 2 2 Überblick XML Architekturformen und Speicherungsarten XML Schema und Mapping Laden von.

40<<<Nr.>

© Prof. T. Kudraß, HTWK Leipzig

40

Bestandteile des XDK

XML Parser

Schema Processor

Class Generator

XML Trans-viewer Beans

XSQL Servlet

XSU XSU

XSLT Processor

Java C++ C PL/SQL

Page 35: XML-Unterstützung in Oracle. © Prof. T. Kudraß, HTWK Leipzig 2 2 Überblick XML Architekturformen und Speicherungsarten XML Schema und Mapping Laden von.

41<<<Nr.>

© Prof. T. Kudraß, HTWK Leipzig

41

XSQL XML + SQL Bestandteil des Oracle XDK (XML

Development Kit) XML-formatierte Ausgabe von relational

gespeicherten Daten in jedem DBMS verfügbar Grundidee:

– relational gespeicherte Daten als XML darstellen– Einbettung von SQL-Anweisungen in XML– Weiterverarbeitung mittels XSL-Stylesheets möglich

Page 36: XML-Unterstützung in Oracle. © Prof. T. Kudraß, HTWK Leipzig 2 2 Überblick XML Architekturformen und Speicherungsarten XML Schema und Mapping Laden von.

42<<<Nr.>

© Prof. T. Kudraß, HTWK Leipzig

42

Vorteile von XSQL Pages einfache Generierung von XML-Dokumenten

auf der Basis von SQL Queries erlaubt Insert-, Update- und Delete-

Operationen unterstützt XSL Transformation durch

Anwendung von XML Stylesheets, beliebige Zielformate wie z.B. HTML

dient als Input für den XSQL Page Processor

Trennung der Daten von der Darstellung

Page 37: XML-Unterstützung in Oracle. © Prof. T. Kudraß, HTWK Leipzig 2 2 Überblick XML Architekturformen und Speicherungsarten XML Schema und Mapping Laden von.

43<<<Nr.>

© Prof. T. Kudraß, HTWK Leipzig

43

XSQL Page Verarbeitung

Bestandteile XSQL Pages

– SQL Queries– DML und DDL in XML Tags

XSQL Page Processor (in Java)– nimmt XSQL Pages als Input– erzeugt dynamische XML Seiten mit den Ergebnissen der

SQL-Queries

XSQL Servlet– erlaubt XSQL Page Verarbeitung im Web

Erweiterbare Stylesheets– optional– XSL Transformationen zur Formatierung des Output

Page 38: XML-Unterstützung in Oracle. © Prof. T. Kudraß, HTWK Leipzig 2 2 Überblick XML Architekturformen und Speicherungsarten XML Schema und Mapping Laden von.

44<<<Nr.>

© Prof. T. Kudraß, HTWK Leipzig

44

XSQL Page Processor Architektur

XSL Stylesheet

XSQL Page

XML o.a. Formate

XSQLConfig

Datenbank

XSQL Page Processor

XSLT

XML Parser

XML Utility

JDBC

Page 39: XML-Unterstützung in Oracle. © Prof. T. Kudraß, HTWK Leipzig 2 2 Überblick XML Architekturformen und Speicherungsarten XML Schema und Mapping Laden von.

45<<<Nr.>

© Prof. T. Kudraß, HTWK Leipzig

45

Verarbeitung von XSQL Pages

<?xml version=“1.0“ ?><xsql:query connection=“demo“ xmlns:xsql=“urn:oracle-xsql“> SELECT ‘Hello World‘ AS greeting FROM DUAL</xsql:query>

<?xml version=“1.0“ ?><xsql:query connection=“demo“ xmlns:xsql=“urn:oracle-xsql“> SELECT ‘Hello World‘ AS greeting FROM DUAL</xsql:query>

XSQL Page Input

XML Output

<ROWSET><ROW num=“1“><GREETING>Hello World</GREETING></ROW></ROWSET>

<ROWSET><ROW num=“1“><GREETING>Hello World</GREETING></ROW></ROWSET>

Einführendes Beispiel

Page 40: XML-Unterstützung in Oracle. © Prof. T. Kudraß, HTWK Leipzig 2 2 Überblick XML Architekturformen und Speicherungsarten XML Schema und Mapping Laden von.

46<<<Nr.>

© Prof. T. Kudraß, HTWK Leipzig

46

XSQL Queries und ConnectionsXSQL Page erlaubt die Definition von SQL Queries Query ist eingebettet in ein xsql:query Tag Connection-Attribut definiert die

Verbindungsinformaiton zur Datenbank Connection Name wird aufgelöst in einer

Konfigurationsdatei XSQLConfig.xml (in xsql/lib) Beispiel

<connectiondefs><connection name=“demo“><username>xuser</username><password>xuser</password><dburl>jdbc:oracle:thin:@localhost:1521:mydb</dburl><driver>oracle.jdbc.driver.OracleDriver</driver>

</connection>... </connectiondefs>

<connectiondefs><connection name=“demo“><username>xuser</username><password>xuser</password><dburl>jdbc:oracle:thin:@localhost:1521:mydb</dburl><driver>oracle.jdbc.driver.OracleDriver</driver>

</connection>... </connectiondefs>

Page 41: XML-Unterstützung in Oracle. © Prof. T. Kudraß, HTWK Leipzig 2 2 Überblick XML Architekturformen und Speicherungsarten XML Schema und Mapping Laden von.

47<<<Nr.>

© Prof. T. Kudraß, HTWK Leipzig

47

XSQL Tags (Auswahl) <xsql:query>

Abfrage der Datenbank über XSU (kann über zusätzliche Optionen gesteuert werden / siehe nächste Folie)

<xsql:dml>erlaubt die Ausführung beliebiger DML- und DDL-Operationen (INSERT, CREATE TABLE etc.) und jedes PL/SQL-Blockes

<xsql:insert-request>Einfügen von XML-Dokumenten in die Datenbank (Voraussetzung: kanonisches Format)

<xsql:delete-request>Löschen von Zeilen aus SQL-Tabelle, Angabe der Schlüsselspalten erforderlich

<xsql:update-request>Änderung von Zeilen einer SQL-Tabelle, identifizierende Spalten angeben

Page 42: XML-Unterstützung in Oracle. © Prof. T. Kudraß, HTWK Leipzig 2 2 Überblick XML Architekturformen und Speicherungsarten XML Schema und Mapping Laden von.

48<<<Nr.>

© Prof. T. Kudraß, HTWK Leipzig

48

Anpassung von XSQL Queries

rowset-element Elementname für Anfrageergebnis; leerer String, wenn kein Elementname gewünscht

row-element Elementname für jede Zeile im Anfrageergebnis; leerer String, wenn kein Name gewünscht

max-rows Maximalanzahl von Zeilen, die vom Ergebnis ausgegeben werden sollen, sinnvoll z.B. für Top-N-Queries

skip-rows Anzahl von Zeilen, die übersprungen werden soll vor Darstellung des Ergebnisses

id-attribute Attributname für id-Attribute für jede Zeile im Anfrageergebnis

id-attribute-column

Zu nutzender Spaltenname, um den Wert des id-Attributs in jeder Ergebniszeile zu liefern

null-indicator Wenn auf “y“ oder „“yes“ gesetzt: Null-Indicator-Attribut bei den Elementen genutzt, dessen Wert NULL ist

Attribute für xsql:query:

Page 43: XML-Unterstützung in Oracle. © Prof. T. Kudraß, HTWK Leipzig 2 2 Überblick XML Architekturformen und Speicherungsarten XML Schema und Mapping Laden von.

49<<<Nr.>

© Prof. T. Kudraß, HTWK Leipzig

49

XSQL Query Parameter

Beispiel: Deklaration einer parametrisierten Query in einer XSQL Page

Die Parameterwerte können in einer URL geliefert werden, z.B.:http://localhost/xsql/demo/emp.xsql?find=A&sort=SAL

<?xml version=“1.0“ ?><?xml-stylesheet type=“text/xsl“ href=“emp.xsl“?><xsql:query connection=“demo“ xmlns:xsql=“urn:oracle-xsql“

find=“%“ sort=“ENAME“ null-indicator=“yes“>

SELECT * FROM EMP WHERE ENAME LIKE ‘%{@find}%‘ORDER BY {@sort}

</xsql:query>

<?xml version=“1.0“ ?><?xml-stylesheet type=“text/xsl“ href=“emp.xsl“?><xsql:query connection=“demo“ xmlns:xsql=“urn:oracle-xsql“

find=“%“ sort=“ENAME“ null-indicator=“yes“>

SELECT * FROM EMP WHERE ENAME LIKE ‘%{@find}%‘ORDER BY {@sort}

</xsql:query>

Page 44: XML-Unterstützung in Oracle. © Prof. T. Kudraß, HTWK Leipzig 2 2 Überblick XML Architekturformen und Speicherungsarten XML Schema und Mapping Laden von.

50<<<Nr.>

© Prof. T. Kudraß, HTWK Leipzig

50

Nested Cursor erzeugen in SQL-Anfragen die XML-typische

Baumstruktur (anstelle von Tabellen) Beispiel:FBEREICH STUDIENGANG SEMESTER BEZEICHNUNG

IMN IN 1 Grundlagen der Informatik

IMN IN 1 Analysis 1

Baumstruktur in XML:

IMN |-IN |- 1.Semester |- Grundlagen der Informatik |- Analysis 1

Page 45: XML-Unterstützung in Oracle. © Prof. T. Kudraß, HTWK Leipzig 2 2 Überblick XML Architekturformen und Speicherungsarten XML Schema und Mapping Laden von.

51<<<Nr.>

© Prof. T. Kudraß, HTWK Leipzig

51

Beispiel Nested Cursor

Tiefe 1: Gruppierte Auflistung aller Fachbereiche

Tiefe 2: Auflistung der Studiengänge pro Fachbereich

Tiefe 3: Auflistung der Semester pro Studiengang und Fachbereich

Tiefe 4: Auflistung aller Fächer pro Semester und Studiengang und Fachbereich

Page 46: XML-Unterstützung in Oracle. © Prof. T. Kudraß, HTWK Leipzig 2 2 Überblick XML Architekturformen und Speicherungsarten XML Schema und Mapping Laden von.

52<<<Nr.>

© Prof. T. Kudraß, HTWK Leipzig

52

Beispiel Nested Cursor (2)

Tiefe 3: Fachbereich → Studiengang → Semester

<ROWSET> <ROW num="1"> <FBEREICH>IMN</FBEREICH> <STUDGANG> <STUDGANG_ROW num="1"> <STUDIENGANG>IN</STUDIENGANG> <SEMESTER> <SEMESTER_ROW num="1"> <SEMESTER>1</SEMESTER> </SEMESTER_ROW> <SEMESTER_ROW num="2"> <SEMESTER>2</SEMESTER> </SEMESTER_ROW> </SEMESTER> </STUDGANG_ROW> </STUDGANG> </ROW>. . .</ROWSET>

Page 47: XML-Unterstützung in Oracle. © Prof. T. Kudraß, HTWK Leipzig 2 2 Überblick XML Architekturformen und Speicherungsarten XML Schema und Mapping Laden von.

53<<<Nr.>

© Prof. T. Kudraß, HTWK Leipzig

53

Beispiel Nested Cursor (3)

Tiefe 3: Fachbereich → Studiengang → Semester SQL-Befehl mit Nested Cursor (XML-Output vgl. vorige Folie)

select f.fbereich, cursor (select fa.studiengang, cursor (select fae.semester from faecher fae where

fae.fbereich=f.fbereich and fae.studiengang=fa.studiengang group by fae.semester) as semester

from faecher fa where fa.fbereich=f.fbereich group by fa.studiengang) as studgangfrom faecher f group by f.fbereich

Kommentare:– GROUP BY verhindert Redundanz im Baum– in WHERE-Klausel des Cursors Referenz auf die höheren Ebenen

Page 48: XML-Unterstützung in Oracle. © Prof. T. Kudraß, HTWK Leipzig 2 2 Überblick XML Architekturformen und Speicherungsarten XML Schema und Mapping Laden von.

54<<<Nr.>

© Prof. T. Kudraß, HTWK Leipzig

54

Aufruf XSQL Page Processor

Kommando-Zeile

JavaApplikation

XSQLServlet

Java ServerPage

XSQL PageProcessor

Page 49: XML-Unterstützung in Oracle. © Prof. T. Kudraß, HTWK Leipzig 2 2 Überblick XML Architekturformen und Speicherungsarten XML Schema und Mapping Laden von.

55<<<Nr.>

© Prof. T. Kudraß, HTWK Leipzig

55

XSQL Servlet Environment

Web Server mitServlet Engine

XSQL PageProcessor

XSQL Servlet

JDBChttp

Oracle DBWeb-Browser