Datentypen


 ... [ Präsentation ] ... [ << Bausteine vs. Muster ] ... [ Namensräume >> ] ...  




Übersicht: Datentypen

  Einführung
  W3C Schema Datentypen
  Relax NG Datentypen
  Bewertung



Einführung

  • Das Fehlen von Datentypen ist einer der Hauptkritikpunkt an DTDs
  • Bisher wurde nur type="xs:string" (W3C Schema) und <text> (Relax NG) verwendet
  • Weitere Datentypen vorhanden

  • Vorteil vorallem bei datenorientieren XML Dokumenten
  • Daten-Validierung kann durch den Prozessor erfolgen
  • Anwenderprogramm wird entlastet





W3C Schema Datentypen

  • Knapp 50 verschiedene Datentypen
  • 19 bilden die Klasse der primitiven eingebauten Datentypen (build-in primitive types): string, boolean, ...
  • Alle weiteren Typen sind von den primitiven abgeleitet build-in derived types
Datentyp Hierarchie
Abbildung 3: W3C Schema Datentyp Hierarchie

Einbinden von Datentypen
01) <xs:attribute name="available" type="xs:boolean"/>
02) <xs:element name="isbn" type="xs:unsignedLong"/>
03) 
04) <book id="..." available="xyz">
05)   <isbn>9876543210</isbn>
06)   <isbn>QWERTZ3210</isbn>
07)   <isbn>12345</isbn>
08)   ...
09) </book>
  • Eingebauten Datentypen können direkt in einem Element oder Attribut verwendet werden
  • Prozessor kann ungültige Werte erkennen, z.B. Buchstaben
  • Zeile 7 wird aber nicht als Fehler erkannt
  • Definition eigener "einfacher Datentypen"

1) <xs:simpleType name="myUnsignedLong">
2)   <xs:restriction base="xs:unsignedLong">
3)     <xs:minInclusive value="1000000000"/>
4)     <xs:maxInclusive value="9999999999"/>
5)   </xs:restriction>
6) </xs:simpleType>
  • Basistyp wird über Fassetten eingeschränkt
  • 12 verschiedene Fassetten vorhanden: length, min-/maxLength, digits, ...
  • Aufzählungs und Listen Fassette

01) <xs:simpleType name="isbn">
02)   <xs:restriction base="xs:unsignedLong">
03)     <xs:enumeration value="1000000000"/>
04)     <xs:enumeration value="2643857021"/>
05)     <xs:enumeratin value="9999999999"/>
06)   </xs:restriction>
07) </xs:simpleType>
08) 
09) <xs:simpleType name="isbnListe">
10)   <xs:list itemType="isbn"/>
11) </xs:simpleType>
12) <xs:simpleType name="zweiIsbnNummern">
13)   <xs:restriction base="isbnListe">
14)     <xs:length value="2"/>
15)   </xs:restriction>
16) </xs:simpleType>
17) 
18) <zweiIsbnNummern>1000000000  2643857021</zweiIsbnNummern>
19) <zweiIsbnNummern>1000000000  8888888888</zweiIsbnNummern>
  • Aufzählung: nur angegebene Werte erlaubt
  • Listen: mehrere durch Leerzeichen getrennte Werte
  • Weitere Einschränkungen über andere Fassetten denkbar
  • Viele Bereiche können so aber nicht dargestellt werden -> xs:pattern-Tag
1) <xs:simpleType name="isbnType">
2)   <xs:restriction base="xs:string">
3)     <xs:pattern value="[0-9]{10}"/>
4)   </xs:restriction>
5) </xs:simpleType>





Relax NG Datentypen

  • Relax NG besitzt ebenfalls ein eingebautes Typsystem
  • Allerdings nur 2 Datentypen vorhanden -> Design-Entscheidung
  • token und string beide für Zeichenketten
  • string normalisiert Leerraumzeichen (Leerzeichen, Tab, Zeilenumbruch)
  • string mit Vorsicht einsetzen!!!
01) <attribute name="available">
02)   <choice>
03)     <value>available</value>
04)     <value type="token">checked out </value>
05)     <value type="string">on  hold </value>
06)   </choice>
07) </attribute>
08) 
09) <attribute name="available1">
10)   <data type="token">
11)     <except>
12)       <value>available</value>
13)       <value>checked out</value>
14)       <value>on hold</value>
15)     </except>
16)   </data>
17) </attribute>
18) 
  • <value> definiert einen festen Wert
  • <choice> und <value> stellen eine Aufzählung dar
  • Wiederverwendung von Mustern, im Gegensatz zu W3C Schema <xs:enumeration>
  • Ausschlußaufzählungen durch das <except>-Muster
  • In einem W3C Schema nicht umsetzbar



Listen

01) <element name="isbn">
02)   <list>
03)     <zeroOrMore>
04)       <value>1000000000</value>
05)       <value>2643857021</value>
06)       <value>9999999999</value>
07)     </zeroOrMore>
08)   </list>
09) </element>
10) 
11) <isbn>2643857021 9999999999</isbn>
  • Auch hier sind nur die vier bekannten Häufigkeitsmuster einsetzbar



Einbinden externer Typ Bibliotheken
  • Nur zwei eingebaute Datentypen vorhanden
  • Ziel von Relax NG war das Validieren der Struktur, weniger das Validieren des Inhalts
  • Fremde Datentyp Bibliotheken können aber eingebunden werden
01) <element name="book"
02)          datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
03)          xmlns="http://relaxng.org/ns/structure/1.0">
04)    <attribute name="available">
05)      <value type="boolean">true</value>
06)    </attribute>
07)    <element name="titel">
08)      <data type="token">
09)        <param name="maxLength">255</param>
10)      </data>
11)    </element>
12)    <element name="author-born">
13)      <data type="date">
14)        <param name="minInclusive">1900-01-01</param>
15)        <param name="pattern">[0-9]{4}-[0-9]{2}-[0-9]{2}</param>
16)      </data>
17)    </element>
18) </element>
  • Einbinden erfolgt über das datatypeLibrary-Attribut
  • Danach können alle Datentypen der Bibliothek verwendet werden
  • Angabe des Types entweder in einem <value>-Muster oder über <data>
  • Fassetten können auch in Relax NG genutzt werden: <param>





Bewertung

  • Grundlegende Design Entscheidung
  • Struktur und Inhalt sind zwei unterschiedliche Probleme
  • Sollten auch durch verschiedene Werkzeuge (in enger Zusammenarbeit) gelöst werden
  • Problemspezifische Typ Bibliothek in einer Anwendung integrierbar

  • Relax NG nutzt gute Vorarbeit der W3C Schema Sprache
  • Ansatz in dieser Form sonst vielleicht nicht möglich
  • Weitere Bibliotheken, z.B. für Mysql Datentypen oder das Python Typsystem, vorhanden






 ... [ Präsentation ] ... [ << Bausteine vs. Muster ] ... [ Namensräume >> ] ... [ nach oben ] ...