Upload
ivonne-kempen
View
146
Download
0
Embed Size (px)
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.