Upload
phamkhuong
View
212
Download
0
Embed Size (px)
Citation preview
IBS - XML 2
XML
XML: eXtensible Markup Language
XML ist ein Klartext-basiertes Datenformat mit dem baumartige Dokumente definiert werden.Die Baumstruktur ergibt sich, wie bei HTML, aus eingestreuten Auszeichnungen (Tags).Im Gegensatz zu HTML sind die Tags beliebig aber die Struktur wird streng geprüft. XML ist ein (komplexer) Standard des W3C.
XMLExtensible Markup LanguageDie XML-Struktur ist wegen der undefinierten Tags sehr offen. Für spezielle Anwendungen werden spezielle Tags definiert.
XMLExtensible Markup LanguageDie Dokumentenstruktur wird durch Auszeichnungen (Markups, Tags) definiert.
XML Extensible Markup LanguageXML ist eine Sprache die durch eine Grammatik definiert wird, deren „Sätze“ (Dokumente) als Text dargestellt werden und mit standardisierten XML-Werkzeugen der Compiler-Technik bearbeitet werden können.
http://www.w3.org/XML/
IBS - XML 3
XML
Beispiel
Buch
Titel
Kapitel
Max und Moritz
Erster Streich
<?xml version="1.0" encoding="utf-8"?><Buch Autor="Wilhelm Busch"> <Titel> Max und Moritz </Titel> <Kapitel id="1"> Erster Streich. </Kapitel> <Kapitel id="2"> Zweiter Streich. </Kapitel></Buch>
Kapitel
Zweiter Streich
Autor=“Wilhelm Busch“
id=“1“
id=“2“XML: keine festgelegte Menge an Tags Strikte Struktur: – XML-Declaration – ein(!) korrekt verschachteltes (Root-) Dokument
IBS - XML 4
XML: Vorteile und Probleme
XML macht das Leben leichter
XML bietet eine universelle Basis-Struktur für die Definition strukturierter Daten und deren Repräsentation als Text.
Anwendungen definieren anwendungsspezifische Elemente und Verschachtelungs-Regeln.
XML-Technologien bieten vorgefertigte – generische – Verarbeitungstools (Parser, Codierer)
Anwendungsentwickler müssen sich nicht mehr mit anwendungsspezifischen Compiler-Techniken befassen
XML macht das Leben komplizierter
XML hat eine eigne dokumenten-zentrische „Philosophie“ von Daten und Datentypen
Diese unterscheidet sich von der in Programmiersprachen üblichen OO-Sicht und der relationalen (DB-orientierten) Sicht der Dinge
Erhöhter Lern-Aufwand
Abbildung zwischen OO-Daten und XML-Daten notwendig
XML ist die erfolgreichste Innovation der Software-Technologie nach den relationalen Datenbanken und der Objektorientierung. – Leider ist XML zu beiden keine reine Ergänzung sondern teilweise auch ein Konkurrent.
IBS - XML 5
XML: Vorteile und Probleme
Verteilte / kommunizierende Anwendung(en)
A B
Datentransport
Codierung / Decodierung
Codierung / Decodierung
gemeinsames Datenkonzept
fixes Transportformat der Daten
Verteilte Anwendung mit Partner A und B, die einen Datenaustausch benötigen:
– Ein gemeinsames Verständnis der Daten (worüber sprechen wir, was beutet was)
– Ein eindeutiges Transportformat der Daten (welche Zeichen in welchem Zeichensatz bedeuten was)
– Jeweils eigene Codier- Decodier (Serialisierungs- / Parsing-) Routinen die die Daten für die jeweilige Seiten codieren oder decodieren (z.B. vom Transportformat in C++ auf der einen und Cobol auf der anderen Seite und umgekehrt)
entwickelt von
Entwickler B
entwickelt von
Entwickler A
Dokument von Manager A und Manager B abgestimmt.
von Entwickler A und Entwickler B abgestimmt (mündlich, beim Bier?)
IBS - XML 6
XML: Vorteile und Probleme
Verteilte / kommunizierende Anwendung(en)
XML macht das Leben leichter
A B
Datentransport
Codierung / Decodierung
Codierung / Decodierung
gemeinsames Datenkonzept
fixesTransportformat der
Daten
Standard XML-Technologie
Standard XML-Technologie
XML-Dokument
XML-Definition (formal)
generiertgeneriert
generiert
IBS - XML 7
Wohlgeformte Dokumente
XML: Syntaktische Basisstruktur
Elemente
– Element: Start-Tag Inhalt Ende-Tag
– leeres Element: Tag
– Element-Inhalt: Text / Elemente
Attribute
– Elemente können Attribute haben
– Attribut: Name-Wert Paar
– Notation: Bestandteil des (Start-) Tags
<?xml version="1.0" encoding="utf-8"?><Buch Autor="Wilhelm Busch">
<ISBN-13 nr=" 9783480223640" /> <Titel> Max und Moritz </Titel> <Kapitel id="1"> Erster Streich. </Kapitel> <Kapitel id="2"> Zweiter Streich. </Kapitel></Buch>
IBS - XML 8
Wohlgeformte Dokumente
Elemente
– Dokumentein Wurzelelement in das rekursiv weitere Elemente geschachtelt werden können
– Tags (Auszeichnungen / Markups) begrenzen Elemente
Nicht-leeres Element ::= <Name [Attribute] > Inhalt </Name>
Leeres Element ::= <Name [Attribute] />
– Kommentar: <!-- Ein Kommentar -->
– Verarbeitungshinweis (Processing Instruction, PI)
● <?Ziel ... Anweisungen ... ?>
● die Anweisungen sollen von der Anwendung ?Ziel ausgeführt werden
Attribute
– Syntax:
AttributName = "Attributwert" oder
AttributName = 'Attributwert'
IBS - XML 9
Wohlgeformte Dokumente
Dokumente
Syntax:
Document ::= Prolog Element Epilog
Prolog ::= [XML-Deklaration] [DocType-Deklaration]
Der Prolog sollte mit einer XML-Dekaration beginnen, Beispiel:
<?xml version="1.0" encoding="UTF-8" ?>
Das ist eine Processing Instruction mit Ziel xml.
Sie ist also an den XML—Parser (oder irgendeinen anderen Verarbeitungsmechanismus) gerichtet.
IBS - XML 10
Wohlgeformte Dokumente
Zeichencodierung
Zeichensatz (Character Set) : Unicode (ISO 10646)
– XML-Prozessoren verarbeiten intern Zeichen nach Unicode-Standard. – Jedes Zeichen in einem XML-Dokument muss (logisch !) ein Unicode-Zeichen sein. – Unicode definiert Zeichen (Code--Points) im Code--Bereich 0x0 .. 0x10FFFF– XML-Dokumente enthalten also nur Zeichen (Text) entsprechend dieser Definition – XML-Dokumente können mit üblichen Editoren in üblicher Zeichencodierung
erstellt werden– Der XML-Parser wandelt sie intern in Unicode um
XML-Parser
XML-Dokument
(intern)
XML-Prozessor
XML-Dokument
(extern)
enthält nurUnicode-Zeichen
Zeichen in beliebiger Codierung (falls auf Unicode abbildbar)
http://www.w3.org/TR/xml11/#dt-character
IBS - XML 11
Wohlgeformte Dokumente
Wohlgeformte Dokumente
well formed document / wohlgeformtes Dokument
Ein Dokument ist wohlgeformt (well formed), wenn es die Basis-Syntax korrekt einhält,
wenn also eine korrekte Baumstruktur definiert wird,
alle Elemente korrekt verschachtelt sind,
alle Tags und Attribute in korrekter Syntax vorliegen und
die Zeichen entsprechen XML-Standard Vorgaben korrekt codiert sind.
http://www.w3.org/TR/xml11/#sec-well-formed
IBS - XML 12
Valide Dokumente
XML: Syntaktische Basis-Struktur (wohlgeformt)
+ Anwendungs-Struktur (valide)
Basis-Struktur ~ wohlgeformtes DokumentDokument entspricht den einfachen Syntax-Regeln die für alle XML-Dokumente gelten
Anwendungsstruktur ~ valides (gültiges, engl. valid) DokumentZusätzliche anwendungsspezifische Vorgaben schränken die Basis-Struktur ein
<?xml version="1.0" encoding="utf-8"?><Buch Autor="Wilhelm Busch"> <ISBN-13 nr=" 9783480223640" /> <Titel> Max und Moritz </Titel> <Kapitel id="1"> Erster Streich. </Kapitel> <Kapitel id="2"> Zweiter Streich. </Kapitel></Buch>
Beispiel
– wohlgeformt: alle öffnenden Tags werden geschlossen, die Baumstruktur wird korrekt eingehalten, das Dokument enthält keine ungültigen Zeichen, etc.
– valide: Die Struktur einer Buchbeschreibung wird eingehalten: das Wurzel-Element ist Buch, es hat ein Attribut Autor, es enthält ein ISBN-Element, dann folgen Kapitel-Elemente, etc.
IBS - XML 13
Valide Dokumente
DTD oder Schema: Definition einer Anwendungs-Struktur
Ziel: Definiere domänenspezifisches XML als Definition von XML-Strukturen für spezielle Anwendungen oder Anwendungsdomänen
BeispieleXML-Spezialisierung für Bestellungen von Autohändlern, für die Formalisierung von Frachtbriefen, Beschreibung von Noteneinträgen, …
Es gibt zwei standardisierte Methoden zur Definition einer überlagernden anwendungsorientierten Struktur von (validen) XML-Dokumenten:
DTD: Document Type Definitionälteres Verfahren, definiert die Struktur von XML-Dokumenten durch eine Grammatik
DTDs werden nicht wohlgeformt d.h. keine XML-Dokumente
Schematamoderneres, komplexeres Verfahren definiert die Struktur von XML-Dokumenten in XML-kompatibler Form
IBS - XML 14
Valide Dokumente / DTD
DTD : Document Type Definition
einfache (Zusatz-) Grammatik für XML-Dokumente
regelt – welche Elemente und Attribute zulässig sind– wie Elemente verschachtelt werden dürfen
Teil des XML-Standards
Gültige Dokumente– nehmen Bezug auf – interne oder externe – DTD– entsprechen der DTD
http://www.w3.org/TR/2006/REC-xml11-20060816/#dtd
IBS - XML 15
Valide Dokumente / DTD
DTD Beispiel
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Buch [ <!ELEMENT Buch (ISBN, Titel, Kapitel+)> <!ATTLIST IBSN nr CDATA #REQUIRED> <!ATTLIST Buch Autor CDATA #REQUIRED> <!ELEMENT Titel (#PCDATA)> <!ELEMENT Kapitel (#PCDATA)> <!ATTLIST Kapitel id CDATA #REQUIRED> ]>
<Buch Autor="Wilhelm Busch"> <ISBN nr="9783480223640" /> <Titel> Max und Moritz </Titel> <Kapitel id="1"> Erster Streich. </Kapitel> <Kapitel id="2"> Zweiter Streich. </Kapitel></Buch>
Ein valides XML-Dokument
Es enthält eine Dokumententyp-Definition und entspricht dieser auch.
Interne DTD. Hier kann auch ein Bezug zu einer externen Definition stehen:
mit Buch.dtd =<!DOCTYPE Buch SYSTEM "Buch.dtd">
<?xml version="1.0" encoding="UTF-8"?> <!ELEMENT Buch (ISBN, Titel, Kapitel+)> <!ATTLIST IBSN nr CDATA #REQUIRED> <!ATTLIST Buch Autor CDATA #REQUIRED> <!ELEMENT Titel (#PCDATA)> <!ELEMENT Kapitel (#PCDATA)> <!ATTLIST Kapitel id CDATA #REQUIRED>
DTDs gelten als veraltet und werden hier nicht weiter betrachtet.
IBS - XML 16
XML-Namensräume
Namensraum
Vermeiden von Namenskollisionen in einem XML Dokument– Elementnamen müssen in einem Dokument eine eindeutige Bedeutung haben – Attributnamen müssen in einem Element eine eindeutige Bedeutung haben
Namen können durch Namensräume in Gruppen (Mengen) eingeteilt werden. Damit werden Kollisionen vermieden. Verschiedene Definitionen des Elements können so unterschieden und in einem Dokument gleichzeitig verwendet werden.
Element- und Attribut-Namen können einem Namensraum zugeordnet werden
Deklaration eines Namensraums
Vor der Verwendung eines Namensraums muss dieser deklariert werden.Namensräume werden als Attribut xmlns:NR-Präfix eines Elements deklariert.Diese Deklaration gilt für dieses Element und all seine Unterelemente.
Namensräume sind wichtig bei Schema-Definitionen
http://www.w3.org/TR/xml-names11/
Namensräume sind wichtig für Schema-Definitionen!
IBS - XML 17
XML-Namensräume
Beispiel
<?xml version="1.0" encoding="UTF-8"?><bh:Buch Autor="Wilhelm Busch" xmlns:bh="http://www.buchhandel.de"> <ISBN nr="9783480223640" /> <Titel> Max und Moritz </Titel> <Kapitel id="1"> Erster Streich. </Kapitel> <Kapitel id="2"> Zweiter Streich. </Kapitel></bh:Buch>
Die Organisation, der die Domäne www.buchhandel.de gehört, definiert den Datenaustausch im XML-Format. Sie hat dazu Dokumententypen und Elemente definiert die „ihrem“ Namensraum www.buchhandel.de zugeordnet sind.
Vielleicht haben ja andere Organisationen ebenfalls Dokumententypen mit den Elementen Buch, ISBN, und Titel, definiert. Mit der Namensraum-Deklaration ist die Unterscheidung möglich.
Namensraum-Deklaration
IBS - XML 18
XML-Namensräume
Namensraum-Deklarationxmlns:prefix="URI"
definiert prefix als Kurzname für URI
Reservierte NamensräumePräfixe die mit xml beginnen gehören zu reservierten Namensräumen
Beispiel: xmlns
Default-Namensraummit xmlns=“URI“ wird ein Default-Namensraum definiert, alle Unterelemente sind in diesem Namensraum
target NamenspaceIn Schema-Definitionen (siehe unten) wird mit targetNamespace=“URI“ ein Ziel-Namensraum definiert, in die Definitionen des Schemas platziert werden.
<table xmlns="http://www.w3.org/TR/html4/"> <tr> <td>Apples</td> <td>Bananas</td> </tr></table>
Deklaration Default NS: Mit tr und td sind die in HTML 1.4 definierten
Elemente tr und td gemeint.
<bh:Buch Autor="Wilhelm Busch" xmlns:bh="http://www.buchhandel.de"> ...</bh:Buch>
Namensraum-Deklaration
IBS - XML 19
XML-Namensräume
Beispiel mit mehreren Namensräumen
im Default--Namensraum http://www.edi.org sind bestellung, kunde
im Namensraum quelle = http://www.quelle.de sind artikel, waehrung, bezeichnung, preis
im Namensraum sn = http://www.schnaeppchen.com sind artikel, preis
<?xml version="1.0" encoding="UTF-8"?><bestellung xmlns="http://www.edi.org"
xmlns:quelle="http://www.quelle.de" xmlns:sn="http://www.schnaeppchen.com">
<kunde>Hugo Meier</kunde><quelle:artikel nr="NR-209-11">
<quelle:bezeichnung>Waschmaschine</quelle:bezeichnung><quelle:preis quelle:waehrung="euro">573</quelle:preis>
</quelle:artikel><sn:artikel sn:art="handy" sn:marke="Siemens C25" sn:preis="EU-0.01" />
</bestellung>
IBS - XML 20
Valide Dokumente / Schemata
Schema
komplexe Definition von Datentypen und Dokumenten-Strukturen zur Formulierung von Einschränkungen allgemeiner XML-Dokumente.
Regelt– welche Elemente und Attribute zulässig sind– wie Elemente verschachtelt werden dürfen
Eigener XML-Standard
Gültige Dokumente– nehmen Bezug auf (externe) Schema-Definition– entsprechen dem Schema
http://www.w3.org/XML/Schema
http://www.w3schools.com/Schema/
IBS - XML 21
Valide Dokumente / Schemata
Schema-Beispiel (1)
<?xml version="1.0" encoding="UTF-8"?><schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://ws1011.ibs.mni.fh-giessen.de/Query" xmlns:tns="http://ws1011.ibs.mni.fh-giessen.de/Query" elementFormDefault="qualified">
<element name="query"> <complexType> <sequence> <element name="operand" type="int" maxOccurs="2" minOccurs="2"/> </sequence> <attribute name="operation" type="tns:OP" use="required"></attribute> </complexType></element><simpleType name="OP"> <restriction base="NMTOKEN">
<enumeration value="ADD" /> <enumeration value="SUB" /> </restriction></simpleType></schema>
Definition von Queries als Rechenaufträge (addieren oder subtrahieren).Query ::= OP Operand OperandOperand ::= intOP ::= ADD | SUBEine Schemadefinition
definiert das Element query im Namensraum http://ws1011.ibs.mni.fh-giessen.de/Query
IBS - XML 22
Valide Dokumente / Schemata
Schema-Beispiel (2)
<?xml version="1.0" encoding="UTF-8"?><tns:query operation="ADD"
xmlns:tns="http://ws1011.ibs.mni.fh-giessen.de/Query" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://ws1011.ibs.mni.fh-giessen.de/Query Query.xsd">
<tns:operand>2</tns:operand> <tns:operand>2</tns:operand></tns:query>
Ein valides XML-Dokument definiert das Element mit root-Node query aus dem (Target-) Namensraum (tns) http://ws1011.ibs.mni.fh-giessen.de/Query
Nutzen Sie Eclipse zur Definition von Schemata und der Prüfung von Dokumenten auf Validität!Schemadefinition in Eclipse (Design-View)
IBS - XML 23
Valide Dokumente / Schemata
Typen und Elemente
Bei einer Element-Deklaration kann man sich auf einen definierten Typ beziehen.
Alternativ dazu kann die Typ-Definition auch direkt eingefügt werden.
Element-Definitionverwendet explizit definiertem Typ
<?xml version="1.0" encoding="UTF-8"?><schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://examples.ibs.mni.fh-giessen.de/Name1" xmlns:tns="http://examples.ibs.mni.fh-giessen.de/Name1" elementFormDefault="qualified">
<element name="name" type="tns:Name"/>
<complexType name="Name"> <sequence> <element name="vorName" type="string"/> <element name="nachName" type="string"/> </sequence> </complexType>
</schema>
IBS - XML 24
Valide Dokumente / Schemata
Typen und Elemente
Bei einer Element-Deklaration kann man sich auf einen definierten Typ beziehen.
Alternativ dazu kann die Typ-Definition auch direkt eingefügt werden.
<?xml version="1.0" encoding="UTF-8"?><tns:name xmlns:tns="http://examples.ibs.mni.fh-giessen.de/Name1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://examples.ibs.mni.fh-giessen.de/Name1 Name1.xsd "> <tns:vorName>Karl</tns:vorName> <tns:nachName>Napp</tns:nachName></tns:name>
valides Beispiel-Dokument
<?xml version="1.0" encoding="UTF-8"?><name xmlns="http://examples.ibs.mni.fh-giessen.de/Name1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://examples.ibs.mni.fh-giessen.de/Name1 Name1.xsd ">
<vorName>Karl</vorName> <nachName>Napp</nachName></name>
valides Beispiel-Dokument mit Default-Namespace
IBS - XML 25
Valide Dokumente / Schemata
Typen und Elemente
Bei einer Element-Deklaration kann man sich auf einen definierten Typ beziehen.
Alternativ dazu kann die Typ-Definition auch direkt eingefügt werden.
Element-Definitionmit anonymer Typ-Definition
<?xml version="1.0" encoding="UTF-8"?><schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/Name2" xmlns:tns="http://www.example.org/Name2" elementFormDefault="qualified">
<element name="name" > <complexType> <sequence> <element name="vorName" type="string"/> <element name="nachName" type="string"/> </sequence> </complexType></element>
</schema>
<?xml version="1.0" encoding="UTF-8"?><name xmlns="http://www.example.org/Name2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.org/Name2 Name2.xsd "> <vorName>Karl</vorName> <nachName>Napp</nachName></name>
valides Beispiel-Dokument (mit Default-Namespace)
IBS - XML 26
Valide Dokumente / Schemata
Vordefinierte (build-in), primitive TypenVon der Schema-Spezifikation definierte Basis-Typen.
Beispiele: boolean, string, float, decimal, ...
Abgeleitete TypenAbgeleitete Typen werden auf Basis anderer Typen definiert. Manche vordefinierten Typen sind abgeleitet.
Die Ableitungsmechanismen sind: Restriction, Extension, List, Union
Beispiele für abgeleitete vordefinierte Typen (vordefiniert und nicht primitiv):
integer (von decimal durch Restriction),
normalizedString (von string durch Restriction)
Benutzer-definierte Typen (user-defined types)Die Benutzer (Schema-Definierer) können neue Typen definieren. Neue Typen werden durch Ableitung definiert.
Einfache Typen (simple types)Einfache Typen sind die Typen der Blätter einer XML-Struktur. Es sind vordefinierte primitive Typen, oder von solchen abgeleitete Typen.
Komplexe Typen (complex Types)Komplexe Typen sind die Typen von Knoten einer XML-Struktur. Werte von einem komplexen Typ können Kind-Elemente und Attribute haben. Komplexe Typen werden als Ableitung (Erweiterung oder Beschränkung) definiert.
IBS - XML 27
Valide Dokumente / Schemata
Vordefinierte primitive Typen (aus http://www.w3.org/TR/xmlschema-2/)
IBS - XML 28
Valide Dokumente / Schemata
Benutzer-definierte Typen / User-Defined Types
neue Typen werden durch Ableitung definiert
Ableitungen:
Einschränkung RestrictionEinschränkungen werden durch constaining facets angegeben, sie schränken den
Wertebreich ein
Vereinigung UnionEin Element eines Union-Typs kann ein Element aus einem von mehreren Mitglieds-
Typen des Union-Typs sein (~ union in C)
Liste ListEin Element eines Listentyps besteht aus einer Liste von Elementen des Mitglieds-
typs des Listentyps
Erweiterung ExtensionErweiterungen definieren neue (komplexe) Typen durch die Erweiterung um neue
Elemente
IBS - XML 29
Valide Dokumente / Schemata
Beispiel Einschränkung: Definition des Formats einer Modul-Id
Beispiel: Definition des einfachen Typs ModuleId durch Einschränkung mit regulärem Ausdruck.
Verwendung des Typs ModuleId in einer Attributdefinition
<?xml version="1.0" encoding="UTF-8"?><schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://examples.ibs.mni.fh-giessen.de/Module" xmlns:tns="http://examples.ibs.mni.fh-giessen.de/Module" elementFormDefault="qualified">
<simpleType name="ModuleId"> <restriction base="string"> <pattern value="CS[0-9]{4}"/> </restriction> </simpleType>
<complexType name="Module"> <attribute name="id" type="tns:ModuleId" use="required"/></complexType>
<element name="module" type="tns:Module"/>
</schema>
constraining facet
<?xml version="1.0" encoding="UTF-8"?><module xmlns:tns="http://examples.ibs.mni.fh-giessen.de/Module"
xmlns="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://examples.ibs.mni.fh-giessen.de/Module Module.xsd"
id="CS1024" />
Das so definierte Attribut in einem Element
Module.xsd
ibs.xml
IBS - XML 30
Valide Dokumente / Schemata
Beispiel Einschränkung durch Aufzählung
<simpleType name="Studiengang"> <restriction base="NMTOKEN"> <enumeration value="I"> <annotation> <documentation>Informatik</documentation></annotation> </enumeration> <enumeration value="WI"> <annotation> <documentation>Wirtschafts-Informatik</documentation> </annotation> </enumeration> <enumeration value="BI"> <annotation> <documentation>Bio-Informatik</documentation> </annotation> </enumeration> <enumeration value="MI"> <annotation> <documentation>Medizin-Informatik</documentation> </annotation> </enumeration> </restriction></simpleType>
Beispiel: Definition des einfachen Typs Studiengang als Einschränkung von NMTOKEN durch Auflistung der Möglichkeiten.(NMTOKEN sind Namen die auch Ziffern und Punkte enthalten können. Vergl. XML-Spez.)Die Definition ist zu Dokumentations-Zwecken annotiert.
<complexType name="Module"> <attribute name="id" type="tns:ModuleId" use="required"/> <attribute name="studiengang" type="tns:Studiengang" use="required"/></complexType>
Verwendung des Typs Studiengang in einer Attributdefinition
Hier und in den folgenden Beispielen ist xsd, der Schema-Namensraum, Default-Namensraum: xmlns="http://www.w3.org/2001/XMLSchema"
IBS - XML 31
Valide Dokumente / Schemata
Beschränkungen von komplexen TypenKomplexe Typen können durch Einschränkung definiert werden. Dabei wird der Inhalt des komplexen Typs beschränkt. Jeder Wert des beschränkten Typs ist ein Wert des neuen Typs.
<complexType name="PurchaseOrderType"> <sequence> <element name="shipTo" type="ipo:Address"/> <element name="billTo" type="ipo:Address"/> <element ref="ipo:comment" minOccurs="0"/> <element name="items" type="ipo:Items"/> </sequence> <attribute name="orderDate" type="date"/></complexType>
Basistyp
Beispiel aus http://www.w3.org/TR/xmlschema-0
<complexType name="RestrictedPurchaseOrderType"> <complexContent> <restriction base="ipo:PurchaseOrderType"> <sequence> <element name="shipTo" type="ipo:Address"/> <element name="billTo" type="ipo:Address"/> <element ref="ipo:comment" minOccurs="1"/> <element name="items" type="ipo:Items"/> </sequence> </restriction> </complexContent></complexType>
Durch Beschränkung von minOccurs abgeleiteter Typ
IBS - XML 32
Valide Dokumente / Schemata
Vereinigungen / UnionsVereinigungen werden angegeben, indem die möglichen Typen aufgezählt werden
<simpleType name="integer-or-string"> <union memberTypes="integer string"/></simpleType>
<element name="ambig" type="tns:integer-or-string"
/>
<ambig>5</ambig>
Definition eines Union-Typs
Definition eines Elements mit Union-Typs
Ein Element
<ambig>Hugo</ambig>
Ein anderes Element
IBS - XML 33
Valide Dokumente / Schemata
Listen / ListsListentypen werden über einem Elementtyp definiert
Beispiel: Listentypüber Studiengang
Verwendung des Listentyps in einer Attributdefinition
XML-Element mit Attribut mit Listentyp
<simpleType name="Verwendbarkeit"> <list itemType="tns:Studiengang"/></simpleType>
<complexType name="Module"> <attribute name="id" type="tns:ModuleId" use="required"/> <attribute name="studiengang" type="tns:Studiengang" use="required"/> <attribute name="verwendbarkeit" type="tns:Verwendbarkeit" use="required"/></complexType>
<?xml version="1.0" encoding="UTF-8"?><module xmlns="http://examples.ibs.mni.fh-giessen.de/Module"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://examples.ibs.mni.fh-giessen.de/Module Module.xsd" id="CS1024"studiengang="I"verwendbarkeit="I WI MI BI" />
IBS - XML 34
Valide Dokumente / Schemata
Komplexe Typen
Komplexe Typen definieren Elemente die im Gegensatz zu einfachen Typen Kind-Elemente und Attribute enthalten.
Komplexe Typen mit einfachem Inhalt simple contentElemente mit solchen Typen können enthalten
● beliebige Attribute
● als Inhalt nur unstrukturiertes z.B. nur einfachen Text
Komplexe Typen mit komplexem Inhalt complex contentElemente mit solchen Typen können enthalten
● beliebige Attribute
● beliebige Unter-Elemente
mit definierter Reihenfolge:
– sequence ~ festgelegte reihenfolge– choise ~ Auswahl– all ~ beliebige Reihenfolge
und Anzahl des Vorkommens
– minOccurs ~ minimale Anzahl an Elementen dieses Typs– maxOccurs ~ maximale Anzahl des Vorkommens dieses Typs
IBS - XML 35
Valide Dokumente / Schemata
Definition von komplexen Typen durch
Beschränkungen von komplexen TypenKomplexe Typen können durch Einschränkung definiert werden.
Mögliche Einschränkungen:– Komponententyp einschränken– min- / max-Occurs einschränken– optionale Elemente weglassen
Die Standardform der Definition eines komplexen Typs:
<complexType name="Dozent"> <all> <element name="name" type="string" /> <element name="vorname" type="string" /> </all> <attribute name="fb" type="tns:Fb" /></complexType>
Standardform der Definition eines komplexen Typs: - Angabe der Unterelemente: - all (beliebige Reihenfolge), - sequence (festgelegte Reihenfolge) - choise (Auswahl) - Angabe der Attribute
wird als Beschränkung des „Urtyps“ anyType interpretiert (siehe unten).
IBS - XML 36
Valide Dokumente / Schemata
Definition von komplexen Typen durch
Erweiterung von komplexen TypenKomplexe Typen können durch Erweiterung definiert werden.
Mögliche Erweiterungen:– zusätzliche Attribute– zusätzliche Elemente
IBS - XML 37
<?xml version="1.0" encoding="UTF-8"?><module xmlns="http://examples.ibs.mni.fh-giessen.de/Module"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://examples.ibs.mni.fh-giessen.de/Module Module.xsd"
id="CS1024" studiengang="I" ><verwendbarkeit stufe="Bachelor">I</verwendbarkeit><verwendbarkeit stufe="Bachelor">BI</verwendbarkeit><verwendbarkeit stufe="Master">MI</verwendbarkeit>
</module>
Valide Dokumente / Schemata
Beispiel Komplexer Typ mit einfachem Inhalt
Ableitung durch Erweiterung eines einfachen Typs
Verwendung in einer Typ-Definition
<simpleType name="Studiengang"> <restriction base="NMTOKEN"> <enumeration value="I" /> <enumeration value="WI" /> <enumeration value="BI" /> <enumeration value="MI" /> </restriction></simpleType>
Extension
<simpleType name="Stufe"> <restriction base="Name"> <enumeration value="Bachelor"/> <enumeration value="Master"/> </restriction></simpleType>
<complexType name="GestufterStudiengang"> <simpleContent> <extension base="tns:Studiengang"> <attribute name="stufe" type="tns:Stufe" /> </extension> </simpleContent></complexType> <complexType name="Module">
<sequence minOccurs="1" maxOccurs="unbounded"> <element name="verwendbarkeit" type="tns:GestufterStudiengang" /> </sequence><attribute name="id" type="tns:ModuleId" use="required"/><attribute name="studiengang" type="tns:Studiengang" use="required"/></complexType>
Ein entsprechendes Dokument
IBS - XML 38
Valide Dokumente / Schemata
Beispiel Definition eines komplexen Typs mit komplexem Inhalt : Ableitung durch Beschränkung von anyType
<complexType name="Dozent"> <complexContent> <restriction base="anyType"> <sequence> <element name="name" type="string" /> <element name="fachbereich" type="string" /> </sequence> </restriction> </complexContent></complexType>
Definition komplexer Typ Dozent
<complexType name="Module"> <sequence> <element name="verwendbarkeit" type="tns:GestufterStudiengang" minOccurs="1" maxOccurs="unbounded" /> <element name="dozent" type="tns:Dozent" /> </sequence> <attribute name="id" type="tns:ModuleId" use="required"/> <attribute name="studiengang" type="tns:Studiengang" use="required"/></complexType> Verwendung im Typ Module
<module xmlns="http://examples.ibs.mni.fh-giessen.de/Module" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://examples.ibs.mni.fh-giessen.de/Module Module.xsd " id="CS1024" studiengang="I" > <verwendbarkeit stufe="Bachelor">I</verwendbarkeit> <verwendbarkeit stufe="Bachelor">BI</verwendbarkeit> <verwendbarkeit stufe="Master">MI</verwendbarkeit> <dozent> <name>Michael Jäger</name> <fachbereich>MNI</fachbereich> </dozent></module>
Ein Element vom Typ Dozent
IBS - XML 39
Valide Dokumente / Schemata
Beispiel Komplexer Typ
Definition eines komplexen Typs mit komplexem Inhalt
Ableitung durch Beschränkung von anyType
Abgekürzte (Standard-) Notation
<complexType name="Dozent"> <sequence> <element name="name" type="string" /> <element name="fachbereich" type="string" /> </sequence></complexType>
<complexType name="Dozent"> <complexContent> <restriction base="anyType"> <sequence> <element name="name" type="string" /> <element name="fachbereich" type="string" /> </sequence> </restriction> </complexContent></complexType>
Kurzform
Langform
IBS - XML 40
Valide Dokumente / Schemata
Beispiel Komplexer Typ
Definition eines komplexen Typs mit komplexem Inhalt
Ableitung durch Beschränkung von anyType
Definition eines leeren Elementtyps
Ein Element mit entsprechendem Typ
<mark/>
<complexType name="EmptyElement"> <complexContent> <restriction base="anyType"> </restriction> </complexContent></complexType>
<complexType name="EmptyElement">
~ identisch !
<element name="mark" type="EmptyElement" />Eine Element-Definition
IBS - XML 41
Valide Dokumente / Schemata
Beispiel Komplexer Typ Definition eines komplexen Typs mit komplexem Inhalt
Definition durch Erweiterung eines anderen komplexen Typs
<complexType name="Lecturer"> <attribute name="name" type="string"/> <attribute name="title" type="string"/></complexType>
<complexType name="DistinguishedLecturer"> <complexContent> <extension base="Lecturer"> <attribute name="numberNoblePrizes" type="nonNegativeInteger" default="1"/> </extension> </complexContent></complexType>
<module> <responsible name="Peter Pan" title="Prof" numberNoblePrizes="2"/> <lecturer name="Hugo Egon" title="Dr" /></module>
<complexType name="ModuleDescription"> <sequence> <element name="responsible" type="DistinguishedLecturer"/> <element name="lecturer" type="Lecturer"/> </sequence></complexType>
abgeleiteter komplexer Typ
Verwendung in einer Element-Definition
Ein Element
IBS - XML 42
Valide Dokumente / Schemata
Beispiel Komplexer Typ Definition eines komplexen Typs mit komplexem Inhalt
Definition durch Erweiterung eines anderen komplexen Typs
<complexType name="DistinguishedLecturer"> <complexContent> <extension base="tns:Lecturer"> <sequence> <element name="bearded"
type="xsd:boolean" default="false"/>
</sequence> <attribute name="numberNoblePrizes" type="xsd:nonNegativeInteger" default="1"/> </extension> </xsd:complexContent></xsd:complexType>
<responsible name="Peter Pan" title="Prof Dr Dr" numberNoblePrizes="3"> <bearded>true</bearded></responsible>
abgeleiteter komplexer Typmit Unterstruktur
Ein Element mit diesem Typ
IBS - XML 43
Valide Dokumente / Schemata
Abstrakte Typen Ein abstrakter Typ kann nicht in einem Element instantiiert werden
Beispiel: abstrakter Typ
<complexType name="Lecturer" abstract="true"> <attribute name="name" type="string"/> <attribute name="title" type="string"/></complexType>
<complexType name="SimpleLecturer"> <complexContent> <extension base="tns:Lecturer"/> </complexContent></complexType>
ein abgeleiteter Typ
Der abgeleitete Typ kann weitere Attribute und Unterstrukturen einführen, er muss aber nicht.
IBS - XML 44
Valide Dokumente / Schemata
Anonyme Typen Ein anonymer Typ kann direkt in einer Element-Definition verwendet werden
<element name="lecturer" maxOccurs="unbounded"> <complexType> <complexContent> <extension base="Lecturer"/> </complexContent> </xsd:complexType></element>
<element name="query"> <complexType> <sequence> <element name="operand" type="int" maxOccurs="2" minOccurs="2" /> </sequence> <attribute name="operation" type="tns:OP" use="required"></attribute> </complexType></element>
Beispiel 1
Beispiel 2
IBS - XML 45
Valide Dokumente / Schemata
Übersicht Typdefinition
Typ mit Elementen und/oder Attributen => definiere komplexen Typ
Nur Attribute, keine Elemente => definiere simpleContent
leite ab per– restriction eines einfachen Typs– extension eines Attributs
Mit Elementen => definiere complexContent
leite ab per– restriction eines komplexen Typs– extension eines komplexen Typs
Typ ohne Elemente und ohne Attribute => definiere einfachen TypLeite ab per
● restriction● list● union
IBS - XML 46
XML und Java
JAXB JAXB: Java API for XML Binding
Bestandteil des JDK (ab 1.6)
XML–Mapping für Java
Schema-äquivalente Klassen generieren
XML Dokument parsen (unmarshaling)
XML-Dokument generieren (marshaling)
XML Schema xjcxjc
Java Klassen
Binding Compiler xjc
zum Schema äquivalente
Klassen
XML Dokument Java ObjekteJAXB-APIJAXB-API
marshal
unmarshal
Java Architecture for XML Binding
IBS - XML 47
XML und Java
JAXB Beispiel Java-Klassen generieren
<?xml version="1.0" encoding="UTF-8"?><schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://ws1011.ibs.mni.fh-giessen.de/Query" xmlns:tns="http://ws1011.ibs.mni.fh-giessen.de/Query" elementFormDefault="qualified">
<element name="query"> <complexType> <sequence> <element name="operand" type="int" maxOccurs="2" minOccurs="2" /> </sequence> <attribute name="operation" type="tns:OP" use="required"></attribute> </complexType></element><simpleType name="OP"> <restriction base="NMTOKEN">
<enumeration value="ADD" /> <enumeration value="SUB" />
</restriction></simpleType></schema>
Datei Query.xsd erstellt z.B. mit Hilfe von Eclipse
> /irgend/wo/jdk1.6.0_23/bin/xjc Query.xsdparsing a schema...compiling a schema...de/fh_giessen/mni/ibs/ws1011/query/OP.javade/fh_giessen/mni/ibs/ws1011/query/ObjectFactory.javade/fh_giessen/mni/ibs/ws1011/query/Query.javade/fh_giessen/mni/ibs/ws1011/query/package-info.java
generierte Verzeichnisse und Dateien
IBS - XML 48
XML und Java
JAXB Beispiel generierte Klassen verwenden
Importiere Quellen in Eclipse-Projekt
IBS - XML 49
XML und Java
JAXB Beispiel generierte Klassen verwenden: Klasse die XML-Datei einliest und in äquivalente Java-Objekte umwandelt und auswertet
package queryProc;
import java.io.FileNotFoundException;import java.io.FileReader;import de.fh_giessen.mni.ibs.ws1011.query.*;import javax.xml.bind.JAXBContext;import javax.xml.bind.JAXBException;import javax.xml.bind.Unmarshaller;
public class XMLQueryProcessor {public static void main(String[] args)
throws FileNotFoundException, JAXBException {JAXBContext context;context = JAXBContext.newInstance(Query.class);Unmarshaller um = context.createUnmarshaller();
// XML Datei einlesen und internen Baum generierenQuery query = (Query) um.unmarshal(new FileReader("query2plus3.xml"));
// XML-Baum-Info auslesenInteger operand1 = query.getOperand().get(0);Integer operand2 = query.getOperand().get(1);OP op = query.getOperation();
// Info verwendenswitch (op) {case ADD : System.out.println(operand1+operand2); break;case SUB : System.out.println(operand1-operand2); break;}
}}
IBS - XML 50
XML und Java
JAXB Beispiel generierte Klassen verwenden
Klasse die XML-Datei einliest und in äquivalente Java-Objekte umwandelt und auswertet
<?xml version="1.0" encoding="UTF-8"?><tns:query operation="ADD"
xmlns:tns="http://ws1011.ibs.mni.fh-giessen.de/Query" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://ws1011.ibs.mni.fh-giessen.de/Query Query.xsd">
<tns:operand>2</tns:operand> <tns:operand>3</tns:operand></tns:query>
XMLQueryProcessor
5
IBS - XML 51
XML und Java
JAXB Beispiel generierte Klassen verwenden: XML einlesen und ausgeben
import java.io.FileNotFoundException;import java.io.FileReader;import de.fh_giessen.mni.ibs.ws1011.query.*;
import javax.xml.bind.JAXBContext;import javax.xml.bind.JAXBException;import javax.xml.bind.Marshaller;import javax.xml.bind.Unmarshaller;
public class XMLQueryReader {public static void main(String[] args)
throws FileNotFoundException, JAXBException {JAXBContext context;context = JAXBContext.newInstance(Query.class);Unmarshaller um = context.createUnmarshaller();
// XML Datei einlesen und internen Baum generierenQuery query = (Query) um.unmarshal(new FileReader("query2plus3.xml"));
// XML-Baum-Info auslesenInteger operand1 = query.getOperand().get(0);Integer operand2 = query.getOperand().get(1);OP op = query.getOperation();
// Info verwendenswitch (op) {case ADD : System.out.println(operand1+operand2); break;case SUB : System.out.println(operand1-operand2); break;}
//XML generieren:Marshaller m = context.createMarshaller();m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);m.marshal(query, java.lang.System.out);
}
}
IBS - XML 52
XML und JavaScript
XML DOMAuf XML-Daten können DOM-Operationen ähnlich denen auf HTM ausgeführt werden
Das Objekt DOMParser kann verwendet werden im Strings in XML-Dom-Bäume zu parsen
Navigation und Manipulation äquivalent zur Navigation und Manipulation von HTML-DOM
http://www.w3schools.com/dom/
http://www.w3.org/DOM/DOMTR
IBS - XML 53
XML und JavaScript
XML DOM Beispiel:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Display XML</title> <script type="text/javascript">
var xmlData = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +"<answer xmlns=\"http://ws1011.ibs.mni.fh-giessen.de/Answer\" " + "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" " + "xsi:schemaLocation=\"http://ws1011.ibs.mni.fh-giessen.de/Answer Answer.xsd \">" +"<query operation=\"ADD\">" +"<operand>2</operand>" +"<operand>3</operand>" +"</query>" +"<result result=\"5\"/>" +"</answer>";
</script></head><body> <h2>Display XML</h2> <script type="text/javascript">
var parser=new DOMParser(); xmlDoc=parser.parseFromString(xmlData,"text/xml");
document.write(xmlDoc.getElementsByTagName("operand")[0].textContent + " ");document.write(xmlDoc.getElementsByTagName("query")[0].attributes[0].textContent + " ");document.write(xmlDoc.getElementsByTagName("operand")[1].textContent+ " ");document.write("="+" ");document.write(xmlDoc.getElementsByTagName("result")[0].attributes[0].textContent);
</script></body></html>
IBS - XML 54
XML und JavaScript
XML und AjaxDaten können in XML-Form zum Server gesendet und vom Server empfangen werden
Beispiel (1)
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Lass den Server rechnen / Ajax XML-Request / Response</title> <script type="text/javascript">
var xhr = new XMLHttpRequest();function sendRequest(data) {
xhr.open( "POST", "http://127.0.0.1/cgi-bin/callCompute20XML",
true);xhr.onreadystatechange = handleResponse;xhr.send(data);
}function handleResponse() {
if (xhr.readyState == 4) {var result = xhr.responseXML;document.getElementById("A").innerHTML
= result.getElementsByTagName("result")[0].attributes[0].textContent; }
}
IBS - XML 55
XML und JavaScript
Beispiel (2)
function mkXMLQuery(op, z1, z2) {data = "<?xml version=\"1.0\" encoding=\"UTF-8 \"?>" +
"<tns:query operation=\"" + op + "\" "+"xmlns:tns=\"http://ws1011.ibs.mni.fh-giessen.de/Query\" " + "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" " + "xsi:schemaLocation=\"http://ws1011.ibs.mni.fh-giessen.de/Query Query.xsd\">" +"<tns:operand>" + z1 + "</tns:operand>" +"<tns:operand>" + z2 + "</tns:operand>" +"</tns:query>";
return data;}
</script> </head> <body> <h1>Lass den Server rechnen / XML-Version</h1> <p>Hier Ihre 1. Zahl: <input id="ZAHL1" size="10"></p> <p>Hier Ihre 2. Zahl: <input id="ZAHL2" size="10"></p> <p>Wählen Sie die Operation aus:<br/> <button id="PLUS"><b>+</b></button> <button id="MINUS"><b>-</b></button> </p> <div id="A"></div></body>
IBS - XML 56
XML und JavaScript
Beispiel (3)
<script type="text/javascript"> document.getElementById("PLUS").onclick = function() { sendRequest(mkXMLQuery("ADD", encodeURIComponent(document.getElementById("ZAHL1").value), encodeURIComponent(document.getElementById("ZAHL2").value))); } document.getElementById("MINUS").onclick = function() { sendRequest(mkXMLQuery("SUB", encodeURIComponent(document.getElementById("ZAHL1").value), encodeURIComponent(document.getElementById("ZAHL2").value))); }</script></html>
Auf der Serverseite müssen dann natürlich die XML-Daten verarbeitet und die Antwort in XML-Form (content-type: text/xml !) generiert werden.