Por favor, consulte la sección de erratas de este documento, que puede incluir algunas correcciones normativas.
Vea también las traducciones.
Copyright © 2011 W3C® (MIT, ERCIM, Keio), todos los derechos reservados. Se aplican las reglas de responsabilidad, marca registrada y utilización de documentos del W3C.
Este módulo de Espacios de nombres CSS define la sintaxis para el uso de espacios de
nombres en CSS. Define la regla @namespace para determinar un espacio de nombres por
defecto o para vincular espacios de nombres a prefijos de espacio de nombres. Además,
también define una sintaxis que otras especificaciones pueden adoptar para el uso de
aquellos prefijos en los nombres cualificados para espacio de nombres.
Esta sección describe el estado del presente documento al momento de su publicación. El presente documento puede ser reemplazado por otros. Una lista de las publicaciones actuales del W3C y la última revisión del presente informe técnico puede hallarse en el Índice de informes técnicos del W3C en http://www.w3.org/TR/.
Este documento fue elaborado por el CSS Working Group como una Propuesta de Recomendación.
Una recomendación del W3C es un documento maduro que ha sido ampliamente revisado y se ha demostrado que puede aplicarse. El W3C fomenta la implementación de esta especificación. Los comentarios pueden ser enviados a la lista de correo pública (archivada) www-style@w3.org (ver instrucciones). Al enviar un e-mail, por favor, escribir “css3-namespace” en el asunto, preferentemente de esta manera: “[css3-namespace] …resumen del comentario…”
Este documento ha sido revisado por miembros del W3C, programadores de software y otros grupos del W3C y partes interesadas, además es avalado por el Director como una recomendación del W3C. Es un documento estable y puede ser empleado como material de referencia o citado en otro documento. El rol del W3C en la creación de la Recomendación es poner atención en la especificación y fomentar su amplia implementación. Esto mejora la funcionalidad y la interoperabilidad de la Web.
Este documento fue elaborado por un grupo que opera de acuerdo a la Política de Patentes del W3C del 5 de Febrero de 2004. El W3C mantiene una lista pública de publicaciones de patentes pertinentes a los resultados del trabajo del grupo; en la página también se incluye instrucciones para la publicación de una patente. Toda persona que tenga conocimiento de una patente que, en su opinión, contenga Reivindicaciones Esenciales deberá revelar la información de conformidad con la sección 6 de la Política de Patentes del W3C.
Una Gama de pruebas de espacio de nombres CSS se ha desarrollado durante la fase de Recomendación de candidato de esta especificación de espacios de nombres CSS. También hay disponible un informe de implementación.
Este documento es el mismo que la versión de Propuesta de recomendación anterior, con excepción de cambios de redacción en las páginas preliminares, y la actualización de las referencias.
@namespace
Esta sección no es normativa.
Este módulo de Espacios de nombres CSS define la sintaxis para el uso de espacios de
nombres en CSS. Define la regla @namespace para determinar un espacio de nombres por
defecto o para vincular espacios de nombres a prefijos de espacio de nombres. También
define una sintaxis para utilizar aquellos prefijos para representar nombres cualificados
para espacio de nombres. No define donde tales nombres son válidos o lo que quieren
decir, eso depende de su contexto y se define por un lenguaje host como los Selectores
([SELECT]), que hace referencia a la
sintaxis definida en el módulo espacios de nombres CSS.
Obsérvese que un cliente de CSS que no se ajuste a este módulo (si bien se ajusta a
las reglas CSS de análisis
de compatibilidad futura) ignorará todas las reglas @namespace,
así como todas las reglas de estilo que utilizan los nombres cualificados para espacio de nombres.
La sintaxis para delimitar los prefijos de espacio de nombres en CSS fue elegida premeditadamente
para que estos clientes CSS ignoren las reglas de estilo en lugar de, posiblemente, combinarlas
de forma incorrecta.
Un documento o aplicación no puede ajustarse sólo a espacios de nombres CSS, pero puede reclamar la conformidad con los espacios de nombres CSS si se cumplen los requisitos de conformidad en esta especificación durante la aplicación de CSS u otro lenguaje host o lengua de implementación que por norma hace referencia a esta especificación. Conformidad con espacios de nombres CSS se define por dos clases:
Los requisitos de conformidad se expresan con una combinación de afirmaciones descriptivas y terminología RFC 2119. Las palabras claves "DEBE", "NO DEBE", "REQUERIDO", "DEBERÁ", "NO DEBERÁ", "DEBERÍA", "NO DEBERÍA", "RECOMENDADO", "PUEDE", and "OPCIONAL" en las partes normativas de este documento se interpretarán según lo descripto en RFC 2119. Sin embargo, para facilitar la lectura, estas palabras no aparecen en mayúsculas en esta especificación. Todo el texto de esta especificación es normativo, excepto las secciones marcadas explícitamente como no normativas, ejemplos y observaciones. [RFC2119]
Los ejemplos de esta especificación se introducen con las palabras "por ejemplo" o son
apartados del texto normativo con class="example", de esta manera:
Este es un ejemplo informativo.
Las observaciones informativas comienzan con la palabra "Observación" y son apartados
del texto normativo con class="note", de esta manera:
Observación, esta es una observación informativa.
Además de los términos introducidos por esta especificación, los espacios de nombres CSS utilizan la terminología definida en los Espacios de nombres en XML 1.0. [XML-NAMES] Sin embargo, la sintaxis definida aquí no se limita a la representación de un elemento XML y nombres de atributos, y puede representar otros tipos de espacios de nombres definidos por la lengua de implementación.
En los espacios de nombres CSS, un nombre del espacio de nombres que consiste en una cadena de texto vacía se toma para representar el espacio de nombres nulo o la falta de un espacio de nombres.
Por ejemplo, teniendo en cuenta las declaraciones de espacios de nombres:
@namespace empty ""; @namespace "";
Los selectores de tipos elem, |elem, y
empty|elem son equivalentes.
@namespaceEl @namespace at-rule
declara un prefijo de espacio de nombre y lo asocia con un
nombre de espacio de nombres dado (una cadena). Este prefijo de espacio de nombres se
puede utilizar en los nombres cualificados para espacio de nombres como los nombres cualificados CSS
definen a continuación.
@namespace "http://www.w3.org/1999/xhtml"; @namespace svg "http://www.w3.org/2000/svg";
La primera regla declara un nombre de espacio predeterminado
http://www.w3.org/1999/xhtml que se aplica a los nombres que no tienen ningún componente de espacio de
nombre explícito.
La segunda regla declara un prefijo de espacio de nombre svg
que se utiliza para aplicar el espacio de nombre http://www.w3.org/2000/svg
donde se utiliza el prefijo de espacio de nombre svg.
En los Espacios de nombres CSS, como en Espacios de nombres en XML 1.0, el prefijo no es más que una construcción sintáctica; lo que es importante es el nombre expandido (la tupla del nombre local y del nombre de espacio de nombres). Así, los prefijos utilizados en una hoja de estilo CSS son independientes de los prefijos de espacios de nombres utilizados en el prototipo de ambos casos, estén pre-determinados o no.
Por ejemplo, dado el siguiente documento XML:
<qml:elem xmlns:qml="http://example.com/q-markup"></qml:elem>
y las siguientes declaraciones @namespace comienzo de un archivo CSS:
@namespace Q "http://example.com/q-markup"; @namespace lq "http://example.com/q-markup";
Los selectores Q|elem y lq|elem en ese archivo CSS coincidirían ambos con el elemento <qml:elem>.
(El selector qml|elem no sería válido).
La sintaxis de la regla @namespace es la siguiente (utilizando la notación del apéndice
Grammar appendix of CSS
2.1 [CSS21]):
namespace : NAMESPACE_SYM S* [namespace_prefix S*]? [STRING|URI] S* ';' S* ; namespace_prefix : IDENT ;
con la nueva simbología:
@{N}{A}{M}{E}{S}{P}{A}{C}{E} {return NAMESPACE_SYM;}
Cualquier regla @namespace debe seguir todas las reglas @charset y @import
y preceder a todas aquellas reglas y conjuntos de reglas conocidas en una hoja de estilo. Para la sintaxis
CSS se agrega [ namespace [S|CDO|CDC]* ]*
inmediatamente después [ import [S|CDO|CDC]* ]* en la gramática
stylesheet.
Una regla @namespace sintácticamente inválida (ya sea incorrecta o fuera de lugar) debe
ser ignorada. Una
hoja de estilo CSS que contenga una regla @namespace inválida, no es
una hoja de estilo válida.
Una cadena URI analizada desde la sintaxis URI se debe tratar como una cadena literal: al
igual que con la sintaxis de la CADENA DE TEXTO (STRING) , no se aplica URI específico
normalizado.
Todas las cadenas, incluyendo la cadena vacía y cadenas que representan URIs no válidos,
son nombres de espacio de nombres válidos en las declaraciones @namespace.
El prefijo de espacio de nombres se declara sólo dentro de la hoja de estilo en la que
aparece su regla @namespace. No se declara en ninguna hoja de estilo importada por esa
hoja de estilo, ni en ninguna otra aplicada al documento.
Un prefijo de espacio de nombres, una vez declarado, representa el espacio de nombres para el que fue declarado y se puede utilizar para indicar el espacio de nombres de un nombre cualificado para espacio de nombres. En los prefijos de espacio de nombres, al igual que los nombres de contador CSS, se distinguirán mayúsculas y minúsculas.
Si en la declaración de espacio de nombres el prefijo de espacio de nombres se omite, entonces el espacio de nombres declarado de esta manera es el espacio de nombres por defecto. El espacio de nombres por defecto puede aplicarse a los nombres que no tienen un prefijo de espacio de nombres explícito: los módulos que emplean prefijos de espacio de nombres deben definir en qué contextos el espacio de nombres por defecto se aplica. Por ejemplo, considerando [XML-NAMES], en los Selectores [SELECT] el espacio de nombres por defecto se aplica a selectores de tipos, pero no se aplica a los selectores de atributos. No hay valor por defecto para el espacio de nombres por defecto: los módulos que asignan nombres no cualificados al espacio de nombres por defecto deben definir cómo esos nombres no cualificados se interpretarán cuando no se declare ningún espacio de nombres por defecto.
Obsérvese, que el uso de espacios de nombres por defecto en conjunto con los selectores de tipos puede causar AUs (UAs) que admitan espacios de nombres por defecto y aplicaciones del usuario que no admitan los espacios de nombres por defecto para interpretar los selectores de otra manera.
Si un prefijo de espacio de nombres o un espacio de nombres por defecto se declara más de una vez sólo la última declaración se utilizará. La declaración de un prefijo de espacio de nombres o un espacio de nombres por defecto más de una vez es inapropiada.
Un nombre cualificado CSS
es un nombre ubicado de forma explícita dentro (asociado
a) de un espacio de nombres. Para formar un nombre cualificado en la sintaxis de CSS,
un prefijo de espacio de nombres que ha sido declarado dentro del ámbito se antepone
a un nombre local (como un elemento o nombre de atributo), separados por una "barra
vertical"(|, U+007C). El prefijo, que representa el espacio de nombres para el cual ha
sido declarado, indica el espacio de nombres del nombre local. El prefijo de un nombre
cualificado puede ser omitido para indicar que el nombre no pertenece a ningún espacio de
nombres, es decir, que la parte del nombre de espacio de nombres del nombre expandido
no tiene ningún valor. Algunos contextos (según se defina en la lengua de implementación) pueden
permitir el uso de un asterisco (*, U+002A) como un prefijo carácter para indicar un
nombre en cualquier espacio de nombres, no requiriendo espacio de nombres.
Teniendo en cuenta las declaraciones de espacio de nombres:
@namespace toto "http://toto.example.org"; @namespace "http://example.com/foo";
En un contexto donde el espacio de nombres por defecto se aplica
toto|A
A en el espacio de nombre
http://toto.example.org.
|B
B que no pertenece a ningún espacio de nombre.
*|C
C en cualquier espacio de nombres, no requiriendo espacio de nombres.
D
D en el espacio de nombres
http://example.com/foo.
La sintaxis para el segmento de un nombre cualificado CSS antes del nombre local es la
que se muestra a continuación, tanto para los nombres cualificados que permiten prefijos
carácter (wqname) y para los nombres cualificados que rechazan prefijos carácter (qname).
(Se utiliza una sintaxis con notación del apéndice Grammar appendix of
CSS 2.1. [CSS21] Obsérvese que esto significa que los comentarios, pero no el espacio en blanco, están
implícitamente permitidos entre símbolos):
qname_prefix : [namespace_prefix]? '|' ; wqname_prefix : namespace_prefix? '|' | '*' '|' ;
Los nombres cualificados CSS se pueden utilizar en (por ejemplo) selectores y valores de propiedad como se describe en otros módulos. Esos módulos deben definir el manejo de los prefijos de espacio de nombres que no han sido debidamente declarados. Dicho tratamiento debe tratar prefijos de espacio de nombres no declarados como un error de análisis que hará que el selector o declaración (etc) no sean considerados válidos y, en CSS, sean ignorados.
Este trabajo toma prestado versiones anteriores sobre soporte de espacios de nombres CSS realizados por Chris Lilley y Pedro Linss, versiones anteriores (sin publicar) de CSS y XML realizados por Håkon Lie y Bert Bos, y espacios de nombres XML y CSS por Bert Bos y Steven Pemberton. Muchos de los miembros actuales y anteriores del Grupo de Trabajo CSS Working Group han contribuido con este documento. Debates en www- style@w3.org y en otros lugares también han aportado ideas para esta especificación. Un especial agradecimiento a L. David Baron, Karl Dubost, Ian Hickson, Höhrmann Bjoern, Lachlan y Hunt por sus comentarios.