• Keine Ergebnisse gefunden

Das Oracle XML Development Kit (XDK)

N/A
N/A
Protected

Academic year: 2022

Aktie "Das Oracle XML Development Kit (XDK)"

Copied!
23
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

(XDK)

(2)

Bestandteile des XDK

XML Parser

Schema Processor Class Generator

Java Beans XSQL Servlet

XSLT Processor

Java C++ C PL/SQL

(3)

PL/SQL XDK: Packages

xmlparser

Parser-Funktionen

xmldom

enthält DOM-API

xslprocessor

enthält XSL-Transformationmöglichkeiten

(4)

Verarbeiten von XML

DOM/SAX Parser

XSL Processor

DTD or XML Schema

XSL Stylesheet

Transformiertes Dokument Original

XML Dokument

(5)

Parsing-Strategien

 DOM-Parser

erzeugt einen DOM-Baum im Hauptspeicher

DOM-API erlaubt: Transformation, Manipulation und Suche im Baum

sehr ressourcenaufwendig

 SAX Parser

SAX = Simple API for XML

produziert einen Output Stream

Grundlage: eventgetriebenes Modell

sehr gut geeignet für große Dokumente

keine W3C-Standard

(6)

Parsing-Strategien

<ShoppingCart>

<item>

<Desc>

Fun with XML

<Qty>

1

SAX DOM

<ShoppingCart>

<item>

<Desc> Fun with XML

<Qty> 1

...

(7)

DOM-Parser Funktionalität

Create

new parser Parse string

buffer or CLOB

Reset

parser Get document

Free parser (nur PL/SQL)

Use other

DOM functions DOM

Document Properties

XML Input

(8)

Beispiel: DOM Parser in PL/SQL

p xmlparser.parser;

doc xmldom.DOMDocument;

begin

p:=xmlparser.newparser;

xmlparser.setValidationMode(p,FALSE);

xmlparser.setErrorLog(p,dir || ‘/‘ ||

errfile);

xmlparser.setBaseDir(p,dir);

xmlparser.parse(p,dir || ‘/‘ || inpfile);

doc:=xmlparser.getDocument(p);

dbms_output.put(‘The elements are: ‘);

printElements(docs);

dbms_output.put(‘The attributes of each element are: ‘);

printElementAttributes(doc);

end;

Create Parser

Get Document Parse XML

(9)

Beispiel: DOM Parser in Java (1)

public class DOMSample { ...

DOMParser parser = new DOMParser();

URL url = createURL(argv[0]);

...

public static void main (String[] args){

parser.parse(url);

XMLDocument doc = parser.getDocument();

printElements(doc);

} ...

} Create

Parser

Get Document Parse XML

Aufruf in Kommandozeile (NT oder Unix):

>oraxml options xmlsource

(10)

Beispiel: DOM Parser in Java (2)

static void printElements(Document doc) {

NodeList nl = doc.getElementsByTagName(“*“);

Node n;

for (int i=0; i<nl.getLength();i++) { n = nl.item(i);

System.out.print(n.getNodeName() + ““);

}

System.out.println();

} Obtain Tree

Get Information

(11)

Nutzung von XPath Expressions

NodeList nl = theXMLDoc.selectNodes(

“//Item[Qty > 0 and Discount > 5]“);

int matches = nl.getLength();

for (int i = 0; i < matches; i++) { System.out.println(

((XMLElement)nl.item(i)).valueOf(“Desc“));

} XPath

Expression

Value of Element

XPath-Referenzen:

http://www.w3.org/TR/xpath.html

http://www.mulberrytech.com/quickref

(12)

SAX-Parser Funktionalität

Create

new SAX parser

Parse string buffer or URL

Callback methods

Output stream Properties

XML Input

Validation Mode Base URL

Preserve White Space Document Type

Document Handler DTD Handler

(13)

Nutzung des SAX Parsers

public class SAXSample extends HandlerBase ...

Parser parser = new SAXParser();

...

public void characters(char[] cbuf, int start, int len)

{

System.out.print(“Characters:“);

System.out.println(new String(cbuf,start,len));

}

...

} Extend

Base Class

Add Custom Logic

Override Method

gilt für SAX 1.0

(14)

XSL Transformation Funktionalität

Create XSL processor

Build stylesheet

Process stylesheet

Output stream Stylesheet

Input

DOM Document Parsed

XML Input

(15)

Beispiel XSL Transformation (1)

<html xmlns:xsl=“http://www.w3.org/1999/XSL/Transform“

xsl:version=“1.0“>

<head>

<title>Contents of Shopping Cart</title>

</head>

<body>

<h1>Your Shopping Cart>7H1>

<ul>

<xsl:for-each-select=“/ShoppingCart/Item“>

<li><xsl:value-of-select=“Qty“/>copy of

<strong><xsl:value-of-select=“Desc“/></strong></li>

</xsl:for-each>

</ul>

</body>

</html>

Beispiel für ein XML Stylesheet:

(16)

Beispiel XSL Transformation (2)

-- Declarations

xmldoc xmldom.DOMDocument;

proc xslprocessor.Processor;

stst xslprocessor.Stylesheet;

docfrag xmldom.DOMDocumentFragment;

-- parse xml file, build XMLDocument xmldoc...

