Web Applications mit Java und XML

Werbung
TU Braunschweig
Institut für Betriebssysteme
und Rechnerverbund
Web Applications mit Java und XML
Prof. Dr. Stefan Fischer
Kapitel 8: XML
Sommersemester 2002
Inhaltsübersicht
• Motivation:
– Wieso nicht HTML?
– Vorteile von XML
– Nutzung von XML
•
•
•
•
•
Anatomie von XML Dokumenten und XML-Syntax
Validierung: DTD und XML-Schema
Parsen von Dokumenten mit SAX und DOM
Transformation von XML-Dokumenten mit XSL/XSLT
SOAP und Web Services
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-2
Motivation
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-3
Motivation: wieso nicht HTML?
• Verwendung von HTML in der Datendarstellung:
– Browser dienen nur zur Seitendarstellung
– Jede Anfrage geht über den Server
– Surfen im Web ist oft mühsam (z.B. Buchen einer Reise:
Bahn, Flug, Hotel, Mietwagen), da die Daten nicht
abgeglichen werden können
• Ansatz: dem Client weitere Aufgaben zuteilen
– Dazu sind reiche, saubere Daten nötig
– HTML bietet dies nicht (häufig auftretende Fehler in der
Syntax, Layout-orientiert)
– HTML ist hervorragend zur Darstellung von Information für
Menschen geeignet, nicht Maschinen
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-4
HTML sieht für uns schön aus, ...
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-5
… aber leider nicht für den Computer
...
<form method="POST" action="/handle-buy-box=1575213966/book-glance/002-3334553-4855426">
<font size=+1><b>Sams Teach Yourself Xml in 21 Days (Teach Yourself...)</b></font>
<br>by <a href="/exec/obidos/Author=North%2C%20Simon/002-3334553-4855426">Simon North</a>
<br><a href="/images/P/1575213966.01.LZZZZZZZ.gif"><img src="/images/P/1575213966.01.gif”>
<table cellspacing=0 cellpadding=1 border=0 width=190 bgcolor="#9999CC">
<tr><td>
<table cellspacing=0 cellpadding=3 border=0 width=100% bgcolor="#99CCFF">
<tr valign=top><td align=center>
<input type="hidden" name="1575213966" value="1" size="1">
<font face=verdana,arial,helvetica size=-1>
<b>Shopping with us is 100% safe.
</font></td></tr></table></td></tr></table></td></tr>
<tr align="center"><td>
<font face=verdana,arial,helvetica size=-1 >
(We'll set one up for you)
</font><br>
<font face=verdana,arial,helvetica size=-1 >
<a href="/exec/obidos/wishlist/002-3334553-4855426">View my Wish List</a></font><br>
</td></tr><tr><td></td></tr></table>
<font face=verdana,arial,helvetica size=-1>
<b>List Price:</b> <strike>$29.99</strike><br>
<b>Our Price: <font color=#990000>$23.99</font></b><br>
<b>You Save:</b> <font color=#990000>$6.00
(20%)</font><br>
<b>Availability:</b> Usually ships within 24 hours.<BR>
...
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-6
Problem: Dokumentenmanagement
• Derzeitige Situation
– Unterschiedliche Formate bereiten erhebliche
Probleme
– Informationen auf Webseiten, Broschüren,
Anleitungen, etc. müssen separat gepflegt werden
• Ansatz: Trennung von Inhalt und Layout
– Dokumente sollten beschreiben um WAS es geht
– WIE diese Information anzuzeigen ist, sollte nicht
im Dokument gespeichert sein
– Alle Publikationen aus derselben Datenquelle
– Unterstützung von Modularität und Hierarchien
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-7
Vorteile von XML
• Reiner ASCII-Text
– Leicht zu erstellen, leichtes Debugging,
verständlich für den menschlichen Nutzer
• Reine Identifikation von Daten
– Keine Mischen mit Anzeige-Informationen
• Grundlage für alle denkbaren Ausgabestile
(s. dazu XSL etwas später)
• Leichtes Verarbeiten von Dokumenten durch
die Wohlgeformtheit (sehen wir gleich)
• Hierarchische Ordnung
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-8
Nutzungsmöglichkeiten
• Traditionelle Repräsentation von Daten in
Anwendungen
– Sehr mächtig vor allem im Internet/E-Business-Bereich,
wenn gemeinsame Vokabulare verwendet werden
• Document-Driven Programming:
– Spezifikation von Anwendungskonfigurationen,
anschließende Konfiguration der Anwendung „on the fly“
(Deployment Descriptors!)
• Code-Generierung
– Basierend auf Grammatiken kann sehr viel
Verarbeitungscode automatisch generiert werden
• Archivierung von Daten
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-9
Mögliche Anwendung: Preisvergleich
Amazon
<offer>
<store>
<name>Amazon</name>
<url>http://www.amazon.com</url>
</store>
<book>
<isbn>1575213966</isbn>
<title>Teach yourself XML in 21 days</title>
<price>
<amount>23.99</amount>
<currency>USD</currency>
</price>
<author>
<firstname>Simon</firstname>
<lastname>North</lastname>
</author>
<author>
<firstname>Paul</firstname>
<lastname>Hermans</lastname>
</author>
</book>
</offer>
Kingbooks
Yahoo
<offer>
<store>
<name>Amazon</name>
<url>http://www.amazon.com</url>
</store>
<book>
<isbn>1575213966</isbn>
<title>Teach yourself XML in 21 days</title>
<price>
<amount>23.99</amount>
<currency>USD</currency>
</price>
<author>
<firstname>Simon</firstname>
<lastname>North</lastname>
</author>
<author>
<firstname>Paul</firstname>
<lastname>Hermans</lastname>
</author>
</book>
</offer>
<offer>
<store>
<name>Amazon</name>
<url>http://www.amazon.com</url>
</store>
<book>
<isbn>1575213966</isbn>
<title>Teach yourself XML in 21 days</title>
<price>
<amount>23.99</amount>
<currency>USD</currency>
</price>
<author>
<firstname>Simon</firstname>
<lastname>North</lastname>
</author>
<author>
<firstname>Paul</firstname>
<lastname>Hermans</lastname>
</author>
</book>
</offer>
XML Engine
Your search for ISBN 1575213966 yielded
Vendor
Price
Currency
Amazon
23.99
USD
Kingbooks
22.19
USD
Yahoo
19.19
USD
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-10
Preisvergleich (2)
Amazon Web
Applikation
(CGI / Perl)
Kingbooks Web
Applikation
(Servlets)
XML Engine
Ausgabe z.B. als HTML
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
www.cheapbook.com
Xerces XML parser
Yahoo Web
Applikation
(ASP)
8-11
XML-Syntax
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-12
Was ist XML, wenn nicht HTML?
• Text-basierte Markup-Sprache
• Wird immer mehr zu *dem* Standard zum
Datenaustausch im Web
• Wie bei HTML werden besonders
auszuzeichnende Textteile mit Tags markiert.
• ABER: bei XML identifizieren die Tags Daten
und nicht Layoutvorgaben.
• HTML: wie stelle ich einen Text dar?
• XML: was ist die Bedeutung eines Textes?
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-13
Ein erstes Beispiel
<?xml version=“1.0“?>
<message>
<to>[email protected]</to>
<from>[email protected]</from>
<subject>XML Is Really Cool</subject>
<text> How many ways is XML cool?
Let me count the ways... </text>
</message>
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-14
Anatomie von XML Dokumenten
offer
store
name
url
book
isbn
title
amount
price
currency
author
firstname
lastname
author
firstname
<?xml version=“1.0” encoding=“ISO-8859-1”?>
<offer>
<store>
<name>Amazon</name>
<url>http://www.amazon.com</url>
</store>
<book>
<isbn>1575213966</isbn>
<title>Teach yourself XML in 21 days</title>
<price type=“retail”>
<amount>23.99</amount>
<currency>USD</currency>
</price>
<author>
<firstname>Simon</firstname>
<lastname>North</lastname>
</author>
<author>
<firstname>Paul</firstname>
<lastname>Hermans</lastname>
</author>
</book>
</offer>
lastname
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-15
Anatomie von XML Dokumenten
• Die erste Zeile (<?xml version=“1.0” encoding=“ISO-8859-1”?>) gibt
den Typ des Dokuments an.
• Jedes Dokument entspricht einer Baumstruktur
• Die Baumknoten werden Elemente genannt
• Es kann nur ein Element an der Wurzel geben
– Eine Applikation weiß damit u.a. sofort, wann das Ende des
Dokuments erreicht ist.
• Syntaxregeln müssen strikt eingehalten werden
– Z.B. muss jeder Starttag einen Endtag haben. Dadurch wird
es erst möglich, Datenhierarchien aufzubauen.
– Ein XML-Dokument, dass die XML-Syntaxregeln einhält,
wird als „wohlgeformt“ bezeichnet. Wohlgeformtheit
vereinfacht die Verarbeitung erheblich.
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-16
Der Prolog eines XML-Dokuments
• Jedem XML-Dokument geht ein Prolog voran.
• Minimaler Prolog: Angabe, das es sich um ein XMLDokument handelt:
<?xml version="1.0"?>
• Weitere mögliche Angaben
<?xml version="1.0" encoding="ISO-8859-1"
standalone="yes"?>
– Version: Angabe der verwendeten XML-Version (nicht optional)
– Encoding: Angabe des verwendeten Zeichensatzes
– Standalone: gibt an, ob auf externe Dokumente verwiesen wird
(„yes“, wenn nicht)
• Außerdem:
– Angabe einer DTD bzw. eines Schemas zur Vorgabe eines
Vokabulars für das Dokument (s. Abschnitt DTD).
– Verarbeitungsanweisungen (s. Abschnitt XSL/XSLT)
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-17
Das Wurzelelement
• Das Wurzelelement schließt den gesamten
Rest des XML-Dokuments ein, d.h., ein XMLDokument enthält immer genau ein
(möglicherweise hierarchisch organisiertes)
Element.
• Ansonsten sind Wurzelelemente jedoch
genau wie andere Elemente und werden
genauso behandelt.
• Das ist wichtig, wenn XML-Dokumente in
andere Dokumente eingebettet werden.
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-18
Elemente
• Elemente sind die grundlegenden
Komponenten eines XML-Dokuments.
• Sie werden durch beliebige Namen
eingeschlossen in < und > repräsentiert.
• Das heißt, zur Definition eines neues
Elements definiert man einen neuen Tag
sowie den zugehörigen Abschlusstag.
• Namenskonventionen wie bei der
Programmierung.
• Elemente können innerhalb von anderen
Elementen definiert werden (-> Hierarchien).
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-19
Beispiel
<?xml version='1.0'?>
<kontakt>
<name>
<vorname>Peter</vorname>
<nachname>Mustermann</nachname>
</name>
<email>[email protected]</email>
<telefon>05342-4637</telefon>
</kontakt>
- Wurzelelement: kontakt
- Elemente: name, vorname, nachname, email, telefon
- drei Hierarchieebenen
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-20
Attribute
• Ein Element kann nicht nur Unter-Elemente besitzen,
sondern auch durch Attribute erweitert werden.
• Ein Attribut wird samt seinem Wert (immer in
Anführungszeichen) dem Start-Tag eines Elements
hinzugefügt.
• Beispiel: ein Kapitel eines Buches hat einen Titel und
eine Nummer:
<chapter title=“Introduction“ number=“4“>
...
</chapter>
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-21
Wann Element, wann Attribut?
• XML gestattet die Datenformatierung auf viele Arten;
u.a. ist es praktisch immer möglich, anstelle von
Attributen auch Elemente zu verwenden und
umgekehrt.
• Einige Tipps:
– Wenn die Information selbst wieder komplex ist, verwendet
man Elemente.
– Modellierung geordneter Information: Elemente
– Leserlicher ist die Elementvariante, sie nimmt deshalb auch
mehr Platz ein.
– Ist die modellierte Information ein Bestandteil des
übergeordneten Elements, verwendet man ebenfalls ein
Element. Ist sie eine Eigenschaft (wie etwa Farbe), dann
verwendet man Attribute.
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-22
Leere Elemente und Kommentare
• Manchmal genügt die Angabe eines
Elements, in dem keine weiteren Inhalte
eingefügt werden sollen.
• Beispiel:
<flag></flag>
• Dies kann vereinfacht werden zu <flag/>.
• Kommentare in XML werden durch <!-- und
--> eingeschlossen.
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-23
Namespaces
• Problem: werden Daten aus zwei Bereichen
(Namespaces) im selben Dokument gespeichert,
kann es zu Namenskollisionen kommen
– quote (Stockquote)
– quote (Literatur)
• Lösung:
– Elemente eines Namespaces erhalten denselben Präfix
– Dieser Präfix wird einer URL zugeordnet (als eindeutigem
String)
<x xmlns:edi='http://ecommerce.org/schema'>
<edi:price units='Euro'>32.18</edi:price>
</x>
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-24
Feststellen der Wohlgeformtheit
• Wie kann man feststellen, ob ein XMLDokument wohlgeformt ist?
• Man benötigt im wesentlichen einen XMLParser, der zunächst einmal die Beachtung
der grundlegenden XML-Regeln überprüft.
• Ein Parser kann aber typischerweise viel
mehr – s. die kommenden Abschnitte.
• Einfache Möglichkeit: verwende den WebBrowser. Er stellt ein Dokument nur dar,
wenn es wohlgeformt ist.
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-25
Vorgabe von Vokabularen
für XML-Dokumente
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-26
Validierung
• Die strengen Syntaxkonventionen erleichtern die
Programmierung von XML Applikationen bereits
erheblich (wohlgeformte Dokumente)
• Validierung erlaubt es, die möglichen Baumstrukturen
einzuschränken (valide Dokumente)
• Validierung findet immer gegenüber einer Grammatik
statt, d.h., ein valides Dokument ist
– wohlgeformt und
– Konform zu einer vorgegebenen Grammatik
• Ein grosser Teil der Fehlerabfragen kann so von der
Applikation an einen Parser übertragen werden.
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-27
Definition von Grammatiken
• Wenn zwei Anwendungen dieselbe
Grammatik verwenden, haben sie dasselbe
Verständnis der Daten.
• Es werden heute zwei verschiedene Ansätze
verwendet, um eine Grammatik zu
beschreiben:
– Document Type Definition (DTD)
– XML Schema (verschiedene Varianten)
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-28
Document Type Definition
• Um ein Dokument zu validieren, muss das Dokument
eine DTD referenzieren:
<?xml version=“1.0”>
<!DOCTYPE offer SYSTEM “offer.dtd”>
<offer> ... </offer>
• In diesem Beispiel wird in der Datei offer.dtd
definiert, wie das offer-Element aussehen darf.
Neben SYSTEM-DTDs gibt es auch PUBLIC-DTDs.
• DTDs enthalten drei Arten von Bestandteilen
– Elementdefinitionen
– Attributdefinitionen
– Entity Definitionen
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-29
Definition von Elementen
• Elementdefinitionen in der DTD legen fest
– welche Elemente in einem validen XML-Dokument
vorkommen dürfen
– welche Eltern-Kind-Beziehungen zwischen Elementen
gestattet sind
• Elementdefinitionen werden angegeben als
kontextfreie Grammatik in der Form
<!ELEMENT name definition>.
• Mögliche Komponenten:
–
–
–
–
Wurzelement (s. vorherige Folie)
Eltern-Kind-Beziehung
Blattelement
Uneingeschränkte Elemente
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-30
Eltern-Kind-Beziehungen
• Sequenz von mehreren Kindelementen
<!ELEMENT name (vorname,nachname)>
Bedeutung:
– Genau diese beiden Kindelemente
– Jeweils genau einmal
– Genau in dieser Reihenfolge
• Beliebige Reihenfolge in einer Sequenz:
<!ELEMENT name ((vorname, nachname) |
(nachname, vorname))>
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-31
Eltern-Kind-Beziehungen
• Optionale Elemente: der ?-Operator
<!ELEMENT kontakt (name, email, telefon, fax?)>
• Verwendung einer bestimmten Anzahl von
Kinderelementen: die *- und +-Operatoren:
<!ELEMENT kontakt (name, email, telefon+, fax*)>
bedeutet:
– Ein oder mehr telefon-Elemente
– 0 oder mehr fax-Elemente
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-32
Blatt- und uneingeschränkte Elemente
• Elemente, die selbst keine Kindelemente
haben, heissen Blattelemente.
• In der DTD wird der Inhalt solcher Elemente
als Parsed Character Data (#PCDATA)
bezeichnet. Beispiel:
<!ELEMENT vorname (#PCDATA)>
• Definition leerer Elemente:
<!ELEMENT leer EMPTY>
• Uneingeschränkte Elemente zum
Offenlassen von Definitionen:
<!ELEMENT freieDef ANY>
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-33
Beispiel: DTD und valide Dokumente
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
kontakt (name, email+, telefon*)>
name ((vorname, nachname)|(vorname, nachname))>
vorname (#PCDATA)>
nachname (#PCDATA)>
email (#PCDATA)>
telefon (#PCDATA)>
<kontakt>
<name>
<vorname>Peter
</vorname>
<nachname>Mustermann
</nachname>
</name>
<email>[email protected]</email>
</kontakt>
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
<kontakt>
<name>
<nachname>Mustermann
</nachname>
<vorname>Peter
</vorname>
</name>
<email>[email protected]</email>
<telefon>0193 16725</telefon>
<telefon>0531 5463</telefon>
</kontakt>
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-34
Definition von Attributen
• Natürlich können in einer DTD auch für ein Element
die entsprechenden Attribute definiert werden.
• Dazu dient das ATTLIST-Schlüsselwort.
• Format:
<!ATTLIST name type style>
• Wichtigste Typen:
– CDATA (Character Data): häufigste Variante
– Enumerated: ein Wert aus einer vorgegebenen Liste
• Wichtigste Stile:
– #REQUIRED: Attribut muss angegeben werden
– #IMPLIED: Wert ergibt sich aus vorherigen Attributwerten
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-35
Beispiele für Attributdefinitionen
<!ELEMENT rechteck EMPTY>
<!ATTLIST rechteck
hoehe
CDATA #REQUIRED
breite CDATA #REQUIRED
flaeche CDATA #IMPLIED>
<rechteck hoehe=“3 cm“
breite=“5 cm“>
<rechteck hoehe=“3 cm“
breite=“5 cm“
flaeche=“8 cm*cm“>
<!ELEMENT status EMPTY>
<!ATTLIST status
bearbeitet (ja | nein) #REQUIRED>
<status bearbeitet=“ja“>
Beispiel für ein valides Dokument
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-36
Definition von Entitäten
• Entities sind sinnvoll,
– um häufig benötigte Textbausteine einmal zu schreiben und
dann immer wieder zu referenzieren
– zur Einfügung von Sonderzeichen (z.B. ä)
– Zur Modularisierung von Dokumenten
• Beispiel: Definition in der DTD lautet:
<!ENTITY lizenz SYSTEM “lizenz.txt“>
Nun kann an der gewünschten Stelle im XMLDokument ein &lizenz; eingefügt werden, dass
dann durch den Text aus lizenz.txt ersetzt wird.
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-37
XML Schema als Alternative zur DTD
• Die DTD-Syntax ist in der XML Welt unnatürlich
• Keine Datentypen, nur Strings
• Begrenzte Erweiterbarkeit (Vererbung)
• XML Schema behebt diese Probleme
– Die Idee bleibt dieselbe
– Verschiedene Datentypen
– Geschrieben in XML
• Vorgehen: schreibe ein Schema in XML, referenziere
es von der XML-Datei aus
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-38
Ein erstes Beispiel
<schema>
<element name="test">
<complexType>
<element name="integer-element" type="integer" />
<element name="string-element" type="string" />
<attribute name="float-attribute" type="float" />
<attribute name="uri-attribute" type="uriReference" />
</complexType>
</element>
</schema>
<?xml version="1.0"?>
<test xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="datatypes.xsd"
float-attribute="3.1415"
uri-attribute=“mailto:[email protected]“>
<integer-element>1234567</integer-element>
<string-element>aabbcc</string-element>
</test>
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-39
Definition eines XML-Schemas
• Das XML-Schema ist ebenfalls ein XML-Dokument,
d.h., es besitzt ebenfalls einen XML-Header.
• Außerdem besteht es dann aus einem
„Wurzelelement“ <schema> ... </schema>.
• Innerhalb des Wurzelelements werden dann die
Elemente der Anwendung definiert. Dabei gibt es im
wesentlichen vier Arten von Definitionen:
–
–
–
–
Primitive Datentypen
Komplexe Datentypen
Attribute
Einschränkung von Datentypen (Beschreibung ihrer
Struktur)
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-40
Das <schema>-Element
• Das <schema>-Element kann komplexe Formen
annehmen, um z.B. die Verwendung bestimmter
Namespaces anzuzeigen oder die Verwendung
bestimmter Schemata.
• Beispiel:
<xs:schema xmlns:xs=“http://www.w3.org/2001/XMLSchema“
xmlns=“http://www.oreilly.com/javaxml2“
xmlns:ora=“http://www.oreilly.com“
targetNamespace=“http://www.oreilly.com/javaxml2“
elementFormDefault=“qualified“
>
• Festlegung eines bestimmten Schemas auf den xsNamespace, ab jetzt Verwendung von <xs:element> etc.
zur besseren Unterscheidung.
• TargetNameSpace zur Angabe des durch das Schema
angesprochenen Namespaces.
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-41
XML Schema und Namespaces
Logische
Namespaces
http://www.bo.de/produkt
http://www.po
st.de/address
XML Dokument:
<root
schemaLocation=“produkt.xsd address.xsd“
xmlns:prod=“http://www.b-o.de/produkt“
xmlns:addr=“http://www.post.de/address“
>
<prod:lieferzeit> ...
<addr:empfaenger> ...
Produkt-Schema:
... targetNameSpace=“http://www.b-o.de/produkt“
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
Adress-Schema:
... targetNameSpace=
“http://www.b-o.de/
produkt“
Mehrere Schemata in einem
Dokument, Validierung je nach
Verwendetem Schema.
8-42
Einfache und komplexe Typen
• Primitive Datentypen
<element name=“pi“ type=“float“ />
• Komplexe Datentypen
– Hier wird der Typ nicht als Attribut
angegeben, sondern als <complexType>
definiert:
– Es gibt zwei Möglichkeiten, solche Typen
zu definieren, nämlich als
wiederverwendbaren Typ oder innerhalb
des Elements.
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-43
Beispiel
<schema>
<complexType name=“coord“>
<element name=“x“ type=“integer“>
<element name=“y“ type=“integer“>
</complexType>
<element name=“root“>
<complexType>
<element name=“test1“>
<element name=“x“ type=“integer“>
<element name=“y“ type=“integer“>
</element>
<element name=“test2“ type=“coord“ />
</complexType>
</schema>
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-44
Attribute
• Attribute werden für Datentypen ähnlich wie
einfache Datentypen definiert.
• Beispiel:
<element name=“book“>
<complexType>
<attribute name=“title“ type=“string“>
<attribute name=“price“ type=“float“>
...
</complexType>
<element>
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-45
Einschränkung von Typen
• Für gegebene Datentypen können verschiedene
Einschränkungen angegeben werden
– Bestimmte Muster, die erfüllt werden müssen (Angabe
mittels regular expressions).
– Bestimmte Mengen von Elementen in einer Liste
– Einschränkungen von Wertbereichen
– Erweiterung um weitere Elemente bei Vererbung
• Beispiel:
– <simpleType name="studentid" base="string">
<pattern value="[A-Z][0-9][0-9][0-9]+" />
</simpleType>
– Sagt aus, dass ein Element vom Typ studentid ein
String ist, wobei das erste Zeichen ein Großbuchstabe ist,
gefolgt von mind. drei Ziffern:
<studentid>A4532</studentid>
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-46
Parsen und Validieren
von XML-Dokumenten
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-47
Aufgabe
• Wir besitzen nun die Möglichkeit
– XML-Dokumente und
– Grammatiken zu beschreiben, die die Struktur der
Dokumente vorgeben.
• Was machen wir damit??
–
–
–
–
Parsen von Dokumenten
Übertragung in interne Datenstrukturen
Validieren
Weitergehende Verarbeitung
• Dazu benötigen wir Werkzeuge, die von
Programmiersprachen aus genutzt werden können,
wie z.B. einen Parser.
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-48
Parser
• Um ein XML-Dokument in einer Anwendung zu
verwenden, muss man es einlesen und in interne
Datenstrukturen der verwendeten
Programmiersprache umwandeln.
• Es werden heute im wesentlichen zwei Modelle für
das Parsen von XML verwendet:
– Simple API für XML (SAX)
– Document Object Model (DOM)
• Beide betrachten wir hier, und für beide benötigt man
jeweils einen entsprechenden Parser.
• Das xerces-Paket (http://xml.apache.org/xerces-j)
bietet Lösungen für beides an.
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-49
Parsen von Dokumenten: SAX
• SAX-Parser sind ereignis-basiert
– D.h, der Parser läuft durch das gesamte Dokument und
informiert die Anwendung bei jedem erkannten
Konstruktionselement.
– Der Benutzer definiert eine Event-Handler-Klasse, die u.a.
die eine ganze Reihe von Methoden wie z.B. startElement,
endElement und characters implementiert und darin festlegt,
was bei dem jeweiligen Ereignis zu tun ist.
– Ein Objekt der Klasse wird dann beim Parser registriert und
während des Parsens aufgerufen
• SAX definiert lediglich die Interfaces
– Implementierung für alle Programmiersprachen möglich
– Das xerces-Paket enthält einen fertigen Parser mit einigen
beispielhaft implementierten Handlern.
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-50
SAX und Java
SAX Application
SAXParserFactory factory = SAXParserFactory.newInstance();
MyHandler handler = new MyHandler();
SAXParser saxParser = factory.newSAXParser();
saxParser.parse(url, handler);
XML
Document
Found start element
Found end element
Found text
SAX
API
MyHandler Object
SAXParser Object
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-51
Das Handler-Objekt
• Der Benutzer muss das Interface
org.xml.sax.ContentHandler implementieren:
class MyHandler implements ContentHandler {
public void startElement() {
// hier die Implementierung für das Ereignis
// startElement
}
...
}
• Zur Vereinfachung gibt es eine Basisklasse unter
org.xml.sax.helpers.DefaultHandler.
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-52
Beispiel für einen SAX-Lauf
<?xml version=‘1.0‘?> [Parser ruft startDocument() auf]
<priceList>
[Parser ruft startElement() auf]
<coffee>
[Parser ruft startElement() auf]
<name>
[Parser ruft startElement() auf]
Mocha Java
[Parser ruft characters() auf]
</name>
[Parser ruft endElement() auf]
<price>
[Parser ruft startElement() auf]
11.95
[Parser ruft characters() auf]
</price>
[Parser ruft endElement() auf]
</coffee>
[Parser ruft endElement() auf]
....
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-53
Parsen von Dokumenten: DOM
• DOM steht für Document Object Model
• Historie:
– HTML sollte dynamisch verändert werden können
– Dynamic HTML wurde in den 4er Browsern
ansatzweise implementiert
– Netscape und IE haben ein sehr unterschiedliches
Objektmodell
• W3C publizierte eine DOM Spezifikation
– Sowohl HTML als auch XML Teil
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-54
Parsen von Dokumenten: DOM (2)
• Definiert Interfaces, die es erlauben die
Baumstruktur zu lesen und zu verändern
– Jedes Element und jedes Attribut kann durch das
Node Interface beschrieben werden
Node.getName()
Node.getChildNodes()
Node.getValue()
Node.getAttributes()
– Spezialfall: das gesamte Dokument
Document.getDocumentElement()
Document.getElementsByTagName()
• Auch hier sind Implementierungen in jeder
Sprache möglich
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-55
DOM und Java
DOM Application
DOMParser parser = new DOMParser();
parser.parse(url);
Document d = parser.getDocument();
Node n = d.getDocumentElement();
XML
Document
DOM API
DOMParser Object
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-56
Wann SAX, wann DOM?
• SAX
– Extrem schnell und wenig Speicherbedarf
– Komplex zu programmieren (Verwaltung von States)
• DOM
– Leicht zu programmieren, da das ganze Dokument verfügbar
ist
– Speicherhungrig und langsam bei grossen Dokumenten
• Es gibt auch Alternativen, z.B. JDOM
– Vorteil: engere und natürlichere Anbindung an Java
– Nachteil: Tool Support / Konformität
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-57
Das XML-Pack von Sun, Teil 1
• Sun hat die APIs zum Parsen und Validieren bzw. zur
internen Repräsentation von Datenstrukturen im
XML-Pack zusammengefasst:
http://java.sun.com/xml/downloads/javaxmlpack.html
• Für diesen Abschnitt interessieren uns daraus
– Java API for XML Processing (JAXP): enthält im
wesentlichen SAX- und DOM-Parser
– Java Architecture for XML Binding (JAXB, noch nicht Teil
des aktuellen Pakets): Übersetzung von Schemata in
entsprechende Java-Klassen
• Verglichen mit SAX und DOM sehr spezielle Repräsentation
• Meist wesentlich effizienter insbesondere bzgl. Speicher,
allerdings mehr Aufwand zu Beginn (lohnt sich nicht für kleine
Projekte)
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-58
Transformation von
XML-Dokumenten
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-59
Aufgabe
• Wir können jetzt
– Daten in XML beschreiben
– Deren Format durch Angabe von Grammatiken
einschränken
– Die Gültigkeit eines Dokuments bzgl. Einer Grammatik
überprüfen
• Wie verarbeiten wir aber nun die Daten?
– Möglichkeit 1: schreibe eine Anwendung für den
verwendeten Parser
– Beispiel: lese Dokument als DOM-Baum ein, bearbeite dann
den Baum „von Hand“
– Möglichkeit 2: bearbeite das Dokument mittels vorgegebener
Regeln
– Hierzu verwendet man sog. Stylesheet-Transformationen.
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-60
Stylesheets mit XSL
• XSL steht für eXtensible Stylesheet Language
• Die XSL Empfehlung hat zwei Teile
– Transformation (XSLT)
– Formatierung (Formatting Objects)
• Wir beschränken uns auf XSLT
– XSLT-Prozessoren konvertieren XML-Dokumente in andere
XML-Dokumente mit unterschiedlichen Schemata
– Kann auch zum Layout (also Transformation in beliebige
andere Formate) verwendet werden, was tatsächlich die
Hauptanwendung ist.
– XHTML und WML sind Subsets von XML
<?xml:stylesheet type="text/xsl" href="default.xsl"?>
<?xml:stylesheet type="text/xsl" href="wml.xsl" media="wap"?>
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-61
XSLT Übersicht
XML
Dokument
XSL
Dokumente
XML
XSLT
Engine
(xalan, IE5)
XHTML
WML
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-62
Funktionsweise von XSLT
• Ein XSL Stylesheet ist eine Kollektion von
Regeln (Templates)
– Regeln haben die Form: wenn X dann Y
– Default Regel: nur der Text wird ausgegeben
• Anwendung der Regeln
– Der XML Baum wird depth-first abgearbeitet
– Trifft an einem Element die Bedingung X zu, so ist
dieses Element das sog. Kontextelement
– Der Aktionsteil Y kann Elemente im neuen
Dokument erzeugen, Werte kopieren und die
weitere Abarbeitung beeinflussen
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-63
Struktur eines XSL-Stylesheet
• Ein Stylesheet ist ebenfalls in XML geschrieben.
• Typischerweise verwendet man den xsl-Namespace,
um die Stylesheet-Tags von den Ausgaben des
Stylesheets (z.B. in HTML) abzusetzen.
• Beginn des Dokuments:
<?xml version=‘1.0‘ encoding=‘UTF-8‘?>
<xsl:stylesheet
version=‘1.0‘
xmlns:xsl=‘http://www.w3.org/1999/XSL/Transform‘>
...
</xsl:stylesheet>
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-64
Definition von Regeln
• Jede Regel wird durch den Tag
<xsl:template match=“xxx“>
eingeleitet, wobei xxx die Bedingung angibt, unter der
die Regel angewendet wird. Die Bedingung identifiziert
ein Element aus dem Dokumentenbaum.
• Im Rumpf der Regel findet sich die Ersetzung für das
gefundene Element.
• Formulierung der Bedingungen:
– Die Bedingungen werden als XPATH-Ausdrücke beschrieben.
– Es gibt ein Template, das das XML-Dokument selbst identifiziert
und deshalb immer zuerst angewendet wird. Es gilt: xxx=/.
– Die Evaluierung der weiteren Bedingungen findet dann immer
auf dem „Current Node“ (Kontextknoten)im Baum statt.
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-65
Basis: XPath
• Bedingungen sind XPath Ausdrücke
– Wandelt Kontext Element in eine
Menge von Elementen um
• Möglichkeiten
–
–
–
– alle ersten Elemente aller
untergeordneten Listen
../@type - Type Attribut des oberen Elements
//customer[order/date = today()]/name – Namen der Kunden
die Bestellung mit Datum von heute haben
.//liste/element[1]
• XPath Ausdrücke können auch mit einer URI
verbunden werden: dies ergibt einen XPointer
http://xpointer.host.com/staff.xml#xpointer(//emp[@typ="tmp"])
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-66
Anwendung von Regeln
• Regeln werden durch die Angabe des Tags
<xsl:apply-templates select=“xxx“>
angewendet.
• Der select-Teil gibt an, auf welches
Element die Regel angewendet werden soll.
Auch dies ist ein XPATH-Ausdruck.
• Mit Hilfe der Kombination von
<xsl:template> und <xsl:applytemplates> wird eine rekursive Abarbeitung
des Baums erreicht.
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-67
XSLT-Beispiel
• Aufgabe: wir definieren die Homepage eines
Dskussionsforums in XML; diese soll dann in
diesem Beispiel durch ein Stylesheet in
HTML umgewandelt werden.
• XML-Datei:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl"
href="discussionForumHome.xslt"?>
<discussionForumHome>
<messageBoard id="1" name="Java Programming"/>
<messageBoard id="2" name="XML Programming"/>
<messageBoard id="3" name="XSLT Questions"/>
</discussionForumHome>
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-68
discussionForumHome.xslt
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="/">
<html>
<head>
<title>Discussion Forum Home Page</title>
</head>
<body>
<h1>Discussion Forum Home Page</h1>
<h3>Please select a message board to view:</h3>
<ul>
<xsl:apply-templates select=
"discussionForumHome/messageBoard"/>
</ul>
</body>
</html>
</xsl:template>
<xsl:template match="messageBoard">
<li><a href="viewForum?id={@id}"><xsl:value-of select="@name"/></a></li>
</xsl:template>
</xsl:stylesheet>
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-69
Ergebnis des Transformationsprozesses
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Discussion Forum Home Page</title>
</head>
<body>
<h1>Discussion Forum Home Page</h1>
<h3>Please select a message board to view:</h3>
<ul>
<li>
<a href="viewForum?id=1">Java Programming</a>
</li>
<li>
<a href="viewForum?id=2">XML Programming</a>
</li>
<li>
<a href="viewForum?id=3">XSLT Questions</a>
</li>
</ul>
</body>
</html>
Prof. Dr. Stefan Fischer
Web-Anwendungen mit Java und XML
8-70
IBR, TU Braunschweig
Sommersemester 2002
XSLT-Prozessoren
• Es gibt eine Reihe von XSLT-Prozessoren,
der bekannteste ist Xalan aus dem ApacheProjekt.
• Eingabe: XML-Datei, XSL-Datei
• Ausgabe: transformierte Datei
• Aufruf:
java org.apache.xalan.xslt.Process
-IN infile
-XSL xslfile
-OUT outfile
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-71
Xalan XSLT Engine
• Xalan in Java einbinden:
Processor processor = Processor.newInstance("xslt");
Templates templates =
processor.process(new InputSource(“test.xsl”));
Transformer transformer = templates.newTransformer();
transformer.transform(new InputSource(“test.xml”),
new Result(System.out));
XML
xalan
XML
XSL
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-72
Anwendung
• Der Code auf der vorherigen Folie lässt sich leicht in
Servlets bzw. JSPs integrieren.
• Nutzung: Web-Seiten können dynamisch aus XMLSeiten generiert werden (die vielleicht wiederum
dynamisch aus einer Datenbank kommen).
• Typisches Beispiel: der Preisvergleichsagent vom
Anfang des Kapitels:
– Alle Bücher sind als XML-Dokumente einer bestimmten DTD
folgend kodiert
– Bei einer Anfrage nach einem Buch werden alle XMLDokumente von den Buchläden abgefragt.
– Der Agent bildet dann eine Rangliste und kodiert diese in
HTML.
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-73
Das XML-Pack von Sun, Teil 2
• Das schon agesprochene JAXP enthält
ebenfalls den Xalan-Prozessor, so dass man
mit diesem Teil des XML-Packs einen großen
Teil der anfallenden Aufgaben bereits
erledigen kann.
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-74
SOAP und Web Services
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-75
Web Services
• Mit den verschiedenen bisher besprochenen XMLJava-Kombinationen kann man bereits sehr mächtige
Client- und Server-seitige Anwendungen schreiben.
• Die „Krönung“ des ganzen Ansatzes besteht nun
darin, auch noch den Zugang zu Diensten zu
„xmlisieren“, d.h., Dinge wie RPC, CORBA, RMI,
DCOM etc. zu ersetzen durch einen XML-basierten
Aufruf entfernter Dienste.
• Genau dies bieten „web services“: entfernte
Dienstaufrufe werden in XML beschrieben, die
Ergebnisse werden ebenfalls in XML formatiert
zurückgeschickt.
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-76
Architektur von Web Services
• Web Services beruhen ganz und gar auf der
Verwendung offener, einfacher, standardisierter
Protokolle und Sprachen:
– HTTP und SMTP als Transportprotokolle
– SOAP als ein darüber liegender XML-basierter RPCMechanismus
– UDDI bzw. ebXML als Verzeichnisdienst, über den web
services angekündigt und gefunden werden können
– WSDL (Web Service Definition Language, basierend auf
XML) als übergreifende Sprache, in der die Dienste und
Protokolle kodiert werden.
• Hierzu passt die sehr offene Sprache Java natürlich
sehr gut.
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-77
Simple Object Access Protocol
• SOAP ist eine W3C-Spezifikation und
beschreibt im wesentlichen
– XML-basierten RPC
– Unter Benutzung von HTTP als Transportprotokoll
(in SOAP 1.1)
• Vorteile gegenüber anderen Mechanismen:
– Textbasiert -> leicht zu debuggen, menschliche
Gedanken können leicht in
Computerrepräsentation umgesetzt werden
– Geht über Firewalls (!)
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-78
SOAP-Komponenten
• SOAP besteht im wesentlichen aus drei
Komponenten:
– Dem SOAP Envelope (enthält Daten über Sender
und Empfänger und Details über die Nachricht)
– Den Kodierungsregeln
(marshalling/unmarshalling) für Datentypen
– Einem RPC-Mechnismus (Interaktion zwischen
Request und Response): API verfügbar für
verschiedene Programmiersprachen, s. nächste
Folien in Java
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-79
SOAP APIs
• Aufgabe des SOAP-API ist es
– Aufrufe zur Verfügung zu stellen, mit denen die
Daten für ein SOAP-XML-Dokument gesammelt
werden können
– Die SOAP-Nachricht an das Transportprotokoll zu
übergeben
– Die Antwort zu empfangen und zu dekodieren.
• Als Programmierer sieht man nur Java, aber
übertragen wird XML.
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-80
Aufruf vom SOAP Client
Call call = new Call ();
call.setTargetObjectURI("urn:xmltoday-delayed-quotes");
call.setMethodName ("getQuote");
Vector params = new Vector ();
params.addElement(new Parameter("symbol", String.class, "IBM", null));
call.setParams (params);
Response resp = call.invoke routerURL, "");
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-81
Erzeugen und Lesen des Resultats
public class StockQuoteService {
public float getQuote (String symbol) {
return ...
}
}
Parameter result = resp.getReturnValue();
System.out.println (result.getValue());
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-82
Web Services Description Language
• Mit SOAP steht nun ein XML-basierter RPCMechanismus zur Verfügung.
• Frage: wie mache ich denn nun bekannt
–
–
–
–
Wie mein Web Service heisst?
Welche Parameter er verwendet?
Welche Ausgaben er liefert?
Dass es ihn überhaupt gibt?
• Die ersten drei Fragen lassen sich mit WSDL
beantworten, die letzte mit UDDI.
• D.h., WSDL ist eine Sprache zur Beschreibung von
Web Services.
• WSDL ist nichts anderes als ein XML-Format, d.h.
eine Sammlung von Tags. Im Prinzip hätte es
deshalb auch genügt,
eine WSDL-DTD zu schreiben.
Prof. Dr. Stefan Fischer
Web-Anwendungen mit Java und XML
8-83
IBR, TU Braunschweig
Sommersemester 2002
Komponenten eines WSDL-Dokuments
• Datentypdefinitonen (es können XML Schemata
genutzt werden)
• Nachrichtenbeschreibungen incl. Parametern
• Operation: abstrakte Definition einer Aktion, die ein
Service durchführen kann
• Port-Typ: beschreibt die Art der möglichen
Operationen auf einem Port
• Bindung: Protokoll- und Datenformatspezifikation für
einen Port-Typ (definiert: SOAP, HTTP get/post,
MIME)
• Port: Endpunkt (Zugangspunkt) eines Dienstes
(Kombination aus Bindung und Netzadresse)
• Service: Zusammenfassung von
Kommunikationsendpunkten
Prof. Dr.
Stefan Fischer
Web-Anwendungen mit Java und XML
8-84
IBR, TU Braunschweig
Sommersemester 2002
Beispiel: Börsenkursabfrage
• Es soll ein Web Service beschrieben werden,
an den man als Anfrage ein Tickersymbol
schicken kann und dann als Antwort den
aktuellen Kurs erhält.
• Wir beschreiben den Dienst in 3 Dateien:
– Die Schemadefinition stockquote.xsd
– Die Operationen in stockquote.wsdl
– Den Service in stockquoteservice.wsdl
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-85
stockquote.xsd
<?xml version=“1.0“?>
<schema targetNamespace="http://example.com/stockquote.xsd"
xmlns="http://www.w3.org/2000/10/XMLSchema">
<element name="TradePriceRequest">
<complexType>
<all>
<element name=“tickerSymbol" type="string"/>
</all>
</complexType>
</element>
<element name="TradePriceResult">
<complexType>
<all>
<element name="price" type="float"/>
</all>
</complexType>
</element>
</schema>
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-86
stockquote.wsdl
<?xml version="1.0"?>
<definitions name="StockQuote"
targetNamespace="http://example.com/stockquote.wsdl"
xmlns:tns="http://example.com/stockquote/stockquote.wsdl"
xmlns:xsd1="http://example.com/stockquote.xsd"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns="http://schemas.xmlsoap.org/wsdl/">
<import namespace=“http://example.com/stockquote/schemas“
location=“http://example.com/stockquote/stockquote.xsd“>
<message name="GetLastTradePriceInput">
<part name="body" element="xsd1:TradePriceRequest"/>
</message>
<message name="GetLastTradePriceOutput">
<part name="body" element="xsd1:TradePriceResult"/>
</message>
<portType name="StockQuotePortType">
<operation name="GetLastTradePrice">
<input message="tns:GetLastTradePriceInput"/>
<output message="tns:GetLastTradePriceOutput"/>
</operation>
</portType>
</definitions>
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-87
stockquoteservice.wsdl
<?xml version="1.0"?>
<definitions name="StockQuote"
targetNamespace="http://example.com/stockquote/service"
xmlns:tns="http://example.com/stockquote/service"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns="http://schemas.xmlsoap.org/wsdl/">
<import namespace=“http://example.com/stockquote/definitions“
location=“http://example.com/stockquote/stockquote.wsdl“>
<binding name="StockQuoteSoapBinding" type="tns:StockQuotePortType">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="GetLastTradePrice">
<soap:operation soapAction="http://example.com/GetLastTradePrice"/>
</operation>
</binding>
<service name="StockQuoteService">
<documentation>My first service</documentation>
<port name="StockQuotePort" binding="tns:StockQuoteSoapBinding">
<soap:address location="http://example.com/stockquote"/>
</port>
</service>
</definitions>
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-88
WSDL-Werkzeuge
• Auf der Basis von WSDL-Dokumenten
können nun natürlich wieder eine Reihe von
Werkzeugen implementiert werden:
– Generierung von Java-Klassen und
verschiedenen Code-Stücken, z.B. SOAP-Zugriff
– Automatisches Deployment von Web Services
– Automatische Registrierung von Web Services bei
UDDI
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-89
Univ. Description, Discovery and
Integration
• UDDI ist eine neue, von IBM, Microsoft und Ariba ins
Leben gerufene Initiative
• Globales Business-Verzeichnis
– White pages (URL, Addresse, Tel., etc.)
– Yellow pages (Branche, Land)
– Green Pages (Services, wie sind diese aufzurufen)
• Zugriff auf UDDI mittels
standardisierter SOAPOperationen und damit über
einen einfachen akzeptierten
Protokollstack.
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
UDDI
SOAP
TCP / HTTP
8-90
Vorgehen für Web Services
• Der Web-Service-Entwickler startet den Web
Service und registriert ihn bei UDDI.
• Nun können potentielle Clients UDDI
abfragen und bei Erfolg Zugriff auf die
technische Service-Beschreibung erhalten.
• Basierend darauf können nun Anwendungen
entwickelt werden.
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-91
Registry-Operation
•
•
•
•
•
•
Peer nodes (websites)
Companies register
with any node
Registrations replicated
on a daily basis
Complete set of
“registered” records
available at all nodes
Common set of
SOAP APIs supported
by all nodes
Compliance enforced by
business contract
queries
IBM
other
UDDI.org
other
Ariba
Microsoft
© Copyright 2000 By Ariba, Inc., International Business Machines
Corporation and Microsoft Corporation. All Rights Reserved.
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-92
Verfügbare freie Registries
•
•
•
•
•
http://uddi.microsoft.com/ (the Microsoft query registry)
http://www-3.ibm.com/services/uddi/testregistry/ (the IBM
query registry)
http://test.uddi.microsoft.com:80/ (the Microsoft test query
registry)
https://test.uddi.microsoft.com:443/ (the Microsoft test update
registry)
Nach vorheriger Registrierung kann man diese Dienste frei
nutzen.
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-93
API für UDDI & Co
• Es gibt auch für den Zugriff auf UDDI
wiederum eine Reihe verfügbarer APIs.
• In Suns XML-Pack findet sich alles zu diesem
Thema unter JAXR – Java API for XML
Registries.
• Die Operationen sind ähnlich wie bei
generischen Verzeichnisdiensten, zum Teil
allerdings speziell auf die Zwecke von
Business-Directories zugeschnitten.
• Hierzu lohnt auch ein Blick in das zum XMLPack gehörige Tutorial.
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-94
Web Services: das große Bild
Service
Provider
kodiert
schreibt
SOAP
Service
WSDL Service
Beschreibung
registriert
UDDI
Registry
registriert
findet
WSDL Service
Beschreibung
Service
Client
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
sucht WSDL
kodiert
Web-Anwendungen mit Java und XML
Sommersemester 2002
interagiert
generiert
SOAP
Client
8-95
Zusammenfassung
• XML an sich ist eine sehr grundlegende Technologie
(wie ASCII)
• Die Stärken liegen in:
– der grossen Akzeptanz
– der enormen Menge an frei erhältlicher Software
– der Vielzahl der Anwendungsbereiche (Document
Management, RPC, etc.)
• Data everywhere!
– Dies ist nicht selbstverständlich (Gartner Group: 35-40% des
Programmierbudgets für Datenkonversion)
– Wird sich hoffentlich bald ändern
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-96
Zusätzliche Literatur
• Brett McLaughlin: Java & XML, 2nd edition,
O‘Reilly, 2001.
• Eric M. Burke: Java and XSLT, O‘Reilly.
2001.
• Scott Seely: SOAP – Cross Platform Web
Service Development Using XML, Prentice
Hall, 2002.
• Sowie zahllose weitere brauchbare Bücher
zum Thema XML
• Zu „Web Services“ fehlt noch das ein oder
andere gute Buch ...
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-97
Software
• Xerces XML Parser:
http://xml.apache.org/xerces-j
• Sun Java XML Pack: http://java.sun.com/xml
• Generell: das Apache-Projekt hat eine ganze
Reihe guter XML-Tools hervorgebracht, s.
http://xml.apache.org
Prof. Dr. Stefan Fischer
IBR, TU Braunschweig
Web-Anwendungen mit Java und XML
Sommersemester 2002
8-98
Herunterladen