XML 3

Inhaltsangabe:

  1. Validierungssprachen
  2. XML Schema Einführung
  3. XML Schema- Komplexe Elemente
  4. XML Schema-Attribute

XML und DTD des Geschäftsbriefes finden Sie hier.

Validierungssprachen

  • XML Instanzen können mit und ohne zugehörigen Regelwerken existieren.
  • Meist ist es sehr sinnvoll, die zugrundeliegende Baumstruktur systematisch festzuhalten.
  • Vorteil: bessere Qualität der Daten und die Option, eine beliebige Anzahl von Instanzen inhaltlich konsistent zu erstellen.

Regelwerke werden mittels Validierungsprachen verfasst:

Ein XML-Schema:

  • ist ein komplexes System zur Strukturdefinition.
  • verbessert die Validierungsmöglichkeiten.
  • erlaubt eine exakte Festlegung der Kardinalitäten.
  • ermöglicht auch die Kontrolle der Information. (Die Metainformation PLZ kann sinnvoll mit der Information „Flughafen Port Elizabeth“ verknüpft, obwohl eine deutsche Postleitzahl gemeint war. XML-Schema stellt die Option zur Verfügung, die Information auf eine fünfstellige Zahl festzulegen.)
  • verwendet Datentypen. (Der Dokumententyp der Instanz ist für die Struktur des Dokumentes, der Datentyp des Elementes / Attributes für den Dokumenteninhalt verantwortlich.)
  • berücksichtigt Namensräume.
  • ist selbst XML.
  • ist leicht in größere Softwarekontexte zu integrieren.

Hat aber auch Nachteile in Form von:

  • Unübersichtlichkeit,
  • schwierigerer Handhabung und
  • aufwendiger Realisation


Zum Seitenanfang


XML Schema Einführung

XML Beispiel:

<?xml version="1.0" encoding="UTF-8"?>
<kunstsammlung xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="kunstsammlung.xsd">
    
    <name>Neue schöne Bilder</name>
    
     <kunstwerk>
         <info>
             <titel>Mona Lisa vor dem Eiffelturm</titel>
             <jahr>2012</jahr>
             <kuenstler>Leonarda da Vinci</kuenstler>
         </info>
     </kunstwerk>
    
</kunstsammlung>

Headerinformation

Da ein XML-Schema-Dokument selbst XML-basiert ist, beginnt das Dokument immer mit der PI:

<?xml version=“1.0“ encoding =“utf-8“?>

gefolgt von dem root-Element <xs:schema>, das die Namensraumdeklaration als Attribute enthält.

<xs:schema xmlns:xs=http://www.w3.org/2001/XMLSchema>

Danach wird die eigentliche Struktur möglichst detailliert und strikt mit einfachen und komplexen Elementen beschrieben. Einfache Elemente können im Gegensatz zu den komplexen Elementen keine weiteren Elemente und keine Attribute beinhalten.

Einfache Elemente

Einfache Elemente = simple types werden eingesetzt, um Elemente zu definieren, die nur reinen Text (PCData) und weder Kind-Elemente noch Attribute beinhalten.

Allgemeine Definition:

<xs:element name="xyz" type="abc"/>

Die Wertzuweisung des Attributs name legt die Bezeichnung des Elementes und type den Datentyp fest.

<xs:element name="nachname" type="xs:string"/>

Datentypen

In XML-Schema vordefinierte, häufig vorkommende Datentypen sind:

  1. string = Normale Zeichenketten (Text)
  2. integer = Ganze Zahlen (ohne Komma)
  3. decimal =Dezimalzahlen (mit Komma)
  4. boolean = Wahrheitswert: 0 oder 1 oder true oder false
  5. date = Datumsformat Jahr-Monat-Tag
  6. time = Zeitformat

Mittels der Wertzuweisung des Attributs default bzw. fixed kann ein veränderbarer Vorgabewert oder ein unveränderbarer Wert für die Instanz festgelegt werden:

<xs:element name="sex" type="string" default=“female“/>
<xs:element name="color" type="string" fixed=“black“/>

Restriktionen

XML-Schema ermöglicht es, innerhalb eines Datentyps eine Auswahl an möglichen Werten festzulegen, z.B. einen Wertebereich von 0 bis 125:

<xs:element name="alter">
    <xs:simpleType>
        <xs:restriction base="xs:integer">
            <xs:minInclusive value="0"/>
            <xs:maxInclusive value="125"/>
        </xs:restriction>
    </xs:simpleType>
</xs:element>

Analog kann dies auch mit Text über eine Auswahlliste erfolgen:

<xs:element name="Bundeslaender">
    <xs:simpleType>
        <xs:restriction base="xs:string">
            <xs:enumeration value="NRW"/>
            <xs:enumeration value="Rheinland Pfalz"/>
            <xs:enumeration value="Saarland"/>
        </xs:restriction>
    </xs:simpleType>
</xs:element>

Die Auswahl kann ebenso auf Zeichenebene erfolgen:

<xs:element name="letter">
    <xs:simpleType>
        <xs:restriction base="xs:string">
            <xs:pattern value="[a-z]"/>
        </xs:restriction>
    </xs:simpleType>
</xs:element>

oder:

<xs:element name="plz">
    <xs:simpleType>
        <xs:restriction base="xs:integer">
            <xs:pattern value="[0-9][0-9][0-9][0-9][0-9]"/>
        </xs:restriction>
    </xs:simpleType>
</xs:element>

oder

<xs:element name="Existenz">
    <xs:simpleType>
        <xs:restriction base="xs:string">
            <xs:pattern value="Sein|nichtSein"/>
        </xs:restriction>
    </xs:simpleType>
</xs:element>

Übersicht

Restriktions- Basis Begriffsbestimmung
enumeration Auflistung möglicher Werte.
fractionDigits Angabe der maximalen Ziffernanzahl der Nachkommastellen bei numerischen Werten.
length Feste Längenvorgabe für die Anzahl der Zeichen.
maxExclusive Angabe zur oberen Grenze eines Intervalls, wobei der Grenzwert nicht enthalten ist.
maxInclusive Angabe zur oberen Grenze eines Intervalls, wobei der Grenzwert Teil des Intervalls ist.
maxLength Angabe der maximalen Länge der Anzahl der Zeichen.
minExclusive Angabe zur untern Grenze eines Intervalls, wobei der Grenzwert nicht enthalten ist.
minInclusive Angabe zur untern Grenze eines Intervalls, wobei der Grenzwert Teil des Intervalls ist.
minLength Angabe der minimalen Länge der Anzahl der Zeichen.
pattern Festlegung von gültigen Zeichenfolgen.
totalDigits Angabe der maximalen Ziffernanzahl bei numerischen Werten.
whiteSpace Definiert die Umsetzung von nicht sichtbaren Zeichen wie Zeilenumbruch, Tabulator, Leerzeichen usw.


Zum Seitenanfang


XML Schema- Komplexe Elemente

Im Gegensatz zu den einfachen Elementen (simple types) können komplexe Elemente (complex types) sowohl Kind-Elemente wie Attribute enthalten. Grundsätzlich werden vier Arten unterschieden:

  1. Leere Elemente.
  2. Elemente, die weitere Kind-Elemente enthalten.
  3. Elemente, die Text enthalten.
  4. Elemente, die Text und Kind-Elemente enthalten

Mittels eines Indicator-Elements wird festgelegt, in welcher Reihenfolge die Kind-Elemente vorkommen dürfen bzw. müssen:

  1. <sequence> (Abfolge)
    Der Inhalt des Elements besteht aus einer beliebigen Anzahl von Elementen, die in der vorgegebenen Reihenfolge verwendet werden müssen.
  2. <choice> (Auswahl)
    Der Inhalt des Elements besteht aus einem der aufgeführten Elemente.
  3. <all>
    Alle Elemente können maximal einmal in beliebiger Reihenfolge auftreten.

