Signification de - <? Xml version = "1.0" encoding = "utf-8"?>

103

Je suis nouveau sur XML et j'essaie de comprendre les bases. J'ai lu la ligne ci-dessous dans "Learning XML", mais ce n'est toujours pas clair, pour moi. Quelqu'un peut-il me diriger vers un livre ou un site Web qui explique clairement ces bases?

À partir de Learning XML :

La déclaration XML décrit certaines des propriétés les plus générales du document, indiquant au processeur XML qu'il a besoin d'un analyseur XML pour interpréter ce document.

Qu'est-ce que ça veut dire?

Je comprends la xml versionpartie - doc et utilisateur de doc doivent "parler" dans la même version de XML. Mais qu'en est-il de la encodingpartie? Pourquoi est-ce nécessaire?

XML Boy
la source
Possible duplication de Quelle est l'utilité du «codage» dans l'en-tête XML?
Jonathan Leffler

Réponses:

126

Pour comprendre l'attribut "encoding", vous devez comprendre la différence entre les octets et les caractères .

Considérez les octets comme des nombres entre 0 et 255, tandis que les caractères sont des choses comme "a", "1" et "Ä". L'ensemble de tous les caractères disponibles est appelé un jeu de caractères .

Chaque caractère a une séquence d'un ou plusieurs octets qui sont utilisés pour le représenter; cependant, le nombre exact et la valeur des octets dépendent du codage utilisé et il existe de nombreux codages différents.

La plupart des encodages sont basés sur un ancien jeu de caractères et encodage appelé ASCII qui est un seul octet par caractère (en fait, seulement 7 bits) et contient 128 caractères dont beaucoup des caractères courants utilisés en anglais américain.

Par exemple, voici 6 caractères dans le jeu de caractères ASCII qui sont représentés par les valeurs 60 à 65.

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

Dans l'ensemble ASCII complet, la valeur la plus basse utilisée est zéro et la plus élevée est 127 (les deux sont des caractères de contrôle masqués).

Cependant, une fois que vous commencez à avoir besoin de plus de caractères que l'ASCII de base fournit (par exemple, des lettres avec des accents, des symboles monétaires, des symboles graphiques, etc.), l'ASCII ne convient pas et vous avez besoin de quelque chose de plus complet. Vous avez besoin de plus de caractères (un jeu de caractères différent) et vous avez besoin d'un codage différent car 128 caractères ne suffisent pas pour contenir tous les caractères. Certains codages offrent un octet (256 caractères) ou jusqu'à six octets.

Au fil du temps, de nombreux encodages ont été créés. Dans le monde Windows, il existe CP1252, ou ISO-8859-1, alors que les utilisateurs de Linux ont tendance à privilégier UTF-8. Java utilise UTF-16 de manière native.

Une séquence de valeurs d'octet pour un caractère dans un codage peut représenter un caractère complètement différent dans un autre codage, ou peut même être invalide.

Par exemple, dans la norme ISO 8859-1 , â est représenté par un octet de valeur 226, alors que dans UTF-8 , il est deux octets: 195, 162. Cependant, dans ISO 8859-1 , il y 195, 162aurait deux caractères, Ã, ¢ .

Considérez XML comme non pas une séquence de caractères mais une séquence d'octets.

Imaginez que le système recevant le XML voit les octets 195, 162. Comment sait-il de quels personnages il s'agit?

Pour que le système interprète ces octets comme des caractères réels (et ainsi les affiche ou les convertit en un autre codage), il doit connaître le codage utilisé dans le XML.

Étant donné que les codages les plus courants sont compatibles avec ASCII, en ce qui concerne les caractères alphabétiques de base et les symboles, dans ces cas, la déclaration elle-même peut s'en tirer en utilisant uniquement les caractères ASCII pour dire quel est le codage. Dans d'autres cas, l'analyseur doit essayer de comprendre le codage de la déclaration. Puisqu'il sait que la déclaration commence par, <?xmlil est beaucoup plus facile de le faire.

Enfin, l' versionattribut spécifie la version XML, dont il y en a deux pour le moment (voir les versions XML de Wikipedia . Il existe de légères différences entre les versions, donc un analyseur XML doit savoir de quoi il s'agit. Dans la plupart des cas (pour l'anglais haut-parleurs de toute façon), la version 1.0 suffit.

rghome
la source
9
"L'en-tête lui-même utilise l'encodage ASCII": je pense que vous faites référence à la déclaration XML. Il est codé comme le reste du document; UTF-16 ou tout le reste. Un processeur XML peut faire quelques essais jusqu'à ce qu'il puisse lire la spécification de codage.
Tom Blodget
1
J'avais l'impression que le préambule / prologue devait être encodé sous UTF-8 et que cela indiquait à l'analyseur comment convertir les octets restants (le document XML réel) au bon encodage. Encore faux! :-)
Kelly Beard
5
Voici une suggestion de lecture: joelonsoftware.com/2003/10/08/…
Sudip Bhandari
26

Une déclaration XML n'est pas requise dans tous les documents XML; cependant, les auteurs de documents XHTML sont fortement encouragés à utiliser des déclarations XML dans tous leurs documents. Une telle déclaration est requise lorsque le codage de caractères du document est différent de l'UTF-8 ou UTF-16 par défaut et qu'aucun codage n'a été déterminé par un protocole de niveau supérieur. Voici un exemple de document XHTML. Dans cet exemple, la déclaration XML est incluse.

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

Veuillez vous référer aux standards W3 pour XML .

Pavan
la source
4
ce xml est lié au xhtml. vouliez-vous créer un lien vers xml w3.org/TR/xml ou vouliez -vous nommer le lien xhtml?
jrwren
Le xhtml fait référence à la documentation xml. La déclaration de type de document n'est pas requise pour un XML bien formé.
xvan
"Veuillez vous référer aux normes W3 pour XML." IOW, allez lire la FAQ, qui est un long et long document. Pourquoi les gens ne peuvent-ils pas simplement expliquer ce que "?" fait et pourquoi il est là ???
Blessed Geek
3

Il s'agit du préambule facultatif XML .

  • version="1.0" signifie qu'il s'agit du standard XML auquel ce fichier se conforme
  • encoding="utf-8" signifie que le fichier est encodé à l'aide du codage Unicode UTF-8
Oded
la source
2

Quelqu'un peut-il me diriger vers un livre ou un site Web qui explique clairement ces bases?

Vous pouvez consulter ce didacticiel XML avec des exemples.

Mais qu'en est-il de la partie encodage? Pourquoi est-ce nécessaire?

Le W3C fournit des explications sur l'encodage:

"Le jeu de caractères du document pour XML et HTML 4.0 est Unicode (alias ISO 10646). Cela signifie que les navigateurs HTML et les processeurs XML doivent se comporter comme s'ils utilisaient Unicode en interne. Mais cela ne signifie pas que les documents doivent être transmis en Unicode. Tant que le client et le serveur sont d'accord sur le codage, ils peuvent utiliser n'importe quel codage qui peut être converti en Unicode ... "

O.Badr
la source
-1

La déclaration XML dans le plan du document comprend les éléments suivants:

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

Ceci est obligatoire. Bien que le nombre puisse changer pour les futures versions de XML, 1.0 est la version actuelle.

La déclaration d'encodage,

encoding="UTF-8"?

Ceci est facultatif. Si elle est utilisée, la déclaration de codage doit apparaître immédiatement après les informations de version dans la déclaration XML et doit contenir une valeur représentant un codage de caractères existant.

kshama singh
la source