Importante:

Este documento es una traducción al castellano de la Recomendación del W3C "Namespaces in XML", publicada el 14 de enero de 1999.

Esta traducción ha sido publicada el 17 de agosto de 2001.

El URI de este documento es http://html.conclase.net/w3c/xml-names-es/Overview.html

El URI del documento original es http://www.w3.org/TR/1999/REC-xml-names-19990114

El URI de la última versión de la Recomendación en inglés es http://www.w3.org/TR/REC-xml-names

La única versión normativa de este documento es la versión original en inglés que se encuentra en el sitio web del W3C. Ninguna parte del presente documento en castellano es normativa aunque se especifique lo contrario.

Véase el Aviso de Copyright al final de este documento.

Este documento puede contener errores de traducción.

La traducción ha sido realizada por Juan R. Pozo.

Formatos disponibles de la traducción:

http://html.conclase.net/w3c/xml-names-es/ http://html.conclase.net/w3c/xml-names-es/xml-names-es.xml http://html.conclase.net/w3c/xml-names-es/Overview.html

W3C

Espacios de Nombres en XML

Namespaces in XML

World Wide Web Consortium 14 de enero de 1999

Esta versión (en inglés):
http://www.w3.org/TR/1999/REC-xml-names-19990114 http://www.w3.org/TR/1999/REC-xml-names-19990114/xml-names.xml http://www.w3.org/TR/1999/REC-xml-names-19990114/Overview.html
Versión más reciente (en inglés):
http://www.w3.org/TR/REC-xml-names
Versiones anteriores (en inglés):
http://www.w3.org/TR/1998/PR-xml-names-19981117
Editores:
Tim Bray , Textuality <tbray@textuality.com>
Dave Hollander , Hewlett-Packard Company <dmh@corp.hp.com>
Andrew Layman , Microsoft <andrewl@microsoft.com>

Resumen

Los espacios de nombres XML proporcionan un método simple para cualificar nombres de elementos y atributos usados en el Lenguaje Extensible para el Formato de Documentos (Extensible Markup Language) asociándolos con espacios de nombres identificados por referencias URI.

Estado de este Documento

Este documento ha sido revisado por Miembros del W3C y otras partes interesadas y ha sido aprobado por el Director como Recomendación del W3C. Es un documento estable y puede ser usado como material de referencia o citado como referencia normativa en otros documentos. La intención del W3C al hacer esta Recomendación es llamar la atención sobre la especificación y promover su difusión general. Esto impulsa la funcionalidad y la interoperabilidad de la Web.

La lista de errores conocidos de la versión original en inglés de esta especificación está disponible en http://www.w3.org/XML/xml-names-19990114-errata.

Le rogamos informe de errores en la versión original en inglés de este documento a xml-names-editor@w3.org.

N.T.: La correción de estas erratas ya ha sido tenida en cuenta en la traducción al castellano del documento. Para informar sobre errores presentes en la traducción española de la especificación, puede ponerse en contacto con el traductor en jrpozo arroba conclase punto net. Gracias por su colaboración.

Tabla de Contenidos

1 Motivación y Sumario
    1.1 Un Comentario sobre la Notación y el Uso
2 Declaración de Espacios de Nombres
3 Nombres Cualificados
4 Utilización de Nombres Cualificados
5 Aplicación de Espacios de Nombres a Elementos y Atributos
    5.1 Ambito de Aplicación de los Espacios de Nombres
    5.2 Espacios de Nombres por Defecto
    5.3 Unicidad de Atributos
6 Conformidad de Documentos

Apéndices

A La Estructura Interna de los Espacios de Nombres XML (No Normativo)
    A.1 La Insuficiencia del Espacio de Nombres Tradicional
    A.2 Particiones de Espacios de Nombres XML
    A.3 Nombres de Atributo y de Tipos de Elemento Expandidos
    A.4 Nombres de Atributos Expandidos Unicos
B Agradecimientos (No Normativo)
C Referencias (No Normativo)


1 Motivación y Sumario

Nos imaginamos aplicaciones del Lenguaje XML en las que un solo documento XML puede contener elementos y atributos (a los que aquí se hace referencia como "vocabulario de formato") que están definidos para y son usados por distintos módulos de software. Una de las motivaciones es la modularidad; si existe un vocabulario de formato bien entendido y para el cual hay programas útiles disponibles, es mejor reutilizar este vocabulario y no reinventarlo.

