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. &auml;) – 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