Этот документ является не официальным переводом исходной английской версии CSS Namespaces Module. Обратите внимание на то, что оригинальная версия документа существует только на английском языке. Данный перевод может содержать неточности и ошибки. При поддержке сайта Husky air compressor. Перевод выполнил © Зайцев Дмитрий, 2011. Комментарии к переводу оставляйте здесь! | | На главную

W3C

Модуль Пространств имен CSS

Рекомендация W3C от 29 сентября 2011 года

Данная версия:
http://www.w3.org/TR/2011/REC-css3-namespace-20110929/
Последняя версия:
http://www.w3.org/TR/css3-namespace/
Предыдущая версия:
http://www.w3.org/TR/2011/PR-css3-namespace-20110811/
Редакторы:
Elika J. Etemad
Anne van Kesteren, Opera Software ASA
Редакторы предыдущей версии:
Peter Linss, Netscape Communications
Chris Lilley, W3C

Пожалуйста, обратитесь к странице исправлений этого документа, которая может включать в себя нормативные изменения.

См. также переводы.


Аннотация

Этот модуль пространств имен CSS определяет синтаксис для использования пространств имен в CSS. Он определяет правила @namespace для объявления пространства имен по умолчанию и связывание пространств имен с их префиксами, а также он определяет синтаксис, который другие спецификации могут перенимать для использования этих префиксов в полных именах пространства имен.

Статус этого документа

Этот раздел описывает статус данного документа на момент его публикации. Другие документы могут заменять этот документ. Со списком текущих публикаций W3C и последней ревизией этого технического доклада можно ознакомиться в индексе технических докладов W3C, http://www.w3.org/TR/.

Этот документ был подготовлен Рабочей Группой CSS в качестве Предлагаемой Рекомендации.

Рекомендация W3C это готовый документ, который был широко рассмотрен, и который указывает на то, что он реализован. W3C рекомендует, чтобы все реализовывали данную спецификацию. Комментарии могут быть отправлены в (архив) публичный список электронных писем www-style@w3.org (см. инструкции). При отправке электронного письма, пожалуйста, поместите текст “css3-namespace” в тему письма, желательно таким образом: “[css3-namespace] …краткое описание комментария…

Этот документ был рассмотрен членами W3C, разработчиками программного обеспечения, а также другими группами W3C и заинтересованными сторонами, и одобрен Директором в качестве Рекомендации W3C. Это стабильный документ и может быть использован в качестве справочного материала или цитат в другом документе. Роль W3C в разработке Рекомендации, заключается в привлечении внимания к спецификации, и способствовать ее широкому распространению. Это повышает функциональность и совместимость в Веб (Web).

Этот документ был подготовлен группой, действующая в рамках Патентной Политики W3C от 5 февраля 2004 года. W3C поддерживает публичный список открытых патентов сделанный в связи с результатами деятельности группы; эта страница также включает в себя инструкции по раскрытию патента. Лица, обладающие актуальной информацией о патенте, который удовлетворяет Основным требованиям, должны раскрыть эту информацию, согласно пункту 6 патентной политики W3C.

Пакет тестирования Пространства имен CSS был разработан на стадии предварительной рекомендации ("Candidate Recommendation") данной спецификации пространства имен CSS. Также доступен Отчет о реализации.

Этот документ, такой же, как и предыдущая, предложенная версия рекомендации, за исключением некоторых редакционных изменений к вступительной части и обновления ссылок на источники.

Содержание

1. Введение

Этот раздел не является нормативным.

Этот модуль пространств имен CSS определяет синтаксис для использования пространств имен в CSS. Он определяет правило @namespace для объявления пространства имен по умолчанию, и для связывания пространств имен с их префиксами. Он также определяет синтаксис для использования этих префиксов, чтобы представить полные имена пространства имен. Он не определяет, где такие имена действительны или, что они означают: что зависит от их контекста и определяется базовым языком, таким как Селекторы ([SELECT]), который ссылается на синтаксис, определенный в модуле пространств имен CSS.

