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

102

Soy nuevo en XML y estoy tratando de comprender los conceptos básicos. Leí la línea siguiente en "Aprendiendo XML", pero todavía no está claro para mí. ¿Alguien puede señalarme un libro o un sitio web que explique estos conceptos básicos con claridad?

De Learning XML :

La declaración XML describe algunas de las propiedades más generales del documento, indicando al procesador XML que necesita un analizador XML para interpretar este documento.

¿Qué significa esto?

Entiendo la xml versionparte: tanto el documento como el usuario del documento deben "hablar" en la misma versión de XML. Pero, ¿qué pasa con la encodingparte? ¿Por qué es eso necesario?

XML Boy
fuente

Respuestas:

125

Para comprender el atributo "codificación", debe comprender la diferencia entre bytes y caracteres .

Piense en los bytes como números entre 0 y 255, mientras que los caracteres son cosas como "a", "1" y "Ä". El conjunto de todos los caracteres disponibles se denomina conjunto de caracteres .

Cada carácter tiene una secuencia de uno o más bytes que se utilizan para representarlo; sin embargo, el número exacto y el valor de los bytes depende de la codificación utilizada y existen muchas codificaciones diferentes.

La mayoría de las codificaciones se basan en un conjunto de caracteres antiguo y una codificación denominada ASCII, que es de un solo byte por carácter (en realidad, solo 7 bits) y contiene 128 caracteres, incluidos muchos de los caracteres comunes que se utilizan en el inglés estadounidense.

Por ejemplo, aquí hay 6 caracteres en el conjunto de caracteres ASCII que están representados por los valores de 60 a 65.

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

En el conjunto ASCII completo, el valor más bajo utilizado es cero y el más alto es 127 (ambos son caracteres de control ocultos).

Sin embargo, una vez que comienza a necesitar más caracteres de los que proporciona el ASCII básico (por ejemplo, letras con acentos, símbolos de moneda, símbolos gráficos, etc.), ASCII no es adecuado y necesita algo más extenso. Necesita más caracteres (un juego de caracteres diferente) y necesita una codificación diferente, ya que 128 caracteres no son suficientes para caber todos los caracteres. Algunas codificaciones ofrecen un byte (256 caracteres) o hasta seis bytes.

Con el tiempo, se han creado muchas codificaciones. En el mundo de Windows, existe CP1252, o ISO-8859-1, mientras que los usuarios de Linux tienden a favorecer UTF-8. Java usa UTF-16 de forma nativa.

Una secuencia de valores de bytes para un carácter en una codificación podría representar un carácter completamente diferente en otra codificación, o incluso podría no ser válida.

Por ejemplo, en la norma ISO 8859-1 , â está representado por un byte de valor 226, mientras que en UTF-8 que es de dos bytes: 195, 162. Sin embargo, en ISO 8859-1 , 195, 162serían dos caracteres, Ã, ¢ .

Piense en XML no como una secuencia de caracteres sino como una secuencia de bytes.

Imagine que el sistema que recibe el XML ve los bytes 195, 162. ¿Cómo sabe qué personajes son estos?

Para que el sistema interprete esos bytes como caracteres reales (y así los muestre o los convierta a otra codificación), necesita conocer la codificación utilizada en el XML.

Dado que las codificaciones más comunes son compatibles con ASCII, en lo que respecta a los caracteres alfabéticos básicos y los símbolos, en estos casos, la declaración en sí puede salirse con la suya usando solo los caracteres ASCII para decir cuál es la codificación. En otros casos, el analizador debe intentar averiguar la codificación de la declaración. Como sabe que la declaración comienza con <?xml, es mucho más fácil hacer esto.

Finalmente, el versionatributo especifica la versión XML, de las cuales hay dos en este momento (ver versiones XML de Wikipedia . Hay ligeras diferencias entre las versiones, por lo que un analizador XML necesita saber de qué se trata. En la mayoría de los casos (para inglés altavoces de todos modos), la versión 1.0 es suficiente.

rghome
fuente
9
"El encabezado en sí usa la codificación ASCII": creo que se refiere a la declaración XML. Está codificado como el resto del documento; UTF-16 o lo que sea. Un procesador XML puede realizar algunas pruebas hasta que pueda leer la especificación de codificación.
Tom Blodget
1
Tenía la impresión de que el preámbulo / prólogo debía codificarse en UTF-8 y eso le decía al analizador cómo convertir los bytes restantes (el documento XML real) a la codificación correcta. ¡Nuevamente incorrecto! :-)
Kelly Beard
5
Aquí hay una lectura sugerida: joelonsoftware.com/2003/10/08/…
Sudip Bhandari
26

No se requiere una declaración XML en todos los documentos XML; sin embargo, se recomienda encarecidamente a los autores de documentos XHTML que utilicen declaraciones XML en todos sus documentos. Se requiere una declaración de este tipo cuando la codificación de caracteres del documento es diferente a la predeterminada UTF-8 o UTF-16 y no se determinó ninguna codificación mediante un protocolo de nivel superior. A continuación se muestra un ejemplo de un documento XHTML. En este ejemplo, se incluye la declaración XML.

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

Consulte los estándares W3 para XML .

Pavana
fuente
4
que xml enlaza con xhtml. ¿ Quisiste vincular a xml w3.org/TR/xml o quisiste nombrar el vínculo xhtml?
jrwren
El xhtml se refiere a la documentación xml. La declaración de tipo de documento no es necesaria para XML bien formado.
xvan
"Consulte los estándares W3 para XML". IOW, lea las preguntas frecuentes, que es un documento muy extenso. ¿Por qué la gente no puede simplemente explicar qué es "?" hace y por qué está ahí ???
Blessed Geek
3

Este es el preámbulo opcional de XML .

  • version="1.0" significa que este es el estándar XML que cumple este archivo
  • encoding="utf-8" significa que el archivo está codificado con la codificación Unicode UTF-8
Oded
fuente
2

¿Alguien puede señalarme un libro o un sitio web que explique estos conceptos básicos con claridad?

Puede consultar este tutorial XML con ejemplos.

Pero, ¿qué pasa con la parte de codificación? ¿Por qué es eso necesario?

W3C proporciona una explicación sobre la codificación:

"El conjunto de caracteres del documento para XML y HTML 4.0 es Unicode (también conocido como ISO 10646). Esto significa que los navegadores HTML y los procesadores XML deben comportarse como si usaran Unicode internamente. Pero no significa que los documentos deban transmitirse en Unicode. Siempre que el cliente y el servidor estén de acuerdo con la codificación, pueden utilizar cualquier codificación que se pueda convertir a Unicode ... "

O.Badr
fuente
-1

La declaración XML en el mapa del documento consta de lo siguiente:

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

Esto es obligatorio. Aunque el número puede cambiar para futuras versiones de XML, 1.0 es la versión actual.

La declaración de codificación,

encoding="UTF-8"?

Esto es opcional. Si se utiliza, la declaración de codificación debe aparecer inmediatamente después de la información de la versión en la declaración XML y debe contener un valor que represente una codificación de caracteres existente.

kshama singh
fuente