next up previous contents
Nächste Seite: 2.5 Definition komplexer Datentypen Aufwärts: 2 XML Schema Vorherige Seite: 2.3 Grundlagen   Inhalt


2.4 Definition einfacher Datentypen und Elemente

Wie es in gängigen Programmiersprachen der Fall ist, lassen sich neue Datentypen definieren. Dazu dienen die bereits existierenden Datentypen als Grundlage. Hierfür gibt es drei grundsätzliche Möglichkeiten, die zum Einsatz kommen können: Allen diesen Typ-Definitionen können auch bereits selbst erzeugte Datentypen zugrunde liegen, woraus sich beliebige Kombinationsmöglichkeiten ergeben. Eine Ausnahme bildet hierbei die Liste, da keine Liste von Listen erzeugt werden kann. Die einzelnen Definitionsmöglichkeiten sind durch die unterschiedlichen Umsetzungsarten sehr flexibel. So lässt sich bespielsweise eine Einschränkung durch realisieren. Einige dieser Umsetzungsarten sollen in den folgenden Beispielen demonstriert werden.

Beispiel 2.4.1:
Verschiedene Arten von Einschränkungen:
  1. Ein einfacher Datentyp grafikformat, der durch Einschränkungen von xs:string nur noch bestimmte Werte (gif, jpg oder eps) annehmen darf:
    <xs:simpleType name="grafikformat">
      <xs:restriction base="xs:string">
        <xs:enumeration value="gif"/>
        <xs:enumeration value="jpg"/>
        <xs:enumeration value="eps"/>
      </xs:restriction>
    </xs:simpleType>
    
  2. Für einen Typ artikelnummer, der auf einer ganzen Zahl zwischen 1 und 999999 beruht, sind verschiedene Definitionen möglich. In diesem Beispiel wird die 0 ausgeschlossen, während die 999999 mit in den Wertebereich aufgenommen wird:
    <xs:simpleType name="artikelnummer">
      <xs:restriction base="xs:integer">
        <xs:minExclusive value="0"/>
        <xs:maxInclusive value="999999"/>		
      </xs:restriction>
    </xs:simpleType>
    
  3. Ein Beispiel zur Benutzung von Mustern, ist die Einschränkung von URI's4 auf ausschließlich per FTP (File Transfer Protocol) erreichbare Daten. Diese beginnen stets mit ftp://, gefolgt von einer beliebigen Zeichenkette. Hier wird beispielhaft ein Datentyp namens ftpURI erzeugt, der von xs:anyURI abstammt:
    <xs:simpleType name="ftpURI">
      <xs:restriction base="xs:anyURI">
        <xs:pattern value="ftp://.*"/>
      </xs:restriction>
    </xs:simpleType>
    
Beispiel 2.4.2:
Listen und Vereinigungen:
  1. Es lassen sich auch neue Datentypen durch Listen erzeugen, wie hier zum Beispiel eine formatliste von den in Beispiel 2.4.1(1) erzeugten Grafikformaten. Gültige Elemente zu diesem Datentyp würden immer mit Leerzeichen die einzelnen Listeneinträge voneinander trennen, beispielsweise "gif gif jpg" oder "eps jpg gif", wobei die Anzahl der Einträge keine Rolle spielt.
    <xs:simpleType name="formatliste">
      <xs:list itemTyp="grafikformat"/>
    </xs:simpleType>
    
  2. Durch die Vereinigung vom positiven und negativen Integerdatentyp lässt sich ein neuer Datentyp erstellen, der alle Integerwerte mit Ausnahme der Null akzeptiert. Mit dieser Definition wird IntegerOhneNull vom Typ union. Um die Datentyp-Eigenschaft beizubehalten, dass es sich um Elemente des Typs Integer handelt, muss eine derartige Definition als Restriktion auf dem Integer-Typ vorgenommen werden.
    <xs:simpleType name="IntegerOhneNull">
      <xs:union memberTypes="xs:positiveInteger 
                                xs:negativeInteger"/>
    </xs:simpleType>
    
Von diesen eigens definierten Datentypen lassen sich genauso Elemente erzeugen, wie es von den vorgegebenen Typen der Fall ist. Allerdings ist es nicht immer nötig extra einen eigenen Datentyp zu kreieren, wenn dieser für einen sehr speziellen Fall benötigt wird und keine weitere Verwendung findet. Dafür besteht immer die Möglichkeit ein Element mit direkter Typdefinition zu erzeugen, so dass dieser nicht speziell benannt wird und nur lokal in dem Element existiert.

Beispiel 2.4.3:
Ein gruss-Element, das verschiedene Begrüßungsarten (hallo, morgen oder servus) enthalten darf, wird nur einmal benötigt. Deshalb bietet sich hierfür eine lokale Definition des Elementes an. Diese Definition ist im wesentlichen mit den vorhergehenden Typdefinitionen identisch, nur wird kein Name für den Typ vergeben und das Element enthält kein Attribut, das auf den Typ verweist.
<xs:element name="gruss">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:enumeration value="hallo"/>
      <xs:enumeration value="morgen"/>
      <xs:enumeration value="servus"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>
Einfache Datentypen beschreiben somit ausschließlich den Inhalt eines einzigen Elementes und machen keine Aussage zu der Struktur des Dokumentes. Dazu werden komplexe Elemente und Datentypen definiert.
next up previous contents
Nächste Seite: 2.5 Definition komplexer Datentypen Aufwärts: 2 XML Schema Vorherige Seite: 2.3 Grundlagen   Inhalt
Tanja Schniederberend 2003-06-11