• Keine Ergebnisse gefunden

Publikation von XML-Daten mit XSQL Pages

N/A
N/A
Protected

Academic year: 2022

Aktie "Publikation von XML-Daten mit XSQL Pages"

Copied!
23
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

XSQL Pages

(2)

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

(3)

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

(4)

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

(5)

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

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

(6)

XSQL Page Processor Architektur

XSL Stylesheet

XSQL Page

XML o.a.

Formate

XSQLConfig

Datenbank XSQL Page Processor

XSLT

XML Parser

XML Utility

JDBC

(7)

Ü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

(8)

Ü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

(9)

Ü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

(10)

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)

(11)

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>

(12)

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

(13)

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>

(14)

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>

BEGIN

INSERT INTO dept (deptno,dname)VALUES ({@dept},‘{@dname}‘);

my_package.my_procedure (‘{@dname}‘);

END;

</xsql:dml>

<!– Anonymer Block, der Statements kombiniert -->

<xsql:dml>

BEGIN

INSERT INTO dept (deptno,dname)VALUES ({@dept},‘{@dname}‘);

my_package.my_procedure (‘{@dname}‘);

END;

</xsql:dml>

(15)

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 Handler

Attribut mask liefert Parameterwert für Java-Applikation

(16)

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);

} }

(17)

Aufruf des XSQL Page Processor

Kommando- zeile

XSQL Page Processor Java-

Applikation

XSQL- Servlet

Java Server Page

(18)

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

(19)

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));

}

(20)

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-Browser

Oracle-Datenbank Web Server mit Servlet Engine

http JDBC

(21)

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“>

(22)

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

(23)

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

Referenzen

ÄHNLICHE DOKUMENTE

www.deutschlandradio.de/seewetter oder kann sie im Radio auf Deutschlandradio und NDR-Info-Spezial hören. a) Schreiben Sie ein XML-Dokument, das einige Zeilen der im

Als XML-Datei soll eine der verfügbaren Wettermeldungen-Dateien verwendet werden. Die XML-Daten können als Objekt von responseXML entnommen werden. b) Werten Sie das

• Es hängt von der XSQL Page ab, welche Aktion ausgeführt werden sollen. • Ausführung einer

Da diese aber per Trigger vergeben wird, muß diese auch bei einem Insert per XSQL nicht angegeben werden.. Standardwert bei Nicht- Angabe

Im Unterschied zur Generierung flacher XML-Dokumente (vgl. Aufgabe 1) ist bei der Erzeugung komplex strukturierter XML-Dokumente die Verknüpfung

Ein grosses Potenzial für Smart Services leitet sich laut Rohner auch in den Berei- chen des Bauwerkmonitorings, der Türen, Fenster und Fassaden ab, ebenso bei Smart

Wird von einem Datensatz nur die Identifikationsnummer gespeichert, ist dies sehr ressourcensparend, allerdings ist dann der Einsatz der Datenbank nutz- los, da ein Zugriff auf

In diesem Kapitel wird auf den Kompilierungsprozess und die hier möglichen Optimie- rungen für Pfadausdrücke mit Full-Text Erweiterung detailliert eingegangen und gezeigt, wie