Обратите внимание, что клиент CSS, который не поддерживает этот модуль, будет (если он должным образом соответствует CSS's forward-compatible parsing rules) игнорировать все правила @namespace, а также все правила стилей, которые используют полные имена пространства имен. Синтаксис разграниченных префиксов пространства имен в CSS, был намеренно выбран так, чтобы эти клиенты CSS скорее игнорировали правила стилей, чем сопоставляли их некорректно.

2. Соответствие

Документ или соответствие не могут соответствовать пространству имен CSS в одиночку, но может претендовать на соответствие к Пространствам имен CSS, если он удовлетворяет требованиям соответствия в этой спецификации при внедрении CSS или другого базового языка, который нормативно ссылается на эту спецификацию.

Соответствие пространств имен CSS определено в двух классах:

таблица стилей
Таблица стилей CSS (или полноценный модуль другого базового языка, который нормативно предоставляет Пространства имен CSS).
интерпретатор
Кто-то или что-то интерпретирует семантику таблицы стилей. (под эту категорию подпадают пользовательские агенты (user agents) CSS.)

Соответствие требованиям выражены в сочетании описательных утверждений и терминологии документа RFC 2119. Ключевые слова ОБЯЗАН ("MUST"), НЕ ОБЯЗАН ("MUST NOT"), НЕОБХОДИМ ("REQUIRED"), ДОЛЖЕН ("SHALL"), НЕ ДОЛЖЕН ("SHALL NOT"), СЛЕДУЕТ ("SHOULD"), НЕ СЛЕДУЕТ ("SHOULD NOT"), РЕКОМЕНДУЕТСЯ ("RECOMMENDED"), МОЖЕТ ("MAY"), и НЕОБЯЗАТЕЛЬНЫЙ ("OPTIONAL") в нормативных частях этого документа должны быть интерпретированы так, как это описано в документе RFC 2119. Тем не менее, для удобства чтения, в данной спецификации эти слова не появляются в верхнем регистре. Весь текст данной спецификации является нормативным, за исключением тех разделов которые явно помечены как ненормативные, примеры или примечания.[RFC2119]

Примеры в этой спецификации начинаются со слова "например" или отделены от нормативного текста и выделены классом - class="example", как это представлено ниже:

Это информативный пример.

Информативные примечания начинаются со слова "Примечание" и устанавливаются отдельно от нормативного текста с классом class="note", как это представлено ниже:

Примечание, это информативное примечание.

2.1. Терминология

Говоря о терминах представленных в этой спецификации, то Пространства имен CSS используют терминологию, определенную в Пространстве имен XML 1.0. [XML-NAMES] Однако, синтаксис, который определен, здесь не ограничивается представлением имен элементов и атрибутов XML и может представлять другие виды пространств имен, как это определено базовым языком.

В Пространствах имен CSS, имя пространства имен содержащее пустую строку, принято представлять как, нулевое пространство имен или отсутствие пространства имен.

Например, с учетом объявления пространств имен:

@namespace empty "";
@namespace "";

Типы селекторов elem, |elem, и empty|elem эквивалентны.

3. Объявление пространств имен: правило @namespace

По-правило @namespace, объявляет префикс пространства имен и связывает его с заданным именем пространства имен (строка). Этот префикс пространства имен может быть использован в полных именах пространств имен, в качестве полных имен CSS, которые определены ниже.

@namespace "http://www.w3.org/1999/xhtml";
@namespace svg "http://www.w3.org/2000/svg";

Первое правило объявляет пространство имен по умолчанию http://www.w3.org/1999/xhtml, которое должно применяться к именам, которые не имеют конкретного компонента пространства имен.

Второе правило объявляет префикс пространства имен svg, который используется для применения пространства имен http://www.w3.org/2000/svg, в котором этот префикс используется.

В Пространствах имен CSS, как и в Пространствах имен в XML 1.0, префикс является всего лишь синтаксической конструкцией; это полное имя (состоит из локального имени и имени пространства имен) которое является очень значимым. Таким образом, действующие префиксы используются в таблице стилей CSS, и в зависимости от префиксов пространства имен используемых в разметке они являются либо по умолчанию, либо нет.

Например, с учетом следующего документа XML:

<qml:elem xmlns:qml="http://example.com/q-markup"></qml:elem>

и такие объявления @namespace вначале файла CSS:

@namespace Q "http://example.com/q-markup";
@namespace lq "http://example.com/q-markup";

Селекторы Q|elem и lq|elem в этом CSS файле, оба будут соответствовать элементу <qml:elem>. (Селектор qml|elem будет некорректным.)

3.1. Синтаксис

Синтаксис для правила @namespace, выглядит следующим образом (используя обозначение из Приложение Грамматика в CSS 2.1 [CSS21]):

namespace
  : NAMESPACE_SYM S* [namespace_prefix S*]? [STRING|URI] S* ';' S*
  ;
namespace_prefix
  : IDENT
  ;

с новой лексемой:

@{N}{A}{M}{E}{S}{P}{A}{C}{E} {return NAMESPACE_SYM;}

Любые правила @namespace должны следовать всем правилам @charset и @import и предшествовать всем другим не проигнорированным at-rules и наборам правил в таблице стилей. Для синтаксиса CSS добавляют [ namespace [S|CDO|CDC]* ]* сразу после [ import [S|CDO|CDC]* ]* в грамматике stylesheet.

Синтаксически некорректное правило @namespace (либо плохо сформированное, либо неверно расположенное) должно быть проигнорировано. Таблица стилей CSS, содержащая недействительное правило @namespace, не является корректной таблицей стилей.

Строка URI, полученная из синтаксиса URI, должна быть рассмотрена, как символьная строка: как и с синтаксисом STRING, никаких специфических нормализаций URI не применяется.

Все строки—включая, пустую строку и строки представляющие недействительные URI—являются действительными именами пространств имен в объявлениях @namespace.

3.2. Область действия

Префикс пространства имен объявляется только с таблицей стилей в которой это правило @namespace появляется. Он не объявляется ни в каких-либо таблицах стилей импортированных или импортируемых этой таблицей стилей, ни в каких-либо других таблицах стилей применяемых к документу.

3.3. Объявление Префиксов

Однажды объявленный префикс пространства имен, представляет пространство имен для которого он был объявлен и может быть использован для обозначения пространства имен полного имени. Также как и счетчик имен CSS, префиксы пространства имен чувствительны к регистру.

Если в объявлении пространства имен опущен префикс, тогда объявленное пространство имен является пространством имен по умолчанию. Пространство имен по умолчанию может применяться к именам, которые не имеют явного префикса пространства имен: модули, которые используют префиксы пространства имен, должны определить в каком контексте применяется пространство имен по умолчанию. Например, следующее [XML-NAMES], в Селекторах [SELECT] пространство имен по умолчанию применяется к типам селекторов—но оно не применяется к атрибутам селекторов. Для пространства имен по умолчанию, не существует значения по умолчанию: модули, которые присваивают неполные имена пространству имен по умолчанию, должны определять как их неполные имена, и должны быть интерпретированы, когда пространство имен по умолчанию не объявлено.

Отметьте, что использование пространств имен по умолчанию в сочетании с типами селекторов может привести к пользовательским агентам (далее ПА, с англ. user agents, сокр. - UA), которые поддерживают пространства имен по умолчанию и ПА, которые не поддерживают пространства имен по умолчанию для различной интерпретации селекторов.

Если префикс пространства имен или пространство имен по умолчанию объявлено более одного раза, в таком случае будет использоваться только последнее объявление. Объявление префикса пространства имен или пространства имен по умолчанию более одного раза, является несогласованным.

4. Полные имена CSS

Полное имя CSS - это имя, которое явно расположено в пределах пространства имен, либо связано с ним. Для формирования полного имени в синтаксисе CSS, префикс пространства имен, который был объявлен в его области действий, добавляется к локальному имени (например, имя атрибута или элемента), и разделяется "вертикальной чертой" (|, U+007C). Префикс, представляющий пространство имен для которого он был объявлен, указывает на пространство имен локального имени. Префикс полного имени, может быть опущен, чтобы указать, что имя не принадлежит ни какому пространству имен, т.е., что часть полного имени пространства имен не имеет значения. Некоторые контексты (как это определено в базовом языке), могут разрешать использование звездочки (*, U+002A) в качестве шаблона префикса, чтобы указать имя в любом пространстве имен, в том числе и вне пространства имен.

С учетом таких объявлений пространств имен:

@namespace toto "http://toto.example.org";
@namespace "http://example.com/foo";

При условии, когда применяется пространство имен по умолчанию

toto|A
представляет собой имя A в пространстве имен http://toto.example.org.
|B
представляет собой имя B, которое не принадлежит ни одному из пространств имен.
*|C
представляет собой имя C в любом пространстве имен, в том числе и вне пространства имен.
D
представляет собой имя D в пространстве имен http://example.com/foo.

Синтаксис для части полного имени CSS, прежде чем приводится ниже локальное имя, предназначен как для полных имен, которые позволяют использовать шаблоны префиксов (wqname), так и для полных имен, которые запрещают использование шаблонов префиксов (qname). (Синтаксис использует обозначения из Грамматического приложения CSS 2.1. [CSS21] Обратите внимание, это значит, что косвенным образом допускаются комментарии между лексемами, но не допускается пустое пространство(пробелы) между ними.):

qname_prefix
  : [namespace_prefix]? '|'
  ;
wqname_prefix
  : namespace_prefix? '|'
  | '*' '|'
  ;

Полные имена CSS могут быть использованы, например, в селекторах и в свойствах значений, как описано в других модулях. Эти модули должны определять обработку префиксов пространства имен, которые не были объявлены должным образом. Такая обработка должна рассматривать необъявленные префиксы пространства имен, как ошибку разбора, которая приводит к тому, что селектор или объявление (и т.д.) должны быть признаны недействительными, и в CSS, проигнорированы.

Например, модуль Селекторов [SELECT] определяет тип селектора с необъявленным префиксом пространства имен, как недействительный селектор, и CSS [CSS21] требует, чтобы набор правил с недействительным селектором был полностью проигнорирован.

Благодарности

Данный проект, в большей степени, был позаимствован из предыдущих проектов, таких как, пространство имен CSS при поддержке Криса Лиллея (Chris Lilley) и Питера Линсса (Peter Linss), и неопубликованных проектов по CSS и XML, от авторов Хокон Ли (Håkon Lie) и Берт Бос (Bert Bos), а также Пространств имен XML и CSS от авторов Берт Бос (Bert Bos) и Стивен Пембертон (Steven Pemberton). В этот документ внесли свой вклад много нынешних и бывших членов Рабочей группы CSS (CSS Working Group). Также способствовали идеям для этой спецификации обсуждения на www-style@w3.org и в других местах. Особая благодарность выражается Л. Дэвиду Барону (L. David Baron), Карлу Дабосту (Karl Dubost), Яну Хиксону (Ian Hickson), Бьёрну Хёрманну (Bjöern Höhrmann), и Лаклану Ханту за их замечания.

Ссылки

Нормативные ссылки

[CSS21]
Берт Бос; и соавт. Спецификация, Каскадные Таблицы Стилей, Уровень 2, Редакция 1 (CSS 2.1). от 7 июня 2011 года. Рекомендация W3C. URL: http://www.w3.org/TR/2011/REC-CSS2-20110607
[RFC2119]
С. Брэднэр. Ключевые слова, для использования в документах RFC, для Обозначения Требуемых Уровней. Internet RFC 2119. URL: http://www.ietf.org/rfc/rfc2119.txt
[XML-NAMES]
Тим Брэй; и соавт. Пространства имен в XML 1.0 (Третье издание). от 8 декабря 2009 года. Рекомендация W3C. URL: http://www.w3.org/TR/2009/REC-xml-names-20091208/

Информативные ссылки

[SELECT]
Тантек Челик (Tantek Çelik); и соавт. Селекторы, Уровень 3. от 29 сентября 2011 года. Рекомендация W3C. URL: http://www.w3.org/TR/2011/REC-css3-selectors-20110929