Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Wilmar Bloem Geändert vor über 11 Jahren
1
XML-Unterstützung in Oracle
2
© Prof. T. Kudraß, HTWK Leipzig 2 2 Überblick XML Architekturformen und Speicherungsarten XML Schema und Mapping Laden von Daten Zugriff
3
© Prof. T. Kudraß, HTWK Leipzig 3 3 Allgemeine XML Architekturen Verwendet XML Schema Verwaltet Content & Daten F ü hrt zur besseren Performance & Skalierbarkeit Verwendet Standards
4
© Prof. T. Kudraß, HTWK Leipzig 4 4 Clob Relational Die Speicherart richtet sich nach den Anforderungen der Anwendung: Konkurrierender Zugriff Vokabularänderung Ladeperformance Abfrage-Performance Redundanzen XML Schema Support Unterschiedliche Speicherarten in Oracle Nativ als Dokument Nativ Objektrelational
5
© Prof. T. Kudraß, HTWK Leipzig 5 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 Oracle8iOracle9iOracle10g Release1Release2 Entwicklung der XML- Features von Oracle
6
© Prof. T. Kudraß, HTWK Leipzig 6 6 Oracle und XML Schema Typen Tabellen Java Beans Security generiert SQL Data Schema in der Datenbank
7
© Prof. T. Kudraß, HTWK Leipzig 7 7 Beispiel eines XML Schemas
8
© Prof. T. Kudraß, HTWK Leipzig 8 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.
9
© Prof. T. Kudraß, HTWK Leipzig 9 9 XML Schema (Beispiel): letter.xsd......
10
© Prof. T. Kudraß, HTWK Leipzig 10 Mapping CREATE OR REPLACE TYPE salutation_t AS OBJECT (SYS_XDBPD$XDB.XDB$RAW_LIST_T, "titel" VARCHAR2(4000), "name" VARCHAR2(4000), ) NOT FINAL INSTANTIABLE; CREATE OR REPLACE TYPE letter_t AS OBJECT (SYS_XDBPD$XDB.XDB$RAW_LIST_T, "salutation" SALUATION_T, "quantity" NUMBER(38), "productName" VARCHAR2(4000), "shipDate" DATE) NOT FINAL INSTANTIABLE; CREATE TABLE xdb_letter OF XMLTYPE XMLSCHEMA "http://xmluser.de.oracle.com/xsd/letter.xsd" ID 'A0DD2CF291D90A8EE0340003BA08CF66' ELEMENT "letterBody" ID 2507 TYPE letter_t;... CREATE OR REPLACE TYPE salutation_t AS OBJECT (SYS_XDBPD$XDB.XDB$RAW_LIST_T, "titel" VARCHAR2(4000), "name" VARCHAR2(4000), ) NOT FINAL INSTANTIABLE; CREATE OR REPLACE TYPE letter_t AS OBJECT (SYS_XDBPD$XDB.XDB$RAW_LIST_T, "salutation" SALUATION_T, "quantity" NUMBER(38), "productName" VARCHAR2(4000), "shipDate" DATE) NOT FINAL INSTANTIABLE; CREATE TABLE xdb_letter OF XMLTYPE XMLSCHEMA "http://xmluser.de.oracle.com/xsd/letter.xsd" ID 'A0DD2CF291D90A8EE0340003BA08CF66' ELEMENT "letterBody" ID 2507 TYPE letter_t;... wird abgebildet auf
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 BOOLEAN TRUE, --genTypes IN BOOLEAN := TRUE FALSE, --genbean IN BOOLEAN := FALSE TRUE, --genTables IN BOOLEAN := TRUE FALSE, --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 BOOLEAN TRUE, --genTypes IN BOOLEAN := TRUE FALSE, --genbean IN BOOLEAN := FALSE TRUE, --genTables IN BOOLEAN := TRUE FALSE, --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)
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 RELATIONAL XMLSCHEMA "http://xmluser.de.oracle.com/xsd/deptemp.xsd" ELEMENT "emptable"; CREATE TABLE dept_tab2 (deptno NUMBER, employee XMLTYPE) XMLTYPE employee STORE AS OBJECT RELATIONAL XMLSCHEMA "http://xmluser.de.oracle.com/xsd/deptemp.xsd" ELEMENT "emptable";
13
© Prof. T. Kudraß, HTWK Leipzig 13 Weitere Schemamanipulationen Löschen des Schemas ECECUTE dbms_xmlschema.deleteSchema( 'http://www.personal.xyz/Personal.xsd', dbms_xmlschema.DELETE_CASCADE); ECECUTE dbms_xmlschema.deleteSchema( 'http://www.personal.xyz/Personal.xsd', dbms_xmlschema.DELETE_CASCADE); Anbinden eines Schemas CREATE TABLE Personalakten OF XMLTYPE XMLSCHEMA "http://www.personal.xyz/Personal.xsd" ELEMENT "Personalakte"; CREATE TABLE Personalakten OF XMLTYPE XMLSCHEMA "http://www.personal.xyz/Personal.xsd" ELEMENT "Personalakte"; Validierung – strukturelle Validierung beim Speichern / Ändern von XML-Dok. – vollständige Validierung mit Methoden XMLIsValid() oder SchemaValidate() – Validierungs-Methoden explizit aufrufen, können über Trigger angebunden werden
14
© 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
15
© 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
16
© 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
17
© 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.context PARAMETERS (section group ctxsys.auto_section_group);
18
© Prof. T. Kudraß, HTWK Leipzig 18 Beispiel: Arbeit mit interMedia Text (2) The insureds car broke through the guard rail and plummeted into a ravine. The cause was determined to be faulty braked Amazingly there were no casualties. Beispiel-Dokument in der Spalte doc : XML Section kann abgefragt werden: SELECT id, when FROM ins_claim WHERE contains (doc,brakes WITHIN cause) > 0; ID WHEN DOC ------- ------ ------- 1 12-OCT-00The insureds car...
19
© 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.context PARAMETERS(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: section nametag name
20
© Prof. T. Kudraß, HTWK Leipzig 20 Laden von Daten über INSERT SQL> INSERT INTO Personalakten VALUES 2 (XMLTYPE(' 3 4 5 6 Meier 7 Otto> 8 1.1.1970 9 10<Gehaltsdaten Steuerklasse="1" 11 Kirchensteuer="RK" Kinder="0" /> 12 13 14 ')); 1 row created. SQL> INSERT INTO Personalakten VALUES 2 (XMLTYPE(' 3 4 5 6 Meier 7 Otto> 8 1.1.1970 9 10<Gehaltsdaten Steuerklasse="1" 11 Kirchensteuer="RK" Kinder="0" /> 12 13 14 ')); 1 row created. mittels XMLType -Konstruktor
21
© Prof. T. Kudraß, HTWK Leipzig 21 Laden über Internet Protokolle
22
© Prof. T. Kudraß, HTWK Leipzig 22 Repository Support für Internet Protokolle Zugriffe über Internet Protokolle 1. Zugriff über URL 2. Bildet Pfadname im Repository ab 3. Zeigt Inhalt der Resource Support für FTP, HTTP und Web DAV Protokolle
23
© Prof. T. Kudraß, HTWK Leipzig 23 Sichtweise auf das Repository Table Name ACL Property 1 Property N Property N XML Table B Tree Index Text Index Hierarchical Index resource_view FTP HTTP xdb$resource
24
© 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)
25
© 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)
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 P WHERE P.Personalakte.extract(//Personalien/Nachname/text()). getstringVal() = Meier; SELECT P.Personalakte.extract((//@Kinder).getNumVal() AS Kinderzahl FROM Personalakten P WHERE 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 P WHERE P.Personalakte.existsNode(//Personalien[Nachname="Meier"]); SELECT P.Personalakte.extract((//@Kinder).getNumVal() AS Kinderzahl FROM Personalakten P WHERE P.Personalakte.existsNode(//Personalien[Nachname="Meier"]);
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 Nachname FROM Personalakten P WHERE P.Personalakte.existsNode( //Zeugnis[ora:contains(Zwischenzeugnis,"vollen" OR "vollsten")>0]); SELECT P.Personalakte.extractValue( ' //Nachname ' ) AS Nachname FROM Personalakten P WHERE P.Personalakte.existsNode( //Zeugnis[ora:contains(Zwischenzeugnis,"vollen" OR "vollsten")>0]);
28
© Prof. T. Kudraß, HTWK Leipzig 28 Änderungen von XML-Dokumenten UPDATE Personalakten p SET p.Personalakte = createXML (' Meier>/Nachname> Otto> 1970-01-01 <Gehaltsdaten Steuerklasse="1" Kirchensteuer="RK" Kinder="0" /> ') WHERE p.Personalakte.extractValue( ' /Personalakte/@Personalnummer ' ) = 2234; UPDATE Personalakten p SET p.Personalakte = createXML (' Meier>/Nachname> Otto> 1970-01-01 <Gehaltsdaten Steuerklasse="1" Kirchensteuer="RK" Kinder="0" /> ') WHERE p.Personalakte.extractValue( ' /Personalakte/@Personalnummer ' ) = 2234; Variante 1: ganzes Dokument angeben, um XMLType-Spalte zu ersetzen
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
30
© 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
31
© Prof. T. Kudraß, HTWK Leipzig 31 SQL/XML in Oracle (Beispiel) M ü ller>/Nachname> Otto> 1960-01-01 <Gehaltsdaten Steuerklasse="3" Kirchensteuer="RK" Kinder="3"> 7500 8000 8500 M ü ller>/Nachname> Otto> 1960-01-01 <Gehaltsdaten Steuerklasse="3" Kirchensteuer="RK" Kinder="3"> 7500 8000 8500 Ermittle alle Gehaltselemente, die einen Wert von mindestens 8000 beinhalten SELECT value(g).getClobVal FROM PersonalaktenX p, TABLE(XMLSequence(extract(value(p),//Gehalt))) g WHERE extractValue(value(g), /Gehalt) >= 8000; SELECT value(g).getClobVal FROM PersonalaktenX p, TABLE(XMLSequence(extract(value(p),//Gehalt))) g WHERE extractValue(value(g), /Gehalt) >= 8000;
32
© 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 xquery for $i in ora:view("Auftrag") return {$i/Firma} xquery for $i in ora:view("Auftrag") return {$i/Firma} Weitere Details im XQuery-Tutorial im Internet: http://xquery-tutorial.de.vuhttp://xquery-tutorial.de.vu
33
© 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
34
© 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
35
© Prof. T. Kudraß, HTWK Leipzig 35 Aufruf von XSU: getXML C:\work\Oracle\XSU12\lib>java OracleXML getXML -user xuser/xuser select * from dept 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS...
36
© 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 und 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
37
© 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(); }
38
© 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();
39
© 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
40
© Prof. T. Kudraß, HTWK Leipzig 40 Bestandteile des XDK XML Parser Schema Processor Class Generator XML Trans- viewer Beans XSQL Servlet XSU XSLT Processor JavaC++CPL/SQL
41
© 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
42
© 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
43
© 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
44
© 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
45
© Prof. T. Kudraß, HTWK Leipzig 45 Verarbeitung von XSQL Pages SELECT Hello World AS greeting FROM DUAL SELECT Hello World AS greeting FROM DUAL XSQL Page Input XML Output Hello World Hello World Einführendes Beispiel
46
© Prof. T. Kudraß, HTWK Leipzig 46 XSQL Queries und Connections XSQL 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 xuser jdbc:oracle:thin:@localhost:1521:mydb oracle.jdbc.driver.OracleDriver... xuser jdbc:oracle:thin:@localhost:1521:mydb oracle.jdbc.driver.OracleDriver...
47
© Prof. T. Kudraß, HTWK Leipzig 47 XSQL Tags (Auswahl) Abfrage der Datenbank über XSU (kann über zusätzliche Optionen gesteuert werden / siehe nächste Folie) erlaubt die Ausführung beliebiger DML- und DDL-Operationen (INSERT, CREATE TABLE etc.) und jedes PL/SQL-Blockes Einfügen von XML-Dokumenten in die Datenbank (Voraussetzung: kanonisches Format) Löschen von Zeilen aus SQL-Tabelle, Angabe der Schlüsselspalten erforderlich Änderung von Zeilen einer SQL-Tabelle, identifizierende Spalten angeben
48
© Prof. T. Kudraß, HTWK Leipzig 48 Anpassung von XSQL Queries rowset-elementElementname für Anfrageergebnis; leerer String, wenn kein Elementname gewünscht row-elementElementname für jede Zeile im Anfrageergebnis; leerer String, wenn kein Name gewünscht max-rowsMaximalanzahl von Zeilen, die vom Ergebnis ausgegeben werden sollen, sinnvoll z.B. für Top-N-Queries skip-rowsAnzahl von Zeilen, die übersprungen werden soll vor Darstellung des Ergebnisses id-attributeAttributname 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-indicatorWenn auf y oder yes gesetzt: Null-Indicator-Attribut bei den Elementen genutzt, dessen Wert NULL ist Attribute für xsql:query :
49
© 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 <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 connection=demo xmlns:xsql=urn:oracle-xsql find=% sort=ENAME null-indicator=yes> SELECT * FROM EMP WHERE ENAME LIKE %{@find}% ORDER BY {@sort}
50
© Prof. T. Kudraß, HTWK Leipzig 50 Nested Cursor erzeugen in SQL-Anfragen die XML-typische Baumstruktur (anstelle von Tabellen) Beispiel: FBEREICHSTUDIENGANGSEMESTERBEZEICHNUNG IMNIN1Grundlagen der Informatik IMNIN1Analysis 1 Baumstruktur in XML: IMN |-IN |- 1.Semester |- Grundlagen der Informatik |- Analysis 1
51
© 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
52
© Prof. T. Kudraß, HTWK Leipzig 52 Beispiel Nested Cursor (2) Tiefe 3: Fachbereich Studiengang Semester IMN IN 1 2...
53
© 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 studgang from faecher f group by f.fbereich Kommentare: – GROUP BY verhindert Redundanz im Baum – in WHERE-Klausel des Cursors Referenz auf die höheren Ebenen
54
© Prof. T. Kudraß, HTWK Leipzig 54 Aufruf XSQL Page Processor Kommando- Zeile Java Applikation XSQL Servlet Java Server Page XSQL Page Processor
55
© Prof. T. Kudraß, HTWK Leipzig 55 XSQL Servlet Environment Web Server mit Servlet Engine XSQL Page Processor XSQL Servlet JDBC http Oracle DB Web-Browser
Ähnliche Präsentationen
© 2025 SlidePlayer.org Inc.
All rights reserved.