Thomas J.S.: Kodierung von DTD's/Schemata

Beitrag lesen

Hallo,

ich habe mal ein paar Fragen zur Zeichenkodierung von DTD's und Schemata:

  1. Muss ein XML-Prozessor, UTF-8 Dokumente welche z. B. eine UTF-16-DTD verwenden möchten, verarbeiten ?

Ja. *

  1. Ist es überhaupt erlaubt unterschiedlich kodierte Dokumente/DTD's/Schemata zu verwenden ?

Ja. **

Es währe doch z. B. denkbar das ich eine DTD in ISO-8859-1 erstelle, in Kommentarbereiche Umlaute benutze und diese DTD für ein UTF-8 Dokument verwende.

Ja, ist denkbar. ***

Oder müssen alle DTD's/Schemata in der gleichen Kodierung erstellt werden wie das Hauptdokument ?

Nein. ****

Mir geht es nicht darum was Sinnvoll ist oder nicht, sondern was technisch erlaubt ist.

* bis ****

Bei einem XML-Schema ist es klar, da es in XML-Dokument ist, kannst du ja die Kodierung im "encoding" festlegen.
Bei DTDs ist auch nicht wiel anders, nur wird das in der XML-spec. nicht ganz klar ausgedrück.

---------
http://www.w3.org/TR/REC-xml/#dt-doctype
The document type declaration can point to an external subset (a special kind of external entity) containing markup declarations
---------

Was hier nicht ausrücklich gesagt wird, aber zutrifft ist, dass die externe DTD-Untermenge eine "external parsed entity" ist.

Daher gilt eigentlich:
----------
http://www.w3.org/TR/REC-xml/#sec-TextDecl
External parsed entities SHOULD each begin with a text declaration.
TextDecl ::= '<?xml' VersionInfo? EncodingDecl S? '?>'
----------

Desweiteren gilt dann:
----------
http://www.w3.org/TR/REC-xml/#charencoding
Each external parsed entity in an XML document MAY use a different encoding for its characters.  [...]

In the absence of external character encoding information (such as MIME headers), parsed entities which are stored in an encoding other than UTF-8 or UTF-16 MUST begin with a text declaration [...]
----------

Was dann die einzelen Prozessoren unterstützen ist eine andere Frage. [1]

Grüße
Thomas

PS: [1] Nur als Bsp., der MSXML schreitert bei eine DTD (32-bit):
----------------------------------------
  þÿ   <   ?   x   m   l       v   e   r   s   i   o   n   =   "   1   .   0   "       e   n   c   o   d   i   n   g   =   "   I   S   O   -   1   0   6   4   6   -   U   C   S   -   4   "   ?   >

<   !   E   L   E   M   E   N   T       d   a   t   a       (   f   o   o   ,   b   a   r   )   +   >

<   !   E   L   E   M   E   N   T       f   o   o       (   #   P   C   D   A   T   A   )   >

<   !   E   L   E   M   E   N   T       b   a   r       (   #   P   C   D   A   T   A   )   >

----------------------------------------

Schlciht, weil er das nicht unterstützt.
16-bit: <?xml version="1.0" encoding="ISO-10646-UCS-2"?> oder
<?xml version="1.0" encoding="UTF-16"?> (Big- oder Little-Endian) dagegen machen ihm in einer DTD nichts aus.