Bedeutung von - <? Xml version = "1.0" encoding = "utf-8"?>

102

Ich bin neu in XML und versuche, die Grundlagen zu verstehen. Ich habe die folgende Zeile in "Lernen von XML" gelesen, aber es ist mir immer noch nicht klar. Kann mich jemand auf ein Buch oder eine Website verweisen, die diese Grundlagen klar erklärt?

Vom Lernen von XML :

Die XML-Deklaration beschreibt einige der allgemeinsten Eigenschaften des Dokuments und teilt dem XML-Prozessor mit, dass er einen XML-Parser zur Interpretation dieses Dokuments benötigt.

Was bedeutet das?

Ich verstehe den xml versionTeil - sowohl doc als auch user of doc sollten in derselben XML-Version "sprechen". Aber was ist mit dem encodingTeil? Warum ist das notwendig?

XML Boy
quelle
Mögliches Duplikat von Was nützt die 'Codierung' im XML-Header?
Jonathan Leffler

Antworten:

125

Um das Attribut "Kodierung" zu verstehen, müssen Sie den Unterschied zwischen Bytes und Zeichen verstehen .

Stellen Sie sich Bytes als Zahlen zwischen 0 und 255 vor, während Zeichen Dinge wie "a", "1" und "Ä" sind. Der Satz aller verfügbaren Zeichen wird als Zeichensatz bezeichnet .

Jedes Zeichen hat eine Folge von einem oder mehreren Bytes, die zur Darstellung verwendet werden. Die genaue Anzahl und der genaue Wert der Bytes hängen jedoch von der verwendeten Codierung ab , und es gibt viele verschiedene Codierungen.

Die meisten Codierungen basieren auf einem alten Zeichensatz und einer Codierung namens ASCII, die ein einzelnes Byte pro Zeichen (tatsächlich nur 7 Bit) ist und 128 Zeichen enthält, einschließlich vieler der im US-Englisch verwendeten allgemeinen Zeichen.

Hier sind beispielsweise 6 Zeichen im ASCII-Zeichensatz, die durch die Werte 60 bis 65 dargestellt werden.

Extract of ASCII Table 60-65
╔══════╦══════════════╗
║ Byte ║  Character   ║
╠══════╬══════════════║
║  60  ║      <       ║
║  61  ║      =       ║
║  62  ║      >       ║
║  63  ║      ?       ║
║  64  ║      @       ║
║  65  ║      A       ║
╚══════╩══════════════╝

Im vollständigen ASCII-Satz ist der niedrigste verwendete Wert Null und der höchste 127 (beide sind versteckte Steuerzeichen).

Sobald Sie jedoch mehr Zeichen benötigen, als das grundlegende ASCII bereitstellt (z. B. Buchstaben mit Akzenten, Währungssymbolen, Grafiksymbolen usw.), ist ASCII nicht mehr geeignet und Sie benötigen etwas umfangreicheres. Sie benötigen mehr Zeichen (einen anderen Zeichensatz) und eine andere Codierung, da 128 Zeichen nicht ausreichen, um alle Zeichen aufzunehmen. Einige Codierungen bieten ein Byte (256 Zeichen) oder bis zu sechs Bytes.

Im Laufe der Zeit wurden viele Codierungen erstellt. In der Windows-Welt gibt es CP1252 oder ISO-8859-1, während Linux-Benutzer UTF-8 bevorzugen. Java verwendet UTF-16 nativ.

Eine Folge von Bytewerten für ein Zeichen in einer Codierung kann für ein völlig anderes Zeichen in einer anderen Codierung stehen oder sogar ungültig sein.

In ISO 8859-1 wird â beispielsweise durch ein Byte Wert dargestellt 226, während es in UTF-8 zwei Bytes sind : 195, 162. Doch in ISO 8859-1 , 195, 162würden zwei Zeichen lang sein, Ã, ¢ .

Stellen Sie sich XML nicht als eine Folge von Zeichen vor, sondern als eine Folge von Bytes.

Stellen Sie sich vor, das System, das das XML empfängt, sieht die Bytes 195, 162. Woher weiß es, welche Charaktere das sind?

Damit das System diese Bytes als tatsächliche Zeichen interpretieren (und sie so anzeigen oder in eine andere Codierung konvertieren kann), muss es die im XML verwendete Codierung kennen.

Da die meisten gängigen Codierungen in Bezug auf grundlegende alphabetische Zeichen und Symbole mit ASCII kompatibel sind, kann in diesen Fällen die Deklaration selbst davonkommen, nur die ASCII-Zeichen zu verwenden, um die Codierung anzugeben. In anderen Fällen muss der Parser versuchen, die Codierung der Deklaration herauszufinden. Da es weiß, dass die Deklaration damit beginnt <?xml, ist es viel einfacher, dies zu tun.

