XML Schema Was versteht man unter XML Schema?. Was ist ein XML Schema? Definiert Inhalt und Struktur...

Post on 05-Apr-2015

135 views 0 download

Transcript of XML Schema Was versteht man unter XML Schema?. Was ist ein XML Schema? Definiert Inhalt und Struktur...

XML Schema

Was versteht man unter XML Schema?

Was ist ein XML Schema?

● Definiert Inhalt und Struktur

● Beschreibt Elemente und Attribute die in XML Dokument enthalten sein dürfen

● Bestimmt Art und Weise der Ordnung dieser Elemente

Was ist XML Schema?

Oder: weitere Möglichkeit, gültige XML Dokumente zu erstellen.

Andere Möglichkeit:DTD

Unterschied Schema / DTD

XML Schema bietet 2 wesentliche Vorteile:

● Verbesserte Möglichkeit der genauen, eindeutigen Bestimmung von Inhalt und Struktur.

● In XML Syntax verfasst

Syntax von XML Schema

<?xml version="1.0"?>

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="Buch"> <xsd:complexType> <xsd:sequence> <xsd:element name="TITEL" type="xsd:string"/> <xsd:element name="AUTOR" type="xsd:string"/> <xsd:element name="EINBAND" type="xsd:string"/> <xsd:element name="PREIS" type="xsd:decimal"/> </xsd:sequence> <xsd:attribute name="Vorhanden"type="xsd:boolean"

use="required"/>

</xsd:complexType> </xsd:element></xsd:schema>

XML Schema- Syntax

● Beginnt immer mit XML Deklaration

● Als Dokumentelement immer <xs:schema...

● Danach Dokumentelement des XML Instanzdokuments.

Syntax von XML Schema

<?xml version="1.0"?>

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="Buch"> <xsd:complexType> <xsd:sequence> <xsd:element name="TITEL" type="xsd:string"/> <xsd:element name="AUTOR" type="xsd:string"/> <xsd:element name="EINBAND" type="xsd:string"/> <xsd:element name="PREIS" type="xsd:decimal"/> </xsd:sequence> <xsd:attribute name="Vorhanden"type="xsd:boolean"

use="required"/>

</xsd:complexType> </xsd:element></xsd:schema>

Syntax: Elemente einfachen Typs

<xs:element name=“ELEMENT1“type=“string“/>