Leere Elemente

Leere Elemente sind Elemente, die nur aus einem Start-Tag bestehen und keine Information umschließen. Diese Tags enthalten häufig Attribute, die spezifische Informationen beinhalten.

Instanz

<bild id="86396174"/>

Nach der Festlegung des Namens für das Element erfolgt die Deklaration des Typs als und anschließend die Bestimmung des Attributs mit Name und Datentyp.

XML-Schema

<xs:element name="bild">
    <xs:complexType>
        <xs:attribute name="id" type="xs:integer"/>
    </xs:complexType>
</xs:element>

Definition von Kind-Elementen

Das Element <person> hat im folgenden Beispiel eine Sequenz <sequence> von Kind-Elementen, bestehend aus <vorname>, <nachname>, <gebdatum> und <alter>. Diesen Kind-Elementen ist ein Datentyp zugewiesen, der bestimmt, welche Art von Zeichen in der Instanz eingesetzt werden kann.

Instanz

<person>
    <vorname>Lieschen</vorname>
    <nachname>Müller</nachname>
    <gebdatum>2001-10-28</gebdatum>
    <alter>57</alter>
</person>

XML-Schema

<xs:element name="person">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="vorname" type="xs:string"/>
            <xs:element name="nachname" type="xs:string"/>
            <xs:element name="gebdatum" type="xs:date"/>
            <xs:element name="alter" type="xs:integer"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

Soll eine Auswahl getroffen werden, muss das Element <choice> verwendet werden.

XML-Schema

<xs:element name="bild">
    <xs:complextype>
        <xs:choice>
            <xs:element name="foto" type="xs:string">
            <xs:element name="gemaelde" type="xs:string">
            <xs:element name="zeichnung" type="xs:string">
        </xs:choice>
    </xs:complextype>
</xs:element>

Bei dieser Notation muss ausgewählt werden, ob es ein Kind-Element <foto>, <gemaelde> oder <zeichnung> geben soll.

Instanz

<bild>
   <foto>Lieschen</foto>
</bild>
oder

<bild>
    <gemaelde>Lieschen</gemaelde>
</bild>
oder

<bild>
    <zeichnung>Lieschen</zeichnung>
</bild>

Eine weitere Möglichkeit stellt das Element <all> dar, das vorgibt, dass die Kind-Elemente alle genau einmal vorkommen müssen, allerdings in beliebiger Reihenfolge.

XML-Schema

<xs:element name="person">
    <xs:complexType>
        <xs:all>
            <xs:element name="vorname" type="xs:string"/>
            <xs:element name="nachname" type="xs:string"/>
            <xs:element name="gebdatum" type="xs:date"/>
            <xs:element name="alter" type="xs:integer"/>
        </xs:all>
    </xs:complexType>
</xs:element>

Instanz

<person>
    <gebdatum>2001-10-28</gebdatum>
    <vorname>Lieschen</vorname>
    <nachname>Müller</nachname>
    <alter>57</alter>
</person>

oder

<person>
        <nachname>Müller</nachname>
	<vorname>Lieschen</vorname>
	<gebdatum>2001-10-28</gebdatum>
	<alter>57</alter>
</person>

oder

<person>
	<vorname>Lieschen</vorname>
	<nachname>Müller</nachname>
	<gebdatum>2001-10-28</gebdatum>
	<alter>57</alter>
</person>

Verschachtelte Inhaltsmodelle

Es besteht auch die Möglichkeit, dass die Inhaltsmodelle ineinander verschachtelt werden. Es wird beispielsweise eine Sequenz definiert, die eine Auswahl beinhaltet.

XML-Schema

<xs:element name="Adresse">
    <xs:complexType>
        <xs:sequence>
            <xs:choice>
                <xs:element name="Postfach" type="xs:string"/>
                <xs:sequence>
                    <xs:element name="Strasse" type="xs:string"/>
                    <xs:element name="Hausnummer" type="xs:string"/>
                </xs:sequence>
            </xs:choice>
            <xs:element name="PLZ" type="xs:integer"/>
            <xs:element name="Ort" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

