Hallo Andreas, Jan,
Oder ist es reine Schlamperei, dass ein Datentyp 'Number' nicht definiert wurde?
Nein, hier kommt etwas anderes zum Vorschein: XML sollte einfacher als SGML sein. Deswegen haben sie diverses Zeugs rausgeschmissen. XML ist also eine Teilmenge von SGML.
Und so einfach ist ein Datentyp „Number“ ja nicht. Mal abgesehen von den mathematischen Möglichkeiten, Zahlen zu unterteilen (Ganze Zahlen, Rationale Zahlen, Irrationale Zahlen ...), gibt es haufenweise unterschiedliche Schreibweisen für diese Zahlen und sonstige Einschränkungen. Wirf mal ein Blick auf das Diagramm der eingebauten Datentypen von XML Schema. Du wirst dort auf einen Blick haufenweise Datentypen für Zahlen sehen. Aber alle werden textuell irgendwie ausgedrückt, damit es da nicht zu Verwechselungen kommt, braucht es Datentypen. Denn auf der Ebene, wie Attribute zu interpretieren sind, ist XML sehr textbasiert.
Es gibt einen Datentyp NUMBER (wird z.B. für das tabindex-, maxlength-, rows-, cols- oder size-Attribut verwendet).
NUMBER erlaubt allerdings nur Ziffern.
Der Datentyp NUMBER (und seine Verwandten NUMBERS, NUTOKEN und NUTOKENS) für Attributwerte existiert nur in SGML. In XML existiert der Datentyp nicht.
Also wurde bei der Umschreibung der SGML-DTD von HTML 4.01 in die XML-DTD von XHTML 1.0 Dinge wie dieses hier ...
~~~xml
<!ATTLIST A
-- ... --
tabindex NUMBER #IMPLIED -- position in tabbing order --
-- ... --
>
... durch so etwas ersetzt ...
~~~xml
<!ENTITY % focus
-- ... --
tabindex %Number; #IMPLIED
-- ... --
>
... wobei das Entity %Number so definiert ist ...
~~~xml
<!ENTITY % Number "CDATA">
<!-- one or more digits -->
... sprich, es hat nur noch den Datentyp CDATA, banal ausgedrückt "String". Die Beschränkung auf Ziffern steht zwar noch in einem Kommentar, kann aber nicht mehr durch die DTD ausgedrückt und gegen diese DTD validiert werden, da DTDs NUMBER nicht mehr kennen und damit auch nicht XML Prozessoren nicht mehr; es sei denn, man stolpert über einen SGML Prozessor.
Tim