Tales documentos, que contiene varios vocabularios de formato, plantean problemas de reconocimiento y colisión. Los módulos de software tienen que ser capaces de reconocer las etiquetas y atributos para cuyo procesamiento fueron diseñados, incluso si se producen "colisiones" cuando un código de formato destinado a algún otro paquete de software usa el mismo nombre de atributo o de tipo de elemento.

Estas consideraciones exigen que las estructuras de los documentos deban tener nombres universales, cuyo ámbito de aplicación se extienda más allá del documento que las contiene. Esta especificación describe un mecanismo, los espacios de nombres XML, que lleva esto a cabo.

[Definición: Un espacio de nombres XML es un conjunto de nombres, identificados por una referencia URI [RFC2396], que se utilizan en documentos XML como tipos de elemento y nombres de atributo. ] Los espacios de nombres XML difieren de los "espacios de nombres" usados convencionalmente en las disciplinas de programación en que la versión XML tiene estructura interna y no es, matemáticamente hablando, un conjunto. Estos aspectos se tratan con más profundidad en A La Estructura Interna de los Espacios de Nombres XML.

[Definición: Se considera que las referencias URI que identifican espacios de nombres son idénticas cuando son exactamente las mismas carácter por carácter.] Obsérvese que las referencias URI que no sean idénticas en este sentido pueden ser de hecho funcionalmente equivalentes. Por ejemplo, referencias URI que sólo difieren en mayúsculas/minúsculas, o que están en entidades externas que tengan URIs base efectivos distintos.

Los nombres de los espacios de nombres XML pueden aparecer como nombres cualificados, que contienen un símbolo de dos puntos (:) que divide al nombre en un prefijo del espacio de nombres y una parte local. El prefijo, que corresponde a la referencia URI, selecciona un espacio de nombres. La combinación del espacio de nombres URI gestionado universalmente y del espacio de nombres propio del documento produce identificadores que son únicos a nivel universal. Se proporcionan mecanismos para definir el ámbito de los prefijos y los valores por defecto.

Las referencias URI pueden contener caracteres no permitidos en nombres, de modo que no pueden utilizarse directamente como prefijos de espacios de nombres. Por tanto, el prefijo de espacio de nombres actúa como intermediario de una referencia URI. Se utiliza una sintaxis tipo atributo, descrita más adelante, para declarar la asociación del prefijo de espacio de nombres con una referencia URI; los programas que soporten esta propuesta de espacios de nombres deben reconocer y estar de acuerdo con estas declaraciones y prefijos.

1.1 Un Comentario sobre la Notación y el Uso

Obsérvese que muchos de los símbolos no terminales de las producciones de esta especificación no están definidos aquí, sino en la especificación XML [XML]. Cuando los símbolos no terminales aquí definidos tienen los mismos nombres que otros símbolos no terminales definidos en la especificación XML, las producciones de esta especificación corresponden en todos los casos a un subconjunto de las cadenas emparejadas por las producciones correspondientes de la especificación XML.

En las producciones de este documento, el código REN es una Restricción sobre el Espacio de Nombres, una de las reglas que deben seguir los documentos conformes con esta especificación.

Obsérvese que todos los nombres de dominio de Internet usados en los ejemplos, con la excepción de w3.org, se han elegido aleatoriamente y no debería dárseles mayor importancia.

2 Declaración de Espacios de Nombres

[Definición: Un espacio de nombres se declara usando una familia de atributos reservados. El nombre de tales atributos debe o bien ser xmlns, o bien tener xmlns: como prefijo. Estos atributos, como cualquier otro atributo XML, se pueden proporcionar directamente o pueden tener un valor por defecto. ]

Nombres de Atributos para la Declaración de Espacios de Nombres
[1]   NSAttName   ::=   PrefixedAttName
| DefaultAttName
[2]   PrefixedAttName   ::=   'xmlns:' NCName[ REN: "XML" inicial ]
[3]   DefaultAttName   ::=   'xmlns'
[4]   NCName   ::=   (Letter | '_') (NCNameChar)*/* Un Name XML, menos los ":" */
[5]   NCNameChar   ::=   Letter | Digit | '.' | '-' | '_' | CombiningChar | Extender

