|
Übersicht: Datentypen
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
|
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
|
|
|