Hallo,
ich habe mal ein paar Fragen zur Zeichenkodierung von DTD's und Schemata:
- Muss ein XML-Prozessor, UTF-8 Dokumente welche z. B. eine UTF-16-DTD verwenden möchten, verarbeiten ?
Ja. *
- 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.