[Definición: El valor de atributo, una referencia URI, es el nombre del espacio de nombres que identifica al espacio de nombres.] El nombre del espacio de nombres, para servir a la finalidad deseada, debería tener las características de unicidad y persistencia. El objetivo no es que sea directamente usable para la obtención de un esquema (si es que existe). Un ejemplo de una sintaxis diseñada con estos fines en mente es la de los Nombres Uniformes de Recursos [RFC2141]. Sin embargo, debería tenerse en cuenta que los URLs ordinarios pueden utilizarse de modo tal que se alcancen estos mismos objetivos.

[Definición: Si el nombre de atributo concuerda con PrefixedAttName, entonces el NCName da el prefijo del espacio de nombres, usado para asociar nombres de elementos y atributos con el nombre del espacio de nombres dado por el valor del atributo en el ámbito del elemento al cual está ligada la declaración.] En tales declaraciones, el nombre del espacio de nombres no puede estar vacío.

[Definición: Si el nombre del atributo concuerda con DefaultAttName, entonces el nombre del espacio de nombres dado por el valor del atributo es aquél del espacio de nombres por defecto en el ámbito del elemento al cual está ligada la declaración.] En tal declaración por defecto, el valor del atributo puede estar vacío. En 5 Aplicación de Espacios de Nombres a Elementos y Atributos se habla de los espacios de nombres por defecto y de la anulación de declaraciones.

Un ejemplo de declaración de espacio de nombres, que asocia el prefijo de espacio de nombres edi con el nombre de espacio de nombres http://ecommerce.org/schema:

<x xmlns:edi='http://ecommerce.org/schema'>
  <!-- el prefijo "edi" está ligado a http://ecommerce.org/schema
       para el elemento "x" y sus contenidos -->
</x>
Restricción sobre el espacio de nombres: "XML" inicial

Los prefijos que comiencen con la secuencia de tres letras x, m, l, en cualquier combinación de mayúsculas y minúsculas, están reservados para su uso por las especificaciones de XML y las relacionadas con ellas.

3 Nombres Cualificados

[Definición: En los documentos XML conformes con esta especificación, algunos nombres (construcciones correspondientes al símbolo no terminal Name) pueden estar dados como nombres cualificados, según se define a continuación:]

Nombre Cualificado
[6]   QName   ::=    (Prefix ':')? LocalPart
[7]   Prefix   ::=   NCName
[8]   LocalPart   ::=   NCName

El Prefix (prefijo) proporciona la parte del prefijo del espacio de nombres del nombre cualificado, y debe estar asociado mediante una referencia URI a un espacio de nombres en una declaración de espacio de nombres. [Definición: LocalPart proporciona la parte local del nombre cualificado.]

Obsérvese que el prefijo actúa únicamente como sustituto del nombre del espacio de nombres. Las aplicaciones deberían usar el nombre del espacio de nombres, y no el prefijo, al construir nombres cuyo ámbito de aplicación vaya más allá del documento que lo contiene.

4 Utilización de Nombres Cualificados

En documentos XML conformes con esta especificación, los tipos de elemento se dan como nombres cualificados, según se describe a continuación:

Tipos de Elemento
[9]   STag   ::=   '<' QName (S Attribute)* S? '>' [ REN: Prefijo Declarado ]
[10]   ETag   ::=   '</' QName S? '>'[ REN: Prefijo Declarado ]
[11]   EmptyElemTag   ::=   '<' QName (S Attribute)* S? '/>'[ REN: Prefijo Declarado ]

Un ejemplo de nombre cualificado que funciona como tipo de elemento:

<x xmlns:edi='http://ecommerce.org/schema'>
  <!-- el espacio de nombres del elemento 'price' es http://ecommerce.org/schema -->
  <edi:price units='Euro'>32.18</edi:price>
</x>

Los atributos, o bien son declaraciones de espacios de nombres, o bien sus nombres se dan como nombres cualificados:

Atributo
[12]   Attribute   ::=   NSAttName Eq AttValue
| QName Eq AttValue[ REN: Prefijo Declarado ]

Un ejemplo de nombre cualificado que actúa como nombre de atributo:

<x xmlns:edi='http://ecommerce.org/schema'>
  <!-- el espacio de nombres del atributo 'taxClass' es http://ecommerce.org/schema -->
  <lineItem edi:taxClass="exempt">Baby food</lineItem>
</x>
Restricción sobre el espacio de nombres: Prefijo Declarado

