Publikation von XML-Daten mit XSQL Pages. © Prof. T. Kudraß, HTWK Leipzig Vorteile von XSQL Pages...

23
Publikation von XML-Daten mit XSQL Pages

Transcript of Publikation von XML-Daten mit XSQL Pages. © Prof. T. Kudraß, HTWK Leipzig Vorteile von XSQL Pages...

Page 1: Publikation von XML-Daten mit XSQL Pages. © Prof. T. Kudraß, HTWK Leipzig Vorteile von XSQL Pages einfache Generierung von XML-Dokumenten auf der Basis.

Publikation von XML-Daten mit XSQL Pages

Page 2: Publikation von XML-Daten mit XSQL Pages. © Prof. T. Kudraß, HTWK Leipzig Vorteile von XSQL Pages einfache Generierung von XML-Dokumenten auf der Basis.

© Prof. T. Kudraß, HTWK Leipzig

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 ihrer Darstellung

Page 3: Publikation von XML-Daten mit XSQL Pages. © Prof. T. Kudraß, HTWK Leipzig Vorteile von XSQL Pages einfache Generierung von XML-Dokumenten auf der Basis.

© Prof. T. Kudraß, HTWK Leipzig

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 während XSQL-Verarbeitung– XSL Transformationen zur Formatierung des Output

Page 4: Publikation von XML-Daten mit XSQL Pages. © Prof. T. Kudraß, HTWK Leipzig Vorteile von XSQL Pages einfache Generierung von XML-Dokumenten auf der Basis.

© Prof. T. Kudraß, HTWK Leipzig

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 5: Publikation von XML-Daten mit XSQL Pages. © Prof. T. Kudraß, HTWK Leipzig Vorteile von XSQL Pages einfache Generierung von XML-Dokumenten auf der Basis.

© Prof. T. Kudraß, HTWK Leipzig

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 6: Publikation von XML-Daten mit XSQL Pages. © Prof. T. Kudraß, HTWK Leipzig Vorteile von XSQL Pages einfache Generierung von XML-Dokumenten auf der Basis.

© Prof. T. Kudraß, HTWK Leipzig

XSQL Page Processor Architektur

XSL Stylesheet

XSQL Page

XML o.a. Formate

XSQLConfig

Datenbank

XSQL Page Processor

XSLT

XML Parser

XML Utility

JDBC

Page 7: Publikation von XML-Daten mit XSQL Pages. © Prof. T. Kudraß, HTWK Leipzig Vorteile von XSQL Pages einfache Generierung von XML-Dokumenten auf der Basis.

© Prof. T. Kudraß, HTWK Leipzig

Überblick über XSQL Tags <xsql:query>

– Ausführung eines beliebigen SQL-Statements und Einfügen Result Set in kanonischem XML-Format

<xsql:dml>– Ausführung eines beliebigen DML-Statements oder anonymen

PL/SQL-Blocks

<xsql:set-stylesheet-param>– Setze Top-Level-Stylesheet Parameter in XSLT-Stylesheet– value-Attribut oder SQL-Statement als Inhalt

<xsql:insert-request>– Einfügen XML-Dokument, das in Request gesendet wurde, in

DB-Tabelle oder Sicht

<xsql:include-xml>– Einfügen beliebiges XML-Dokument durch Angabe URL

Page 8: Publikation von XML-Daten mit XSQL Pages. © Prof. T. Kudraß, HTWK Leipzig Vorteile von XSQL Pages einfache Generierung von XML-Dokumenten auf der Basis.

© Prof. T. Kudraß, HTWK Leipzig

Überblick über XSQL Tags (2) <xsql:include-request-params>

Einfügen XML-Fragment in der XSQL-Page:– Namen und Werte aller HTTP-Parameter– Cookies und Session Variable

<xsql:include-xsql>– Einfügen des XML-Outputs einer anderen XSQL-Page

<xsql:include-owa>– Ausführen eines PL/SQL Stored Procedure, die OWA-Package zur

Erzeugung von XML-Inhalt verwendet – Einfügen des XML-Fragments

<xsql:action>– Aufruf eines benutzerdefinierten Action Handlers (implementiert in

Java) <xsql:ref-cursor-function>

– Einfügen der XML-Repräsentation eines Result Sets eines Cursors, der durch eine PL/SQL Stored Functions zurückgeliefert wird

Page 9: Publikation von XML-Daten mit XSQL Pages. © Prof. T. Kudraß, HTWK Leipzig Vorteile von XSQL Pages einfache Generierung von XML-Dokumenten auf der Basis.

