[This local archive copy mirrored from the canonical site: http://www.promeko.com/informatica/gtsx/Rec-xml.html; alternately (later) from http://www.hispalinux.es/~olea/sgml-esp/Rec-xml.html. Local links may not have complete integrity, so use the canonical document at this URL if possible.]

W3CREC-xml-19980210


Extensible Markup Language (XML) 1.0

Recomendación W3C 10 de febrero de 1998

Esta versión:
http://www.w3.org/TR/1998/REC-xml-19980210
http://www.w3.org/TR/1998/REC-xml-19980210.xml
http://www.w3.org/TR/1998/REC-xml-19980210.html
http://www.w3.org/TR/1998/REC-xml-19980210.pdf
http://www.w3.org/TR/1998/REC-xml-19980210.ps
Última versión:
http://www.w3.org/TR/REC-xml
Versión previa:
http://www.w3.org/TR/PR-xml-971208
Editores:
Tim Bray (Textuality y Netscape) <[email protected]>
Jean Paoli (Microsoft) <[email protected]>
C. M. Sperberg-McQueen (University of Illinois at Chicago) <[email protected]>

Abstracto

El Lenguaje Extensible de Marcas (XML) es un subconjunto de SGML, que se describe completamente en este documento. Sus objetivos son habilitar el SGML genérico para que pueda ser servido, recibido y procesado en la Web de la manera que no es posible con HTML. XML ha sido diseñado para facilitar la implementación e interoperatividad con SGML y HTML.

Estado de este documento

Este documento ha sido revisado por los miembros del W3C y otras partes interesadas, y ha sido refrendada por el Director como una Recomendación W3C. Es un documento estable y puede ser utilizado como referencia o citado como referencia normativa desde otros documentos. El papel del W3C al realizar la Recomendación es el de potenciar a la especificación y promover su amplio despliegue. Este contribuye al incremento de la funcionalidad y la interoperatividad de la Web.

Este documento especifica una sintaxis creada a partir de un estándar internacional de procesamiento de texto existente, el Lenguaje Generalizado Estándar de Marcas (Standard Generalized Markup Language, ISO 8879:1986(E)) para su uso en la World Wide Web. Es producto de la Actividad XML del W3C, de la que se pueden obtener detalles en http://www.w3.org/XML. Así mismo, puede obtenerse una lista de las actuales recomendaciones y otros documentos técnicos en http://www.w3.org/TR.

Esta especificación utiliza el término URI, que es definido por [Berners-Lee et al.], en un trabajo en proceso denominado [IETF RFC1738] así como en [IETF RFC1808].

La lista de erratas de esta especificación está disponible en http://www.w3.org/XML/xml-19980210-errata (inglés).

Por favor informen de los errores en este documento a [email protected]. Si se trata de un error en la traducci�n, por favor h�ganlo a [email protected]

Extensible Markup Language (XML) 1.0

�ndice de Contenidos

1. Introducci�n
    1.1 Origen y Objetivos
    1.2 Terminolog�a
2. Documentos
    2.1 Documentos XML Bien-Formados
    2.2 Caracteres
    2.3 Construcciones Sint�cticas Comunes
    2.4 Datos Car�cter y Marcas
    2.5 Comentarios
    2.6 Instrucciones de Procesamiento
    2.7 Secciones CDATA
    2.8 Prolog y Declaraci�n de Tipo de Documento
    2.9 Declaraci�n de Documento Standalone
    2.10 Manejo de "Espacios en Blanco"
    2.11 Manejo de "Fines de L�nea"
    2.12 Identificaci�n del Lenguaje
3. Estructuras L�gicas
    3.1 Etiquetas de Comienzo, Etiquetas de Fin, y Etiquetas de "Elementos-Vac�os"
    3.2 Declaraciones de Tipo de Elemento
        3.2.1 Contenido del Elemento
        3.2.2 "Contenido Mezclado"
    3.3 Declaraciones de Listas de Atributos
        3.3.1 Tipos de Atributos
        3.3.2 Atributos por Defecto
        3.3.3 Normalizaci�n de Atributos-Valor
    3.4 Secciones Condicionales
4. Estructuras F�sicas
    4.1 Referencias a Caracteres y Entidades
    4.2 Declaraciones de Entidades
        4.2.1 Entidades Internas
        4.2.2 Entidades Externas
    4.3 Entidades Analizadas
        4.3.1 Declaraci�n de Texto
        4.3.2 Entidades Analizadas Bien-Formadas
        4.3.3 Codificaci�n de Caracteres en Entidades
    4.4 Tratamiento de Entidades y Referencias por el Procesador XML
        4.4.1 No Reconocidas
        4.4.2 Incluidas
        4.4.3 Incluidas si Validadas
        4.4.4 Prohibidas
        4.4.5 Incluidas en Literal
        4.4.6 Notificar
        4.4.7 Obviadas
        4.4.8 Incluidas como PEs
    4.5 Construcci�n de Texto de Reemplazo de Entidad Interna
    4.6 Entidades Predefinidas
    4.7 Declaraciones de Notaci�n
    4.8 Entidad Documento
5. Conformancia
    5.1 Procesadores Validadores y No Validadores
    5.2 Utilizaci�n de Procesadores XML
6. Notaci�n

Ap�ndices

A. Referencias
    A.1 Referencias Normativas
    A.2 Otras Referencias
B. Clases de Caracteres
C. XML y SGML (No Normativo)
D. Expansi�n de Referencias a Entidades y Caracteres (No Normativo)
E. Modelos de Contenido Deterministas (No Normativo)
F. Autodetecci�n de la Codificaci�n (No Normativo)
G. Grupo de Trabajo XML del W3C (No Normativo)

1. Introducci�n

El Lenguaje Extensible de Marcas, abreviado XML, describe una clase de objetos de datos llamados documentos XML y describe parcialmente el comportamiento de los programas de computadora que los procesan. XML es un "perfil de aplicaci�n" o una forma restringida de SGML, el Lenguaje Est�ndar Generalizado de Marcaci�n [ISO 8879]. Por construcci�n, los documentos XML son documentos SGML conformados.

Los documentos XML est�n compuestos por unidades de almacenamiento llamadas entidades, que contienen tanto datos analizados como no analizados. Los datos analizados est�n compuestos de caracteres, algunos de los cuales, de la forma datos car�cter, y otros de la forma marca. Las marcas codifican una descripci�n de la estructura de almacenamiento del documento y su estructura l�gica. XML proporciona un mecanismo para imponer restricciones al almacenamiento y a la estructura l�gica.

Se utiliza un m�dulo software llamado procesador XML para leer documentos XML y proporcionar acceso a su contenido y estructura. Se asume que un procesador XML hace su trabajo dentro de otro m�dulo, llamado aplicaci�n. Esta especificaci�n describe el comportamiento requerido de un procesador XML en t�rminos de c�mo leer datos XML y la informaci�n que debe proporcionar a la aplicaci�n.

1.1 Origen y Objetivos

XML fue desarrollado por un Grupo de Trabajo XML (originalmente conocido como "SGML Editorial Review Board") formado bajo los auspicios del Consorcio World Wide Web (W3C), en 1996. Fue presidido por Jon Bosak de Sun Microsystems con la participaci�n activa de un Grupo Especial de Inter�s en XML (previamente conocido como Grupo de Trabajo SGML) tambi�n organizado en el W3C. Los miembros del Grupo de Trabajo XML se especifican en un ap�ndice. Dan Connolly sirvi� como contacto entre el GT y el W3C.

Los objetivos de dise�o de XML son:

  1. XML debe ser directamente utilizable sobre Internet.
  2. XML debe soportar una amplia variedad de aplicaciones.
  3. XML debe ser compatible con SGML.
  4. Debe ser f�cil la escritura de programas que procesen documentos XML.
  5. El n�mero de caracter�sticas opcionales en XML debe ser absolutamente m�nima, idealmente cero.
  6. Los documentos XML deben ser legibles por humanos y razonablemente claros.
  7. El dise�o de XML debe ser preparado r�pidamente.
  8. El dise�o de XML debe ser formal y conciso.
  9. Los documentos XML deben ser f�cilmente creables.
  10. La concisi�n en las marcas XML es de m�nima importancia.

Esta especificaci�n, junto con los est�ndares asociados (Unicode e ISO/IEC 10646 para caracteres, Internet RFC 1766 para identificaci�n de lenguajes, ISO 639 para c�digos de nombres de lenguajes, e ISO 3166 para c�digos de nombres de pa�ses), proporciona toda la informaci�n necesaria para entender la Versi�n 1.0 de XML y construir programas de computador que los procesen.

Esta versi�n de la especificaci�n puede ser distribuida libremente, siempre y cuando se mantengan intactos todos los textos y t�rminos legales.

1.2 Terminolog�a

La terminolog�a utilizada para describir los documentos XML esta definida en el cuerpo de esta especificaci�n. Los t�rminos definidos en la siguiente lista son utilizados en la construcci�n de esas definiciones y en la descripci�n de las acciones del procesador XML:

poder
La conformaci�n de documentos y los procesadores de XML pueden permitirlo, pero no requieren ser soportados tal y como se describen.
deber
La conformaci�n de documentos y los procesadores de XML deben soportarlo tal y como se describe, de otro modo son err�neos.
error
Una violaci�n de las reglas de esta especificaci�n, los resultados est�n indefinidos. Los programas conformadores deber�an detectar e informar acerca de los errores y recuperarse de ellos.
error fatal
Un error que debe detectar un procesador XML e informar acerca de �l a la aplicaci�n. Tras encontrar un error fatal, el procesador tiene que continuar procesando los datos para buscar otros posibles errores y deber�a de informar de los errores a la aplicaci�n. Para soportar la correcci�n de errores, el procesador deber�a hacer que los datos no procesados del documento (con datos car�cter y marcas) sean accesibles a la aplicaci�n. Una vez que se detecta un error fatal, el procesador debe continuar el procesado normalmente (p.e. no debe continuar pasando los datos car�cter e informaci�n acerca de la estructura l�gica del documento a la aplicaci�n).
opci�n de usuario
Los programas conformadores pueden o deben (dependiendo del tiempo verbal de la frase) comportarse como se describe. Si lo hacen, deben proporcionar mecanismos para deshabilitar el comportamiento descrito.
restricci�n de validez
Una regla que se aplica a todo documento XML v�lido. Las violaciones de la restricci�n de validez son errores, y los procesadores validadores de XML deben, por opci�n de usuario, informar de ellas.
restricci�n de buena-formaci�n
Una regla que se aplica a todo documento XML bien-formado. Las violaciones de la restricci�n buena-formaci�n son errores fatales.
igualdad
(de cadenas de caracteres o nombres:) Dos cadenas de caracteres o nombres a comparar deben ser id�nticos. Los caracteres con m�ltiples representaciones posibles en la norma ISO/IEC 10646 (p.e. los caracteres con formas precompuestas y los "base+diacritic") s�lo son comparables si tienen la misma representaci�n en ambas cadenas. Por opci�n de usuario, los procesadores pueden normalizar estos caracteres a alguna forma can�nica (de cadenas de caracteres y reglas en la gram�tica:) Una cadena de caracteres es igual a una producci�n gramatical si pertenece al lenguaje generado por esa producci�n. (de contenido y modelos de contenido:) Un elemento es igual a su declaraci�n cuando conforma las reglas descritas en la restricci�n de "Validez de Elemento".
por compatibilidad
Una caracter�stica de XML incluida �nicamente para asegurar que XML permanece compatible con SGML.
por interoperatividad
Una recomendaci�n no obligatoria incluida para incrementar las funcionalidades de los documentos XML que pueden ser procesados por la base instalada existente de procesador SGML que a�adan las adaptaciones WebSGML al ISO 8879.

2. Documentos

Un objeto de datos es un documento XML si esta bien-formado, tal y como se define en esta especificaci�n. Un documento XML bien-formado puede adem�s ser v�lido si cumple una serie de restricciones.

Todo documento XML posee una estructura l�gica y una f�sica. F�sicamente, el documento est� compuesto de unidades llamadas entidades. Una entidad puede hacer referencia a otras entidades para que �stas sean incluidas en el documento. Un documento comienza en una "ra�z" o entidad documento. L�gicamente, el documento est� compuesto de declaraciones, elementos, comentarios, referencias a caracteres e instrucciones de procesamiento, todos los cuales se indican en el documento mediante marcas expl�citas. Las estructuras l�gica y f�sica deben anidarse de manera correcta, como se describe en el punto "4.3.2 Entidades Analizadas Bien-Formadas".

2.1 Documentos XML Bien-Formados

Un objeto de texto es un documento XML bien-formado si:

  1. Tomado como un todo, cumple la regla denominada document.
  2. Respeta todas las restricciones de buena-formaci�n dadas en esta especificaci�n.
  3. Cada una de las entidades analizadas que se referencia directa o indirectamente en el documento est� bien-formada.

Documento
[1] document ::= prolog element Misc*

Cumplir la producci�n document implica que:

  1. Contiene uno o m�s elementos.
  2. Hay exactamente un elemento, llamado ra�z, o elemento documento, del cual ninguna parte aparece en el contenido de ning�n otro elemento. Para el resto de elementos, si la etiqueta de comienzo est� en el contenido de alg�n otro elemento, la etiqueta de fin est� en el contenido del mismo elemento. Es decir, los elementos delimitados por etiquetas de comienzo y final, de anidan adecuadamente mutuamente.

Como consecuencia de esto, para cada elemento no ra�z H en el documento, existe otro elemento P tal que H est� contenido en P, pero no es el contenido de ning�n otro elemento que est� en el contenido de P. P es denominado padre de H, y H es hijo de P.

2.2 Caracteres

Una entidad analizada contiene texto, una secuencia de caracteres, que pueden representar marcas o datos car�cter. Un car�cter es una unidad at�mica de texto como se especifica en la norma ISO/IEC 10646 [ISO/IEC 10646]. Los caracteres legales son los tabuladores, retornos de carro, finales de l�nea y los caracteres gr�ficos legales del est�ndar Unicode y de la norma ISO/IEC 10646. La utilizaci�n de "compatibilidad de caracteres", como se define en la secci�n 6.8 de [Unicode], no est� contemplada.

Rango de Caracteres
[2] Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] /* cualquier car�cter Unicode, excluyendo los bloques subrogados FFFE y FFFF. */

