Strukturdefinition

Wir haben gesehen, wie wir Daten in beliebig genannte Container mit beliebigen Attributen in fast beliebiger Weise schachteln können. Diese Beliebigkeit macht aber die computergestützte Verarbeitung fast unmöglich. Deshalb wird man in der Praxis feste Regeln vorschreiben:
Die Menge der Namen für die Container wird man sicher festlegen wollen, sowie welche Attribute sie besitzen dürfen, und schliesslich welche Inhalte in Ihnen vorkommen dürfen.

Für diese Festschreibung gibt es viele Möglichkeiten, besondere Bedeutung haben die beiden Spezifikationsformate "Documenttyp Definition (DTD)" und "XML Schema". Im folgenden beschäftige ich mich nur mit XML Schema, weil es die interessante Eigenschaft hat, selbst wieder in XML geschrieben zu sein.

XML Schema

Wenn man zu einer XML Datei angibt, das die Daten nach einen bestimmten Menge von Regeln geschrieben ist, so eröffnet das dem Computer die Möglichkeit einer tiefgehende Fehleranalyse, z.B. ob es keine Schreibfehler bei den Attributnamen gibt. Man gibt hierfür im alles umschliessenden Container ein besonderes Attribut Namens "SchemaLocation" an. Diese Attribut zeigt auf eine Datei oder eine URL zeigt, die die Definition selbst beinhaltet

Organisationen
SchemaLocation "myschemafilename.xsd"
Organsation1
Organsation2
Organsation3
...

Für viele Anwendungsfälle gibt es schon fertige Schemadateien, die man mit Ihrer URL angeben kann.

Der Inhalt einer Schemadatei

Schema ist selbst in XML geschrieben. also haben wir es mit zwei XML Dateien zu tun, was leicht zur Verwirrung führen kann. Die XML Schema Datei enthält wie jede andere XML Datei Container. Diese Container beschreiben jedoch nicht Daten, sondern andere Container. Der folgende Container beschreibt, dass es Container (element) mit Namen "Postleitzahl" geben darf, die als Inhalt ausschliesslich eine Zahl haben dürfen.

xsd:element
name Postleitzahl
type xsd:integer

Will man Container beschreiben, die nicht einfach einen Inhalt vordefinierten Typ haben, so kann man eigene Typen definieren. Der folgende Container beschreibt einen Typ von Containern, der eine Anzahl von anderen Containern in fester Reihenfolge (Sequence) beinhaltet. Der letzte Container dar weggelassen werden (minOccurs=0) oder beliebig oft hintereinander erscheinen (maxOccurs=*).

.

xsd:complexType
name AdresseType
xsd:sequence
xsd:element
name Strasse
type xsd:string
xsd:element
name Postleitzahl
type xsd:integer
xsd:element
name Stadt
type xsd:string
xsd:element
name Telefonnr
type xsd:string
minOccurs 0
minOccurs *

Ein solcher selbstdefinierter Type kann jetzt einfach in Elementdefinitionen eingesetzt werden:

xsd:element
name Adresse
type AdresseType

home - contact - Developer-Zone