Das obige Beispiel bildet eine Postadresse ab, bei der entweder ein Postfach oder eine Kombination aus Straße und Hausnummer, gefolgt von der Angabe der Postleitzahl und des Ortes verwendet wird.

Instanz

<Adresse>
	<Strasse>Albertus Magnus Platz</Strasse>
	<Hausnummer>1a</Hausnummer>
	<PLZ>50931</PLZ>
	<Ort>Köln</Ort>
</Adresse>

oder

<Adresse>
	<Postfach>135A675</Postfach>
	<PLZ>50931</PLZ>
	<Ort>Köln</Ort>
</Adresse>

Häufigkeitsbegrenzungen

Mittels der Attribute minOccurs und maxOccurs und in der Element-Deklaration kann die Häufigkeit der Vorkommen der Kind-Elemente genau bestimmt werden:

<xs:element name="bilder">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="foto" type="xs:string"
                maxOccurs="100" minOccurs="0"/>
            <xs:element name="gemaelde" type="xs:string"
                maxOccurs="unbounded" minOccurs="10"/>
            <xs:element name="zeichnung" type="xs:string"
                maxOccurs="50"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

Elemente, die nur Text enthalten

Elemente, mit einfachem Inhalt (simpleContent) enthalten nur Text (PCData) und Attribute. Im nachfolgenden Beispiel wird zu einem beliebigen Text (statement) im Attribut language die verwendete Sprache festgehalten.

XML-Schema

<xs:element name="statement">
    <xs:complexType>
        <xs:simpleContent>
            <xs:extension base="xs:string">
                <xs:attribute name="language" type="xs:string" />
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
</xs:element>

Instanz

<statement language="deutsch"> ... Die Deutsch-Französische Gesellschaft Halle 
existiert seit Februar 1990 und ist seit ...</statement>

Elemente mit Text und Kind-Elementen

Nicht selten kommt es vor, dass ein Element sowohl Text wie auch weitere Kind-Elemente beinhalten soll. Eine solche Konstruktion ist einfach über die Wertzuweisung true zu dem Attribut mixed des Elementes <complexType> modellierbar.

XML-Schema

<xs:element name="article">
    <xs:complexType mixed="true">
        <xs:all>
            <xs:element name="id" type="xs:integer"/>
            <xs:element name="title" type="xs:string"/>
            <xs:element name="date" type="xs:date"/>
        </xs:all>
    </xs:complexType>
</xs:element>

Instanz

<article>
	<id>72108691</id>
	Tageseintrag:
	<date>1968-01-27</date>
	Die Frankfurter
	<title>Brecht-Tage</title>
	anlässlich des 70. Geburtstags Bertolt Brechts (1956)
	werden eröffnet. Sie enden am 11. Februar.
</article>

Zum Seitenanfang


XML Schema-Attribute

Attribute werden im XML-Schema immer mit folgender Syntax definiert:

<xs:attribute name="xyz" type="abc"/>

Die Namen sind im Rahmen der XML-Regeln frei wählbar und die verwendbaren Datentypen sind:

  • string,
  • integer,
  • decimal,
  • boolean,
  • date und
  • time.

Ausdrücklichere Definitionen der gültigen Werte erfolgen entsprechend der Restriktionen für Datentypen bei Elementen (siehe Kap. 4.3.2.4 „Restriktionen für Datentypen“).
Mit einem Attribut kann beispielsweise die verwendete Sprache eines Statements ausgewiesen werden.

XML-Schema

<xs:element name="statement">
    <xs:complexType>
        <xs:simpleContent>
            <xs:extension base="xs:string">
                <xs:attribute name="language" type="xs:string" />
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
</xs:element>

Instanz

<statement language="D"> ... Die Deutsch-Französische Gesellschaft Halle existiert
 seit Februar 1990 und ist seit ...


Zum Seitenanfang