Los mecanismos para codificar los c�digos de caracteres en patrones de bits pueden variar de una entidad a otra. Todos los procesadores XML deben aceptar las codificaciones UTF-8 y UTF-16 de la norma ISO/IEC 10646. El mecanismo para se�alar cual de las dos est� en uso, o para definir otras codificaciones, se discutir� m�s abajo en la secci�n "4.3.3 Codificaci�n de Caracteres en Entidades".

2.3 Construcciones Sint�cticas Comunes

Esta secci�n define algunos s�mbolos utilizados en la gram�tica.

El s�mbolo S (espacio en blanco) est� compuesto de uno o m�s caracteres espacio (#x20), retornos de carro, finales de l�nea o tabuladores.

Espacios en Blanco
[3] S ::= (#x20 | #x9 | #xD | #xA)+

Los caracteres se clasifican, por conveniencia, en letras, d�gitos u otros caracteres. Las letras se componen de caracteres de base alfab�tica o sil�bica, seguidos de uno o m�s caracteres combinatorios, o caracteres ideogr�ficos. Las declaraciones completas de cada clase de caracteres se da en "B. Clases de Caracteres".

Un Nombre es un "token" que comienza con una letra o uno o m�s caracteres de puntuaci�n, y que continua con letras, d�gitos, guiones, subrayados, comas y/o puntos. Los Nombres que comienzan por la cadena "xml", o cualquiera que cumpla la regla (('X'|'x') ('M'|'m') ('L'|'l')), quedan reservados para estandarizaci�n en esta o futuras versiones de esta especificaci�n.

Nota: El car�cter dos puntos en los nombres XML est� reservado para la experimentaci�n con espacios de nombres. Se prev� que se estandarizar� su significado en un futuro, en el que los documentos que utilicen este car�cter con prop�sitos experimentales deber�n ser actualizados. (No existe garant�a de que se adopte el mecanismo de espacios de nombres para XML). En la pr�ctica, esto significa que los autores no deber�an utilizar los dos puntos en XML, excepto como parte de espacios de nombres experimentales. Sin embargo los procesadores XML deben aceptar este car�cter en los Nombres.

Un "Nmtoken" (name token) es cualquier combinaci�n de caracteres de nombre.

Nombres y "Tokens"
[4] NameChar ::= LetterDigit | '.' | '-' | '_' | ':' | CombiningCharExtender
[5] Name ::= (Letter | '_' | ':') (NameChar)*
[6] Names ::= Name (S Name)*
[7] Nmtoken ::= (NameChar)+
[8] Nmtokens ::= Nmtoken (S Nmtoken)*

Los datos literales consisten en cualquier cadena entrecomillada que no contenga el tipo de comillas utilizadas como delimitadores en la propia cadena. Los literales se utilizan para especificar el contenido de entidades internas ("EntityValue"), los valores de los atributos ("AttValue") y los identificadores externos ("SystemLiteral"). Hay que tener en cuenta que el s�mbolo "SystemLiteral" puede ser analizado sin tomar en cuenta la presencia de marcas.

Literales
[9] EntityValue ::= '"' ([^%&"] | PEReferenceReference)* '"'
|"'" ([^%&'] | PEReferenceReference)* "'"
[10] AttValue ::= '"' ([^<&"] | Reference)* '"'
|�"'" ([^<&'] | Reference)* "'"
[11] SystemLiteral ::= ('"' [^"]* '"') |�("'" [^']* "'")
[12] PubidLiteral ::= '"' PubidChar* '"' | "'" (PubidChar - "'")* "'"
[13] PubidChar ::= #x20 | #xD | #xA |�[a-zA-Z0-9] |�[-'()+,./:=?;!*#@$_%]

2.4 Datos Car�cter y Marcas

El Texto consiste en datos car�cter y marcas entremezcladas. Las Marcas toman la forma de etiquetas de comienzo, etiquetas de fin, etiquetas de elementos vac�os, referencias a entidades, referencias a caracteres, comentarios, secciones CDATA delimitadores, declaraciones de tipo de documento e instrucciones de procesamiento.

Todo texto que no sea una marca constituye los denominados datos car�cter del documento.

El car�cter "ampersand" (&) y el par�ntesis angular de apertura (<) pueden aparecer de forma literal s�lo cuando se utilicen como delimitadores de marcas, o dentro de los comentarios, en instrucciones de procesamiento, o en secciones CDATA. Tambi�n pueden utilizarse en los valores literales de entidad de una declaraci�n de entidad interna; ver "4.3.2 Entidades Analizadas Bien-Formadas". Si son necesarios en cualquier otro punto, deben ser "escapados" mediante la utilizaci�n de referencias num�ricas a caracteres, o mediante las cadenas "&amp;" y "&lt;" respectivamente. El par�ntesis angular de cierre (>) puede ser representado utilizando la cadena "&gt;", y debe, por compatibilidad, ser "escapado" utilizando "&gt;" o la referencia a car�cter cuando aparece como contenido de la cadena "]]>", siempre y cuando la cadena no marque el final de una secci�n CDATA.

En el contenido de los elementos, los datos car�cter son cualquier cadena de caracteres que no contenga el delimitador de comienzo de marca. En las secciones CDATA, los datos car�cter son aquellos que no se incluyan en el delimitador de fin de secci�n CDATA, "]]>".

Para permitir que los valores de los atributos puedan contener tanto las comillas simples como las dobles, el car�cter ap�strofe o comilla simple (') puede ser representado como "&apos;", y el comilla doble (") como "&quot;".

Datos Car�cter
[14] CharData ::= [^<&]* - ([^<&]* ']]>' [^<&]*)

2.5 Comentarios

Los Comentarios pueden aparecer en cualquier punto del documento, fuera del resto de marcas; adem�s, pueden aparecer en la declaraci�n de tipo de documento, en los lugares permitidos por la gram�tica. No son parte de los datos car�cter del documento. Un procesador XML puede, pero no debe, permitir a la aplicaci�n obtener el texto de los comentarios. Por compatibilidad, la cadena "--" (dos guiones) no puede aparecer dentro de un comentario.

Comentarios
[15] Comment ::= '<!--' ((Char - '-') | ('-' (Char - '-')))* '-->'

Un ejemplo de comentario:

<!-- declaraciones de <head> y <body> -->

2.6 Instrucciones de Procesamiento

Las Instrucciones de Procesamiento (PIs) permiten a los documentos contener instrucciones para las aplicaciones.

Instrucciones de Procesamiento
[16] PI ::= '<?' PITarget (S (Char* - (Char* '?>' Char*)))? '?>'
[17] PITarget ::= Name - (('X' | 'x') ('M' | 'm') ('L' | 'l'))

Las PIs no son parte de los datos car�cter del documento, pero deben ser pasadas a la aplicaci�n. Las PIs empiezan con un destino (PITarget) utilizado para identificar a la aplicaci�n a la que est� dirigida dicha instrucci�n. Los nombres de destino "XML", "xml", y las combinaciones de may�sculas y min�sculas a partir de �stas, est�n reservados para estandarizaci�n en esta o futuras versiones de esta especificaci�n. El mecanismo de Notaci�n XML puede ser utilizado para la declaraci�n formal de destinos de PIs.

2.7 Secciones CDATA

Las secciones CDATA pueden aparecer all� donde pueden aparecer los datos car�cter. Se utilizan para "escapar" bloques de texto que contengan caracteres que de otra forma se reconocer�an como marcas. Las secciones CDATA comienzan por la cadena "<![CDATA[" y terminan con la cadena "]]>":

Secciones CDATA
[18] CDSect ::= CDStart CData CDEnd
[19] CDStart ::= '<![CDATA['
[20] CData ::= (Char* - (Char* ']]>' Char*))
[21] CDEnd ::= ']]>'

En una secci�n CDATA s�lo la cadena CDEnd se reconoce como marca, por lo tanto, el par�ntesis angular de apertura y el car�cter "ampersand" pueden aparecer de forma literal, es decir, no necesitan (y no pueden) ser "escapados" mediante "&lt;" ni "&amp;". No se pueden anidar las secciones CDATA.

Veamos un ejemplo de secci�n CDATA, en el cual "<saludo>" y "</saludo>" son reconocidos como datos car�cter, y no como marcas:

<![CDATA[<saludo>Hola, mundo!</saludo>]]>

2.8 Prolog y Declaraci�n de Tipo de Documento

Los documentos XML pueden, y deber�an, comenzar con una declaraci�n XML que especifica la versi�n de XML utilizada. Por ejemplo, el siguiente es un documento XML completo, bien-formado pero no v�lido:

<?xml version="1.0"?>
<saludo>Hola, mundo!</saludo>

y tambi�n lo es:

<saludo>Hola, mundo!</saludo>

El n�mero de versi�n "1.0" deber�a utilizarse para indicar la conformancia a esta versi�n de la especificaci�n. Se produce un error si un documento utiliza el valor "1.0" y �ste no conforma la especificaci�n de esta versi�n. Es intenci�n del Grupo de Trabajo XML el proveer de nuevos n�meros versiones de esta especificaci�n, pero no se asegura que habr�n futuras versiones de XML. Dado que no se han regulado futuras versiones, esta construcci�n se ha permitido para posibilitar el reconocimiento autom�ticamente de la versi�n, si fuese necesario. Los procesadores deben indicar que existe un error si reciben un documento etiquetado con una versi�n que no soportan.

La funci�n de las marcas en los documentos XML reside en describir su almacenamiento y estructura l�gica, as� como asociar pares atributo-valor con dicha estructura l�gica. XML proporciona un mecanismo, la declaraci�n de tipo de documento, para definir restricciones sobre las estructuras l�gicas y para contemplar el uso de unidades de almacenamiento predefinidas. Un documento XML es v�lido si tiene asociada una declaraci�n de tipo de documento y si el documento cumple las restricciones que all� se expresan.

La declaraci�n de tipo documento debe aparecer antes que el primer elemento en el documento.

Prolog
[22] prolog ::= XMLDecl? Misc* (doctypedecl Misc*)?
[23] XMLDecl ::= '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>'
[24] VersionInfo ::= S 'version' Eq (' VersionNum ' | " VersionNum ")
[25] Eq ::= S? '=' S?
[26] VersionNum ::= ([a-zA-Z0-9_.:] | '-')+
[27] Misc ::= CommentPIS

La declaraci�n de tipo de documento XML, contiene o describe declaraciones de marcas que proporcionan una gram�tica para una clase de documentos. Esta gram�tica se conoce como definici�n de tipo de documento o DTD. La declaraci�n de tipo de documento puede referirse a un subconjunto externo (un tipo especial de entidad externa) que contiene declaraciones, o puede contener las declaraciones de marcas directamente en un subconjunto interno, o puede hacer ambos. Una DTD para un documento consiste en la uni�n de ambos subconjuntos.

Una declaraci�n de marcaci�n es una declaraci�n de tipo de elemento, una declaraci�n de lista de atributos, una declaraci�n de entidad, o una declaraci�n de notaci�n. Estas declaraciones pueden estar contenidas en su totalidad o en parte en las entidades par�metro, como se describe en las restricciones de buena-formaci�n y validez. Para m�s informaci�n al respecto, ver la secci�n "4. Estructuras F�sicas".

Definici�n de Tipo de Documento
[28] doctypedecl ::= '<!DOCTYPE' S Name (S ExternalID)? S? ('[' (markupdeclPEReferenceS)* ']' S?)? '>' [ RV: Tipo de Elemento Ra�z ]
[29] markupdecl ::= elementdeclAttlistDeclEntityDeclNotationDeclPIComment [ RV: Declaraci�n Apropiada/Anidamiento de PEs ]
[ RBF: PEs en Subconj Interno ]

La declaraci�n de marcas puede estar constituida totalmente o en parte de texto de reemplazo de entidades par�metro. Las reglas de producci�n que aparecer�n en esta especificaci�n para los no terminales individuales (elementdecl, AttlistDecl, etc.) describen las declaraciones despu�s de que todas las entidades par�metro hayan sido incluidas.

Restricci�n de Validez: Tipo de Elemento Ra�z
El Nombre (Name) en la declaraci�n de tipo de documento debe ser igual al tipo de elemento del elemento ra�z.

Restricci�n de Validez: Declaraci�n Apropiada/Anidamiento de PEs
El texto de reemplazo de la entidad par�metro debe estar anidado apropiadamente dentro de la declaraci�n de marcas. Es decir, si el primer o el �ltimo car�cter en la declaraci�n de una marca (markupdecl arriba) est� contenido en el texto de reemplazo para una referencia a entidad par�metro, ambos deben estar contenidos en el mismo texto de reemplazo.

Restricci�n de Buena-Formaci�n: PEs en el Subconjunto Interno
En el subconjunto del DTD interno, las referencias a entidades par�metro s�lo pueden aparecer donde puedan aparecer las declaraciones de marcas, nunca dentro de las declaraciones de marcas. (Esto no se aplica a las referencias que aparecen en entidades par�metro externas o en el subconjunto externo.)

Como en el subconjunto interno, el subconjunto externo y cualquier entidad par�metro externa referenciada en el DTD debe consistir de una serie de declaraciones completas de marcas de los tipos permitidos por el s�mbolo no-terminal markupdecl, intercaladas con espacios en blanco o referencias a entidades par�metro. Sin embargo, porciones de los contenidos del subconjunto externo o de las entidades par�metro externas pueden ser ignoradas condicionalmente mediante la utilizaci�n de la construcci�n secci�n condicional; esto no est� permitido en el subconjunto interno.

Subconjunto Externo
[30] extSubset ::= TextDecl? extSubsetDecl
[31] extSubsetDecl ::= ( markupdeclconditionalSectPEReferenceS )*

El subconjunto externo y las entidades par�metro externas tambi�n difieren del subconjunto interno en que en ellos, las referencias a entidades par�metro son permitidas dentro de las declaraciones de marcas, no s�lo entre de ellas.

Un ejemplo de un documento XML con una declaraci�n de tipo de documento:

<?xml version="1.0"?>
<!DOCTYPE saludo SYSTEM "hola.dtd">
<saludo>Hola, mundo!</saludo>

El identificador de sistema "hola.dtd" proporciona el URI de una DTD para el documento.

Las declaraciones pueden tambi�n darse localmente, como es este ejemplo:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE saludo [
  <!ELEMENT saludo (#PCDATA)>
]>
<saludo>Hola, mundo!</saludo>

En ambos se utilizan tanto en el subconjunto interno, como en el externo. El interno se considera que aparezca antes que el externo. Esto indica que las declaraciones de entidades y de listas de atributos en el subconjunto interno toman precedencia sobre las de externo.

2.9 Declaraci�n de Documento Standalone

Las declaraciones de marcas pueden afectar al contenido de un documento, como cuando se pasan de un procesador XML a una aplicaci�n; un ejemplo de esto son los valores por defecto de los atributos y las declaraciones de entidades. La declaraci�n de documento standalone, que puede aparecer como componente de la declaraci�n XML, se�ala si existen o no dichas declaraciones que aparecen externamente a la entidad documento.

Declaraci�n de Documento Standalone
[32] SDDecl ::= S 'standalone' Eq (("'" ('yes' | 'no') "'") | ('"' ('yes' | 'no') '"')) [ RV: Declaraci�n de Documento Standalone ]

En la declaraci�n de documento standalone, el valor "yes" indica que no existen declaraciones de marcas externas a la entidad documento (ni en el subconjunto externo del DTD, ni en una entidad par�metro externa referenciada desde el subconjunto interno) que afecte a la informaci�n pasada desde el procesador XML a la aplicaci�n. El valor "no" indica que existe o que pueden haber dichas declaraciones externas de marcas. La declaraci�n de documento standalone s�lo denota la presencia de declaraciones externas; la presencia, en un documento, de referencias a entidades externas, cuando esas entidades son declaradas internamente, no cambia el estado standalone del documento.

Si no existen declaraciones externas de marcas, la declaraci�n de documento standalone no tiene sentido. Si, por el contrario, existiesen, pero no hay ninguna declaraci�n de documento standalone, se asume el valor "no".

Cualquier documento XML para el cual standalone="no" puede convertirse algor�tmicamente en un documento standalone, el cual puede ser necesario para algunas aplicaciones de env�o en un entorno de redes.

Restricci�n de Validez: Declaraci�n de Documento Standalone
La declaraci�n de documento standalone debe tener el valor "no" si cualquier declaraci�n externa de marcas contiene:

Un ejemplo de declaraci�n XML con una declaraci�n de documento standalone:

<?xml version="1.0" standalone='yes'?>

2.10 Manejo de "Espacios en Blanco"

En la edici�n de documentos XML, suele ser conveniente utilizar "espacios en blanco" (espacios, tabuladores y l�neas en blanco, denotadas por el no terminal S en esta especificaci�n) para mantener la legibilidad de las marcas. Generalmente estos caracteres no deben incluirse en una posible versi�n distribuible del documento a trav�s de una red. Por otro lado, existen ocasiones en las que es deseable la existencia de esos "espacios", por ejemplo en poes�a y en la representaci�n de c�digo fuente.

Un procesador XML debe pasar siempre todos los caracteres de un documento, que no sean marcas, a la aplicaci�n. Un procesador XML validador debe informar tambi�n a la aplicaci�n acerca de los caracteres que constituyen los "espacios en blanco" contenidos en el contenido del elemento.

Un atributo especial denominado xml:space puede ser adjuntado a un elemento para se�alar la necesidad de mantener los caracteres "espacio" en dicho elemento. Los "espacios" deben ser preservados por las aplicaciones. En los documentos v�lidos, este atributo, como cualquier otro, debe ser declarado si se utiliza. Cuando se declara, debe darse como un tipo enumerado cuyo �nico valor posible es "default" y "preserve". Por ejemplo:

    <!ATTLIST poema   xml:space (default|preserve) 'preserve'>

El valor "default" indica que el procesamiento por defecto por parte de las aplicaciones de los "espacios en blanco" es aceptable para este elemento. El valor "preserve" indica que las aplicaciones deben preservar todos los "espacios en blanco". Esta declaraci�n se considera aplicable a todos los elementos dentro del contenido del elemento donde esta especificada, salvo que se anule con otra instancia del atributo xml:space.

Se considera que el elemento ra�z de los documento, por defecto, no requiere el manejo especial de "espacios" de la aplicaci�n, si no tiene declarado este atributo.

2.11 Manejo "Fines de L�nea"

Las entidades analizadas XML son frecuentemente almacenadas en archivos de ordenador, y por conveniencia de edici�n, est�n organizados en l�neas. Estas l�neas est�n t�picamente separadas por una combinaciones de caracteres formada por "retorno de carro" (#xD) y "fin de l�nea" (#xA).

Para simplificar las tareas de las aplicaciones, bien sea una entidad analizada externa o una entidad valor literal de una entidad analizada interna, ambas contienen la secuencia literal de dos caracteres "#xD#xA" o un �nico literal #xD. Un procesador XML debe pasar �nicamente a la aplicaci�n el car�cter #xA. (Este comportamiento puede ser producido mediante la normalizaci�n de todos los "fines de l�nea" a caracteres #xA antes de ser analizados).

2.12 Identificaci�n del Lenguaje

En el procesado de documentos, suele ser �til la identificaci�n entre el lenguaje natural o el lenguaje formal, en el que est� escrito el contenido. Un atributo especial denominado xml:lang puede ser insertado en los documentos para especificar el lenguaje utilizado en los contenidos y los valores de atributos de cualquier elemento en un documento XML. En los documentos v�lidos, este atributo, como cualquier otro, debe ser declarado si se utiliza. Los valores de este atributo son identificadores de lenguajes como los definidos en el documento [IETF RFC 1766], "Etiquetas para la Identificaci�n de Lenguajes":

Identificaci�n de Lenguaje
[33] LanguageID ::= Langcode ('-' Subcode)*
[34] Langcode ::= ISO639CodeIanaCodeUserCode
[35] ISO639Code ::= ([a-z] | [A-Z]) ([a-z] | [A-Z])
[36] IanaCode ::= ('i' | 'I') '-' ([a-z] | [A-Z])+
[37] UserCode ::= ('x' | 'X') '-' ([a-z] | [A-Z])+
[38] Subcode ::= ([a-z] | [A-Z])+

La producci�n Langcode puede ser cualquiera de las siguientes:

Puede haber cualquier n�mero de segmentos Subcode. Si el primer segmento de subc�digo existe y ese subc�digo consiste en dos letras, �ste debe pertenecer al c�digo de un pa�s de la norma [ISO 3166], "C�digos para la representaci�n de nombres de pa�ses". Si el primer subc�digo contiene m�s de dos letras, �ste debe ser un subc�digo para el lenguaje en cuesti�n, registrado por la IANA, a no ser que Langcode comience por el prefijo "x-" o "X-".

Se suele acordar dar el c�digo del lenguaje en min�sculas, y el c�digo del pa�s (si tuviese) en may�sculas. Hay que resaltar que estos valores, a diferencia del resto de nombres en XML, son representables indistintamente en min�sculas o en may�sculas.

Por ejemplo:

<p xml:lang="en">The quick brown fox jumps over the lazy dog.</p>
<p xml:lang="en-GB">What colour is it?</p>
<p xml:lang="en-US">What color is it?</p>
<sp who="Faust" desc='leise' xml:lang="de">
  <l>Habe nun, ach! Philosophie,</l>
  <l>Juristerei, und Medizin</l>
  <l>und leider auch Theologie</l>
  <l>durchaus studiert mit hei�em Bem�h'n.</l>
  </sp>

El atributo xml:lang declarado se considera que debe aplicarse a todos los atributos y al contenido de los elementos donde esta especificado, a no ser que sea anulado por otra instancia de xml:lang en otro elemento de ese contenido.

Una simple declaraci�n para xml:lang puede tomar la forma:

xml:lang  NMTOKEN  #IMPLIED

pero tambi�n pueden darse los valores por defecto espec�ficos. En una colecci�n de poemas franceses para estudiantes ingleses, con notas en ingl�s, el atributo xml:lang puede ser declarado de la siguiente manera:

    <!ATTLIST poema       xml:lang NMTOKEN 'fr'>
    <!ATTLIST anotaci�n   xml:lang NMTOKEN 'en'>

3. Estructuras L�gicas

Cada documento XML contiene uno o m�s elementos, cuyos l�mites est�n delimitados por etiquetas de comienzo y etiquetas de fin, o en los elementos vac�os, por una etiqueta de elemento vac�o. Cada elemento tiene un tipo, identificado por un nombre, a veces denominado "identificador gen�rico" (GI: Generic Identifier), y puede tener un conjunto de especificaciones de atributos. Cada una de �stas tiene un nombre y un valor.

Elemento
[39] element ::= EmptyElemTag
STag content ETag [ RBF: Igualdad de Tipo de Elemento ]
[ RV: Elemento V�lido ]

Esta especificaci�n no restringe la sem�ntica, la utilizaci�n, o (m�s all� de la sintaxis) los nombres de los tipos de elementos y de los atributos, excepto los nombres que comiencen por (('X'|'x')('M'|'m')('L'|'l')) que est�n reservados para estandarizaci�n en esta o en futuras versiones de esta especificaci�n.

Restricci�n de Buena-Formaci�n: Igual de Tipo de Elemento
El Nombre en la etiqueta de fin de un elemento debe ser igual al de la etiqueta de comienzo.

Restricci�n de Validez: Elemento V�lido
Un elemento es v�lido si existe una declaraci�n que cumpla con la regla elementdecl donde el Nombre sea igual al tipo de elemento, y uno se mantenga uno de los siguientes:

  1. La declaraci�n cumple la regla EMPTY y el elemento no tiene contenido.
  2. La declaraci�n cumple la regla 'children' y la secuencia 'elementos child' pertenece al lenguaje generado por la expresi�n regular en el modelo de contenido, con espacios en blanco opcionales (caracteres que cumplan la regla S) entre todo par de elementos 'child'.
  3. La declaraci�n cumple la regla 'Mixed' y el contenido de la misma consiste en datos car�cter y 'elementos child' cuyos tipos sean iguales a los nombres del modelo de contenido.
  4. La declaraci�n cumple la regla ANY, y los tipos de cualquier 'elemento child' han sido declarados.

3.1 Etiquetas de Comienzo, Etiquetas de Fin y Etiquetas de "Elementos-Vac�os"

El comienzo de todo elemento XML no vac�o est� marcado por una etiqueta de comienzo.

Etiqueta de Comienzo
[40] STag ::= '<' Name (S Attribute)* S? '>' [ RBF: Espec Atrib �nico ]
[41] Attribute ::= Name Eq AttValue [ RV: Tipo de Valor Atributo ]
[ RBF: No Referencia a Entidad Externa ]
[ RBF: No < en Valores Atributo ]

El Nombre en las etiquetas de comienzo y de fin proporciona el tipo del elemento. Los pares Name-AttValue son referidos como las especificaciones de atributos del elemento, con el Name en cada par referido como el nombre de atributo y el contenido del AttValue (el texto entre los delimitadores ' o ") como el valor del atributo.

Restricci�n de Buena-Formaci�n: Especificaci�n de Atributo �nico
ning�n nombre de atributo puede aparecer m�s de una vez en la misma etiqueta de comienzo o de "elemento-vac�o".

Restricci�n de Validez: Tipo de Valor de los Atributos
El atributo debe haber sido declarado, el valor debe ser del tipo declarado para �l. (Para tipos de atributos, ver "3.3 Declaraciones de Listas de Atributos").

Restricci�n de Buena-Formaci�n: No Referencia a Entidades Externas
Los valores de los atributos no pueden contener entidades referencia directas o indirectas a entidades externas.

Restricci�n de Validez: No < en Valores de Atributos
El texto de reemplazo de cualquier entidad referenciada directa o indirectamente en un valor de atributo (cualquiera salvo "&lt;") no debe contener el car�cter <.

Un ejemplo de etiqueta de comienzo podr�a ser:

<defterm id="dt-perro" term="perro">

El final de todo elemento que comience con una etiqueta de comienzo debe ser marcado con una etiqueta de fin que contenga un nombre que responda al tipo de elemento dado en la etiqueta de comienzo:

Etiqueta de Fin
[42] ETag ::= '</' Name S? '>'

Un ejemplo de etiqueta de fin:

</defterm>

El texto entre las etiquetas de comienzo y de fin se denomina contenido:

Contenido de los Elementos
[43] content ::= (elementCharDataReferenceCDSectPIComment)*

Si un elemento est� vac�o, debe ser representado por una etiqueta de comienzo seguida de una etiqueta de fin, o por una etiqueta de "elemento-vac�o". Una etiqueta de "elemento-vac�o" tiene la siguiente forma:

Etiquetas para Elementos Vac�os
[44] EmptyElemTag ::= '<' Name (S Attribute)* S? '/>' [ RBF: �nico Atrib. Especif. ]

Las etiquetas de "elemento-vac�o" pueden ser utilizadas por cualquier elemento que no tenga contenido, sea o no declarado mediante la utilizaci�n de la palabra clave EMPTY. Por interoperatividad, la etiqueta de "elemento-vac�o" debe ser utilizada, y s�lo puede ser utilizada, en elementos que est�n declarados como EMPTY.

Ejemplos de "elementos-vac�os":

<IMG align="left"
 src="http://www.w3.org/Icons/WWW/w3c_home" />
<br></br>
<br/>

3.2 Declaraciones de Tipo de Elemento

La estructura elemento de un documento XML puede, a efectos de validaci�n, estar restringida mediante la utilizaci�n de declaraciones de tipos de elementos y de listas de atributos. Una declaraci�n de tipo de elemento restringe el contenido del propio elemento.

Las declaraciones de tipo de elemento suelen restringir el tipo de elementos que pueden aparecer como 'children' del citado elemento. Un procesador XML puede indicar una advertencia cuando una declaraci�n menciona un tipo de elemento para el que no se ha dado una declaraci�n, como opci�n del usuario, dado que esto no supone ser un error.

Una declaraci�n de tipo de elemento es de la forma:

Declaraci�n de Tipo de Elemento
[45] elementdecl ::= '<!ELEMENT' S Name S contentspec S? '>' [ RV: Declaraci�n de Tipo de Elemento �nico ]
[46] contentspec ::= 'EMPTY' | 'ANY' | Mixedchildren

donde la producci�n Name proporciona el tipo de elemento que se est� declarando.

Restricci�n de Validez: Declaraci�n �nica de Tipo de Elemento
Ning�n tipo de elemento debe ser declarado m�s de una vez.

Ejemplos de declaraciones de tipo de elemento:

<!ELEMENT br EMPTY>
<!ELEMENT p (#PCDATA|emph)* >
<!ELEMENT %name.para; %content.para; >
<!ELEMENT contenedor ANY>

3.2.1 Contenido del Elemento

Un tipo de element tiene contenido del elemento cuando los elementos de ese tipo deben contener s�lo elementos hijos (no datos car�cter), opcionalmente separados por "espacios en blanco" (caracteres que cumplan la regla S). En este caso, la restricci�n incluye un modelo de contenido, una gram�tica simple que gobierna los tipos de 'elementos hijo' permitidos y el orden en que pueden aparecer. La gram�tica est� constituida por part�culas de contenido (cps), que consisten en nombres, 'listas de selecci�n' de part�culas de contenido o 'listas secuencia' de part�culas de contenido:

Modelos de Contenido de Elemento
[47] children ::= (choiceseq) ('?' | '*' | '+')?
[48] cp ::= (Namechoiceseq) ('?' | '*' | '+')?
[49] choice ::= '(' S? cp ( S? '|' S? cp )* S? ')' [ RV: Grupo Apropiado/Anidamiento de PEs ]
[50] seq ::= '(' S? cp ( S? ',' S? cp )* S? ')' [ RV: Grupo Apropiado/Anidamiento de PEs ]

donde cada 'Name' es el tipo de un elemento que puede aparecer como un 'child'. Cualquier part�cula de contenido en una lista de selecci�n puede aparecer en el contenido del elemento donde la lista de selecci�n aparece en la gram�tica. Las part�culas de contenido que aparecen en las listas de secuencias deben aparecer cada una en el contenido del elemento en el orden dado en la lista. El car�cter opcional que sigue a un nombre o una lista gobierna si el elemento o las part�culas de contenido en la lista pueden aparecer una o m�s veces (+), cero o m�s (*), o cero o una vez (?). La ausencia de dicho operador significa que el elemento o part�cula de contenido debe aparecer exactamente una vez. Esta sintaxis y su significado son id�nticos a los utilizados en las reglas de producci�n de esta especificaci�n.

El contenido de una elemento es igual al modelo de contenido si y s�lo si es posible trazar una ruta a trav�s del modelo de contenido, obedeciendo la secuencia, opci�n y operadores de repetici�n e igualando cada elemento en el contenido contra un tipo de elemento en el modelo de contenido. Por compatibilidad, se produce un error si un elemento del documento puede ser igual a m�s de una ocurrencia de un tipo de elemento en el modelo de contenido. Para m�s informaci�n, ver "E. Modelos de Contenido Deterministas".

Restricci�n de Validez: Grupo apropiado/Anidamiento de PEs
Las entidades par�metro texto de reemplazo debe ser anidadas apropiadamente con grupos de par�ntesis. Es decir, si cualquiera de los par�ntesis de apertura o de cierre de una construcci�n choice, seq o Mixed est� contenida en el texto de reemplazo para una entidad par�metro, ambas deben estar contenidas en el mismo texto de reemplazo. Por interoperatividad, si una entidad par�metro aparece en una construcci�n choice, seq o Mixed, su texto de reemplazo no tendr�a que estar vac�o, y ni el primero ni el �ltimo car�cter 'no-blanco' del texto de reemplazo debe ser un 'conector'. (| o ,).

Ejemplos de modelos de contenido de elemento:

<!ELEMENT especif (frente, cuerpo, epilogo?)>
<!ELEMENT div1 (cabecera, (p | lista | nota)*, div2*)>
<!ELEMENT cuerpo-diccionario (%div.mix; | %dict.mix;)*>

3.2.2 "Contenido Mezclado"

Un tipo de elemento tiene "contenido mezclado" cuando los elementos de ese tipo pueden contener datos car�cter, opcionalmente entremezclados con elementos child. En este caso, los tipos de los elementos 'child' pueden ser restringidos, pero no su orden o su n�mero de apariciones:

Declaraci�n de "Contenido Mezclado"
[51] Mixed ::= '(' S? '#PCDATA' (S? '|' S? Name)* S? ')*'
| '(' S? '#PCDATA' S? ')' [ RV: Grupo Apropiado/Anidam. PEs ]
[ RV: No Tipos Duplicados ]

donde las construcciones Name dan los tipos de los elementos que pueden aparecer como hijos.

Restricci�n de Validez: No Duplicaci�n de Tipos
El mismo nombre no debe aparecer m�s de una vez en una sola declaraci�n de "contenido mezclado".

Ejemplos de declaraciones de contenido mezclado:

<!ELEMENT p (#PCDATA|a|ul|b|i|em)*>
<!ELEMENT p (#PCDATA | %font; | %phrase; | %special; | %form;)* >
<!ELEMENT b (#PCDATA)>

3.3 Declaraciones de Listas de Atributos

Los atributos se utilizan para asociar pares nombre-valor con elementos. Las especificaciones de atributos pueden aparecer s�lo dentro de las etiquetas de comienzo y en las etiquetas de element vac�o. Las reglas de producci�n utilizadas para reconocer su aparici�n en "3.1 Etiquetas de Comienzo, Etiquetas de Fin y Etiquetas de Elementos-Vac�os". Las declaraciones de Listas de Atributos pueden utilizarse para:

Las declaraciones de Listas de Atributos especifican el nombre, tipo de datos y valores por defecto (si tuvieran) para cada atributo asociado con un tipo de elemento dado:

Declaraciones de Listas de Atributos
[52] AttlistDecl ::= '<!ATTLIST' S Name AttDef* S? '>'
[53] AttDef ::= S Name S AttType S DefaultDecl

La expresi�n Name en la regla AttlistDecl es tipo del elemento. Como opci�n de usuario, los procesadores XML pueden indicar si los atributos est�n declarados para un tipo de elemento que no est� declarado, hecho que no constituye un error. La expresi�n Name en la regla AttDef es el nombre del atributo.

Cuando se proporciona m�s de una AttlistDecl para un tipo de elemento dado, los contenidos de todos esas declaraciones se entremezclan. Cuando se proporciona m�s de una definici�n para el mismo atributo de un tipo de elemento dado, se mantiene la primera declaraci�n y se ignora el resto. Por interoperatividad, los creadores de DTDs deben proporcionar, al menos, una declaraci�n de lista de atributos para un tipo de elemento dado, una definici�n de atributo para un nombre de atributo dado, y por lo menos una definici�n de atributo en cada declaraci�n de lista de atributos Por interoperatividad, los procesadores XML pueden indicar una alerta cuando se proporciona m�s de una declaraci�n de lista de atributos para un tipo de elemento dado, o m�s de una definici�n de atributo para una atributo dado. Esta es una opci�n de usuario y no supone ning�n tipo de error.

3.3.1 Tipos de Atributos

Los tipos de atributos de XML son de tres tipos: el tipo cadena, el conjunto de los tipos 'tokenizados' y los tipos enumerados. El tipo cadena puede tomar cualquier cadena literal como valor. Los tipos 'tokenizados' poseen restricciones l�xicas y sem�nticas variantes, como se describe a continuaci�n:

Tipos de Atributos
[54] AttType ::= StringTypeTokenizedTypeEnumeratedType
[55] StringType ::= 'CDATA'
[56] TokenizedType ::= 'ID' [ RV: ID ]
[ RV: Un ID por Tipo de Elemento ]
[ RV: Atributo por Defecto ID ]
| 'IDREF' [ RV: IDREF ]
| 'IDREFS' [ RV: IDREF ]
| 'ENTITY' [ RV: Nombre de Entidad ]
| 'ENTITIES' [ RV: Nombre de Entidad ]
| 'NMTOKEN' [ RV: Nombre de Token ]
| 'NMTOKENS' [ RV: Nombre de Token ]

Restricci�n de Validez: ID
Los valores de tipo ID deben ser iguales a la regla de producci�n Name. Un nombre no puede aparecer m�s de una vez de un documento XML como valor de este tipo. P.e.: los valores de ID s�lo deben identificar a los elementos que los producen.

Restricci�n de Validez: Un ID por Tipo de Elemento
Ning�n tipo de elemento puede tener m�s de un atributo ID especificado.

Restricci�n de Validez: Atributo por Defecto ID
Un atributo ID debe tener declarado por defecto el valor #IMPLIED o #REQUIRED.

Restricci�n de Validez: IDREF
Los valores del tipo IDREF deben ser iguales a la regla de producci�n Name, y los valores del tipo IDREFS deben ser iguales a Names. Cada Name debe ser igual al valor de un atributo ID de alguno de los elementos del documento XML. P.e. los valores de IDREF deben ser iguales a los valores de alg�n atributo ID.

Restricci�n de Validez: Nombre de Entidad
Los valores del tipo ENTITY deben ser iguales a la regla de producci�n Name, los valores del tipo ENTITIES deben ser iguales a Names. Cada Name debe ser igual al nombre de una entidad no analizada declarada en la DTD.

Restricci�n de Validez: Nombre de Token
Los valores del tipo NMTOKEN deben ser iguales a la regla de producci�n Nmtoken, los valores del tipo NMTOKENS deben ser iguales a Nmtokens.

Los atributos enumerados pueden tomar una de las listas de valores proporcionadas en la declaraci�n. Existen dos tipos de tipos enumerados:

Tipos de Atributos Enumerados
[57] EnumeratedType ::= NotationTypeEnumeration
[58] NotationType ::= 'NOTATION' S '(' S? Name (S? '|' S? Name)* S? ')' [ RV: Atributos de Notaci�n ]
[59] Enumeration ::= '(' S? Nmtoken (S? '|' S? Nmtoken)* S? ')' [ RV: Enumeraci�n ]

Un atributo NOTATION identifica una notaci�n, declarada en la DTD con su sistema asociado y/o identificadores p�blicos, para ser utilizados en la interpretaci�n del elemento al cual est� unido el atributo.

Restricci�n de Validez: Atributos de Notaci�n
Los valores de este tipo deben ser iguales a los del nombre de notaci�n incluidos en la declaraci�n. Todos los nombres de notaci�n de la declaraci�n deben ser declarados.

Restricci�n de Validez: Enumeraci�n
Los valores de este tipo deben ser iguales a los de los tokens Nmtoken de la declaraci�n.

Por interoperatividad, no puede aparecer el mismo Nmtoken m�s de una vez en los tipos de atributos enumerados de un �nico tipo de elemento.

3.3.2 Atributos por Defecto

Una declaraci�n de atributos proporciona informaci�n sobre si la presencia de los atributos es requerida, o sino, como debe reaccionar un procesador XML si un atributo declarado est� ausente en un documento.

Atributos por Defecto
[60] DefaultDecl ::= '#REQUIRED' |�'#IMPLIED'
| (('#FIXED' S)? AttValue) [ RV: Atributo Requerido ]
[ RV: Atributo por Defecto Legal ]
[ RBF: No < en Valores de Atributos ]
[ RV: Atributo por Defecto Fijado ]

En una declaraci�n de atributo, #REQUIRED significa que ese atributo debe ser dado siempre, #IMPLIED que no se da un valor por defecto. Si la declaraci�n no es ni #REQUIRED ni #IMPLIED, entonces el valor AttValue contiene el valor por defecto declarado. La palabra clave #FIXED indica que el atributo debe siempre tener el valor por defecto. Si se declara el valor por defecto, cuando un procesador XML encuentra un atributo omitido, debe comportarse como si el atributo estuviese presente, con el valor por defecto declarado.

Restricci�n de Validez: Atributo Requerido
Si la declaraci�n por defecto es la palabra clave #REQUIRED, el atributo debe ser especificado para todos los elementos del tipo de la declaraci�n de la lista de atributos.

Restricci�n de Validez: Atributo por Defecto Legal
El valor por defecto declarado debe cumplir las restricciones l�xicas del tipo de atributo declarado.

Restricci�n de Validez: Atributo por Defecto Fijado
Si un atributo tiene un valor por defecto declarado con la palabra clave #FIXED, las instancias de ese atributo deben ser iguales al valor por defecto.

Ejemplos de declaraciones de listas de atributos:

<!ATTLIST defterm
          id      ID      #REQUIRED
          nombre    CDATA   #IMPLIED>
<!ATTLIST lista
          tipo    (ordenada|glosario)  "ordenada">
<!ATTLIST formulario
          metodo  CDATA   #FIXED "POST">

3.3.3 Normalizaci�n de Atributos-Valor

Antes de que el valor de un atributo se pase a la aplicaci�n o se compruebe su validez, el procesador XML debe normalizarlo como se indica a continuaci�n:

Si el valor declarado no es de tipo CDATA, el procesador XML debe procesar el valor de atributo normalizado, mediante el descartado de cualquier car�cter espacio (#x20) por delante o por detr�s, y mediante el reemplazo de secuencias de caracteres espacio (#x20) por un �nico car�cter espacio (#x20).

Todos los atributos para los que no se ha le�do la declaraci�n debe ser tratado por un analizador no validador como se declara en CDATA.

3.4 Secciones Condicionales

Las secciones condicionales son porciones del subconjunto externo de la declaraci�n de tipo de documento que est�n incluidas en, o excluidas de, la estructura l�gica de la DTD basada en la palabra clave que las gobierna.

Secci�n Condicionales
[61] conditionalSect ::= includeSectignoreSect
[62] includeSect ::= '<![' S? 'INCLUDE' S? '[' extSubsetDecl ']]>'
[63] ignoreSect ::= '<![' S? 'IGNORE' S? '[' ignoreSectContents* ']]>'
[64] ignoreSectContents ::= Ignore ('<![' ignoreSectContents ']]>' Ignore)*
[65] Ignore ::= Char* - (Char* ('<![' | ']]>') Char*)

Como ocurre con los subconjuntos de la DTD internos y externos, una secci�n condicional puede contener una o m�s declaraciones completas, comentarios, instrucciones de procesamiento o secciones condicionales anidadas, entremezcladas con espacios en blanco.

Si la palabra clave de la secci�n condicional es INCLUDE, los contenidos de la secci�n condicional son parte de la DTD. Si la palabra clave es por el contrario IGNORE, los contenidos de la secci�n condicional no son parte l�gica de la DTD. Hay que subrayar que para poder realizar un an�lisis con confianza, incluso los contenidos de la secciones condicionales ignoradas debe ser le�do para poder detectar secciones condicionales anidadas y asegurar que el final de la secci�n ignorada m�s extrema se detecta de manera adecuada. Si una secci�n condicional con la palabra clave INCLUDE aparece dentro de una secci�n condicional m�s grande con la palabra clave IGNORE, ambas, la m�s exterior y la interior son ignoradas.

Si la palabra clave de la secci�n condicional es una referencia a entidad par�metro, la entidad par�metro debe ser reemplazada por su contenido antes de que el procesador decida si incluye o ignora la secci�n condicional.

Un ejemplo:

<!ENTITY % borrador 'INCLUDE' >
<!ENTITY % final 'IGNORE' >
 
<![%borrador;[
<!ELEMENT libro (comentarios*, titulo, cuerpo, suplementos?)>
]]>
<![%final;[
<!ELEMENT libro (titulo, cuerpo, suplementos?)>
]]>

4. Estructuras F�sicas

Un documento XML puede consistir de una o m�s unidades de almacenamiento. Estas se denominan entidades, y todas ellas poseen contenidos y todas son (excepto la entidad documento, ver m�s abajo, y el subconjunto externo de la DTD) identificadas por su nombre. Cada documento XML posee una entidad denominada entidad documento, la cual sirve de punto de comienzo al procesador XML y que puede contener a todo el documento.

Las entidades pueden ser analizadas o no analizadas. Los contenidos de una entidad analizada son referenciados como su texto de reemplazo. Este texto es considerado parte integral del documento.

Una entidad no analizada es un recurso cuyo contenido puede o no ser texto, y si lo es, puede que no sea XML. cada entidad no analizada tiene notaci�n asociada, identificada por su nombre. A parte de la necesidad de que los procesadores XML hagan accesibles los identificadores de la entidad y la notaci�n a la aplicaci�n, XML no impone ning�n otro tipo de restricciones a los contenidos de las entidades no analizadas.

Las entidades analizadas son invocadas por su nombre mediante la utilizaci�n de referencias a entidades, las no analizadas lo hacen por su nombre, dado en el valor de los atributos ENTITY o ENTITIES.

Las Entidades Generales son entidades que se utilizan dentro del contenido del documento. En esta especificaci�n, las entidades generales son referenciadas, a veces, simplemente con el t�rmino entidad, siempre y cuando no se produzcan ambig�edades. Las entidades par�metro son entidades analizadas que se utilizan en las DTDs. Estos dos tipos de entidades utilizan diferentes formas y referencias y son reconocidas en contextos diferentes, es m�s, ocupan diferentes espacios de nombres. Pueden existir una entidad par�metro y una entidad general con el mismo nombre, dado que son entidades diferentes.

4.1 Referencias a Caracteres y Entidades

Una referencia a car�cter hace referencia a un car�cter especifico del conjunto de caracteres de la norma ISO/IEC 10646. Un ejemplo puede ser un car�cter no accesible directamente a trav�s de los dispositivos de introducci�n de datos.

Referencia a Car�cter
[66] CharRef ::= '&#' [0-9]+ ';'
| '&#x' [0-9a-fA-F]+ ';' [ RBF: Car�cter Legal ]

Restricci�n de Buena-Formaci�n: Car�cter Legal
Los caracteres referenciados mediante la utilizaci�n de referencias a caracteres deben cumplir los requisitos de la regla de producci�n Char.

Si la referencia a car�cter comienza por "&#x", los d�gitos y las letras que le siguen hasta la aparici�n de ; proporcionan una representaci�n hexadecimal del punto c�digo del car�cter en la norma ISO/IEC 10646. Si comienza por "&#", los d�gitos que aparecen hasta la aparici�n de ; indican una representaci�n decimal del punto c�digo de car�cter.

Una referencia a entidad referencia al contenido de una entidad con nombre. Las referencias a entidades generales analizadas utilizan el car�cter ampersand (&) y, el punto y coma (;) como delimitadores. Las referencias a entidades par�metro utilizan el signo de porcentaje (%) y el punto y coma (;) como delimitadores.

Referencia a Entidad
[67] Reference ::= EntityRefCharRef
[68] EntityRef ::= '&' Name ';' [ RBF: Entidad Declarada ]
[ RV: Entidad Declarada ]
[ RBF: Entidad Analizada ]
[ RBF: No Recursi�n ]
[69] PEReference ::= '%' Name ';' [ RV: Entidad Declarada ]
[ RBF: No Recursi�n ]
[ RBF: En DTD ]

Restricci�n de Buena-Formaci�n: Entidad Declarada
En los documentos sin ning�n DTD, un documento con s�lo un subconjunto de DTD interno que no contiene referencias a entidades par�metro, o un documento con la cl�usula "standalone='yes'", el s�mbolo Name dado en la referencia a entidad debe ser igual al dado en una declaraci�n de entidad/A>, excepto en los documentos bien-formados que utilicen las entidades predeclaradas: amp, lt, gt, apos, quot. La declaraci�n de las entidades par�metro deben preceder a cualquier referencia a ellas. De igual manera, las declaraci�n de las entidades generales debe preceder a cualquier referencia a ellas que aparezca en la declaraci�n de los valores por defecto de una lista de atributos. Si las entidades se declaran en el subconjunto externo o en las entidades par�metro externas, los procesadores no validadores no est�n obligados a leer y procesar sus declaraciones. Para esos documentos, la regla que dice que una entidad debe ser declarada es una restricci�n de buena-formaci�n s�lo si se da lo siguiente: standalone='yes'.

Restricci�n de Validez: Entidad Declarada
En los documentos con un subconjunto externo o entidades par�metro externas con la expresi�n "standalone='no'", el Name dado en la referencia a entidad debe ser igual al dado en una declaraci�n de entidad. Por interoperatividad, los documentos v�lidos deber�an declarar las entidades amp, lt, gt, apos, quot, de la manera especificada en la secci�n "4.6 Entidades Predefinidas". La declaraci�n de una entidad par�metro debe preceder a cualquier referencia a ella. De manera similar, la declaraci�n de una entidad general debe preceder a cualquier referencia a ella que aparezca en la declaraci�n de los valores por defecto de una lista de atributos.

Restricci�n de Buena-Formaci�n: Entidad Analizada
Una referencia a entidad no debe contener el nombre de una entidad no analizada. Las entidades no analizadas s�lo pueden ser referenciadas en valores de atributos declarados para ser del tipo ENTITY o ENTITIES.

Restricci�n de Buena-Formaci�n: No Recursi�n
Una entidad analizada no debe contener una referencia recursiva a s� misma, ni directa ni indirectamente.

Buena-Formaci�n Restricci�n: En DTD
Las referencias a entidades par�metro s�lo pueden aparecer en la DTD.

Ejemplos de referencias a caracteres y entidades:

Pulse <tecla>menor</tecla> (&#x3C;) para guardar las opciones.
Este documento fue creado el &fechadoc; y
su clasificaci�n &nivel-seguridad;.

Ejemplos de referencias a entidades par�metro:

<!-- declarar la entidad par�metro "ISOLat2"... -->
<!ENTITY % ISOLat2
         SYSTEM "http://www.xml.com/iso/isolat2-xml.entities" >
<!-- ... ahora hacerle referencia. -->
%ISOLat2;

4.2 Declaraciones de Entidad

Las entidades son declaradas de este modo:

Declaraci�n de Entidades
[70] EntityDecl ::= GEDeclPEDecl
[71] GEDecl ::= '<!ENTITY' S Name S EntityDef S? '>'
[72] PEDecl ::= '<!ENTITY' S '%' S Name S PEDef S? '>'
[73] EntityDef ::= EntityValue | (ExternalID NDataDecl?)
[74] PEDef ::= EntityValueExternalID

El s�mbolo Name identifica la entidad en una referencia a entidad o, en el caso de una entidad no analizada, en el valor de los atributos ENTITY o ENTITIES. Si se declara la misma entidad m�s de una vez, se le vincula la primera declaraci�n encontrada. Como opci�n de usuario, los procesadores XML pueden indicar si las entidades pueden ser declaradas m�ltiples veces.

4.2.1 Entidades Internas

Si la definici�n de entidad es un EntityValue, la entidad definida se denomina entidad interna. No existe ning�n objeto f�sico de almacenamiento separado, y el contenido de la entidad se da en la declaraci�n. Algunos procesados de entidades y referencias a caracteres en el valor de la entidad literal pueden ser requeridos para producir el texto de reemplazo correcto: v�ase "4.5 Construcci�n de Texto de Reemplazo de Entidad Interna".

Una entidad interna es una entidad analizada.

Un ejemplo de una declaraci�n de entidad interna:

<!ENTITY Estado-Pub "Esta es una pre-edici�n de la
 Especificaci�n.">

4.2.2 Entidades Externas

Si la entidad no es interna, es una entidad externa, declarada como sigue:

Declaraci�n de Entidad Externa
[75] ExternalID ::= 'SYSTEM' S SystemLiteral
| 'PUBLIC' S PubidLiteral S SystemLiteral
[76] NDataDecl ::= S 'NDATA' S Name [ RV: Notaci�n Declarada ]

Si NDataDecl est� presente, �sta es una entidad no analizada general, sino, es una entidad analizada.

Restricci�n de Validez: Notaci�n Declarada
El Name debe ser igual al nombre declarado de una notaci�n.

A SystemLiteral se le denomina identificador de sistema de la entidad. Es un URI que puede ser utilizado para obtener la entidad. El s�mbolo de 'sostenido' (#) y el identificador de fragmento frecuentemente utilizados con URIs no son, formalmente, parte del propio URI. Los procesadores XML podr�an se�alar un error si es dado un identificador de fragmento como parte de un identificador de sistema. Si no se proporciona otra informaci�n fuera del �mbito de esta especificaci�n (e.g. un tipo especial de elemento XML definido por una DTD particular, o una instrucci�n de procesamiento definida por la especificaci�n de una aplicaci�n particular), los URIs relativos son relativos a la localizaci�n del recurso dentro del que ocurre la declaraci�n de entidad. Un URI podr�a ser relativo a la entidad documento, a la entidad que contenga el subconjunto de DTD externa, o a alguna otra entidad par�metro externa.

Los procesadores XML deber�an manejar los caracteres no ASCII en un URI mediante la representaci�n del car�cter en UTF-8 como uno o m�s de bytes, y despu�s 'escapar' estos bytes con el 'mecanismo de escapado' de los URIs (e.g., convirtiendo cada byte a %HH, donde HH es la notaci�n hexadecimal del valor del byte).

Adicionalmente al identificador de sistema, un identificador externo puede incluir un identificador p�blico. Los procesadores XML que traten de obtener el contenido de la entidad pueden utilizar el identificador p�blico para intentar generar un URI alternativo. Si el procesador no es capaz de hacer esto, debe utilizar el URI especificado en el literal de sistema. Antes de aceptar una igualdad, todas las cadenas de espacios en blanco del identificador p�blico deben ser normalizadas a caracteres espacio �nicos (#x20), y deben eliminarse los espacios en blanco del comienzo y del final.

Un ejemplo de declaraci�n de entidad externa:

<!ENTITY abrir-trampa
         SYSTEM "http://www.textuality.com/boilerplate/AbrirTrampa.xml">
<!ENTITY abrir-trampa
         PUBLIC "-//Textuality//TEXT Standard abrir-trampa boilerplate//EN"
         "http://www.textuality.com/boilerplate/AbrirTrampa.xml">
<!ENTITY img-trampa
         SYSTEM "../grafix/AbrirTrampa.gif"
         NDATA gif >

4.3 Entidades Analizadas

4.3.1 Declaraci�n de Texto

Las entidades analizadas externas pueden empezar, cada una de ellas, con una declaraci�n de texto.

Declaraci�n de Texto
[77] TextDecl ::= '<?xml' VersionInfo? EncodingDecl S? '?>'

La declaraci�n de texto debe ser proporcionada literalmente, no por referencia a una entidad analizada. Ninguna declaraci�n de texto puede aparecer en cualquier posici�n que no sea el comienzo de una entidad analizada externa.

4.3.2 Entidades Analizadas Bien-Formadas

La entidad documento est� bien-formada si cumple la producci�n denominada document. Una entidad analizada general externa est� bien-formada si cumple la producci�n denominada extParsedEnt. Una entidad par�metro externa est� bien-formada si cumple la producci�n denominada extPE.

Entidad Analizada Externa Bien-Formada
[78] extParsedEnt ::= TextDecl? content
[79] extPE ::= TextDecl? extSubsetDecl

Una entidad analizada general interna est� bien-formada si su texto de reemplazo cumple la producci�n denominada content. Todas las entidades par�metro internas est�n bien-formadas por definici�n.

Una consecuencia de la buena-formaci�n en entidades es que las estructuras l�gica y f�sica en los documentos XML est�n anidadas apropiadamente. Ninguna etiqueta de comienzo, etiqueta de fin, etiqueta de elemento vac�o, elemento, comentario, instrucci�n de procesamiento, referencia a car�cter o referencia a entidad puede comenzar en una entidad y terminar en otra.

4.3.3 Codificaci�n de Caracteres en Entidades

Cada entidad analizada externa en un documento XML puede utilizar una codificaci�n diferente para sus caracteres. Todos los procesadores XML deben ser capaces de leer entidades tanto UTF-8 como en UTF-16.

Las entidades codificadas en UTF-16 deben comenzar con la 'Byte Order Mark' descrita por la norma ISO/IEC 10646 Anexo E y Ap�ndice B de Unicode (el car�cter 'ZERO WIDTH NO-BREAK SPACE', #xFEFF). Esta es una se�al de codificaci�n, no parte de la marcaci�n o de los datos car�cter del documento XML. Los procesadores XML deben ser capaces de utilizar este car�cter para diferenciar entre documentos codificados en UTF-8 o en UTF-16.

Aunque s�lo se requiere que los procesadores XML lean entidades en las codificaciones UTF-8 y UTF-16, se reconoce que se utilizan otras codificaciones en el mundo, y puede ser deseable que un procesador XML pueda leer entidades que las utilicen. Las entidades analizadas que se almacenan en una codificaci�n que no sea UTF-8 o UTF-16 deben comenzar con una declaraci�n de texto que contenga una declaraci�n de codificaci�n:

Declaraci�n de Codificaci�n
[80] EncodingDecl ::= S 'encoding' Eq ('"' EncName '"' |  "'" EncName "'" )
[81] EncName ::= [A-Za-z] ([A-Za-z0-9._] | '-')* /* El nombre de la codificaci�n s�lo contiene caracteres latinos */

en la entidad documento, la declaraci�n de codificaci�n es parte de la declaraci�n XML. La regla EncName es el nombre de la codificaci�n utilizada.

En las declaraciones de codificaci�n, los valores "UTF-8", "UTF-16", "ISO-10646-UCS-2" y "ISO-10646-UCS-4" deben ser utilizados para las diferentes codificaciones y transformaciones de Unicode / ISO/IEC 10646, los valores "ISO-8859-1", "ISO-8859-2", ... "ISO-8859-9" deben ser utilizados para las partes de la ISO 8859, y los valores "ISO-2022-JP", "Shift_JIS" y "EUC-JP" deben ser utilizados para las diferentes formas de codificaci�n de JIS X-0208-1997. Los procesadores XML deber�an reconocer otras codificaciones, se recomienda que sean las codificaciones de caracteres registradas (como charsets) por la Internet Assigned Numbers Authority [IANA], otras codificaciones s�lo ser�n referenciadas mediante la utilizaci�n de sus nombres registrados. Estos nombres registrados est�n definidos para no ser sensibles al tipo, por lo que los procesadores que quieran contemplarlos deber�n tratarlos de ese modo.

En la ausencia de informaci�n proporcionada por un protocolo de transporte externo (e.g. HTTP o MIME), es un error que una entidad incluya una declaraci�n de codificaci�n para ser presentada al procesador XML en una codificaci�n diferente a la nombrada en la declaraci�n, que una declaraci�n de codificaci�n aparezca en un lugar que no sea el comienzo de una entidad externa, o que una entidad que no comience una 'Byte Order Mark' o una declaraci�n de codificaci�n utilice una codificaci�n que no sea UTF-8. Dado que ASCII es un subconjunto de UTF-8, no es estrictamente necesaria una declaraci�n de codificaci�n para las entidades ordinarias ASCII.

Se produce un error fatal si un procesador XML encuentra una entidad con una codificaci�n que es incapaz de procesar.

Ejemplos de declaraciones de codificaci�n:

<?xml encoding='UTF-8'?>
<?xml encoding='EUC-JP'?>

4.4 Tratamiento de Entidades y Referencias por el Procesador XML

La tabla de abajo resume el contexto en el que pueden aparecer las referencias a caracteres, las referencias a entidades y las invocaciones de entidades no analizadas y el comportamiento requerido de los procesadores XML en cada caso. Las etiquetas de la columna de la izquierda describen el contexto de reconocimiento:

Referencia en Contenido
como una referencia en cualquier lugar despu�s de la etiqueta de comienzo y antes de la etiqueta de fin de un elemento, corresponde al no-terminal content.
Referencia en Valor de Atributo
como una referencia dentro del valor de un atributo en una etiqueta de comienzo, o un valor por defecto en una declaraci�n de atributo; corresponde al no-terminal AttValue.
Aparece como Valor de Atributo
como un Name, no una referencia, apareciendo tanto como el valor de un atributo que haya sido declarado con tipo ENTITY, o como uno de los 'tokens' separados por espacios en el valor de un atributo que ha sido declarado con tipo ENTITIES.
Referencia en Valor de Entidad
como una referencia dentro del valor literal de una entidad par�metro o una entidad interna en la declaraci�n de la entidad; corresponde al no-terminal EntityValue.
Referencia en DTD
como una referencia dentro de los subconjuntos interno o externo de la DTD, pero fuera de EntityValue o de AttValue.
Tipo Entidad Car�cter
Par�metro Interna
General
Externa Analizada
General
No Analizada
Referencia
en Contenido
No reconocida Incluida Incluida si validada Prohibida Incluida
Referencia en
Valor de Atributo
No reconocida Incluida en literal Prohibida Prohibida Incluida
Aparece como
Valor de Atributo
No reconocida Prohibida Prohibida Notificar No reconocida
Referencia
en EntityValue
Incluida en literal Obviada Obviada Prohibida Incluida
Referencia
en DTD
Incluida como PE Prohibida Prohibida Prohibida Prohibida

4.4.1 No Reconocidas

Fuera de la DTD, el car�cter % no tiene un significado especial; de este modo, lo que ser�a una referencia a una entidad par�metro en una DTD no es reconocido como marcaci�n en el contenido. De igual manera, los nombres de las entidades no analizadas no son reconocidos excepto cuando aparecen en el valor de un atributo declarado apropiadamente.

4.4.2 Incluidas

Una entidad es incluida cuando su texto de reemplazo es obtenido y procesado, en lugar de la propia referencia, como si fuese parte del documento en el lugar donde fue reconocida la referencia. El texto de reemplazo puede contener datos car�cter y marcaciones (excepto para entidades par�metro), que deben ser reconocidos de la forma habitual, a no ser que el texto de reemplazo de las entidades utilizado para 'escapar' delimitadores de marcaci�n (las entidades amp, lt, gt, apos, quot) siempre se tratan como datos. (La cadena "AT&amp;T;" se expande como "AT&T;" y el 'ampersand' restante no es reconocido como un delimitador de referencia-entidad). Una referencia a car�cter es incluida cuando el car�cter indicado es procesado en lugar de la referencia propiamente dicha.

4.4.3 Incluidas Si Validadas

Cuando un procesador XML reconoce una referencia a una entidad analizada, en vez de validar el documento, el procesador debe incluir su texto de reemplazo. Si la entidad es externa y el procesador no intenta validar el documento XML, el procesador puede, pero no necesita, incluir el texto de reemplazo de la entidad. Si un analizador no validador no incluye el texto de reemplazo, debe informar a la aplicaci�n que reconoci�, pero que no ley�, la entidad.

Esta regla se basa en el reconocimiento que la inclusi�n autom�tica proporcionada por SGML y el mecanismo de entidad XML, principalmente dise�ada para soportar la modularidad en la creaci�n. No es necesariamente apropiada para otras aplicaciones, en particular para visualizaci�n de documentos. Los visualizadores, por ejemplo, cuando encuentran una referencia a entidad externa analizada, pueden elegir entre proporcionar una indicaci�n visual de la presencia de la entidad y obtenerla para su visualizaci�n bajo demanda.

4.4.4 Prohibidas

Los siguientes est�n prohibidos y constituyen errores fatales:

4.4.5 Incluidas en Literal

Cuando una referencia a entidad aparece en un valor de atributo, o una referencia a entidad par�metro aparece en un valor de entidad literal, su texto de reemplazo es procesado en lugar de la propia referencia, en la que parte documento donde es reconocida la referencia, excepto el car�cter comilla simple o doble en el texto de reemplazo que siempre es tratado como un dato car�cter normal y no terminar� el literal. Por ejemplo, esto est� bien-formado:

<!ENTITY % SN '"S�"' >
<!ENTITY LoQueDijo "El dijo &SN;" >

mientras que esto no lo est�:

<!ENTITY FinAtrib "27'" >
<elemento atributo='a-&FinAtrib;>

4.4.6 Notificar

Cuando el nombre de una entidad no analizada aparece como un 'token' en el valor de un atributo de los tipos declarados ENTITY o ENTITIES, un procesador validador debe informar a la aplicaci�n sobre los identificadores de sistema y p�blicos (si hubiese alguno) para ambas entidades y su notaci�n asociada.

4.4.7 Obviadas

Cuando aparece una referencia a entidad general en EntityValue en una declaraci�n de entidad, es obviado y dejado como est�.

4.4.8 Incluidas como PEs

Tal como ocurre con las entidades externas analizadas, las entidades par�metro s�lo necesitan ser incluidas si se valida. Cuando una referencia a entidad par�metro es reconocida en la DTD e incluida, su texto de reemplazo es alargado mediante la adici�n de car�cter de comienzo y un car�cter espacio (#x20). La intenci�n es restringir el texto de reemplazo a entidades par�metro para contener un n�mero integral de 'tokens' gramaticales en la DTD.

4.5 Construcci�n de Texto de Reemplazo de Entidad Interna

En la discusi�n del tratamiento de entidades internas, es �til distinguir dos formas de valores de entidad. El valor de entidad literal es la cadena de caracteres entrecomillada actualmente presente en la declaraci�n de la entidad, correspondiente al no terminal EntityValue. El texto de reemplazo es el contenido de la entidad, despu�s del reemplazo de las referencias a caracteres y a entidades par�metro.

El valor literal de la entidad como se da en una declaraci�n de entidad interna (EntityValue) puede contener caracteres, entidades par�metro y referencias a entidades generales. Dichas referencias deben ser contenidas completamente dentro del valor literal de la entidad. El texto de reemplazo actual que est� incluido como se describe arriba debe contener el texto de reemplazo de cualesquiera entidades par�metro referenciadas, y debe contener el car�cter referenciado, en lugar de cualquier referencia a car�cter en el valor literal de la entidad. Sin embargo, las referencias a entidades generales deben ser dejadas como est�n, sin expandir. Por ejemplo, dadas las siguientes declaraciones:

<!ENTITY % editorial "&#xc9;ditions Gallimard" >
<!ENTITY   derechos  "Todos los derechos reservados" >
<!ENTITY   libro     "La Peste: Albert Camus, 
&#xA9; 1947 %editorial;. &derechos;" >

luego el texto de reemplazo para la entidad "libro" es:

La Peste: Albert Camus, 
� 1947 éditions Gallimard. &derechos;

La referencia a entidad general "&derechos;" ser�a expandida si la referencia "&libro;" apareciera en el contenido del documento o en el valor de un atributo.

Estas simples reglas pueden crear complejas interacciones. Para una discusi�n detallada de un ejemplo dif�cil, v�ase "D. Expansi�n de Referencias a Entidades y Caracteres".

4.6 Entidades Predefinidas

Las referencias a entidades y a caracteres pueden ser utilizadas para 'escapar' el par�ntesis angular de apertura, el ampersand y otros delimitadores. Se especifica un conjunto de entidades generales para (amp, lt, gt, apos, quot) este prop�sito. Tambi�n se pueden utilizar referencias a caracteres num�ricos, que se expanden inmediatamente cuando son reconocidas y deben ser tratadas como datos car�cter, por lo que las referencias a caracteres num�ricos "&#60;" y "&#38;" pueden ser utilizadas para 'escapar' < y & cuando aparecen en los datos car�cter.

Todos los procesadores XML deben reconocer estas entidades bien si son declaradas o no. Por interoperatividad, los documentos XML v�lidos deber�an declarar estas entidades, como cualesquiera otras, antes de utilizarlas. Si las entidades en cuesti�n son declaradas, deben ser declaradas como entidades internas cuyo texto de reemplazo sea �nicamente el car�cter 'escapado' o una referencia a car�cter a dicho car�cter en s�, como se muestra abajo.

<!ENTITY lt     "&#38;#60;"> 
<!ENTITY gt     "&#62;"> 
<!ENTITY amp    "&#38;#38;"> 
<!ENTITY apos   "&#39;"> 
<!ENTITY quot   "&#34;"> 

Los caracteres < y & en las declaraciones de "lt" y "amp" son 'escapados' doblemente para satisfacer los requerimientos de la buena-formaci�n de entidades de reemplazo.

4.7 Declaraciones de Notaci�n

Las notaciones identifican por su nombre el formato de las entidades no analizadas, el formato de los elementos que dependen de un atributo de notaci�n, o la aplicaci�n a la que instrucci�n de procesamiento est� destinada.

Las declaraciones de notaci�n proporcionan un nombre para la notaci�n, para ser utilizado en la entidad, en las declaraciones de listas de atributos y en las especificaciones de atributos, y un identificador externo para la notaci�n que pueda permitir que los procesadores XML o sus aplicaciones clientes localicen aplicaciones auxiliadora capaz de procesar datos en la notaci�n dada.

Declaraciones de Notaci�n
[82] NotationDecl ::= '<!NOTATION' S Name S (ExternalIDPublicID) S? '>'
[83] PublicID ::= 'PUBLIC' S PubidLiteral

los procesadores XML deben proporcionar a las aplicaciones el nombre y el/los identificador/es externos de cualquier notaci�n declarada y referenciada en los valores de atributos, definiciones de atributos o declaraciones de entidades. Adicionalmente pueden convertir los identificadores externos en identificadores de sistema, nombres de archivos u otras informaciones necesarias para permitir a la aplicaci�n pedir al procesador los datos en la notaci�n descrita. (No es un error, sin embargo, que los documentos XML declaren y referencien a notaciones para las cuales no hay disponibles aplicaciones de notaci�n espec�fica en sistemas donde est� ejecut�ndose el procesador XML o la aplicaci�n).

4.8 Entidad Documento

La entidad documento sirve como ra�z del �rbol de entidades y de punto de comienzo para los procesadores XML. Esta especificaci�n no especifica c�mo localizar� la entidad documento el procesador XML. A diferencia de otras entidades, la entidad documento no tiene nombre y puede aparecer en la corriente de entrada de un procesador sin ning�n tipo de identificaci�n.

5. Conformancia

5.1 Procesadores Validadores y No Validadores

Los procesadores XML conformantes son de dos clases: validadores y no validadores.

Los procesadores validadores y los no validadores deben informar sobre las violaciones de las restricciones de buena-formaci�n de esta especificaci�n, en el contenido de la entidad documento y cualesquiera otras entidades analizadas que lean.

Los procesadores validadores deben informar de las violaciones de las restricciones expresadas por las declaraciones en la DTD, y de fallos para completar las restricciones de validez dadas en esta especificaci�n. Para llevar a cabo esto, los procesadores XML validadores deben leer y procesar la DTD completa y todas entidades externas analizadas referenciadas en el documento.

Los procesadores no validadores s�lo tienen que leer la entidad documento, incluyendo el subconjunto de DTD interno completo, para determinar la buena-formaci�n. Aunque no se requiera la comprobaci�n de la validez del documento, �stos tienen que procesar todas las declaraciones que lean en el subconjunto de la DTD interna y en cualquier entidad par�metro que lean, a partir de la primera referencia a entidades par�metro que no lean, es decir, deben utilizar la informaci�n en esas declaraciones para normalizar los valores de atributos, incluir el texto de reemplazo de las entidades internas y proporcionar valores de atributos por defecto. No deben procesar declaraciones de entidades o declaraciones de listas de atributos encontradas despu�s de una referencia a una entidad par�metro que no es le�da, dado que la entidad puede contener declaraciones anulantes.

5.2 Utilizaci�n de Procesadores XML

El comportamiento de los procesadores XML validadores es altamente predecible. Deben leer todos los trozos de documento e informar sobre todas las violaciones de buena-formaci�n y validez. Se requiere menos para un procesador no validador, no necesita leer ninguna parte del documento que no sea la entidad documento. Este genera dos efectos que pueden ser importantes para los usuarios de los procesadores XML:

Para una m�xima fiabilidad en la interoperatividad entre los diferentes procesadores, las aplicaciones que utilicen procesadores no validadores deber�an fiarse de los comportamientos no requeridos de esos procesadores. Las aplicaciones que requieran facilidades como el uso de atributos por defecto o entidades internas que sean declaradas en entidades externas deber�an utilizar procesadores XML validadores.

6. Notaci�n

La gram�tica formal de XML se da en esta especificaci�n utilizando una notaci�n 'Backus-Naur Extendida' (EBNF) muy simple. cada regla de la gram�tica define un s�mbolo, de la forma

 s�mbolo ::= expresi�n

Los s�mbolos se escriben con una letra may�scula inicial si son definidos por una expresi�n regular o sino, con una letra min�scula inicial. Las cadenas literales se entrecomillan.

En la expresi�n de la parte derecha de una regla, las siguientes expresiones se utilizan para contener a cadenas de uno a m�s caracteres:

#xN
donde N es un entero hexadecimal. Esta expresi�n se refiere a un car�cter de la norma ISO/IEC 10646 cuyo valor can�nico (UCS-4), se interpreta como un n�mero binario sin signo, con el valor indicado. El n�mero de ceros por la izquierda en la expresi�n #xN es insignificante. �stos son gobernados por el correspondiente valor de la codificaci�n utilizada y no son significativos para XML.
[a-zA-Z], [#xN-#xN]
cualquier car�cter con una valor en el(los) rango(s) indicado(s) (inclusive).
[^a-z], [^#xN-#xN]
cualquier car�cter con un valor fuera del rango indicado.
[^abc], [^#xN#xN#xN]
cualquier car�cter con una valor diferente a los caracteres dados.
"cadena"
una cadena literal exactamente igual a la contenida entre las comillas dobles.
'cadena'
una cadena literal exactamente igual a la contenida entre las comillas simples.
Estos s�mbolos pueden ser combinados para construir patrones m�s complejos como sigue. Donde A y B representan expresiones simples:
(expresi�n)
la expresi�n es tratada como una unidad y puede ser combinada como se describe en esta lista.
A?
contiene una A o nada; A opcional.
A B
aparece una A seguida de una B.
A | B
contiene A o B pero no ambas.
A - B
cualquier cadena que contenga A pero que no contenga B.
A+
una o m�s apariciones de A.
A*
cero o m�s apariciones de A.
Otras notaciones utilizadas en las reglas de producci�n son:
/* ... */
comentario.
[ rbf: ... ]
restricci�n de buena formaci�n: identifica una restricci�n sobre la buena formaci�n de documentos asociados con una regla de producci�n.
[ rv: ... ]
restricci�n de validez: identifica una restricci�n de validez sobre los documentos asociados con una regla de producci�n.

Ap�ndices

A. Referencias

A.1 Referencias Normativas

IANA
(Internet Assigned Numbers Authority) Official Names for Character Sets, ed. Keld Simonsen et al. V�ase ftp://ftp.isi.edu/in-notes/iana/assignments/character-sets.
IETF RFC 1766
IETF (Internet Engineering Task Force). RFC 1766: Tags for the Identification of Languages, ed. H. Alvestrand. 1995.
ISO 639
(International Organization for Standardization). ISO 639:1988 (E). Code for the representation of names of languages. [Geneva]: International Organization for Standardization, 1988.
ISO 3166
(International Organization for Standardization). ISO 3166-1:1997 (E). Codes for the representation of names of countries and their subdivisions -- Part 1: Country codes [Geneva]: International Organization for Standardization, 1997.
ISO/IEC 10646
ISO (International Organization for Standardization). ISO/IEC 10646-1993 (E). Information technology -- Universal Multiple-Octet Coded Character Set (UCS) -- Part 1: Architecture and Basic Multilingual Plane. [Geneva]: International Organization for Standardization, 1993 (plus amendments AM 1 through AM 7).
Unicode
The Unicode Consortium. The Unicode Standard, Version 2.0. Reading, Mass.: Addison-Wesley Developers Press, 1996.

A.2 Otras Referencias

Aho/Ullman
Aho, Alfred V., Ravi Sethi, and Jeffrey D. Ullman. Compilers: Principles, Techniques, and Tools. Reading: Addison-Wesley, 1986, rpt. corr. 1988.
Berners-Lee et al.
Berners-Lee, T., R. Fielding, and L. Masinter. Uniform Resource Identifiers (URI): Generic Syntax and Semantics. 1997. (En progreso; ver actualizaciones en RFC1738.)
Br�ggemann-Klein
Br�ggemann-Klein, Anne. Regular Expressions into Finite Automata. Extended abstract in I. Simon, Hrsg., LATIN 1992, S. 97-98. Springer-Verlag, Berlin 1992. Full Version in Theoretical Computer Science 120: 197-213, 1993.
Br�ggemann-Klein and Wood
Br�ggemann-Klein, Anne, and Derick Wood. Deterministic Regular Languages. Universit�t Freiburg, Institut f�r Informatik, Bericht 38, Oktober 1991.
Clark
James Clark. Comparison of SGML and XML. Ver http://www.w3.org/TR/NOTE-sgml-xml-971215.
IETF RFC1738
IETF (Internet Engineering Task Force).RFC 1738: Uniform Resource Locators (URL), ed. T. Berners-Lee, L. Masinter, M. McCahill.1994.
IETF RFC1808
IETF (Internet Engineering Task Force). RFC 1808: Relative Uniform Resource Locators, ed. R. Fielding. 1995.
IETF RFC2141
IETF (Internet Engineering Task Force). RFC 2141: URN Syntax, ed. R. Moats. 1997.
ISO 8879
ISO (International Organization for Standardization). ISO 8879:1986(E). Information processing -- Text and Office Systems -- Standard Generalized Markup Language (SGML). First edition -- 1986-10-15. [Geneva]: International Organization for Standardization, 1986.
ISO/IEC 10744
ISO (International Organization for Standardization). ISO/IEC 10744-1992 (E). Information technology -- Hypermedia/Time-based Structuring Language (HyTime). [Geneva]: International Organization for Standardization, 1992. Extended Facilities Annexe. [Geneva]: International Organization for Standardization, 1996.

B. Clases de Caracteres

Siguiendo con las caracter�sticas definidas en el est�ndar Unicode, los caracteres se clasifican en caracteres base (estos contienen los caracteres alfab�ticos de alfabeto latino, sin s�mbolos diacr�ticos), caracteres ideogr�ficos y caracteres combinatorios (que contienen a la mayor�a de caracteres diacr�ticos). Estas clases se combinan para formar la clase de las letras (letters). Los d�gitos y los 'extensores' tambi�n se distinguen.

Caracteres
[84] Letter ::= BaseCharIdeographic
[85] BaseChar ::= [#x0041-#x005A] |�[#x0061-#x007A] |�[#x00C0-#x00D6] |�[#x00D8-#x00F6] |�[#x00F8-#x00FF] |�[#x0100-#x0131] |�[#x0134-#x013E] |�[#x0141-#x0148] |�[#x014A-#x017E] |�[#x0180-#x01C3] |�[#x01CD-#x01F0] |�[#x01F4-#x01F5] |�[#x01FA-#x0217] |�[#x0250-#x02A8] |�[#x02BB-#x02C1] |�#x0386 |�[#x0388-#x038A] |�#x038C |�[#x038E-#x03A1] |�[#x03A3-#x03CE] |�[#x03D0-#x03D6] |�#x03DA |�#x03DC |�#x03DE |�#x03E0 |�[#x03E2-#x03F3] |�[#x0401-#x040C] |�[#x040E-#x044F] |�[#x0451-#x045C] |�[#x045E-#x0481] |�[#x0490-#x04C4] |�[#x04C7-#x04C8] |�[#x04CB-#x04CC] |�[#x04D0-#x04EB] |�[#x04EE-#x04F5] |�[#x04F8-#x04F9] |�[#x0531-#x0556] |�#x0559 |�[#x0561-#x0586] |�[#x05D0-#x05EA] |�[#x05F0-#x05F2] |�[#x0621-#x063A] |�[#x0641-#x064A] |�[#x0671-#x06B7] |�[#x06BA-#x06BE] |�[#x06C0-#x06CE] |�[#x06D0-#x06D3] |�#x06D5 |�[#x06E5-#x06E6] |�[#x0905-#x0939] |�#x093D |�[#x0958-#x0961] |�[#x0985-#x098C] |�[#x098F-#x0990] |�[#x0993-#x09A8] |�[#x09AA-#x09B0] |�#x09B2 |�[#x09B6-#x09B9] |�[#x09DC-#x09DD] |�[#x09DF-#x09E1] |�[#x09F0-#x09F1] |�[#x0A05-#x0A0A] |�[#x0A0F-#x0A10] |�[#x0A13-#x0A28] |�[#x0A2A-#x0A30] |�[#x0A32-#x0A33] |�[#x0A35-#x0A36] |�[#x0A38-#x0A39] |�[#x0A59-#x0A5C] |�#x0A5E |�[#x0A72-#x0A74] |�[#x0A85-#x0A8B] |�#x0A8D |�[#x0A8F-#x0A91] |�[#x0A93-#x0AA8] |�[#x0AAA-#x0AB0] |�[#x0AB2-#x0AB3] |�[#x0AB5-#x0AB9] |�#x0ABD |�#x0AE0 |�[#x0B05-#x0B0C] |�[#x0B0F-#x0B10] |�[#x0B13-#x0B28] |�[#x0B2A-#x0B30] |�[#x0B32-#x0B33] |�[#x0B36-#x0B39] |�#x0B3D |�[#x0B5C-#x0B5D] |�[#x0B5F-#x0B61] |�[#x0B85-#x0B8A] |�[#x0B8E-#x0B90] |�[#x0B92-#x0B95] |�[#x0B99-#x0B9A] |�#x0B9C |�[#x0B9E-#x0B9F] |�[#x0BA3-#x0BA4] |�[#x0BA8-#x0BAA] |�[#x0BAE-#x0BB5] |�[#x0BB7-#x0BB9] |�[#x0C05-#x0C0C] |�[#x0C0E-#x0C10] |�[#x0C12-#x0C28] |�[#x0C2A-#x0C33] |�[#x0C35-#x0C39] |�[#x0C60-#x0C61] |�[#x0C85-#x0C8C] |�[#x0C8E-#x0C90] |�[#x0C92-#x0CA8] |�[#x0CAA-#x0CB3] |�[#x0CB5-#x0CB9] |�#x0CDE |�[#x0CE0-#x0CE1] |�[#x0D05-#x0D0C] |�[#x0D0E-#x0D10] |�[#x0D12-#x0D28] |�[#x0D2A-#x0D39] |�[#x0D60-#x0D61] |�[#x0E01-#x0E2E] |�#x0E30 |�[#x0E32-#x0E33] |�[#x0E40-#x0E45] |�[#x0E81-#x0E82] |�#x0E84 |�[#x0E87-#x0E88] |�#x0E8A |�#x0E8D |�[#x0E94-#x0E97] |�[#x0E99-#x0E9F] |�[#x0EA1-#x0EA3] |�#x0EA5 |�#x0EA7 |�[#x0EAA-#x0EAB] |�[#x0EAD-#x0EAE] |�#x0EB0 |�[#x0EB2-#x0EB3] |�#x0EBD |�[#x0EC0-#x0EC4] |�[#x0F40-#x0F47] |�[#x0F49-#x0F69] |�[#x10A0-#x10C5] |�[#x10D0-#x10F6] |�#x1100 |�[#x1102-#x1103] |�[#x1105-#x1107] |�#x1109 |�[#x110B-#x110C] |�[#x110E-#x1112] |�#x113C |�#x113E |�#x1140 |�#x114C |�#x114E |�#x1150 |�[#x1154-#x1155] |�#x1159 |�[#x115F-#x1161] |�#x1163 |�#x1165 |�#x1167 |�#x1169 |�[#x116D-#x116E] |�[#x1172-#x1173] |�#x1175 |�#x119E |�#x11A8 |�#x11AB |�[#x11AE-#x11AF] |�[#x11B7-#x11B8] |�#x11BA |�[#x11BC-#x11C2] |�#x11EB |�#x11F0 |�#x11F9 |�[#x1E00-#x1E9B] |�[#x1EA0-#x1EF9] |�[#x1F00-#x1F15] |�[#x1F18-#x1F1D] |�[#x1F20-#x1F45] |�[#x1F48-#x1F4D] |�[#x1F50-#x1F57] |�#x1F59 |�#x1F5B |�#x1F5D |�[#x1F5F-#x1F7D] |�[#x1F80-#x1FB4] |�[#x1FB6-#x1FBC] |�#x1FBE |�[#x1FC2-#x1FC4] |�[#x1FC6-#x1FCC] |�[#x1FD0-#x1FD3] |�[#x1FD6-#x1FDB] |�[#x1FE0-#x1FEC] |�[#x1FF2-#x1FF4] |�[#x1FF6-#x1FFC] |�#x2126 |�[#x212A-#x212B] |�#x212E |�[#x2180-#x2182] |�[#x3041-#x3094] |�[#x30A1-#x30FA] |�[#x3105-#x312C] |�[#xAC00-#xD7A3]
[86] Ideographic ::= [#x4E00-#x9FA5] |�#x3007 |�[#x3021-#x3029]
[87] CombiningChar ::= [#x0300-#x0345] |�[#x0360-#x0361] |�[#x0483-#x0486] |�[#x0591-#x05A1] |�[#x05A3-#x05B9] |�[#x05BB-#x05BD] |�#x05BF |�[#x05C1-#x05C2] |�#x05C4 |�[#x064B-#x0652] |�#x0670 |�[#x06D6-#x06DC] |�[#x06DD-#x06DF] |�[#x06E0-#x06E4] |�[#x06E7-#x06E8] |�[#x06EA-#x06ED] |�[#x0901-#x0903] |�#x093C |�[#x093E-#x094C] |�#x094D |�[#x0951-#x0954] |�[#x0962-#x0963] |�[#x0981-#x0983] |�#x09BC |�#x09BE |�#x09BF |�[#x09C0-#x09C4] |�[#x09C7-#x09C8] |�[#x09CB-#x09CD] |�#x09D7 |�[#x09E2-#x09E3] |�#x0A02 |�#x0A3C |�#x0A3E |�#x0A3F |�[#x0A40-#x0A42] |�[#x0A47-#x0A48] |�[#x0A4B-#x0A4D] |�[#x0A70-#x0A71] |�[#x0A81-#x0A83] |�#x0ABC |�[#x0ABE-#x0AC5] |�[#x0AC7-#x0AC9] |�[#x0ACB-#x0ACD] |�[#x0B01-#x0B03] |�#x0B3C |�[#x0B3E-#x0B43] |�[#x0B47-#x0B48] |�[#x0B4B-#x0B4D] |�[#x0B56-#x0B57] |�[#x0B82-#x0B83] |�[#x0BBE-#x0BC2] |�[#x0BC6-#x0BC8] |�[#x0BCA-#x0BCD] |�#x0BD7 |�[#x0C01-#x0C03] |�[#x0C3E-#x0C44] |�[#x0C46-#x0C48] |�[#x0C4A-#x0C4D] |�[#x0C55-#x0C56] |�[#x0C82-#x0C83] |�[#x0CBE-#x0CC4] |�[#x0CC6-#x0CC8] |�[#x0CCA-#x0CCD] |�[#x0CD5-#x0CD6] |�[#x0D02-#x0D03] |�[#x0D3E-#x0D43] |�[#x0D46-#x0D48] |�[#x0D4A-#x0D4D] |�#x0D57 |�#x0E31 |�[#x0E34-#x0E3A] |�[#x0E47-#x0E4E] |�#x0EB1 |�[#x0EB4-#x0EB9] |�[#x0EBB-#x0EBC] |�[#x0EC8-#x0ECD] |�[#x0F18-#x0F19] |�#x0F35 |�#x0F37 |�#x0F39 |�#x0F3E |�#x0F3F |�[#x0F71-#x0F84] |�[#x0F86-#x0F8B] |�[#x0F90-#x0F95] |�#x0F97 |�[#x0F99-#x0FAD] |�[#x0FB1-#x0FB7] |�#x0FB9 |�[#x20D0-#x20DC] |�#x20E1 |�[#x302A-#x302F] |�#x3099 |�#x309A
[88] Digit ::= [#x0030-#x0039] |�[#x0660-#x0669] |�[#x06F0-#x06F9] |�[#x0966-#x096F] |�[#x09E6-#x09EF] |�[#x0A66-#x0A6F] |�[#x0AE6-#x0AEF] |�[#x0B66-#x0B6F] |�[#x0BE7-#x0BEF] |�[#x0C66-#x0C6F] |�[#x0CE6-#x0CEF] |�[#x0D66-#x0D6F] |�[#x0E50-#x0E59] |�[#x0ED0-#x0ED9] |�[#x0F20-#x0F29]
[89] Extender ::= #x00B7 |�#x02D0 |�#x02D1 |�#x0387 |�#x0640 |�#x0E46 |�#x0EC6 |�#x3005 |�[#x3031-#x3035] |�[#x309D-#x309E] |�[#x30FC-#x30FE]

Las clases de caracteres definidas aqu� pueden ser derivadas de la base de datos Unicode, de la siguiente manera:

C. XML y SGML (No Normativo)

XML est� dise�ado para ser un subconjunto de SGML, por lo tanto todo documento XML v�lido tambi�n debe ser un documento SGML "conformado". Para una comparaci�n detallada de las restricciones adicionales que XML impone a los documentos SGML, ver [Clark].

D. Expansi�n de Referencias a Entidades y Caracteres (No Normativo)

Este ap�ndice contiene algunos ejemplos que ilustran la secuencia de reconocimiento de referencias a entidades y caracteres y su expansi�n, como se especifica en la secci�n "4.4 Tratamiento de Entidades y Referencias por el Procesador XML".

Si la DTD contiene la declaraci�n

<!ENTITY ejemplo "<p>Un ampersand (&#38;#38;) puede ser "escapado"
num�ricamente (&#38;#38;#38;) o con una entidad general
(&amp;amp;).</p>" >

entonces el procesador XML reconocer� las referencias a caracteres cuando analice la declaraci�n de entidad, y las resolver� antes de almacenar la siguiente cadena como el valor de la entidad "ejemplo":

<p>Un ampersand (&#38;) puede ser "escapado"
num�ricamente (&#38;#38;) o con una entidad general
(&amp;amp;).</p>

Una referencia en el documento a "&ejemplo;" causar� que se reanalice el texto, al tiempo que las etiquetas de comienzo y de fin del elemento "p" ser�n reconocidas y las tres referencias ser�n reconocidas y expandidas, resultando un elemento "p" con el siguiente contenido (todos los datos, sin delimitadores ni marcas):

Un ampersand (&) puede ser "escapado"
num�ricamente (&#38;) o con una entidad general
(&amp;).

Un ejemplo algo m�s complejo puede ilustrar las reglas y sus todos sus efectos. En el siguiente ejemplo, los n�meros de l�nea s�lo son una referencia.

1 <?xml version='1.0'?>
2 <!DOCTYPE prueba [
3 <!ELEMENT prueba (#PCDATA) >
4 <!ENTITY % xx '&#37;zz;'>
5 <!ENTITY % zz '&#60;!ENTITY falso "error" >' >
6 %xx;
7 ]>
8 <prueba>Este ejemplo muestra un m�todo &falso;.</prueba>

Esto produce lo siguiente:

E. Modelos de Contenido Deterministas (No Normativo)

Por compatibilidad, se requiere que los modelos de contenido en las declaraciones de tipo de elemento sean determin�sticas.

SGML requiere modelos de contenido determin�sticos (se denominan "no ambiguos"). Los procesadores XML construidos utilizando sistemas SGML pueden indicar modelos de contenido no determin�sticos como errores.

Por ejemplo, el modelo de contenido ((b, c) | (b, d)) no es determin�stico porque dada una b inicial, el 'parser' no puede saber que b del modelo se est� tomando sin "mirar adelante" para ver que elemento sigue a esa b. En este caso, las dos referencias a b pueden ser reducidas a una haciendo que el modelo lea (b, (c | d)). Una b inicial, ahora, s�lo se iguala a un �nico modelo de contenido. El 'parser' no necesita "mirar adelante" para ver que sigue, si una c o una d, las dos se aceptar�n.

M�s formalmente: se puede construir un aut�mata de estados finitos partiendo del modelo de contenido, mediante la utilizaci�n de algoritmos est�ndares (p.e. el algoritmo 3.5 de la secci�n 3.9 de Aho, Sethi y Ullman [Aho/Ullman]). En muchos otros algoritmos, se construye un conjunto para cada posici�n de una expresi�n regular (p.e. cada nodo hoja en el �rbol sint�ctico de una expresi�n regular). Si cualquier posici�n tiene un conjunto en el cual m�s de una posici�n est� etiquetada con el mismo nombre de tipo de elemento, el modelo de contenido es err�neo y hay que informar de su existencia.

Existen algoritmos que permiten reducir autom�ticamente muchos, pero no todos los modelos de contenido no determin�sticos a determin�sticos. Ver Br�ggemann-Klein 1991 [Br�ggemann-Klein].

F. Autodetecci�n de la Codificaci�n (No Normativo)

La declaraci�n de codificaci�n XML funciona como una etiqueta interna en cada entidad, indicando que codificaci�n de caracteres se est� utilizando. Antes de que un procesador XML pueda leer la etiqueta interna, sin embargo, �ste debe aparentemente, conocer que codificaci�n de caracteres se est� utilizando - que es lo que est� intentando indicar la etiqueta interna -. En XML esto se limita de dos maneras: se asume que cada implementaci�n debe soportar s�lo un conjunto finito de codificaciones de caracteres, y la declaraci�n de codificaci�n de XML est� restringida en posici�n y contenido, para hacerla m�s sencilla para la autodetecci�n de la codificaci�n que se est� utilizando en cada entidad. Adem�s, en muchos casos, tambi�n est�n disponibles adicionalmente otras fuentes de informaci�n, a parte de las cadenas de datos XML. Los dos casos pueden ser distinguidos, dependiendo de si la entidad XML est� presente en el procesador sin, o con, alguna informaci�n externa. Siempre consideramos la primera opci�n primero.

Dado que cada entidad XML que no pertenezca a los formatos UTF-8 o UTF-16 debe comenzar con una declaraci�n de codificaci�n XML, donde los primeros caracteres deben ser '<?xml', cualquier 'procesador conformador' puede detectar, despu�s de dos a cuatro octetos de entrada, cual de los siguientes casos a aplicar. Al leer esta lista, puede ayudar el conocer que en UCS-4, '<' es "#x0000003C" y '?' es "#x0000003F", y el 'Byte Order Mark' requerido de las cadenas de datos UTF-16 es "#xFEFF".

Este nivel de autodetecci�n es suficiente para leer la declaraci�n de codificaci�n XML y para analizar el identificador de codificaci�n de caracteres, que sigue siendo necesario para distinguir los miembros individuales de cada familia de codificaciones (p.e. para indicar desde UTF-8 a 8859, y las partes de 8859 entre ellas, o para distinguir la p�gina del c�digo EBCDIC especifica en uso, etc).

Dado que los contenidos de la declaraci�n de codificaci�n est�n restringidos a caracteres ASCII, los procesadores pueden leer con exactitud toda la declaraci�n de codificaci�n tan pronto como hayan detectado que familia de codificaciones est� en uso. En la pr�ctica, todas las codificaciones ampliamente utilizadas entran en alguna de las categor�as descritas arriba. La declaraci�n de codificaci�n XML permite un razonable aseguramiento del etiquetado de codificaci�n de caracteres, incluso cuando fuentes externas de informaci�n en el sistema operativo o el nivel de protocolo de transporte no lo aseguren.

Una vez que el procesador ha detectado la codificaci�n en uso, puede actuar apropiadamente, bien invocando a una rutina de entrada externa para cada caso, o bien llamando a la funci�n de conversi�n apropiada para cada car�cter de entrada.

Como cualquier sistema de 'auto-etiquetado', la declaraci�n de codificaci�n de XML no funcionar� si cualquier software cambia el conjunto de caracteres o la codificaci�n de la entidad sin actualizar dicha declaraci�n. Los implementadores de rutinas de codificaci�n de caracteres deber�an ser cuidadosos para asegurar exactitud de la informaci�n interna y externa utilizada para etiquetar la entidad.

El segundo caso posible ocurre cuando la entidad XML est� acompa�ada de informaci�n de codificaci�n, como en algunos sistemas de archivos y algunos protocolos de red. Cuando m�ltiples fuentes de informaci�n est�n disponibles, su prioridad relativa y el m�todo preferido para el manejo de conflictos debe ser especificado como parte de un protocolo de mayor nivel utilizado para enviar XML. Las reglas para la prioridad relativa de la etiqueta interna y la etiqueta de tipo MIME en una cabecera externa, por ejemplo, deber�an ser parte del documento RFC que definir�a los tipos MIME "text/xml" y "application/xml". Por razones de interoperatividad, sin embargo, se recomiendan las siguientes reglas.

Estas reglas se aplican s�lo en la ausencia de documentaci�n de nivel de protocolo, en particular, cuando los tipos MIME "text/xml" y "application/xml" son definidos. Las recomendaciones de los RFC relevantes invalidan estas reglas.

G. Grupo de Trabajo XML del W3C (No Normativo)

Esta especificaci�n ha sido preparada y aprobada para su publicaci�n por el Grupo de Trabajo (GT) XML del W3C. La aprobaci�n de esta especificaci�n por parte del GT no implica necesariamente que todos los miembros del GT hayan votado su aprobaci�n. Los miembros actuales del GT XML son:

Jon Bosak, Sun (Presidente); James Clark (Direcci�n T�cnica); Tim Bray, Textuality y Netscape (Co-editor XML); Jean Paoli, Microsoft (Co-editor XML); C. M. Sperberg-McQueen, U. of Illinois (Co-editor XML); Dan Connolly, W3C (Enlace con el W3C); Paula Angerstein, Texcel; Steve DeRose, INSO; Dave Hollander, HP; Eliot Kimber, ISOGEN; Eve Maler, ArborText; Tom Magliery, NCSA; Murray Maloney, Muzmo y Grif; Makoto Murata, Fuji Xerox Information Systems; Joel Nava, Adobe; Conleth O'Connell, Vignette; Peter Sharpe, SoftQuad; John Tigue, DataChannel