XML und Java -- wohin geht die Reise?

Werbung
XML und Java -- wohin geht die Reise?
Mario Jeckle
DaimlerChrysler Forschungszentrum Ulm
[email protected]
[email protected]
www.jeckle.de
Research and Technology
Gliederung
I XML und Programmiersprachen ...
• Was ist die XML heute?
• Aktuelle Entwicklungen des XML-Umfeldes
II Stand der XML-Technologie ...
• XML-Schema
• SOAP/XMLP
• Ausblick: Semantic Web
III XML und Java ...
• ... eigentlich nichts Neues
• J2SE v1.4 Merlin
• XMLPack
M. Jeckle – XML und Java -- wohin geht die Reise?
2001-06-28
2
Research and Technology
XML und Programmiersprachen ...
Java ist ...
•Programmiersprache
•Laufzeitumgebung
•Enterprise Application Platform (J2EE)
XML ist ...
•Informations- und Datenformat
•Metasprache zur Definition eigener Vokabulare
... keine:
•Programmiersprache
•Ausführungsumgebung
M. Jeckle – XML und Java -- wohin geht die Reise?
≠+
=
2001-06-28
3
Research and Technology
Stand der XML-Technologie: Web Historie
Web-Prähistorie
1. Generation
2. Generation
M. Jeckle – XML und Java -- wohin geht die Reise?
2000
...
XSD
part 2
XML
Mod. XHTML using XSD
1995
part 1
XPath v2
1990
XML v1.0
XML Query
HTML ...
XSLT v2
XML Metadata Interchange
XSL-FO und XSLT
XLink, XPointer
XHTML v1.0 Namensräume
XSD
...
Blueberry
release
„XML
v2.0“
2nd edition
t
2001-06-28
4
Research and Technology
Stand der XML-Technologie: Programmiersprachliches an XML
Web-Prähistorie
1. Generation
1995
M. Jeckle – XML und Java -- wohin geht die Reise?
2000
part 1
...
XSD
part 2
XML
Mod. XHTML using XSD
1990
XML v1.0
XSD
XPath v2
HTML ...
XML Query
XHTML v1.0 Namensräume
XSLT v2
XML Metadata Interchange
XSL-FO und XSLT
XLink, XPointer
JavaML
(Java in XML-Syntax)
2. Generation
...
Blueberry
release
„XML
v2.0“
2nd edition
t
2001-06-28
5
Research and Technology
Stand der XML-Technologie: Programmiersprachliches an XML
Web-Prähistorie
1. Generation
2. Generation
HTML ...
1990
XML v1.0
1995
M. Jeckle – XML und Java -- wohin geht die Reise?
2000
part 1
...
XSD
part 2
XML
Mod. XHTML using XSD
XHTML v1.0 Namensräume
XSD
XPath v2
XML Query
XSLT v2
XML Metadata Interchange
XSL-FO und XSLT
XLink, XPointer
Vergleichbar klassischen Scopes/C++ namespaces
zur Vermeidung von Namenskollisionen
...
Blueberry
release
„XML
v2.0“
2nd edition
t
2001-06-28
6
Research and Technology
Stand der XML-Technologie: Programmiersprachliches an XML
Web-Prähistorie
1. Generation
2. Generation
1990
XML v1.0
1995
M. Jeckle – XML und Java -- wohin geht die Reise?
2000
part 1
...
XSD
part 2
XML
Mod. XHTML using XSD
HTML ...
XSD
XPath v2
XML Metadata Interchange
XSL-FO und XSLT
XLink, XPointer
XHTML v1.0 Namensräume
XML Query
XSLT v2
Referenzierungssyntax und -Semantik
...
Blueberry
release
„XML
v2.0“
2nd edition
t
2001-06-28
7
Research and Technology
Stand der XML-Technologie: Programmiersprachliches an XML
Web-Prähistorie
1. Generation
1995
M. Jeckle – XML und Java -- wohin geht die Reise?
2000
part 1
...
XSD
part 2
XML
Mod. XHTML using XSD
1990
XML v1.0
XSD
XPath v2
HTML ...
XML Query
XHTML v1.0 Namensräume
XSLT v2
XML Metadata Interchange
XSL-FO und XSLT
XLink, XPointer
Turing-vollständige
funktionale Programmiersprache
2. Generation
...
Blueberry
release
„XML
v2.0“
2nd edition
t
2001-06-28
8
Research and Technology
Stand der XML-Technologie: Programmiersprachliches an XML
Web-Prähistorie
1. Generation
1995
M. Jeckle – XML und Java -- wohin geht die Reise?
2000
part 1
...
XSD
part 2
XML
Mod. XHTML using XSD
1990
XML v1.0
XSD
XPath v2
HTML ...
XML Query
XHTML v1.0 Namensräume
XSLT v2
XML Metadata Interchange
XSL-FO und XSLT
XLink, XPointer
Vokabular zur Beschreibung
von Datendefinitionen
2. Generation
...
Blueberry
release
„XML
v2.0“
2nd edition
t
2001-06-28
9
Research and Technology
Stand der XML-Technologie: Programmiersprachliches an XML
Web-Prähistorie
1. Generation
2. Generation
1995
M. Jeckle – XML und Java -- wohin geht die Reise?
2000
part 1
...
XSD
part 2
XML
Mod. XHTML using XSD
1990
XML v1.0
XSD
XPath v2
HTML ...
XSLT v2
XML Metadata Interchange
XSL-FO und XSLT
XLink, XPointer
XHTML v1.0 Namensräume
XML Query
Algebraische Anfragesprache
...
Blueberry
release
„XML
v2.0“
2nd edition
t
2001-06-28
10
Research and Technology
Stand der XML-Technologie: Programmiersprachliches an XML
Web-Prähistorie
1. Generation
2. Generation
1995
M. Jeckle – XML und Java -- wohin geht die Reise?
2000
part 1
...
XSD
part 2
XML
Mod. XHTML using XSD
1990
XML v1.0
XSD
XPath v2
HTML ...
XML Query
XML Metadata Interchange
XSL-FO und XSLT
XLink, XPointer
XHTML v1.0 Namensräume
XSLT v2
Sturkturmechanismen und
erweiterbares Typsystem
...
Blueberry
release
„XML
v2.0“
2nd edition
t
2001-06-28
11
Research and Technology
XML-Schema ... in zehn Punkten
Erlaubt die Erstellung regulärer kontextfreier Grammatiken für XML-Vokabulare
Part 1 beschreibt Strukturen und Inhaltseinschränkungen
Part 2 definiert Datentypdefinition für Schema Part 1 und weitere XML-Vokabulare
Signifikante Erweiterung der DTD-Mächtigkeit, wird diese langfristig ersetzen
Ist eine XML-Sprache
Integriert die wichtigsten konkurrierenden Vorgängeransätze
Seit 2001-05-02 W3C Recommendation
Basis aller W3C-Standards der zweiten Generation (XPath v2.0, XSLT v2.0, XHTML v2.0, XMLP, ...)
Werkzeugunterstützung verfügbar
Erster Schritt der Schema-Bestrebungen, weitere werden folgen ...
M. Jeckle – XML und Java -- wohin geht die Reise?
2001-06-28
12
Research and Technology
XML-Schema ... ein Beispieldokument
<?xml
<?xmlversion="1.0"
version="1.0"encoding="UTF-8"?>
encoding="UTF-8"?>
<Vortrag>
<Vortrag>
<Titel>XML
<Titel>XMLund
undJava
Java––wohin
wohingeht
gehtdie
dieReise?</Titel>
Reise?</Titel>
<Veranstaltung
<Veranstaltungdatum="2001-06-28">
datum="2001-06-28">
<Name>Java
<Name>JavaForum
ForumStuttgart
Stuttgart2001</Name>
2001</Name>
</Veranstaltung>
</Veranstaltung>
<Referent>
<Referent>
<Name>Mario
<Name>MarioJeckle</Name>
Jeckle</Name>
<Firma>DaimlerChrysler
<Firma>DaimlerChryslerResearch
Researchand
andTechnology</Firma>
Technology</Firma>
<URL>http://www.jeckle.de</URL>
<URL>http://www.jeckle.de</URL>
<E-Mail>[email protected]</E-Mail>
<E-Mail>[email protected]</E-Mail>
</Referent>
</Referent>
</Vortrag>
</Vortrag>
M. Jeckle – XML und Java -- wohin geht die Reise?
2001-06-28
13
Research and Technology
XML-Schema ... eine beschreibende Grammatik
<?xml
<xsd:element
<?xmlversion="1.0"
version="1.0"encoding="UTF-8"?>
encoding="UTF-8"?>
<xsd:elementname="Name"
name="Name"type="xsd:string"/>
type="xsd:string"/>
<xsd:schema
<xsd:element
<xsd:schema
<xsd:elementname="Referent">
name="Referent">
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:complexType>
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:complexType>
<xsd:element
name="Vortrag">
<xsd:sequence>
<xsd:element name="Vortrag">
<xsd:sequence>
<xsd:complexType>
<xsd:element
<xsd:complexType>
<xsd:elementref="Name"/>
ref="Name"/>
<xsd:sequence>
<xsd:element
<xsd:sequence>
<xsd:elementname="Firma"
name="Firma"type="xsd:string"
type="xsd:string"
<xsd:element
name="Titel"
type="xsd:string"/>
minOccurs="0"/>
<xsd:element name="Titel" type="xsd:string"/>
minOccurs="0"/>
<xsd:element
ref="Veranstaltung"/>
<xsd:element
<xsd:element ref="Veranstaltung"/>
<xsd:elementname="URL"
name="URL"type="xsd:anyURI"
type="xsd:anyURI"
<xsd:element
ref="Referent"/>
minOccurs="0"/>
<xsd:element ref="Referent"/>
minOccurs="0"/>
</xsd:sequence>
<xsd:element
</xsd:sequence>
<xsd:elementname="E-Mail"
name="E-Mail"minOccurs="0">
minOccurs="0">
</xsd:complexType>
<xsd:simpleType>
</xsd:complexType>
<xsd:simpleType>
</xsd:element>
<xsd:restriction
</xsd:element>
<xsd:restrictionbase="xsd:string">
base="xsd:string">
<xsd:element
name="Veranstaltung">
<xsd:pattern
<xsd:element name="Veranstaltung">
<xsd:patternvalue="\c{1,}@\c{1,}.\c{2,3}"/>
value="\c{1,}@\c{1,}.\c{2,3}"/>
<xsd:complexType>
</xsd:restriction>
<xsd:complexType>
</xsd:restriction>
<xsd:sequence>
</xsd:simpleType>
<xsd:sequence>
</xsd:simpleType>
<xsd:element
ref="Name"/>
</xsd:element>
<?xmlversion="1.0"
version="1.0"encoding="UTF-8"?>
encoding="UTF-8"?>
<xsd:element ref="Name"/>
</xsd:element> <?xml
<Vortrag>
</xsd:sequence>
<Vortrag>
</xsd:sequence>
</xsd:sequence>
</xsd:sequence>
<Titel>XML
<Titel>XMLund
undJava
Java––wohin
wohingeht
gehtdie
dieReise?</Titel>
Reise?</Titel>
<xsd:attribute
ref="datum"/>
</xsd:complexType>
<Veranstaltung
datum="2001-06-28">
<xsd:attribute ref="datum"/>
datum="2001-06-28">
</xsd:complexType> <Veranstaltung
<Name>Java
Forum
</xsd:complexType>
<Name>Java ForumStuttgart
Stuttgart2001</Name>
2001</Name>
</xsd:element>
</xsd:complexType>
</xsd:element>
</Veranstaltung>
</Veranstaltung>
</xsd:element>
</xsd:schema>
<Referent>
</xsd:element>
<Referent>
</xsd:schema>
<Name>Mario
<xsd:attribute
<Name>MarioJeckle</Name>
Jeckle</Name>
<xsd:attributename="datum"
name="datum"type="xsd:date"/>
type="xsd:date"/>
M. Jeckle – XML und Java -- wohin geht die Reise?
<Firma>DaimlerChrysler
<Firma>DaimlerChryslerResearch
Researchand
andTechnology</Firma>
Technology</Firma>
<URL>http://www.jeckle.de</URL>
<URL>http://www.jeckle.de</URL>
<E-Mail>[email protected]</E-Mail>
<E-Mail>[email protected]</E-Mail>
</Referent>
</Referent>
2001-06-28 14
</Vortrag>
</Vortrag>
Research and Technology
XML-Schema ... Mächtigkeit
•Strukturell: Attribute und Elemente (wie in DTDs)
•Namespace-Unterstützung
•Atomare Datentypen (int, float, boolean, ...)
•Anwenderdefinierte
•atomare skalare Datentypen (simpleType)
•Einschränkung des Wertebereichs (Domänenrestriktion)
•lexikalische Muster (reguläre Ausdrücke)
•Aufzählungstypen
•Mengentypen
•komplexe Datentypen (complexType)
•Wiederverwendungsunterstützung
•Vererbung: Restriktion und Erweiterung
•Schemafragmente: Typen, Attribut- und Elementgruppen
•Substitution
•Erweiterter Schlüsselmechanismus
•NULL-Werte
M. Jeckle – XML und Java -- wohin geht die Reise?
2001-06-28
15
Research and Technology
XML Schema: Datentypen
Ur-typ
Vordefinierter
Primitivtyp
Vordefinierter
abgeleiteter Typ
Typeinschränkung
Aggregierter Typ
Aus: XML-Schema Part 2: Datatypes,
W3C-Recommendation 2001-05-02, chap. 3
M. Jeckle – XML und Java -- wohin geht die Reise?
2001-06-28
16
Research and Technology
XML Schema: Datentypen und ihre Abbildung nach Java
string
(length==1)
long
char
IntegralType
long
int
NumericType
FloatingPointType
boolean
M. Jeckle – XML und Java -- wohin geht die Reise?
...
int
short
PrimitiveType
...
short
byte
byte
float
float
double
double
boolean
2001-06-28
17
Research and Technology
XML-basierte RPC-Mechanismen: SOAP, ...
M. Jeckle – XML und Java -- wohin geht die Reise?
2001-06-28
18
Research and Technology
XML-basierte RPC-Mechanismen: SOAP, ...
POST /soap/servlet/rpcrouter HTTP/1.0
POST /soap/servlet/rpcrouter HTTP/1.0
Host: localhost:8081
Host: localhost:8081
Content-Type:
text/xml; charset=utf-8
Content-Type:
charset=utf-8
Content-Length: text/xml;
474
Content-Length:
SOAPAction:
"" 474
SOAPAction: ""
<?xml version='1.0' encoding='UTF-8'?>
<?xml version='1.0' encoding='UTF-8'?>
<SOAP-ENV:Envelope
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SOAP-ENV:Body>
<SOAP-ENV:Body>
<ns1:add xmlns:ns1="urn:NumberAdder"
<ns1:add xmlns:ns1="urn:NumberAdder"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<number1
xsi:type="xsd:int">1</number1>
<number1
xsi:type="xsd:int">1</number1>
<number2 xsi:type="xsd:int">2</number2>
<number2 xsi:type="xsd:int">2</number2>
</ns1:add>
</ns1:add>
</SOAP-ENV:Body>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
</SOAP-ENV:Envelope>
HTTP-Port
Web-Server
Web-Server
HTTP-Port
Request
Firewall
M. Jeckle – XML und Java -- wohin geht die Reise?
Firewall
2001-06-28
19
Research and Technology
XML-basierte RPC-Mechanismen: SOAP, ...
HTTP/1.0 200 OK
HTTP/1.0 200
OK
Content-Type:
text/xml;
charset=utf-8
Content-Type:
text/xml;
charset=utf-8
Content-Length: 529
Content-Length:
529
Set-Cookie2: JSESSIONID=tibpjehn11;Version=1;Discard;Path="/soap"
Set-Cookie2:
JSESSIONID=tibpjehn11;Version=1;Discard;Path="/soap"
Set-Cookie:
JSESSIONID=tibpjehn11;Path=/soap
Set-Cookie: JSESSIONID=tibpjehn11;Path=/soap
Servlet-Engine:
Tomcat Web Server/3.2.1
Servlet-Engine:
Tomcat
Web Server/3.2.1
(JSP
1.1; Servlet 2.2;
Java 1.3.0;
Windows 2000 5.0 x86; java.vendor=Sun Microsystems Inc.)
(JSP 1.1; Servlet 2.2; Java 1.3.0; Windows 2000 5.0 x86; java.vendor=Sun Microsystems Inc.)
<?xml version='1.0' encoding='UTF-8'?>
<?xml version='1.0' encoding='UTF-8'?>
<SOAP-ENV:Envelope
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SOAP-ENV:Body>
<SOAP-ENV:Body>
<ns1:addResponse
<ns1:addResponse
xmlns:ns1="urn:NumberAdder"
xmlns:ns1="urn:NumberAdder"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<return
xmlns:ns2="http://xml.apache.org/xml-soap"
<return
xmlns:ns2="http://xml.apache.org/xml-soap"
xsi:type="ns2:Vector">
xsi:type="ns2:Vector">
<item xsi:type="xsd:int">3</item>
<item xsi:type="xsd:int">3</item>
</return>
</return>
</ns1:addResponse>
</ns1:addResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
</SOAP-ENV:Envelope>
HTTP-Port
Web-Server
Web-Server
HTTP-Port
Response
Firewall
M. Jeckle – XML und Java -- wohin geht die Reise?
Firewall
2001-06-28
20
Research and Technology
XML-basierte RPC-Mechanismen: SOAP/XMLP vs. RMI
Programmiermodellneutral
Sprachunabhängig
Lesbarer Text
(human readable)
Firewallüberwindung
Hauptnutzung:
B2B
asynchron
M. Jeckle – XML und Java -- wohin geht die Reise?
Hauptnutzung:
A2A
SOAP/
XMLP
Transportprotokoll
Verbosität unabhängigkeit
Zentrale
Registrierungsinstanz
synchron
XM
LSc
he
ma
Plattformunabhängigkeit
Typsystem
Objektorientiert
Effiziente
Binärrepräsentation
Verteilungsunterstützung
2001-06-28
21
Das XML-Universum
Research and Technology
Sprachentwurf
Programmierung/
Schnittstellen
XML-Schema (XSD)
DDML
Schematron
RELAX NG
<?XML!>
DCD
DOM
SAX
Editoren
Anwendungen
XML-RPC
SOAP/XMLP
Protokolle
M. Jeckle – XML und Java -- wohin geht die Reise?
Werkzeugunterstützung
2001-06-28 22
Stylesheet-, Linkingprozessoren,
...
Research and Technology
XML und Java ... Simple API for XML (SAX)
Entwickelt durch Mitglieder der Mailingliste xml-dev
auf Initiative von David Megginson
Zusammenstellung sprachunabhängiger Schnittstellen
Light-weight:
•einfach (in eigenen Programmen) einzusetzen
•einfach (in beliebige Programmiersprachen) umzusetzen
Serieller linearer ereignisbasierter Parsingvorgang
Definiert und erfordert keine Speicherstrukturen
SAX ist eine Schnittstelle für Parser, kein Parser!
Laufzeitverhalten skaliert linear mit Dokumentgröße
JAXP und J2SE v1.4 enthält (vermutlich) eine Implementierung des aktuellen Standes SAX2
M. Jeckle – XML und Java -- wohin geht die Reise?
2001-06-28
23
Research and Technology
XML und Java ... Simple API for XML (SAX)
import org.xml.sax.helpers.DefaultHandler;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.parsers.SAXParser;
Implementierung der Standardschnittstelle
public class SAXExample extends DefaultHandler
{
public void startDocument()
{
//...
} //startDocument()
public void startElement(String namespaceURI, String localName, String qName, Attributes atts)
{
// ...
} //startElement()
public static void main (String args[]) throws Exception
{
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
sp.parse( args[0], new SAXExample() );
} //main()
}//class SAXExample
M. Jeckle – XML und Java -- wohin geht die Reise?
2001-06-28
24
Research and Technology
XML und Java ... Simple API for XML (SAX)
import org.xml.sax.helpers.DefaultHandler;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.parsers.SAXParser;
SAX-Parserimplementierung der JAXP
public class SAXExample extends DefaultHandler
{
public void startDocument()
{
//...
} //startDocument()
public void startElement(String namespaceURI, String localName, String qName, Attributes atts)
{
// ...
} //startElement()
public static void main (String args[]) throws Exception
{
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
sp.parse( args[0], new SAXExample() );
} //main()
}//class SAXExample
M. Jeckle – XML und Java -- wohin geht die Reise?
2001-06-28
25
Research and Technology
XML und Java ... Simple API for XML (SAX)
import org.xml.sax.helpers.DefaultHandler;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.parsers.SAXParser;
public class SAXExample extends DefaultHandler
{
public void startDocument()
{
//...
} //startDocument()
public void startElement(String namespaceURI,
String localName, String qName, Attributes atts)
{
// ...
} //startElement()
public static void main (String args[]) throws Exception
{
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
sp.parse( args[0], new SAXExample() );
} //main()
}//class
SAXExample
M. Jeckle
– XML und Java -- wohin geht die Reise?
Durch SAX in ihrer Signatur
vorgegebene
Callback-Methoden
2001-06-28
26
Research and Technology
XML und Java ... Simple API for XML (SAX)
import org.xml.sax.helpers.DefaultHandler;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.parsers.SAXParser;
public class SAXExample extends DefaultHandler
{
public void startDocument()
{
//...
} //startDocument()
public void startElement(String namespaceURI,
String localName, String qName, Attributes atts)
{
// ...
} //startElement()
public static void main (String args[]) throws Exception
{
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
sp.parse( args[0], new SAXExample() );
} //main()
}//class
SAXExample
M. Jeckle
– XML und Java -- wohin geht die Reise?
Erzeugung eines SAX-basierten
Parsers und
prüfen eines XML-Dokuments
2001-06-28
27
Research and Technology
XML und Java ... Document Object Model (DOM)
W3C standardisierte API für HTML, XML, CSS, etc.
Stand: Recommendation: DOM Level 1, Level 2; Working Draft: Level 3
Definiert programmiersprachenunabhängige (beschrieben durch CORBA IDL)
baumartige objektorientierte Speicherstruktur für XML mit Operationen
zur Navigation und Manipulation
(z.B. Elemente ändern, löschen, hinzufügen)
Zumeist auf Basis eines SAX-basierten Parsingvorganges erzeugt
Speicheraufwand zur Verwaltung des gesamten XML-Dokuments im Hauptspeicher teilweise sehr hoch
Mit JDOM existiert eine für Java optimierte moderne Implementierung
(d.h. Berücksichtigung von XML-Schema, Nutzung der Collection- und Reflection API, etc.)
Verfügbar: Diverse Implementierungen; JDOM, DOM4J
JDOM: JSR
M. Jeckle – XML und Java -- wohin geht die Reise?
2001-06-28
28
Research and Technology
XML und Java ... Document Object Model (DOM)
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
Implementierung der Standardschnittstellen
public class DOMExample
{
public static void main(String[] args) throws Exception
{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse( args[0] );
Element theRootElement = document.getDocumentElement();
theRootElement.setAttribute("myFirstNewAttribute","01");
Element aNewElement = document.createElement("myNewElement");
theRootElement.appendChild( aNewElement );
System.out.print( theRootElement );
} //main()
} //class DOMExample
M. Jeckle – XML und Java -- wohin geht die Reise?
2001-06-28
29
Research and Technology
XML und Java ... Document Object Model (DOM)
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public class DOMExample
{
public static void main(String[] args) throws Exception
{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse( args[0] );
Erzeugung des
Parsers und Einlesevorgang
Element theRootElement = document.getDocumentElement();
theRootElement.setAttribute("myFirstNewAttribute","01");
Element aNewElement = document.createElement("myNewElement");
theRootElement.appendChild( aNewElement );
System.out.print( theRootElement );
} //main()
} //class DOMExample
M. Jeckle – XML und Java -- wohin geht die Reise?
2001-06-28
30
Research and Technology
XML und Java ... Document Object Model (DOM)
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public class DOMExample
{
public static void main(String[] args) throws Exception
{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse( args[0] );
Element theRootElement = document.getDocumentElement();
Extraktion eines
Elements
theRootElement.setAttribute("myFirstNewAttribute","01");
Element aNewElement = document.createElement("myNewElement");
theRootElement.appendChild( aNewElement );
System.out.print( theRootElement );
} //main()
} //class DOMExample
M. Jeckle – XML und Java -- wohin geht die Reise?
2001-06-28
31
Research and Technology
XML und Java ... Document Object Model (DOM)
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public class DOMExample
{
public static void main(String[] args) throws Exception
{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse( args[0] );
Element theRootElement = document.getDocumentElement();
theRootElement.setAttribute("myFirstNewAttribute","01");
Hinzufügen eines
(neuen) Attributs
Element aNewElement = document.createElement("myNewElement");
theRootElement.appendChild( aNewElement );
System.out.print( theRootElement );
} //main()
} //class DOMExample
M. Jeckle – XML und Java -- wohin geht die Reise?
2001-06-28
32
Research and Technology
XML und Java ... Document Object Model (DOM)
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public class DOMExample
{
public static void main(String[] args) throws Exception
{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse( args[0] );
Element theRootElement = document.getDocumentElement();
theRootElement.setAttribute("myFirstNewAttribute","01");
Element aNewElement = document.createElement("myNewElement");
Erzeugung eines
neuen Elements
theRootElement.appendChild( aNewElement );
System.out.print( theRootElement );
} //main()
} //class DOMExample
M. Jeckle – XML und Java -- wohin geht die Reise?
2001-06-28
33
Research and Technology
XML und Java ... Document Object Model (DOM)
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public class DOMExample
{
public static void main(String[] args) throws Exception
{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse( args[0] );
Element theRootElement = document.getDocumentElement();
theRootElement.setAttribute("myFirstNewAttribute","01");
Element aNewElement = document.createElement("myNewElement");
theRootElement.appendChild( aNewElement );
System.out.print( theRootElement );
} //main()
} //class DOMExample
M. Jeckle – XML und Java -- wohin geht die Reise?
Anhängen des erzeugten
Elements als zusätzliches Kindelement
2001-06-28
34
Research and Technology
XML und Java ... Document Object Model (DOM)
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public class DOMExample
{
public static void main(String[] args) throws Exception
{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse( args[0] );
Element theRootElement = document.getDocumentElement();
theRootElement.setAttribute("myFirstNewAttribute","01");
Element aNewElement = document.createElement("myNewElement");
theRootElement.appendChild( aNewElement );
System.out.print( theRootElement );
} //main()
} //class DOMExample
M. Jeckle – XML und Java -- wohin geht die Reise?
Ausgabe des gesamten Dokuments
auf Standard-out
2001-06-28
35
Research and Technology
Java und XML … Java XML API for XML Processing (JAXP)
Berücksichtigt:
•XML v1.0 2nd editon ;)
•Namespaces
•SAX v2.0
•DOM Level 2
•XSLT v1.0
Plugability layer realisiert Informationsmöglichkeit hinsichtlich
Implementierung der Parser
JAXP v1.0 ist (vermutlich) Bestandteil von J2SE v1.4
Verfügbar: JAXP v1.1: JSR, Spezifikation, Implementierung
M. Jeckle – XML und Java -- wohin geht die Reise?
2001-06-28
36
Research and Technology
Java und XML ... Java APIs for XML Messaging (JAXM)
Grundidee: Austausch von XML-codierten Business Dokumenten
(z.B. Bestellungen, Rechnungen oder Auftragsbestätigungen)
Definiert keine neuen XML-Vokabulare für den Anwendungsbereich
Entwickelt in Abstimmung mit ähnlichen Aktivitäten des W3C,
ebXML (Transport/Packaging & Routing)
Transport über (Internet-)Standardprotokolle wie HTTP(S) oder SMTP
Explizite Berücksichtung der SOAP v1.1-Spezifikation
Applikation1
JAXM-Service
SOAP
JAXM
JAXM-API
Verfügbar: JSR, Spezifikation v0.92 (Juni 2001)
M. Jeckle – XML und Java -- wohin geht die Reise?
2001-06-28
37
Research and Technology
Java und XML ... Java APIs for XML RPC (JAXRPC)
Grundidee: Übertragung von entfernten Methodenaufrufen mittels XML
Überlappung mit SOAP/XMLP; jedoch koordiniert mit W3C-Aktivitäten hierzu
APIs definieren stubs und skelettons zur Erzeugung der notwendigen
XML-Dokumente auf Seiten des Aufrufers bzw. Aufgerufenen
API zur Vermittlung der XML-RPCs an Java-Objekte
Verbindung zu JAXB (XML Serialisierung von Java-Objekten)
Verfügbar: JSR
M. Jeckle – XML und Java -- wohin geht die Reise?
2001-06-28
38
Research and Technology
Java und XML ... Java API for XML Registries (JAXR)
Grundidee: API zum Zugriff auf Dienstverzeichnisse
Analog zu Java Naming and Directory Interface (JDNI),
jedoch speziell für Bedürfnisse von Web-Services zugeschnitten
Service Discovery
Service Descriptions
Standard-API zum Zugriff auf:
eCo Framework, ebXML, UDDI
Definiert keinen neuen
eigenen Verzeichnisdienst
Bestandteil von J2EE
Inter-Application Transport
ADS, DISCO, UDDI,
UDDI, WSDL
SOAP / W3C’s XML Protocols
Application Layer
...
Presentation Layer
XML-Languages
Session Layer
CORBA, HTTP,RMI, SMTP, WSP
Transport Layer
TCP, WTP, UDP
Network Layer
IP, X.25, IPX
Data Link Layer
HDLC, SLIP, PPP, Ethernet, IEEE 802.x
Physical Layer
analogous Modem, V. 90, ISDN, ADSL
Verfügbar: JSR; (public draft für Q2 2001 zu erwarten)
M. Jeckle – XML und Java -- wohin geht die Reise?
2001-06-28
39
Research and Technology
Java und XML ... Java Architecture for XML Binding (JAXB)
Grundidee: Verringerung des Impedance Mismatch zwischen Java und XML
Technisch: Generierung von Java-Klassendefinitionen aus
Grammatik (Document Type Definitions oder XML Schema) und einer
Abbildungsdefinition
DTD/
XSD
Schema
Compiler
binding
schema
Java
Compiler
Java-Quellcode
Java-Bytecode
JAXB v1.0 ist (vermutlich) Bestandteil von J2SE v1.4
Verfügbar: JSR, early acces v1.0 Implementierung (Mai 2001)
M. Jeckle – XML und Java -- wohin geht die Reise?
2001-06-28
40
Research and Technology
Ressourcen
XML @ W3C:
•http://www.w3.org/xml
XML @ SUN:
•http://java.sun.com/xml
•http://www.javasoft.com/xml
Java XML Projekte @ Apache:
•http://xml.apache.org
Diese Vortrag und weiterführende Informationen zum Thema:
•http://www.jeckle.de
M. Jeckle – XML und Java -- wohin geht die Reise?
2001-06-28
41
Research and Technology
Ressourcen
Java Community Process (JCP):
•http://java.sun.com/aboutJava/communityprocess/index.html
•(Merlin JSR) http://jcp.org/jsr/detail/59.jsp
•Java Architecture for XML Binding (ehemals Projekt Adelard) (JAXB)
•http://jcp.org/jsr/detail/31.jsp
•http://www.javaworld.com/javaworld/javaone00/j1-00-adelard.html
•Java API for XML Processing v1.1 (JAXP)
•Version 1.0: http://jcp.org/jsr/detail/5.jsp
•Version 1.1: http://jcp.org/jsr/detail/63.jsp
•Java API for XML Messaging v1.0 (JAXM)
•http://jcp.org/jsr/detail/67.jsp
•Java API for XML Registries v1.0 (JAXR)
•http://jcp.org/jsr/detail/93.jsp
•Java APIs for XML RPC(JAXRPC)
•http://jcp.org/jsr/detail/101.jsp
M. Jeckle – XML und Java -- wohin geht die Reise?
2001-06-28
42
Research and Technology
Ressourcen
SAX-Parser für Java:
•http://home.pacbell.net/david-b/xml (Ælfred)
•http://java.sun.com/products/xml (JAXP)
•http://technet.oracle.com
•http://www.alphaworks.ibm.com/formula/xml (XML4J)
•http://www.jclark.com/xml/xp/index.html (XP)
•http://xml.apache.org/xerces-j/index.html (Xerces)
DOM-Parser für Java:
•http://java.sun.com/products/xml (JAXP)
•http://www.alphaworks.ibm.com/formula/xml (XML4J)
•http://xml.apache.org/xerces-j/index.html (Xerces)
M. Jeckle – XML und Java -- wohin geht die Reise?
2001-06-28
43
Research and Technology
Ressourcen
Java Serialization to XML (JSX):
•http://www.csse.monash.edu.au/~bren/JSX/
JDOM v1.0:
•http://jcp.org/jsr/detail/102.jsp
DOM4J:
•http://dom4j.org/
Electric XML:
•http://www.themindelectric.com/products/xml/xml.html
Java XML Tutorial @ SUN:
•http://java.sun.com/xml/tutorial_intro.html
JavaML:
•http://www.cs.washington.edu/homes/gjb/JavaML/
M. Jeckle – XML und Java -- wohin geht die Reise?
2001-06-28
44
Herunterladen