El prefijo del espacio de nombres, a menos que sea xml o xmlns, debe haber sido declarado en un atributo de declaración de espacio de nombres ya sea en la etiqueta inicial del elemento en que se usa el prefijo o en un elemento ascendiente (es decir, un elemento en cuyo contenido aparezcan los códigos de formato prefijados). El prefijo xml está ligado por definición al nombre de espacio de nombres http://www.w3.org/XML/1998/namespace. El prefijo xmlns sólo se utiliza para enlazar con espacios de nombres y no está ligado en sí a ningún nombre de espacio de nombres.

Esta restricción puede llevar a dificultades operativas en aquellos casos en que el atributo de declaración del espacio de nombres se proporcione no directamente en la entidad documento XML, sino a través de un atributo por defecto declarado en una entidad externa. Estas declaraciones pueden no ser leídas por programas basados en un procesador XML no validador. Muchas aplicaciones XML, entre ellas presumiblemente algunas sensibles a los espacios de nombres, no requieren el uso de procesadores validadores. Para el funcionamiento correcto de tales aplicaciones, las declaraciones de espacios de nombres deben proporcionarse o bien directamente o bien a través de atributos por defecto declarados en el subconjunto interno del DTD.

Los nombres de elemento y los tipos de atributo también se dan como nombres cualificados cuando aparecen en la declaraciones del DTD:

Nombres Cualificados en Declaraciones
[13]   doctypedecl   ::=   '<!DOCTYPE' S QName (S ExternalID)? S? ('[' (markupdecl | PEReference | S)* ']' S?)? '>'
[14]   elementdecl   ::=   '<!ELEMENT' S QName S contentspec S? '>'
[15]   cp   ::=   (QName | choice | seq) ('?' | '*' | '+')?
[16]   Mixed   ::=   '(' S? '#PCDATA' (S? '|' S? QName)* S? ')*'
| '(' S? '#PCDATA' S? ')'
[17]   AttlistDecl   ::=   '<!ATTLIST' S QName AttDef* S? '>'
[18]   AttDef   ::=   S (QName | NSAttName) S AttType S DefaultDecl

5 Aplicación de Espacios de Nombres a Elementos y Atributos

5.1 Ambito de Aplicación de los Espacios de Nombres

Se considera que la declaración del espacio de nombres se aplica al elemento en que está especificada y a todos los elementos pertenecientes al contenido de ese elemento, a menos que sea anulada por otra declaración de espacio de nombres con la misma parte NSAttName:

<?xml version="1.0"?>
<!-- todos estos elementos están explícitamente en el espacio de nombres HTML -->
<html:html xmlns:html='http://www.w3.org/TR/REC-html40'>
  <html:head><html:title>Frobnosticación</html:title></html:head>
  <html:body><html:p>Movido
    <html:a href='http://frob.com'>aquí.</html:a></html:p></html:body>
</html:html>

Se pueden declarar varios prefijos de espacios de nombres como atributos de un mismo elemento, como se muestra en este ejemplo:

<?xml version="1.0"?>
<!-- ambos prefijos de espacios de nombres están disponibles en todas partes -->
<bk:book xmlns:bk='urn:loc.gov:books'
         xmlns:isbn='urn:ISBN:0-395-36341-6'>
    <bk:title>Cheaper by the Dozen</bk:title>
    <isbn:number>1568491379</isbn:number>
</bk:book>

5.2 Espacios de Nombres por Defecto

Se considera que se aplica un espacio de nombres por defecto al elemento en que está declarado (si ese elemento no tiene prefijo de espacio de nombres), y a todos los elementos sin prefijo pertenecientes al contenido de ese elemento. Si la referencia URI de la declaración de un espacio de nombres por defecto está vacía, entonces se considera que los elementos sin prefijo pertenecientes al ámbito de la declaración no están en ningún espacio de nombres. Obsérvese que los espacios de nombres por defecto no se aplican directamente a atributos.

<?xml version="1.0"?>
<!-- estos elementos están en el espacio de nombre HTML, en este caso por defecto -->
<html xmlns='http://www.w3.org/TR/REC-html40'>
  <head><title>Frobnosticación</title></head>
  <body><p>Movido
    <a href='http://frob.com'>aquí</a>.</p></body>
