Nota de traducción: traducción realizada por Posicionamiento Web. El documento original del W3C es la única referencia oficial y normativa válida. Este documento puede contener errores de traducción, los cuales deben ser comunicados al traductor.

W3C

Módulo de Espacios de nombres (Namespace) CSS

Recomendación del W3C 29 de Septiembre 2011

Esta versión:
http://www.w3.org/TR/2011/REC-css3-namespace-20110929/
Última versión:
http://www.w3.org/TR/css3-namespace/
Versión anterior:
http://www.w3.org/TR/2011/PR-css3-namespace-20110811/
Editores:
Elika J. Etemad
Anne van Kesteren, Opera Software ASA
Editores previos:
Peter Linss, Netscape Communications
Chris Lilley, W3C

Por favor, consulte la sección de erratas de este documento, que puede incluir algunas correcciones normativas.

Vea también las traducciones.


Resumen

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.

Estado del presente documento

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.

Índice

1. Introducción

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.

2. Conformidad

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:

hoja de estilo
Una hoja de estilo CSS (o una unidad completa de otra lengua de implementación que por norma hace referencia a los espacios de nombres CSS).
intérprete
Alguien o algo que interprete la semántica de una hoja de estilo. (Agentes de usuario CSS se incluyen en esta categoría.)

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.

2.1. Terminología

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.

3. Declaración de espacios de nombre: la regla @namespace

El @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).

3.1. Sintaxis

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.

3.2. Ámbito de aplicación

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.

3.3. Declaración de Prefijos

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.

4. Nombres cualificados CSS

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
representa el nombre A en el espacio de nombre http://toto.example.org.
|B
rrepresenta el nombre B que no pertenece a ningún espacio de nombre.
*|C
representa el nombre C en cualquier espacio de nombres, no requiriendo espacio de nombres.
D
representa el nombre 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.

Por ejemplo, el módulo de Selectores [SELECT] define un selector de tipo con un prefijo de espacio de nombres no declarado como un selector no válido, y CSS, [CSS21] requiere conjuntos de reglas con un selector no válido que sea ignorado por completo.

Agradecimientos

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.

Referencias

Referencias normativas

[CSS21]
Bert Bos; y otros. Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification. 7 de Junio de 2011. Recomendación W3C. URL: http://www.w3.org/TR/2011/REC-CSS2-20110607
[RFC2119]
S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. Internet RFC 2119. URL: http://www.ietf.org/rfc/rfc2119.txt
[XML-NAMES]
Tim Bray; y otros. Namespaces in XML 1.0 (Third Edition). 8 de diciembre de 2009. Recomendación W3C. URL: http://www.w3.org/TR/2009/REC-xml-names-20091208/

Referencias informativas

[SELECT]
Tantek Çelik; y otros. Selectors Level 3. 29 de septiembre de 2011. Recomendación W3C. URL: http://www.w3.org/TR/2011/REC-css3-selectors-20110929