© Prof. T. Kudraß, HTWK Leipzig

Überblick über XSQL Tags (3) <xsql:include-param>

– Einfügen eines Parameters und seines Wertes als Element in der XSQL Page

<xsql:set-session-param>– Setze HTTP-Session-Parameter, deren Werte über Page

Request hinaus erhalten bleiben

<xsql:set-page-param>– Setze Page-Parameter– Genutzt für parametrisierte SQL-Befehle

<xsql:set-cookie>– Setze den Wert von HTTP-Cookie (Alter, Domain)

<xsql:insert-param>– Einfügen von Parameterwerten in DB-Tabelle oder View– Nutzbar für XML-Dokumente als HTTP-Parameter

Page 10: Publikation von XML-Daten mit XSQL Pages. © Prof. T. Kudraß, HTWK Leipzig Vorteile von XSQL Pages einfache Generierung von XML-Dokumenten auf der Basis.

© Prof. T. Kudraß, HTWK Leipzig

Anpassung von XSQL Queries

Attribute für xsql:query:

Name Beschreibung rowset-element Elementname für Query-Ergebnis, Default ist

<ROWSET>, wenn leerer String: Element für Rowset wird unterdrückt

row-element Elementname für Zeile max-rows Maximale Anzahl gewünschter Zeilen, sinnvoll z.B. für

Top-N-Queries skip-rows Anzahl zu überspringender Zeilen vor Rückgabe des

Ergebnisses

id-attribute Attributname für id-Attribut in jeder Ergebniszeile id-attribute-column Zu nutzender Spaltenname für id-Attribut null-indicator Wenn y oder yes: Nutze null-indicator-Attribut

für NULL-Werte (Default: Weglassen des jeweiligen Elements)

Page 11: Publikation von XML-Daten mit XSQL Pages. © Prof. T. Kudraß, HTWK Leipzig Vorteile von XSQL Pages einfache Generierung von XML-Dokumenten auf der Basis.

© Prof. T. Kudraß, HTWK Leipzig

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 12: Publikation von XML-Daten mit XSQL Pages. © Prof. T. Kudraß, HTWK Leipzig Vorteile von XSQL Pages einfache Generierung von XML-Dokumenten auf der Basis.

© Prof. T. Kudraß, HTWK Leipzig

XSQL Tag Attribute für DML

Für alle DML-Operationen muß Zieltabelle spezifiziert werden:

<xsql:insert-request table=“purchase_order“transform=“order-to-rowset.xsl“/>

<xsql:insert-request table=“purchase_order“transform=“order-to-rowset.xsl“/>

Für Update und Delete Angabe eines Key notwendig

<xsql:update-request table=“dept“ transform=“doc-to-dept.xsl“key-columns=“deptno“/>

<xsql:update-request table=“dept“ transform=“doc-to-dept.xsl“key-columns=“deptno“/>

<xsql:delete-request table=“dept“ transform=“doc-to-dept.xsl“ key-column=“deptno“/>

<xsql:delete-request table=“dept“ transform=“doc-to-dept.xsl“ key-column=“deptno“/>

Angabe eines Stylesheets erforderlich für Umwandlung kanonische <ROWSET>/<ROW>-Struktur

Page 13: Publikation von XML-Daten mit XSQL Pages. © Prof. T. Kudraß, HTWK Leipzig Vorteile von XSQL Pages einfache Generierung von XML-Dokumenten auf der Basis.

© Prof. T. Kudraß, HTWK Leipzig

XSQL Tag Attribute für DML (Beispiel)

<?xml version = ‘1.0‘?> <?xml-stylesheet type=“text/xsl“ href=“newsstorylist.xsl“?><page connection=“demo“ xmlns:xsql=“urn:oracl-xsql“> <xsql:insert-request table=“newsstory“

transform=“moreover-to-newsstory.xsl“/> <latestnews>

<xsql:query max-rows=“10“> SELECT id,title,url AS h_url FROM newsstory ORDER BY id DESC</xsql:query>

</latestnews></page>

<?xml version = ‘1.0‘?> <?xml-stylesheet type=“text/xsl“ href=“newsstorylist.xsl“?><page connection=“demo“ xmlns:xsql=“urn:oracl-xsql“> <xsql:insert-request table=“newsstory“

transform=“moreover-to-newsstory.xsl“/> <latestnews>

<xsql:query max-rows=“10“> SELECT id,title,url AS h_url FROM newsstory ORDER BY id DESC</xsql:query>

</latestnews></page>