</html>
<?xml version="1.0"?>
<!-- los tipos de elemento sin prefijo son de "books" -->
<book xmlns='urn:loc.gov:books'
      xmlns:isbn='urn:ISBN:0-395-36341-6'>
    <title>Cheaper by the Dozen</title>
    <isbn:number>1568491379</isbn:number>
</book>

Un ejemplo más desarrollado que ilustra el ámbito de los espacios de nombres:

<?xml version="1.0"?>
<!-- inicialmente, el espacio de nombres por defecto es "books" -->
<book xmlns='urn:loc.gov:books'
      xmlns:isbn='urn:ISBN:0-395-36341-6'>
    <title>Cheaper by the Dozen</title>
    <isbn:number>1568491379</isbn:number>
    <notes>
      <!-- hacemos a HTML el espacio de nombres por defecto para algunos comentarios -->
      <p xmlns='urn:w3-org-ns:HTML'>
          ¡Este es un libro <i>muy</i> divertido!
      </p>
    </notes>
</book>

El espacio de nombres por defecto puede especificarse como la cadena vacía. Esto tiene el mismo efecto, dentro del ámbito de la declaración, que si no hubiera espacio de nombres por defecto.

<?xml version='1.0'?>
<Beers>
  <!-- el espacio de nombres por defecto es ahora el de HTML -->
  <table xmlns='http://www.w3.org/TR/REC-html40'>
   <th><td>Name</td><td>Origin</td><td>Description</td></th>
   <tr> 
     <!-- dentro de las celdas de la tabla no hay espacio de nombres por defecto -->
     <td><brandName xmlns="">Huntsman</brandName></td>
     <td><origin xmlns="">Bath, UK</origin></td>
     <td>
       <details xmlns=""><class>Bitter</class><hop>Fuggles</hop>
         <pro>Wonderful hop, light alcohol, good summer beer</pro>
         <con>Fragile; excessive variance pub to pub</con>
         </details>
        </td>
      </tr>
    </table>
  </Beers>

5.3 Unicidad de Atributos

En documentos XML conformes con esta especificación, ninguna etiqueta puede contener dos atributos que:

  1. tengan nombres idénticos, o que

  2. tengan nombres cualificados con la misma parte local y con prefijos que hayan sido ligados a nombres de espacios de nombres que sean idénticos.

Por ejemplo, cada una de las etiquetas iniciales mal que siguen es ilegal:

<!-- http://www.w3.org está ligado a n1 y n2 -->
<x xmlns:n1="http://www.w3.org" 
   xmlns:n2="http://www.w3.org" >
  <mal a="1"     a="2" />
  <mal n1:a="1"  n2:a="2" />
</x>

Sin embargo, las siguientes son legales, la segunda porque el espacio de nombres por defecto no se aplica a los nombres de atributos:

<!-- http://www.w3.org está ligado a n1 y es el valor por defecto -->
<x xmlns:n1="http://www.w3.org" 
   xmlns="http://www.w3.org" >
  <bien a="1"     b="2" />
  <bien a="1"     n1:a="2" />
</x>

6 Conformidad de Documentos

En documentos XML conformes con esta especificación, los nombres de atributos y tipos de elemento deben concordar con la producción dada para QName y deben satisfacer las "Restricciones sobre los Espacios de Nombres".

Un documento XML es conforme con esta especificación si todos los demás símbolos que, por conformidad con XML, deben concordar con la producción XML para Name, concuerdan también con la producción de esta especificación para NCName.

El efecto de la conformidad es que en un documento conforme:

Estrictamente hablando, los valores de atributos declarados como de tipo ID, IDREF(S), ENTITY(IES), y NOTATION son también Names, y por tanto no deberían tener símbolos de dos puntos. Sin embargo, el tipo declarado de los valores de atributos sólo está disponible para los procesadores que lean declaraciones de códigos de formato (markup), por ejemplo procesadores validadores. Así, a menos que se haya especificado el uso de un procesador validador, no puede asegurarse se haya comprobado la conformidad con esta especificación de los contenidos de los valores de los atributos.

A La Estructura Interna de los Espacios de Nombres XML (No Normativo)

A.1 La Insuficiencia del Espacio de Nombres Tradicional

En las disciplinas de computación, el término "espacio de nombres" se refiere convencionalmente a un conjunto de nombres, es decir, una colección que no contiene elementos repetidos. Sin embargo, el considerar los nombres utilizados en el código XML como un espacio de nombres de este tipo dificultaría en gran medida su utilidad. La utilización principal de tales nombres en documentos XML es permitir la identificación de estructuras lógicas en documentos por parte de módulos de software tales como procesadores de búsqueda, motores de representación basados en hojas de estilo, y validadores basados en esquemas. Consideremos el ejemplo siguiente:

<section><title>Book-Signing Event</title>
<signing>
  <author title="Mr" name="Vikram Seth" />
  <book title="A Suitable Boy" price="$22.95" /></signing>
<signing>
  <author title="Dr" name="Oliver Sacks" />
  <book title="The Island of the Color-Blind" price="$12.95" /></signing>
</section>

En este ejemplo aparece tres veces el nombre title dentro del código, y solamente el nombre proporciona información insuficiente como para permitir su correcto procesamiento por un módulo de software.

Otra área problemática se deriva del uso de atributos "globales", como se ilustra en este ejemplo de un fragmento de documento XML que se va a representar usando una hoja de estilo CSS:

<RESERVATION>
 <NAME HTML:CLASS="largeSansSerif">Layman, A</NAME>
 <SEAT CLASS="Y" HTML:CLASS="reallyImportant">33B</SEAT>
 <DEPARTURE>1997-05-24T07:55:00+1</DEPARTURE></RESERVATION>

En este caso, el atributo CLASS, que indica la clase del billete y toma valores como "J", "Y", y "C", es diferente en todos los niveles semánticos del atributo HTML:CLASS, que se usa para simular riqueza sintáctica en HTML, con la finalidad de superar el limitado repertorio de elementos por medio de subclases.

XML 1.0 no integra ningún método para declarar atributos "globales"; objetos tales como el atributo HTML CLASS son globales sólo en su descripción literaria y en su interpretación por las aplicaciones HTML. Sin embargo, se observa que estos atributos, una de cuyas características distintivas es que sus nombres son únicos, aparecen frecuentemente en diversas aplicaciones.

A.2 Particiones de Espacios de Nombres XML

Para mantener el objetivo de que tanto los nombres cualificados como los no cualificados sean útiles para su propósito, identificamos los nombres que aparecen en un espacio de nombres XML según su pertenencia a uno o varios espacios de nombres tradicionales (es decir, con estructura de conjunto) disjuntos, llamados particiones del espacio de nombres. Las particiones son:

La Partición de Todos los Tipos de Elemento

En esta partición aparecen todos los tipos de elemento de un espacio de nombres XML. Cada uno tiene una parte local única; la combinación del nombre del espacio de nombres y de la parte local identifica unívocamente al tipo de elemento.

La Partición de Atributos Globales

Esta partición contiene los nombres de todos los atributos que se han definido en este espacio de nombres como globales. La única característica exigida a un atributo global es que su nombre sea único en la partición de atributos globales. Esta especificación no dice nada sobre la utilización apropiada de estos atributos. La combinación del nombre del espacio de nombres y del nombre del atributo identifica unívocamente al atributo global.

Las Particiones por Tipo de Elemento

Cada tipo de elemento de la Partición de Todos los Tipos de Elemento tiene un espacio de nombres asociado en que aparecen los nombres de los atributos no cualificados que se proporcionan para ese elemento. Esto es un espacio de nombres tradicional porque la aparición de nombres de atributo duplicados está prohibida por XML 1.0. La combinación del nombre del atributo con el tipo del elemento y el nombre del espacio de nombres identifica unívocamente a cada atributo no cualificado.

En documentos XML conformes con esta especificación, los nombres de todos los atributos cualificados (prefijados) se asignan a la partición de atributos globales, y los nombres de todos los atributos no cualificados se asignan a la partición por tipo de elemento apropiada.

A.3 Nombres de Atributo y de Tipos de Elemento Expandidos

Para especificar reglas y hacer comparaciones de manera conveniente, definimos, para cada tipo de elemento y nombre de atributo de un documento XML, una forma expandida, expresada aquí con la sintaxis de elementos de XML.

[Definición: Un tipo de elemento expandido se expresa como un elemento XML vacío de tipo ExpEType. Tiene un atributo type obligatorio que da la parte local (LocalPart) del tipo, y un atributo opcional ns que da, si el elemento está cualificado, el nombre de su espacio de nombres.]

