Copyright © 1998 W3C (MIT, INRIA, Keio), Reservados todos los derechos. A este documento se le aplican todas las reglas de responsabilidad, marcas de fábrica, uso de documentos y licencia de software del W3C.
En este documento se ha tratado de traducir (y puede que se haya conseguido) el borrador de la "XML Namespaces Specification". Se ha traducido la expresión namespace a "espacios de nombres". Aunque no se trate de una versión definitiva se confía en que los cambios sean mínimos (si se producen). Además se considera un documento fundamental para todas aquellas personas interesadas en XML. Para cualquier duda, sugerencia o comentario, por favor diríjanse a Jaime Sagarduy.
Este borrador de especificación es un trabajo en progreso que representa el consenso actual del Grupo de Trabajo XML del W3C. éste es un borrador de trabajo del W3C para la revisión por parte de los miembros del W3C y otras partes interesadas. La publicación del borrador de trabajo no implica que los miembros del W3C lo avalen.
Este borrador trata una revisión de la especificación de los espacios de nombres. Aunque está inacabado en algunos aspectos, el Grupo de Trabajo pretende mantener las características descritas funcionalmente inalteradas salvo que se descubran problemas durante los trabajos de implementación. Para descubrir dichos problemas tan pronto como sea posible, se ha formado un grupo editorial especial para recibir las sugerencias (feedback) de los implementadores durante un periodo de un mes, a partir de la publicación de este borrador, y que termina tras la reunión del Grupo de Trabajo en Montreal, los días 22 y 23 de Agosto. Por favor envíen sus informes de experiencias de implementación a xml-names-issues@w3.org.
Aunque no se anticipan cambios sustanciales, se advierte que es posible que éstos se produzcan, por lo que se aconseja la implementación de software experimental o software que pueda ser fácilmente actualizado, de acuerdo con esta especificación. El Grupo de Trabajo XML no permitirá que ninguna implementación temprana restrinja su capacidad para realizar cambios en cualquiera de las versiones de esta especificación. Esto es un borrador y puede ser actualizado, reemplazado o quedar obsoleto en cualquier momento. No es apropiado citar los Borradores de Trabajo del W3C, a no ser que se especifique que se trata de un "trabajo en curso".
Es intención del Grupo de Trabajo que está capacidad de los espacios de nombres se convierta en una parte de una futura versión de la especificación de XML.
Los espacios de nombres XML proporcionan un método simple para la calificación de los nombres utilizados en los documentos del Lenguaje Extensible de Marcación (Extensible Markup Language), asociándoles espacios de nombres identificados por URIs.
El Grupo de Trabajo prevé el auge de los documentos XML que contienen marcaciones que están definidas y utilizadas por diferentes módulos de software. Una de las motivaciones para esta modularidad es que, si existe un conjunto de marcaciones disponibles, que son entendibles y para las que existe software útil disponible, es mejor la reutilización de estas marcaciones que el hecho de reinventar unas nuevas.
Dichos documentos, que contendrán marcaciones de múltiples fuentes independientes entre sí, pueden tener problemas de reconocimiento y colisión. Los módulos software capaces de reconocer las marcaciones (etiquetas y atributos) para las que han sido diseñados, pueden mostrar colisiones cuando aparezcan marcaciones creadas para otros paquetes de software, pero que utilizan el mismo tipo de elemento o nombre de atributo.
Estas consideraciones requieren que las construcciones de documentos posean nombres universales, cuyo ámbito se extienda más allá del documento que las contiene. Esta especificación describe un mecanismo, los espacios de nombres XML, que lleva a cabo esta misión.
[Definición:] Un espacio de nombres XML es una colección de nombres, identificados por un URI, que se utiliza en los documentos XML como tipos de elemento y nombres de atributo. Los espacios de nombres XML difieren de los "espacios de nombres" convencionales, utilizados en otras disciplinas de la computación, en que éstos poseen una estructura interna y no son, matemáticamente hablando, un conjunto propiamente dicho. Estos aspectos se discuten en la sección "6. Estructura Interna de los Espacios de Nombres XML".
Los nombres de los espacios de nombres XML pueden aparecer como nombres calificados, que contienen el carácter "dos puntos", separando el nombre en un prefijo de espacio de nombres y su parte local. El prefijo, que es mapeado a un URI, selecciona un espacio de nombres. La combinación de los URIs de espacios de nombres universalmente gestionados y el espacio de nombres propio del documento produce unos identificadores que garantizan la unicidad universal. Se proporciona un mecanismo para establecer valores por defecto al prefijo, para evitar la confusión y mejorar la legibilidad.
Los URIs pueden contener caracteres no permitidos en los nombres, por lo que no pueden ser utilizados directamente como prefijos de espacios de nombres. El prefijo del espacio de nombres sirve como proxy para el URI. Se utiliza una sintaxis basada en atributos descrita más abajo para declarar la asociación del prefijo de espacio de nombres con un URI. El software que soporte esta propuesta de espacios de nombres debe reconocer y actuar en estas declaraciones y prefijos.
[Definición:] Un espacio de nombres es declarado utilizando un atributo cuyo prefijo es xmlns
. Muchos de los símbolos no-terminales en las reglas de producción de esta especificación no están definidos aquí, sino en la especificación XML [XML]. Cuando los no-terminales definidos aquí tengan los mismos nombres que los definidos en la especificación XML, las reglas de producción de esta especificación serán iguales a un subconjunto de las cadenas correspondientes a las reglas de la otra especificación.
Declaración de espacio de nombres utilizando atributos | ||||||||||||||||||||
|
[Definición:] El símbolo SystemLiteral
de la producción NSDef
es un URI cuya que funciona como un nombre de espacio de nombres para identificar el espacio de nombres. El nombre de espacio de nombres, debe tener las características de unicidad y persistencia, para servir al propósito para el que ha sido creado. No se trata de ningún objetivo el ser directamente utilizable para la obtención de un esquema (schema), si existe alguno. Un ejemplo de una sintaxis diseñada con esos objetivos son los "Nombres de Recurso Uniformes" (Uniform Resource Names) [RFC2141]. Sin embargo, los URLs comunes pueden ser gestionados de tal manera que se alcancen estos mismos objetivos.
[Definición:] En la producción PrefixDef
, si se proporcionan el carácter dos puntos opcional y el símbolo NCName
, entonces ese NCName
es el prefijo de espacio de nombres, utilizado para asociar nombres con este espacio de nombres en el ámbito del elemento al que está adjunto la declaración.
[Definición:] Si no se proporcionan el carácter dos puntos y el símbolo NCName
, entonces el nombre de espacio de nombres asociado es el del espacio de nombres por defecto en el ámbito del elemento al que está adjunto la declaración.
Restricción de Espacio de Nombres: URI Vacío
El símbolo SystemLiteral
puede estar vacío sólo si el símbolo PrefixDef
es xmlns
, es decir, si por ejemplo se declara un espacio de nombres por defecto. El efecto de dicha declaración es anular cualquier declaración de nivel superior del espacio de nombres por defecto, estableciendo su valor a "nulo". Los espacios de nombres por defecto y la anulación de declaraciones se discute más ampliamente en la sección "5. ámbito y Espacios de Nombres por Defecto".
Ejemplo de declaración de espacio de nombres:
<?xml version="1.0"?> |
[Definición:] En los documentos XML conformantes con esta especificación, algunos nombres (las construcciones correspondientes al no-terminal Name
) pueden darse como nombres calificados, definidos de la siguiente manera:
Nombre Calificado | ||||||||||||
|
El símbolo Prefix
proporciona el prefijo de espacio de nombres, que es parte del nombre calificado, y debe ser asociado con el URI de espacio de nombres en una declaración de espacio de nombres. [Definición:] El símbolo LocalPart
proporciona la parte local del nombre calificado.
El prefijo sólo funciona como una reserva de espacio para el nombre de espacio de nombres. Las aplicaciones deben utilizar el nombre del espacio nombres, no el prefijo, en la construcción de nombres cuyo ámbito se extienda más allá del documento que lo contiene.
En los documentos XML conformantes con esta especificación, los tipos de elementos son dados como nombres calificados, de la siguiente manera:
Tipos de Elementos y Nombres de Atributo | ||||||||||||||||||
|
Los nombres de atributo se dan como nombres calificados, de la siguiente manera:
Atributo | ||||||
|
Restricción de Espacio de Nombres: Prefijo Declarado
El prefijo de espacio de nombres, a no ser que sea xml
o xmlns
, debe haber sido declarado en una declaración de espacio de nombres. Los prefijos de espacios de nombres xml
y xmlns
están reservados, y se considera que han sido declarados implícitamente. Los prefijos que comienzan 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 XML y las relativas a ésta.
Los nombres de Elemento y tipos de atributo también son dados como nombres calificados cuando aparecen en declaraciones en la DTD:
Nombres Calificados en Declaraciones | ||||||||||||||||||||||||||||
|
Se considera que la declaración de espacios de nombres es aplicable al elemento en que se especifica y a todos los elementos dentro del contenido de ese elemento, a menos que sea anulado por otra declaración de espacio de nombres, con la misma parte de PrefixDef
:
<?xml version="1.0"?> |
Se pueden declarar múltiples prefijos de espacios de nombres como atributos de un único elemento, como se muestra en el siguiente ejemplo:
<?xml version="1.0"?> |
Un espacio de nombres por defecto se aplica al elemento dónde está declarado (si ese elemento no posee prefijo de espacio de nombres), y a todos los elementos sin prefijo dentro del contenido del ese elemento. Los espacios de nombres por defecto no se aplican directamente a los atributos. El espacio de nombres de un atributo sin prefijo es una función del tipo del elemento al cual está adjunto, y al espacio de nombres (si hubiese alguno) de ese elemento. Para mayor información, véase la sección "6. Estructura Interna de los Espacios de Nombres XML".
<?xml version="1.0"?> |
<?xml version="1.0"?> |
A continuación otro ejemplo, más extenso, del ámbito de los espacios de nombres:
<?xml version="1.0"?> |
El espacio de nombres por defecto, una vez declarado, puede ser "anulado":
<?xml version='1.0'?> |
En las disciplinas de la computación, el término "espacio de nombres" convencionalmente hace referencia a un conjunto de nombres, por ejemplo a una colección que no contenga duplicados. Sin embargo, tratar los nombres utilizados en las marcaciones XML como en dichos espacios de nombres conllevaría graves perjuicios en su utilidad. La utilización primaria de esos nombres en los documentos XML es posibilitar la identificación, de las estructuras lógicas en los documentos, por parte de módulos software, mecanismos de visualización basados en hojas de estilo y validadores guiados por esquemas. Veamos el siguiente ejemplo:
<seccion><titulo>Firma de Libros</titulo> |
En este ejemplo tenemos tres apariciones del nombre titulo
dentro de marcaciones, y el nombre por sí sólo no proporciona suficiente información como para permitir el procesamiento correcto por parte de un módulo software.
Otro área problemática viene del uso de atributos "globales". Como se ilustra en el siguiente ejemplo, se va a visualizar un fragmento de un documento XML utilizando una hoja de estilo CSS:
<RESERVA> |
en este caso, el atributo CLASS
, que describe la tarifa y toma los valores "J", "Y" y "C", es distinto a todos los niveles semánticos del atributo HTML:CLASS
, que se utiliza para obtener los efectos de formateo de CSS.
XML 1.0 no proporciona una método para declarar atributos "globales". Los elementos como el atributo CLASS
de HTML son globales sólo en su descripción y en su interpretación por parte de las aplicaciones HTML. Sin embargo, dichos atributos, cuya gran característica diferenciadora es que sus nombres son únicos, pueden aparecer frecuentemente en gran variedad de aplicaciones.
Para alcanzar el objetivo de hacer útiles en la obtención de su propósito a los nombres calificados y los no calificados, se identifican los nombres que aparezcan en los espacios de nombres XML como pertenecientes a uno de los múltiples y disjuntos espacios de nombres tradicionales, denominados particiones de espacios de nombres. Las particiones son:
En los documentos XML conformantes con esta especificación, los nombres de todos los atributos calificados (prefijados) son asignados al atributo global de la partición, y los nombres de todos los atributos no calificados son asignados a la partición por tipo de elemento apropiada.
Por conveniencia a la hora de especificar reglas y hacer comparaciones, se define un formulario expandido, expresado aquí en sintaxis de elemento XML, para cada tipo de elemento y nombre de atributo en un documento XML.
[Definición:] Un tipo de elemento expandido es expresado como un elemento vacío de XML del tipo ExpEType
. Posee un tipo
de atributo requerido que proporciona la Parte Local (LocalPart)
del tipo, y un atributo denominado ns
opcional, que si el elemento está calificado, proporciona su nombre de espacio de nombres.
[Definición:] Un nombre de atributo expandido es expresado como un elemento vacío de XML del tipo ExpAName
. Posee un nombre
de atributo requerido que le proporciona el nombre. Si el atributo es global, posee un atributo requerido denominado ns
que proporciona el nombre de espacio de nombres. Por otro lado, si posee un atributo requerido denominado eltype
, éste proporciona el tipo del elemento adjunto, y un atributo opcional denominado elns
que proporciona el nombre del espacio de nombres, si es conocido, del elemento adjunto.
Unas pequeñas variaciones en los ejemplos dados anteriormente ilustrarán el trabajo de los tipos de elementos expandidos y nombres de atributos. Los siguientes dos fragmentos están, cada uno de ellos, seguidos de una tabla que muestra los nombres expandidos:
<!-- 1 --> <seccion xmlns='urn:com:books-r-us'> |
Los nombres se expandirían de la siguiente manera:
Línea | Nombre | Expandido |
1 | seccion | <ExpEType type="seccion" ns="urn:com:books-r-us" /> |
2 | titulo | <ExpEType type="titulo" ns="urn:com:books-r-us" /> |
3 | firma | <ExpEType type="firma" ns="urn:com:books-r-us" /> |
4 | autor | <ExpEType type="autor" ns="urn:com:books-r-us" /> |
4 | titulo | <ExpAName name='titulo' eltype="autor" elns="urn:com:books-r-us" /> |
4 | nombre | <ExpAName name='nombre' eltype="autor" elns="urn:com:books-r-us" /> |
5 | libro | <ExpEType type="libro" ns="urn:com:books-r-us" /> |
5 | titulo | <ExpAName name='titulo' eltype="libro" elns="urn:com:books-r-us" /> |
5 | precio | <ExpAName name='precio' eltype="libro" elns="urn:com:books-r-us" /> |
<!-- 1 --> <RESERVA xmlns:HTML="http://www.w3.org/TR/REC-html40"> |
1 | RESERVA | <ExpEType type="RESERVA" /> |
2 | NOMBRE | <ExpEType type="NOMBRE" /> |
2 | HTML:CLASS | <ExpAName name="CLASS" ns=http://www.w3.org/TR/REC-html40 /> |
3 | ASIENTO | <ExpEType type="ASIENTO" /> |
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 | SALIDA | <ExpEType type="SALIDA" /> |
En los documentos XML conformantes con esta especificación, ningún elemento puede tener dos atributos cuyos nombres expandidos sean equivalentes, es decir, que tengan los mismos pares atributo-valor y elementos hijo con el mismo contenido.
Los nombres en los documentos XML que sean conformes a esta especificación son tipos de elementos y nombres de atributo que cumplen la producción QName
y que satisfacen la "Restricción de Espacio de Nombres" descrita en este documento.
Un documento XML es conformante con esta especificación, si el resto de "tokens" del documento que sean requeridos, para la conformancia con XML, cumplen la producción XML para el símbolo Name
, cumplen la producción NCName
de esta especificación, y los elementos poseen atributos con nombres expandidos únicos.
El efecto de la conformancia es que es dicho documento:
Estrictamente hablando, los valores de atributo declarados para ser de los tipos ID
, IDREF(S)
, ENTITY(IES)
y NOTATION
también son Nombres (Names)
y por eso no deben contener caracteres 'dos puntos'. Sin embargo, el valor de tipo de atributo declarado es, en principio, solamente accesible en documentos que hayan sido validados. Es decir, en los documentos XML bien-formados, no se puede asegurar que el contenido de los valores de los atributos haya sido comprobado para su conformancia con esta especificación.
Este documento refleja el trabajo de un gran número de personas, incluyendo especialmente a los miembros del Grupo de Trabajo en XML del Consorcio World Wide Web, del Grupo Especial de Interés y a los participantes en la "Actividad sobre Metadatos" del W3C.