Schließlich gibt das versionAttribut die XML-Version an, von der es derzeit zwei gibt (siehe Wikipedia-XML-Versionen . Es gibt geringfügige Unterschiede zwischen den Versionen, sodass ein XML-Parser wissen muss, womit er es zu tun hat. In den meisten Fällen (für Englisch) Lautsprecher sowieso), Version 1.0 ist ausreichend.

rghome
quelle
9
"Der Header selbst verwendet die ASCII-Codierung": Ich denke, Sie verweisen auf die XML-Deklaration. Es ist wie der Rest des Dokuments codiert. UTF-16 oder so weiter. Ein XML-Prozessor kann einige Versuche durchführen, bis er die Codierungsspezifikation lesen kann.
Tom Blodget
1
Ich hatte den Eindruck, dass die Präambel / der Prolog unter UTF-8 codiert werden sollte, und das sagte dem Parser, wie die verbleibenden Bytes (das eigentliche XML-Dokument) in die richtige Codierung konvertiert werden sollen. Wieder falsch! :-)
Kelly Beard
5
Hier ist eine empfohlene Lektüre: joelonsoftware.com/2003/10/08/…
Sudip Bhandari
26

Eine XML-Deklaration ist nicht in allen XML-Dokumenten erforderlich. Autoren von XHTML-Dokumenten wird jedoch dringend empfohlen, in allen Dokumenten XML-Deklarationen zu verwenden. Eine solche Deklaration ist erforderlich, wenn die Zeichenkodierung des Dokuments nicht der Standard-UTF-8 oder UTF-16 entspricht und keine Kodierung durch ein übergeordnetes Protokoll bestimmt wurde. Hier ist ein Beispiel für ein XHTML-Dokument. In diesem Beispiel ist die XML-Deklaration enthalten.

<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE html 
 PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <title>Virtual Library</title>
  </head>
  <body>
    <p>Moved to <a href="http://example.org/">example.org</a>.</p>
 </body>
</html>

Bitte beachten Sie die W3-Standards für XML .

Pavan
quelle
4
dass xml auf xhtml verweist. Wollten Sie einen Link zu xml w3.org/TR/xml erstellen oder wollten Sie den Link xhtml benennen?
Jrwren
Das xhtml bezieht sich auf die xml-Dokumentation. Für wohlgeformte XML-Dateien ist keine Dokumenttypdeklaration erforderlich.
Xvan
"Bitte beachten Sie die W3-Standards für XML." IOW, lesen Sie die FAQ, die ein langes, langes Dokument ist. Warum können die Leute nicht einfach erklären, was das "?" tut und warum ist es da ???
Seliger Geek
3

Dies ist die optionale XML- Präambel.

  • version="1.0" bedeutet, dass dies der XML-Standard ist, dem diese Datei entspricht
  • encoding="utf-8" bedeutet, dass die Datei mit der UTF-8-Unicode-Codierung codiert wird
Oded
quelle
2

Kann mich jemand auf ein Buch oder eine Website verweisen, die diese Grundlagen klar erklärt?

Sie können dieses XML-Tutorial anhand von Beispielen überprüfen .

Aber was ist mit dem Codierungsteil? Warum ist das notwendig?

W3C bietet Erklärungen zur Codierung:

"Der Dokumentzeichensatz für XML und HTML 4.0 ist Unicode (auch bekannt als ISO 10646). Dies bedeutet, dass sich HTML-Browser und XML-Prozessoren so verhalten sollten, als ob sie Unicode intern verwenden würden. Dies bedeutet jedoch nicht, dass Dokumente in Unicode übertragen werden müssen. Solange sich Client und Server auf die Codierung einigen, können sie jede Codierung verwenden, die in Unicode konvertiert werden kann ... "

O.Badr
quelle
-1

Die XML-Deklaration in der Dokumentzuordnung besteht aus folgenden Elementen:

The version number, ?xml version="1.0"?. 

Dies ist obligatorisch. Obwohl sich die Anzahl für zukünftige XML-Versionen ändern kann, ist 1.0 die aktuelle Version.

Die Kodierungserklärung,

encoding="UTF-8"?

Dies ist optional. Bei Verwendung muss die Codierungsdeklaration unmittelbar nach den Versionsinformationen in der XML-Deklaration erscheinen und einen Wert enthalten, der eine vorhandene Zeichencodierung darstellt.

kshama singh
quelle