(...)

-- Transform xmldoc:

stst := xslprocessor.newStylesheet(xsldoc, dir ||

‘/‘|| xslfile);

proc := xslprocessor.newProcessor;

xslprocessor.showWarnings(proc,true);

xslprocessor.setErrorLog(proc, dir || ‘/‘ || errfile);

docfrag := xslprocessor.processXSL(proc,stst,xmldoc);

(...)

Nutzung XSL Processor in PL/SQL:

(17)

Beispiel XSL Transformation (3)

...

theParser.parse(XMLStreamToParse);

the XMLDoc = theParser.getDocument();

XSLStylesheet theXSLStylesheet = new XSLStylesheet(XSLStream,null);

XSLProcessor processor = new XSL Processor();

processor.processXSL(theXSLStylesheet,

the XMLDoc,System.out);

Aufruf XSL Processor aus Java-Programm:

Aufruf aus Kommandozeile:

(18)

Beispiel XSL Transformation (4)

<html>

<head>

<META http-equiv=“Content-Type“ content=“text/html;

charset=UTF8“>

<title>Contents of Shopping Cart </title>

</head>

<body>

<h1>Your Shopping Cart</h1>

<ul>

<li>1 copy of

<strong>Fun with XML</strong>

</li>

<li>2 copy of

<strong>XML in Literature</strong>

</li>

</ul>

</body>

(19)

XML Class Generator

XML Parser for Java

Java Application

Generierte Java-Klassen

Gültiges XML-Document basierend auf DTD oder XML Schema

DTD oder

XML Schema XML Class Generator

for Java

(20)

Beispiel: Generierung von Klassen (1)

<!-- DTD for Employee Data -->

<!ELEMENT EMP (EMP_ROW)*>

<!ELEMENT EMP_ROW (EMPNO, ENAME?, JOB?, MGR?, HIREDATE?, SAL?, COMM?, DEPTNO?)>

<!ATTLIST EMP_ROW ROWNO CDATA #REQUIRED>

<!ELEMENT EMPNO (#PCDATA)>

<!ELEMENT ENAME (#PCDATA)>

<!ELEMENT JOB (#PCDATA)>

<!ELEMENT MGR (#PCDATA)>

<!ELEMENT HIREDATE (#PCDATA)>

<!ELEMENT SAL (#PCDATA)>

<!ELEMENT COMM (#PCDATA)>

<!ELEMENT DEPTNO (#PCDATA)>

Die Input-DTD bestimmt die Struktur des XML-Dokuments:

(21)

Beispiel: Generierung von Klassen (2)

...

ClassGenerator generator = new ClassGenerator();

generator.setGenerateComments(true);

generator.setOutputDirectory(“.“);

generator.setPackageName(“myPackage“);

generator.generate(dtd, doctype_name);

...

Zur Erzeugung einer neuen Java-Klasse:

Aufruf eines Programms mit XML Wurzel-Element und DTD als Argumenten:

>java SampleMain -root EMP emp.dtd

Verwende ClassGenerator in SampleMain :

(22)

Beispiel: Generierung von Klassen (3)

...

EMP EMPLIST = new EMP();

EMP_ROW emp_row1 = new EMP_ROW(“1“);

EMPNO empno1 = new EMPNO(“7654“);

ENAME ename1 = new ENAME(“MARTIN“);

Emp_row1.addNode(empno1);

...

Applikationen können

erzeugte Klassen benutzen ...

...

<EMP>

<EMP_ROW ROWNO=“1“>

<EMPNO>7654</EMPNO>

<ENAME>MARTIN</ENAME>

<EMP_ROW>

...

... und XML-Output produzieren

(23)

<%! cursor prod_cur is select * from products

where price between minprice and´maxprice vc_name varchar2(200):=‘Peter‘; %>

<%! cursor prod_cur is select * from products

where price between minprice and´maxprice vc_name varchar2(200):=‘Peter‘; %>

SQL>CREATE OR REPLACE PACKAGE comm_package IS

2 g_comm NUMBER := 10; --initialized to 10 3 PROCEDURE reset_comm

4 (v_comm IN NUMBER);

5 END comm_package;

6 /

Referenzen

ÄHNLICHE DOKUMENTE

 Ist in die XML-Datei eine XSL-Datei eingebunden, wird diese auch ausgeführt, sodass man das transformierte Dokument sieht. HTTP und Darstellung

+ Unterschiedliche Realisierungen einer abstrakter Schnittstelle möglich (z.B. SOAP über HTTP und SMTP).. Nachteile

ƒ Mit Document Document Type Type Definitions Definitions ( DTDs) können aber DTDs spezielle Auszeichnungssprachen mit konkreten Tags definiert werden:. ƒ werden Anwendungen

ƒ Beachte: Von Browsern wird White Space allerdings nicht angezeigt:.

Element Node: price NodeList Text Node: 11.95 NodeList. Element

alle Zeichen erlaubt, die nicht ausdrücklich verboten.

Wer hat Kontrolle über das Parsen: die Anwendung oder der

• Sobald der Parser eine syntaktische Einheit analysiert hat, benachrichtigt er die Anwendung und übergibt die entsprechende Analyse.. • Beachte: „Push” bezieht sich wiederum