<!ELEMENT ELEMENT1 (#PCDATA)>

Syntax: Elemente einfachen Typs

<xs:element name=“ELEMENT1“type=“anyURI“/>

<!ELEMENT ELEMENT1 (#PCDATA)>

Vordefinierte einfache Datentypen

http://www.w3.org/TR/xmlschema-2/#built-in-datatypes

Syntax: Elemente einfachen Typs

<xs:element name=“AKTUELL“ type=“dateTime“minOccurs=“0“/>

<xs:element name=“AKTUELL“ type=“positiveInteger“

minOccurs=“7“ maxOccurs=“11“/>

<xs:element name=“BOOKMARK“ type=“anyURI“ minOccurs=“0“ maxOccurs=“unbounded“/>

Einfache Typen selbst definieren

<xs:element name=“SPEED“type=“xsd:decimal“/>

Problem:

● SPEED kann auch negative Werte annehmen● Soll maximal 210 annehmen dürfen

Einfache Typen selbst definieren

<xs:element name=“SPEED“type=“xsd:decimal“> <xs:simpleType> <xs:restriction base=“xs:decimal“> <xs:minInclusive value=“0“/> <xs:maxInclusive value=“210“/> </xs:restriction> </xs:simpleType></xs:element>

Datentypen Beschränken

<xs:element name=“FORMAT“> <xs:restriction base=“xs:string“> <xs:enumeration value=“JPEG“/> <xs:enumeration value=“GIF“/> <xs:enumeration value=“GIF“/> </xs:restriction></xs:element>

Datentypen beschränken

<xs:element name=“ISBN“> <xs:restriction base=“xs:string“>

<xs:pattern value=“\d{1}-\d{5}-\d{3}-\d{1}“/> </xs:restriction></xs:element>

gültiges Element:

<ISBN>3-89721-501-2</ISBN>

Komplexe Datentypen

<xsd:element name="Buch"> <xsd:complexType> <xsd:sequence> <xsd:element name="TITEL" type="xsd:string"/> <xsd:element name="AUTOR" type="xsd:string"/> <xsd:element name="EINBAND" type="xsd:string"/> <xsd:element name="PREIS" type="xsd:decimal"/> </xsd:sequence> </xsd:complexType></xsd:element>

Elemente, die neben Zeichendaten auch untergeodnete Elemente oder Attribute enthalten dürfen, bezeichnet man als komplexe Typen.

Komplexe Datentypen

<xsd:element name="Buch"> <xsd:complexType> <xsd:sequence> <xsd:element name="TITEL" type="xsd:string"/> <xsd:element name="AUTOR" type="xsd:string"/> <xsd:element name="EINBAND" type="xsd:string"/> <xsd:element name="PREIS" type="xsd:decimal"/> </xsd:sequence> </xsd:complexType></xsd:element>

Das „sequence“ Tag weist an, dass die eingeschlossenen Elemente in der vorgegebenen Reihenfolge auftauchen müssen!

Komplexe Datentypen

<xs:choice><xs:element name=“FENSTER“ type=“xs:string“/><xs:element name=“LAMPE“ type=“xs:string“/></xs:choice>

Das übergeordnete Element kann, muss aber keines der im „choice“- Block eingeschlossenen Elemente enthalten. Im Falle dass beide verwendet werden, muss die Reihenfolge eingehalten werden.

Komplexe Datentypen

<xs:all><xs:element name=“FENSTER“ type=“xs:string“/><xs:element name=“LAMPE“ type=“xs:string“/></xs:all>

Bei „all“ ist die Reihenfolge der Elemente völlig beliebig. Es muss aber mindestens ein Element auftauchen, es sei denn ich setze den Wert „minOccurs=0“.

Weitere Unterscheidungen:

Bei den komplexen Typen unterscheidet man zusätzlich zwischen:

● Anonymen komplexen Typen● Benannten komplexen Typen

Benannte Komplexe Datentypen

<xsd:element name="Buch"> <xsd:complexType> <xsd:sequence> <xsd:element name="TITEL" type="xsd:string"/> <xsd:element name="AUTOR" type="xsd:string"/> <xsd:element name="EINBAND" type="xsd:string"/> <xsd:element name="PREIS" type="xsd:decimal"/> </xsd:sequence> </xsd:complexType></xsd:element>

Annahme: Ich will das Inhaltsmodell des Elements „Buch“ auch für ein Element „Zeitschrift“ verwenden. Hierfür bediene ich mich benannter komplexer Typen.

Benannte Komplexe Datentypen

<?xml version=“1.0“?> <xs:schema xmlns:xs=“http//www.w3.org(....) <xsd:complexType name=“KATALOGDATEN“> <xsd:sequence> <xsd:element name="TITEL" type="xsd:string"/> <xsd:element name="AUTOR" type="xsd:string"/> <xsd:element name="EINBAND" type="xsd:string"/> <xsd:element name="PREIS" type="xsd:decimal"/> </xsd:sequence> </xsd:complexType> <xs:element name=“ZEITSCHRIFT“ type=“KATALOGDATEN“/>

Attribute deklarieren

<?xml version="1.0"?>

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="Buch"> <xsd:complexType> <xsd:sequence> <xsd:element name="TITEL" type="xsd:string"/> <xsd:element name="AUTOR" type="xsd:string"/> <xsd:element name="EINBAND" type="xsd:string"/> <xsd:element name="PREIS" type="xsd:decimal"/> </xsd:sequence> <xsd:attribute name="Vorhanden" type="xsd:boolean"

use="required"/>

</xsd:complexType> </xsd:element></xsd:schema>

Attribute deklarieren

<xsd:attribute name="Vorhanden" type="xsd:boolean"

use="required"/>

● Werden immer mit einfachen Datentypen deklariert● Es gibt die gleichen vordefinierten Datentypen wie bei Elementen

● Selbst definierte eigene Datentypen natürlich auch möglich (z.B. durch „restriction“)

● Statt „use=required“ auch „optional“ od. „prohibited“ möglich

● Optinal ist der Standardwert● Per „default=“IRGENDWAS““ kann man einem Attribut eine Voreinstellung zuweisen.