Page 14: Publikation von XML-Daten mit XSQL Pages. © Prof. T. Kudraß, HTWK Leipzig Vorteile von XSQL Pages einfache Generierung von XML-Dokumenten auf der Basis.

© Prof. T. Kudraß, HTWK Leipzig

Aufruf von Stored Procs aus XSQL

Aufruf von Stored Procedures aus XSQL mittels <xsql:dml> Tag:- Stored Procedures in PL/SQL oder Java- Aufruf von anonymen PL/SQL erlaubt

Beispiele:

<xsql:dml>my_package.my_procedure(‘{@dname}‘);</xsql:dml>

<xsql:dml>my_package.my_procedure(‘{@dname}‘);</xsql:dml>

<!– Anonymer Block, der Statements kombiniert --><xsql:dml>BEGININSERT INTO dept (deptno,dname)VALUES ({@dept},‘{@dname}‘); my_package.my_procedure (‘{@dname}‘); END;</xsql:dml>

<!– Anonymer Block, der Statements kombiniert --><xsql:dml>BEGININSERT INTO dept (deptno,dname)VALUES ({@dept},‘{@dname}‘); my_package.my_procedure (‘{@dname}‘); END;</xsql:dml>

Page 15: Publikation von XML-Daten mit XSQL Pages. © Prof. T. Kudraß, HTWK Leipzig Vorteile von XSQL Pages einfache Generierung von XML-Dokumenten auf der Basis.

© Prof. T. Kudraß, HTWK Leipzig

XSQL Custom Actions (1)

Implementierung von benutzerdefinierten Action Handlers mittels xsql:action Tags:

<?xml version =‘1.0‘?><xsql:action handler=“JavaDate“ xmlns:xsql=“urn:oracle-xsql“ format=“dd.MM.yyyy“ mask=“{@format}“/>

<?xml version =‘1.0‘?><xsql:action handler=“JavaDate“ xmlns:xsql=“urn:oracle-xsql“ format=“dd.MM.yyyy“ mask=“{@format}“/>

Einbeziehung von Business-Logik, z.B.:• Aufruf von DB-Sequenzen• Formatierung von Daten• Manipulation von XML-Dokumenten

Klasse JavaDate = Action HandlerAttribut mask liefert Parameterwert für Java-Applikation

Page 16: Publikation von XML-Daten mit XSQL Pages. © Prof. T. Kudraß, HTWK Leipzig Vorteile von XSQL Pages einfache Generierung von XML-Dokumenten auf der Basis.

© Prof. T. Kudraß, HTWK Leipzig

XSQL Custom Actions (2)

Java-Klasse ist entweder: Implementation des XSQLActionHandler Interface Erweiterung der Basis-Implementationsklasse XSQLActionandlerImpl

public class JavaDate extends XSQLActionHandlerImpl { public void handleAction (Node root) { String mask = getAttributeAllowingParm (“mask“,getActionElement()); String dateValue = null; SimpleDateFormat sdf = new SimpleDataFormat (mask); dateValue = sdf.format (new Date()).toString()); addResultElement (root,“CurrentDate“,dateValue); }}

public class JavaDate extends XSQLActionHandlerImpl { public void handleAction (Node root) { String mask = getAttributeAllowingParm (“mask“,getActionElement()); String dateValue = null; SimpleDateFormat sdf = new SimpleDataFormat (mask); dateValue = sdf.format (new Date()).toString()); addResultElement (root,“CurrentDate“,dateValue); }}

Page 17: Publikation von XML-Daten mit XSQL Pages. © Prof. T. Kudraß, HTWK Leipzig Vorteile von XSQL Pages einfache Generierung von XML-Dokumenten auf der Basis.

© Prof. T. Kudraß, HTWK Leipzig

Aufruf des XSQL Page Processor

Kommando-zeile

XSQL Page Processor

Java-Applikation

XSQL-Servlet

Java ServerPage

Page 18: Publikation von XML-Daten mit XSQL Pages. © Prof. T. Kudraß, HTWK Leipzig Vorteile von XSQL Pages einfache Generierung von XML-Dokumenten auf der Basis.

© Prof. T. Kudraß, HTWK Leipzig

XSQL-Aufruf aus Kommandozeile Beispiel:

Fluginformationen aus San Francisco mittels XSQL Command Line Utility abrufen:>xsql airport.xsql airport=sfo xsql-stylesheet=none

Abhängig von XSQL-Page werden Aktionen aufgerufen. URL spezifiziert XML-Quelle, die in XSQL-Page eingefügt werden soll >xsql insertnewsstory.xsql posted-xml=http://www.news.com/source

