  | 
                        
						    
                 
                
                
    
        Ü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
		
  
	
                        
 
  | 
                        
       | 
                 
                  
 
            |