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

Preview:

Citation preview

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.

Recommended