[Definición: Un nombre de atributo expandido se expresa como un elemento XML vacío del tipo ExpAName. Tiene un atributo obligatorio name que da el nombre. Si el atributo es global, tiene un atributo obligatorio ns que da el nombre del espacio de nombres; en caso contrario, tiene un atributo obligatorio eltype que da el tipo del elemento al que está ligado, y un atributo opcional elns que da, si es que se conoce, el nombre del espacio del espacio de nombres de dicho elemento.]

Unas pequeñas variaciones de los ejemplos anteriores ilustrarán el funcionamiento de los tipos de elementos y nombres de atributos expandidos. Cada uno de los siguientes fragmentos está seguido de una tabla que muestra la expansión de los nombres:

<!-- 1 --> <section xmlns='urn:com:books-r-us'>
<!-- 2 -->   <title>Book-Signing Event</title>
<!-- 3 -->   <signing>
<!-- 4 -->     <author title="Mr" name="Vikram Seth" />
<!-- 5 -->     <book title="A Suitable Boy" price="$22.95" />
             </signing>
           </section>

Los nombres se expandirían del siguiente modo:

LíneaNombreExpandido
1section <ExpEType type="section" ns="urn:com:books-r-us" />
2 title<ExpEType type="title" ns="urn:com:books-r-us" />
3 signing<ExpEType type="signing" ns="urn:com:books-r-us" />
4 author<ExpEType type="author" ns="urn:com:books-r-us" />
4 title <ExpAName name='title' eltype="author" elns="urn:com:books-r-us" />
4 name <ExpAName name='name' eltype="author" elns="urn:com:books-r-us" />
5 book<ExpEType type="book" ns="urn:com:books-r-us" />
5 title<ExpAName name='title' eltype="book" elns="urn:com:books-r-us" />
5 price<ExpAName name='price' eltype="book" elns="urn:com:books-r-us" />
<!-- 1 --> <RESERVATION xmlns:HTML="http://www.w3.org/TR/REC-html40">
<!-- 2 --> <NAME HTML:CLASS="largeSansSerif">Layman, A</NAME>
<!-- 3 --> <SEAT CLASS="Y" HTML:CLASS="largeMonotype">33B</SEAT>
<!-- 4 --> <HTML:A HREF='/cgi-bin/ResStatus'>Check Status</HTML:A>
<!-- 5 --> <DEPARTURE>1997-05-24T07:55:00+1</DEPARTURE></RESERVATION>
1 RESERVATION<ExpEType type="RESERVATION" />
2 NAME<ExpEType type="NAME" />
2 HTML:CLASS <ExpAName name="CLASS" ns="http://www.w3.org/TR/REC-html40" />
3 SEAT<ExpEType type="SEAT" />
3 CLASS<ExpAName name="CLASS" eltype="SEAT" />
3 HTML:CLASS<ExpAName name="CLASS" ns="http://www.w3.org/TR/REC-html40" />
4 HTML:A<ExpEType type="A" ns="http://www.w3.org/TR/REC-html40" />
4 HREF<ExpAName name="HREF" eltype="A" elns="http://www.w3.org/TR/REC-html40" />
5 DEPARTURE<ExpEType type="DEPARTURE" />

A.4 Nombres de Atributos Expandidos Unicos

La restricción expresada arriba por 5.3 Unicidad de Atributos puede implementarse directamente obligando a que ningún elemento tenga dos atributos cuyos nombres expandidos sean equivalentes, es decir, que tengan los mismos pares atributo-valor.

B Agradecimientos (No Normativo)

Esta obra refleja el trabajo de una gran cantidad de personas, incluyendo especialmente a los miembros del Grupo de Trabajo XML y del Grupo de Interés Especial del World Wide Web Consortium y a los participantes de las Actividades del W3C en el campo de los Metadatos. Las contribuciones de Charles Frankston de Microsoft han sido particularmente valiosas.

C Referencias (No Normativo)

RFC2141
IETF (Internet Engineering Task Force) RFC 2141: URN Syntax, ed. R. Moats. Mayo de 1997.
RFC2396
IETF (Internet Engineering Task Force) RFC 2396: Uniform Resource Identifiers (URI): Generic Syntax, eds. T. Berners-Lee, R. Fielding, L. Masinter. Agosto de 1998.
XML
Extensible Markup Language (XML) 1.0, eds. Tim Bray, Jean Paoli, y C. M. Sperberg-McQueen. 10 de febrero de 1998. Disponible en http://www.w3.org/TR/REC-xml.