56
CS1024 Internetbasierte Systeme Bachelor of Science (Informatik) Prof. Dr. Th. Letschert XML

CS1024 Internetbasierte Systeme - homepages.thm.dehg51/Veranstaltungen/IBS-SS11/Folien/ibs... · Text dargestellt werden und mit standardisierten XML-Werkzeugen der Compiler-Technik

Embed Size (px)

Citation preview

CS1024 Internetbasierte Systeme Bachelor of Science (Informatik)

Prof. Dr. Th. Letschert

XML

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