XML-Schema Flashcards
Was ist XML-Schema und welche Anforderungen (8) sollte es erfüllen?
Mit der Verbreitung von XML wurden die Schwächen einer Validierung mit DTDs immer deutlicher. Aus diesem Grund wurde XML-Schema als neue Sprache für die Strukturdefinition, entwickelt.
XML-Schema soll:
* in XML ausgedrückt werden,
* ausdrucksstärker sein als eine DTD
* selbstdokumentierend sein
* internetfähig sein
* zu anderen XML-Spezifikationen kompatibel sein
* von Menschen lesbar sein
* von XML-Parsern verstanden werden können
* Namensräume berücksichtigen
Aus welchen drei Teilen besteht XML-Schema?
- Part 0: Primer
Enthält grundlegende Informationen und eine zusammenfassende Einführung - Part 1: Structures
Legt die grundlegenden Strukturen eines XML-Schama-Dokumentes fest und enthält alle wichtigen Elemente der Schema-Sprache - Part 2: Datatypes
Legt die Datentypen für Schema-Dokumente fest
Wie ist ein XML-Schema aufgebaut?
Ein XML Schema ist selbst ein XML-Dokument und wird immer in einer eigenen Datei gespeichert.
Das Wurzelelement eines XML-Schemas ist das Element schema
, dieses muss den Namensraum http://www.w3.org/2001/XMLSchema
besitzen, da darin bereits alle erlaubten Elemente und Attribute sowie alle vorderfinierten Dateitypen enthalten sind. Dem Namensraum wird ein Präfix gegeben, meist wird xs
oder xsd
verwendet.
Als Kindelemente von <xs:schema>
werden Definitionen und Deklarationen notiert.
Was sind Definitionen und Deklarationen in einem XML-Schema?
- Deklaration:
Deklarationen beschreiben die Elemente und Attribute, die in einer Dokumentinstanz auftreten dürfen.<xs:element name="name" type ="xs:string"/>
- Definition:
Definitionen definieren neue Typen, Modellgruppen oder Attributgruppen, die in Element- oder Attributdeklaration verwendet werden können.<xs:simpleType name="AnredeTyp">
<xs:restriction base="xs:string">
<xs:enumeration value="Frau"/>
<xs:enumeration value="Herr"/>
</xs:restriction>
</xs:simpleType>
Was sind globale und lokale Elemente im XML-Schema?
Im XML-Schema wird zwischen globalen und lokalen Elementen, Attributen und Datentypen unterschieden.
Elemente, Attribute, bzw. Datentypen, die als Kinder des <xs:schema>
-Elements deklariert werden, sind global und können überall im Schema referenziert werden. Alle Anderen sind lokale Deklarationen bzw. Definitionen.
Im Nachfolgenden Beispiel ist bspw. dozent
ein globales Element, name
und vorname
sind lokale Elemente<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="dozent">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="vorname" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Wie wird von einer XML-Instanz auf ein XML-Schema referenziert?
Im Wurzelelement der XML-Instanz wird für den Namensraum http://www.w3.org/2001/XMLSchema-instance
ein Kürzel festgelegt. Aus diesem Namensraum wird das Attribut oNamespaceSchemaLocation
verwendet um ein XML-Schema-Dokument zu referenzieren, das über keinen Zielnamensraum verfügt. <?xml version="1.0" encoding="UTF-8"?>
<dozent xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="dozent.xsd">
<name>Maier</name>
<vorname>Fritz</vorname>
</dozent>
Was ist ein einfaches Element in einem XML-Schema und wie wird es deklariert?
Ein einfaches Element ist ein XML-Elemen, das keine Kindelemente und keine Attribute besitzt.
Es gilt folgende Syntax:<xs:element name="Elementname" type="Datentyp"/>
Der Elementname wird als Wert des Attributes name
angegeben
Als Datentyp kann einer der 49 in XML-Schema vordefinierten Datentypen oder ein benutzerdefinierter einfacher Datentyp verwendet werden. Bei verwendung eines vordefinierten Datentyps muss das definierte Namensraum-Präfix vorangestellt werden.
Hier wird ein Element name vom Typ string deklariert:<xs:element name="name" type="xs:string"/>
Dies entspricht der DTD-Deklaration:<!ELEMENT name (#PCDATA)>
Hier wird ein Element geburtsdatum vom Typ date deklariert:<xs:element name="gebdatum" type="xs:date"/>
In einer XML-Instanz ist folgendes Element dazu valide:<gebdatum>1980-12-22</gebdatum>
Welches sind die 7 meist genutzten vordefinierten Datentypen in XML-Schema?
- xs:string für Zeichenketten,
- xs:boolean für die Wahrheitswerte true und false,
- xs:int für ganze Zahlen,
- xs:decimal für Dezimalzahlen,
- xs:double für Gleitkommazahlen,
- xs:date für Datumsangaben im Format JJJJ-MM-TT,
- xs:time für Zeitangaben.
Darf bei einem einfachen Element in XML-Schema der Datentyp fehlen?
Bei einem einfachen Element in XML-Schema darf der Datentyp fehlen. Dann ist das Element vom Typ anyType
. Es sind dann beliebige Kindelemente und/oder beliebige Zeichendaten und beliebige Attribute erlaubt, solange es sich um wohlgeformtes XML handelt.
Was sind komplexe Elementtypen in XML-Schema und wie werden sie deklariert?
Komplexe Elementtypen sind Elemente, die andere elemente und Attribute enthalten können. Deklariert werden sie, indem innerhalb des Elements <xs:element>
ein komplexer Typ mit <xs:comlexType>
notiert wird.<xs:complexType>
wird als Kindelement von <xs:element>
notiert. Innerhalb von <xs:complexType>
wird zuerst das Inhaltsmodell angegeben, danach folgen Deklarationen der Attribute und weitere Gültigkeitsregeln.
Welche vier Typen von komplexen Elementen gibt es in XML-Schema?
- Elemente die andere Elemente (Kindelemente) enthalten
- Elemente mit gemischtem Inhalt, diese können andere Elemente und Zeichendaten enthalten
- Elemente, die nur Zeichendaten enthalten
- leere Elemente
Was versteht man unter einem Anonymen Typ?
Komplexe Typen, die ohne Angabe eines Namens definert werden, werden als anonyme Typen bezeichnet. Sie sind nur lokal sichtbar, daher ist es nicht möglich, sie an anderen Stellen wiederzuverwenden.
Was versteht man unter einem benannten komplexen Typ?
Komplexe Typen, für die einen Namen definiert wurde, werden als benannte komplexe Typen bezeichnet. Sie sind global definiert und kann in Elementdeklarationen als Wert des Attributes type
angegeben werden.
Was sind Kompositoren bei komplexen Elementtypen, welche drei gibt es?
Ein Kompositor ist ein Container, in den eine Reihe von Elementen eingebettet werden kann. XML-Schema definiert drei verschiedene Kompositoren: <xs:sequence>
, <xs:choice>
und <xs:all>
.
* <xs:sequence>
: Kindelemente müssen genau in der angegebenen Reihenfolge vorkommen
* <xs:choice>
: mehrere Kindelemente stehen zur Auswahl, davon kann eins ausgewählt werden
* <xs:all>
: Kindelemente dürfen in beliebiger Reihenfolge und mehrmals vorkommen.
Was sind Kardinalitäten bei komplexen Elementtypen?
Mit Kardinalitäten kann angegeben werden, wie oft ein Element bzw. Modellgruppeen vorkommen darf/muss. Wird nichts angegeben, muss es 1 mal vorkommen.
Mit minOccurs
wird die minimale und mit maxOccurs
die maximale Anzahl festgelegt. Der Default-Wert ist in beiden Fällen 1. Soll die Anzahl der Vorkommen nach oben unbeschränkt sein, wird maxOccurs="unbounded"
gesetzt.
<xs:element name="dozent">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="vorname" type="xs:string" minOccurs="1" maxOccurs="3"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Was sind Elemente mit gemischtem Inhalt bei komplexen Elementtypen,wie werden sie gekennzeichnet?
Elemente mit gemischtem Inhalt können Kindelemente und auch Zeichendaten enthalten. Zur Kennzeichenung, dass gemischter Inhalt eraubt ist, wird beim Element <xs:complexType>
das Attribut mixed="true"
gesetzt.
<xs:element name="beschreibung">
<xs:complexType mixed="true">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="em" type="xs:string"/>
</xs:choice>
</xs:complexType>
</xs:element>
Die folgende XML-Instanz ist dazu valide:
<beschreibung xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="b9_beschr.xsd">
Dies ist <em>besonders wichtig</em>.
</beschreibung>
Was ist der Unterschied bei der deklaration von Elementen mit gemischtem Inhalt in XML-Schema und in einer DTD?
Beim gemischten Inhaltsmodell von XML-Schema kann jeder der Kompositoren <xs:sequence>
, <xs:choice>
oder <xs:all>
verwendet werden, zudem sind genaue Kardinalitätsangaben für die Elemente durch minOccurs
und maxOccurs
möglich. Mit einem XML-Schema können also wesentlich restriktivere Festlegungen bezüglich der Reihenfolge und der Anzahl der Kindelemente getroffen werden, als dies mit einer DTD möglich ist.
Wie werden Elemente mit Zeichendaten und Attriubuten in XML-Schema deklariert?
Ein Element, wie z. B. <preis waehrung="Euro">57.23</preis>
, muss, da es ein Attribut besitzt, als Element komplexen Typs deklariert werden. Da es jedoch keine Kindelemente, sondern einfachen Textinhalt beinhalten soll, muss innerhalb von <xs:complexType>
das Element <xs:simpleContent>
angegeben werden. Als Kindelement von <xs:simpleContent>
wird <xs:extension>
notiert. Als Wert des Attributes base
wird der Datentyp des Inhaltes angegeben. Als Datentyp erlaubt sind einfache Datentypen und komplexe Typen mit einfachen Zeichendaten (simple content). Die erlaubten Attribute und ggf. Assertions werden als Kindelemente von <xs:extension>
deklariert.
Die Deklaration für ein Element der Art <preis waehrung="euro">57.23</preis>
hat folgende Form:
<xs:element name="preis">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:decimal">
<xs:attribute name="waehrung" type="xs:string"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
Wie werden leere Elemente in XML-Schema deklariert?
Auch ein leeres Element muss als ein Element komplexen Typs deklariert werden. Daher ist bei der Deklaration die Angabe von <xs:complexType>
erforderlich. Da das Element jedoch leer ist, werden innerhalb von <xs:complexType>
keine Elemente deklariert.
<xs:element name="br">
<xs:complexType/>
</xs:element>
Wie werden Attribute innerhalb von komplexen Typen deklariert?
Attribte werden innerhalb eines komplexen Typs nach dem Inhaltsmodell deklariert. Verwendet wird hierzu das Element <xs:attribute>
mit den Attributen name
und type
. Es kann festgelegt werden, ob ein Attribut optional oder verplichtend ist. Weiterhin kann ein Default-Wert oder ein fester Wert angegeben werden. Attribute können ach global deklariert und innerhalb eines komplexen Typs referenziert werden.<xs:attribute name="Attributname" type="Attributtyp"/>
Was kann in komplexen Typen als Attributtyp verwendet werden?
Als Attributtyp kann einer der im XML-Schema vordefinierten Typen oder ein benutzerdefinierter einfacher Datentyp verwendet werden.
Wird einer der vordefinierten Datentypen verwendet, muss diesem das definierte Namsensraum-Präfix vorangestellt werden. Fehlt die Typangabe, ist das Attribut vom Typ anySimpleType
.
Was bewirkt das Attribut use
bei der deklaration von Attributen in komplexen Typen?
Mit Hilfe des Attributes use
können weitere Angaben über das Vorkommen des Attributs gemacht werden:
* use="required"
: Attribut ist ein Pflichtattribut
* use="optional"
: Attribut ist optional (default)
* use="prohibited"
: Verwendung des Attributs in abgeleiteten Typen ist verboten
Was bewirken die Attribute default
und fixed
bei der deklaration von Attributen in komplexen Typen?
-
default
: Default-Wert für das Attribut wird eingesetzt, wenn in der Dokumentinstanz kein anderer Wert notiert wird. -
fixed
: Ein fester, unveränderlicher Wert wird eingesetzt.
Wie kann ein globales Attribut in XML-Schema deklariert werden, was ist zu beachten??
Eine Attributdeklaration kann auch global, also als direktes Kindelement von <xs:schema>
notiert werden. Die Attributdeklaration innerhalb von <xs:complexType>
erfolgt dann durch eine Referenz auf ein bereits global deklariertes Attribut. Die Syntax lautet:<xs:attribute ref="Attributname"/>
Das Attribut use
darf bei einer globalen Deklaration nicht verwendet werden und muss bei der lokalen Definition oder der Referenzierung angegeben werden.
Was wird mit Assertions
bei komplexen Typen bezweckt und wo liegt der Vorteil??
Mit Assertions können Beschränkungen, welche die Existenz oder die Werte mehrere Elemente und/oder Attribute einbeziehen, formuliert werden.
Der Vorteil ist, dass damit Regeln bereits im Schema formuliert werden können und diese nicht erst nach dem Parsen geprüft oder implementiert werden müssen.
Wie werden Assertions
in komplexen Typen deklariert, welche Regeln werden unterstützt?
Zur Formulierung einer Assertion dient das Element <xs:assert>
. Es wird nach der Attributdeklaration eingefügt. Die eigentliche Regel wird als Wert des Attributes test
in Form eines XPath-Ausdrucks angegeben.
Unterstützt wird ein Grossteil der XPath Version 2.0.
Syntax: <xs:assert test="XPath-Ausdruck"/>
Der XPath-Ausdruck wird während der Validierung zu true
oder false
ausgewertet.
Wo liegen die Beschränkungen von Assertions
?
Im XPath-Ausdruck ist nur ein Zugriff auf die Attribute, den Inahlt und die Nachfahrenelemente möglich. Ist ein Zugriff auf Vorfahren oder Geschwiterelemente notwendig, muss die Assertion
in einem Vorfahrenelement notiert werden.
Wie werden vordefinierte einfache Datentypen verwendet, wie viele gibt es?
Vordefinierte einfache Datentypen können als Datentyp für einfache Elemente und Attribute verwendet werden oder als Basis für benutzerdefinierte einfache Datentypen.
Es gibt 49 vordefinierte einfache Datentypen, darunter Datentypen, wie sie bei den meisten Programmiersprachen zu finden sind, wie auch Datentypen spezifisch für XML-Dokumente.
Was sind vordefinierte einfache Datentypen?
Vordefinierte einfache Datentypen werden als Tripel aus einem Werteraum, einem lexikalischen Raum und einer Menge von Eigenschaften (Facetten), betrachtet.
* Werteraum: eine Menge von Werten zu einem gegebenen Datentyp. Jeder Wert im Werteraum wird durch ein oder mehrere Literale im lexikalischen Bereich dargestellt. (z.B. float
)
* lexikalischer Raum: ist eine Menge von zulässigen Literalen für einen Datentyp. (z.B. 100
)