Page 19: Publikation von XML-Daten mit XSQL Pages. © Prof. T. Kudraß, HTWK Leipzig Vorteile von XSQL Pages einfache Generierung von XML-Dokumenten auf der Basis.

© Prof. T. Kudraß, HTWK Leipzig

XSQL-Aufruf aus Java-Programm

Verwende oracle.xml.xsql.XSQLRequest():

public static void main (String[] args) throws Exception { // Erzeuge Instanz einer XSQLRequest-Klasse URL pageUrl = new URL(“file:///C:/foo/bar.xsql“); XSQLRequest req = new XSQLRequest(pageUrl); // Speichere Parameter in Hashtabelle Hashtable params = new Hashtable(3); params.put(“param1“,“value1“); params.put(“param2“,“value2“); // Verarbeite Seite, übergebe Parameter // Gebe Ergebnis auf Out-Stream aus req.process(params, new PrintWriter(System.out),

new PrintWriter(System.err));}

public static void main (String[] args) throws Exception { // Erzeuge Instanz einer XSQLRequest-Klasse URL pageUrl = new URL(“file:///C:/foo/bar.xsql“); XSQLRequest req = new XSQLRequest(pageUrl); // Speichere Parameter in Hashtabelle Hashtable params = new Hashtable(3); params.put(“param1“,“value1“); params.put(“param2“,“value2“); // Verarbeite Seite, übergebe Parameter // Gebe Ergebnis auf Out-Stream aus req.process(params, new PrintWriter(System.out),

new PrintWriter(System.err));}

Page 20: Publikation von XML-Daten mit XSQL Pages. © Prof. T. Kudraß, HTWK Leipzig Vorteile von XSQL Pages einfache Generierung von XML-Dokumenten auf der Basis.

© Prof. T. Kudraß, HTWK Leipzig

XSQL Servlet-Umgebung

Aufgaben von XSQL Servlets– empfangen web-basierte Requests von Web-Clients– verarbeiten XSQL-Pages– liefern XML an den aufrufenden Client zurück– (optional) transformieren die Information in irgendein anderes

Format (z.B. XML, HTML, Text) XSQL Servlets basieren auf Servlet Java-Klassen

(Servlet 2.1-Spezifikation)

XSQL Page Processor

XSQL Servlet

Web-BrowserOracle-Datenbank

Web Server mit Servlet Engine

JDBChttp

Page 21: Publikation von XML-Daten mit XSQL Pages. © Prof. T. Kudraß, HTWK Leipzig Vorteile von XSQL Pages einfache Generierung von XML-Dokumenten auf der Basis.

© Prof. T. Kudraß, HTWK Leipzig

XSQL und Java Server Pages (JSP) Java Server Pages

– ermöglichen dokumentzentrischen Ansatz zur Entwicklung von dynamischen Web-Content

– werden vor Ausführung in Servlets übersetzt

JSP Tags zum Aufruf von XSQL-Pages– <jsp:include page=“foo.xsql“>– <jsp:forward page=“bar.xsql“>

Page 22: Publikation von XML-Daten mit XSQL Pages. © Prof. T. Kudraß, HTWK Leipzig Vorteile von XSQL Pages einfache Generierung von XML-Dokumenten auf der Basis.

© Prof. T. Kudraß, HTWK Leipzig

Oracle Servlet Laufzeitumgebung Oracle Servlet Engine (OSE)

– komplette Laufzeitumgebung für XSQL Pages und Servlet-Verarbeitung

– Konfiguration in Oracle Datenbank (seit 8.1.7) Internet Application Server (iAS) Oracle HTTP-Server (powered by Apache)

Oracle Web-to-Go– Single-User Server, vorkonfiguriert für XSQL Pages– zum Entwickeln und Testen von XSQL Pages – unterstützt Servlet 2.1 API– gebündelt mit XSQL Pages und Servlet for Windows

Page 23: Publikation von XML-Daten mit XSQL Pages. © Prof. T. Kudraß, HTWK Leipzig Vorteile von XSQL Pages einfache Generierung von XML-Dokumenten auf der Basis.

© Prof. T. Kudraß, HTWK Leipzig

Kompatible Servlet Engines Oracle Internet Application Server, ab 8i Apache 1.3.9 mit JServ 1.0 und 1.1 Apache 1.3.9 mit Tomcat 3.1 Servlet Engine Apache Tomcat 3.1 Web Server + Servlet Engine Oracle Lite Web-to-Go Server Oracle 8i Servlet Engine Sun JavaServer Web Development Kit (JSWDK)

1.0.1 Web Server