Moduł Przestrzenie nazw CSS, poziom 3

> Dodaj do ulubionych

Rekomendacja W3C z dnia 29 września 2011 r., edytowana na miejscu dnia 20 marca 2014 r.

Ta wersja:
http://www.w3.org/TR/2014/REC-css-namespaces-3-20140320/
Najnowsza wersja:
http://www.w3.org/TR/css-namespaces-3/
Szkic redaktorski:
http://dev.w3.org/csswg/css-namespaces/
Poprzednia wersja:
http://www.w3.org/TR/2011/REC-css3-namespace-20110929/
Komentarze:
Www-style@w3.org, w tytule należy napisać „[css-namespaces] … temat …” (archiwum)
Pakiet testowy:
http://test.csswg.org/suites/css3-namespace/20090210/
Redakcja:
Elika J. Etemad (zaproszona ekspertka)
Poprzednia redakcja:
Anne van Kesteren (Opera Software ASA)
Peter Linss (Netscape Communications)
Chris Lilley (W3C)

Sprawdź erratę, aby dowiedzieć się o błędach i problemach zgłoszonych od dnia publikacji. Zobacz także tłumaczenia.


Abstrakt

Ten moduł Przestrzenie nazw CSS definiuje składnię przestrzeni nazw w CSS. Zawiera definicję reguły @namespace służącej do deklarowania domyślnej przestrzeni nazw oraz do wiązania przestrzeni nazw z ich przedrostkami, a także zawiera definicję składni, która może zostać przyjęta w innych specyfikacjach w celu używania tych przedrostków w nazwach opatrzonych przestrzeniami nazw. CSS to język opisu renderowania dokumentów strukturalnych (takich jak HTML i XML) na ekranie, papierze, w mowie itd.

Status tego dokumentu

Ta sekcja opisuje status tego dokumentu w chwili jego publikacji. Inne dokumenty mogą go zastąpić. Listę aktualnych publikacji W3C i najnowszą wersję tego raportu technicznego można znaleźć na stronie Indeks raportów technicznych W3C pod adresem http://www.w3.org/TR/.

Ten dokument został stworzony przez Grupę roboczą CSS jako Rekomendacja.

Ten dokument został zrecenzowany przez członków W3C, twórców oprogramowania oraz przez inne grupy W3C i zainteresowane strony i jest przyjęty przez Dyrektora jako Rekomendacja W3C. Jest to stabilny dokument, który może być wykorzystywany jako materiał źródłowy i cytowany w innych dokumentach. Rolą W3C w tworzeniu Rekomendacji jest zwracanie uwagi na specyfikację i zachęcanie do jej jak najszerszego wdrożenia. Przyczynia się to do zwiększenia funkcjonalności i interoperacyjności internetu.

W3C zachęca wszystkich do wdrożenia tej specyfikacji. Uwagi można wysyłać do (archiwizowanej) publicznej listy mailingowej www-style@w3.org (zobacz instrukcje). W temacie wysyłanej wiadomości e-mail należy wpisać „css-namespaces-3”, najlepiej w następującej formie: „[css-namespaces-3] …podsumowanie uwagi…

Ten dokument został utworzony przez grupę działającą na podstawie Polityki patentowej W3C z 5 lutego 2004 roku. W3C prowadzi publiczną listę wszystkich ujawnień dokonanych w związku z owocami pracy grupy. Ponadto strona ta zawiera instrukcje ujawniania patentów.

Szczegółowe informacje na temat zmian w stosunku do poprzedniej wersji znajdują się w sekcji Zmiany.

Spis treści

1 Wprowadzenie

Ta sekcja ma charakter nienormatywny.

Ten moduł Przestrzenie nazw CSS zawiera definicję składni umożliwiającej używanie przestrzeni nazw w CSS. Zawiera definicję reguły @namespace służącej do deklarowania domyślnej przestrzeni nazw oraz do wiązania przestrzeni nazw z przedrostkami przestrzeni nazw. Ponadto zawiera definicję składni umożliwiającej używanie tych przedrostków do reprezentowania nazw opatrzonych przestrzeniami nazw. Nie określa, gdzie takie nazwy mogą występować ani co one znaczą – to zależy od ich kontekstu i jest określone przez język hosta, na przykład Selektory ([SELECT]), który odnosi się do składni zdefiniowanej w module Przestrzenie nazw CSS.

Klient CSS, który nie obsługuje tego modułu (pod warunkiem, że spełnia warunki parsowania kodu CSS w sposób zapewniający zgodność z przyszłymi normami), zignoruje wszystkie reguły @namespace, jak również wszystkie reguły stylistyczne zawierające nazwy z kwalifikatorem przestrzeni nazw. Składnia oddzielania przedrostków przestrzeni nazw w CSS została celowo tak dobrana, aby ci klienci CSS ignorowali te reguły stylistyczne zamiast je interpretować, potencjalnie niepoprawnie.

2 Zgodność

Dokument lub implementacja nie mogą być zgodne tylko z Przestrzeniami nazw CSS, ale mogą deklarować zgodność z Przestrzeniami nazw, jeśli spełniają wymogi zgodności zawarte w tej specyfikacji, gdy implementują CSS lub inny język hosta, który odnosi się do niej w sposób normatywny.

Zgodność z Przestrzeniami nazw CSS jest zdefiniowana dla dwóch klas:

arkusz stylów
Arkusz stylów CSS (lub kompletna jednostka innego języka hosta, która w sposób normatywny czerpie z Przestrzeni nazw CSS).
interpreter
Osoba lub urządzenie interpretujące semantykę arkusza stylów. (Do kategorii tej zaliczają się aplikacje klienckie użytkownika CSS).

Wymagania w zakresie zgodności są wyrażone za pomocą kombinacji opisowych asercji i terminologii RFC 2119. Słowa kluczowe „MUSI, „NIE MOŻE”, „JEST WYMAGANE", „BĘDZIE”, „NIE BĘDZIE”, „POWINIEN”, „NIE POWINIEN”, „ZALECA SIĘ”, „MOŻE”, i „OPCJONALNIE” w normatywnych częściach tego dokumentu należy interpretować zgodnie z opisem zamieszczonym w dokumencie RFC 2119. Aby jednak tekst specyfikacji był bardziej czytelny, słowa te nie są w nim zapisywane wielkimi literami. Cały tekst tej specyfikacji, z wyjątkiem sekcji, które zostały wyraźnie oznaczone jako nienormatywne, przykładów i uwag, ma charakter normatywny. [RFC2119]

Przykłady w tej specyfikacji są wprowadzane za pomocą słów „na przykład” lub skrótu „np.” albo są oddzielone od tekstu normatywnego za pomocą elementu o następującym wyglądzie:

To jest egzemplarz przykładu informacyjnego.

Uwagi informacyjne w tej specyfikacji są wprowadzane za pomocą słowa „Uwaga” oraz są oddzielone od tekstu normatywnego za pomocą elementu o następującym wyglądzie:

Uwaga, to jest uwaga informacyjna.

2.1 Terminologia

Oprócz pojęć wprowadzonych w tej specyfikacji, w tym dokumencie używane są także pojęcia zdefiniowane w specyfikacji Przestrzenie nazw w XML 1.0. [XML-NAMES] Niemniej jednak, składnia zdefiniowana w tej specyfikacji nie ogranicza się tylko do reprezentowania nazw elementów i atrybutów XML oraz może reprezentować inne rodzaje przestrzeni nazw zdefiniowane przez język hosta.

W Przestrzeniach nazws CSS nazwa przestrzeni nazw będąca pustym łańcuchem jest traktowana jako reprezentacja zerowej przestrzeni nazw lub jej braku.

Na przykład, dla poniższych deklaracji przestrzeni nazw:

@namespace empty ""; @namespace "";

Selektory typu elem, |elem i empty|elem są równoważne.

3 Deklarowanie przestrzeni nazw: reguła @namespace

Reguła @ @namespace deklaruje przedrostek przestrzeni nazw i wiąże go z daną nazwą przestrzeni nazw (łańcuchem). Ten przedrostek przestrzeni nazw może być następnie używany w nazwach kwalifikowanych przestrzenią nazw, takich jak zdefiniowane poniżej nazwy kwalifikowane CSS.

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

Pierwsza reguła deklaruje domyślną przestrzeń nazw http://www.w3.org/1999/xhtml odnoszącą się do nazw, które nie mają wprost określonego komponentu przestrzeni nazw.

Druga z tych reguł deklaruje przedrostek przestrzeni nazw svg, który umożliwia zastosowanie przestrzeni nazw http://www.w3.org/2000/svg tam, gdzie zostanie użyty przedrostek svg.

W Przestrzeniach nazw CSS, tak jak w Przestrzeniach nazw XML 1.0, przedrostek jest jedynie konstrukcją składniową. Dopiero rozwinięta nazwa (połączenie nazwy lokalnej i nazwy przestrzeni nazw) ma rzeczywiste znaczenie. Dlatego rzeczywiste przedrostki używane w arkuszu stylów CSS, bez względu na to, czy są domyślne, czy nie, są niezależne od przedrostków przestrzeni nazw używanych w kodzie znacznikowym, również bez względu na to, czy są domyślne, czy nie.

Na przykład, dane są poniższy dokument XML:
<qml:elem xmlns:qml="http://example.com/q-markup"></qml:elem>

i poniższe deklaracje @namespace, umieszczone na początku pliku CSS:

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

Selektory Q|elem i lq|elem w tym pliku CSS pasowałyby do elementu <qml:elem>.

(Selektor qml|elem byłby niepoprawny, ponieważ przestrzenie nazw CSS rozpoznają tylko przedrostki zadeklarowane w CSS, a nie te, które są zadeklarowane przez język dokumentu).

3.1 Składnia

Reguła @namespace ma następującą składnię (użyta notacja pochodzi z dodatku Gramatyka specyfikacji CSS 2.1 [CSS21]):

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

z nowym tokenem:

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

Wszystkie reguły @namespace muszą znajdować się po wszystkich regułach @charset i @import oraz przed wszystkimi innymi nieignorowanymi regułami @ i regułami stylistycznymi w arkuszu stylów. Dla składni CSS oznacza to dodanie [ namespace [S|CDO|CDC]* ]* bezpośrednio po [ import [S|CDO|CDC]* ]* w gramatyce stylesheet.

Składniowo niepoprawne reguły @namespace (czy to źle zbudowane, czy źle umieszczone) muszą zostać zignorowane. Arkusz stylów CSS zawierający niepoprawną regułę @namespace nie jest poprawnym arkuszem stylów.

Łańcuch URI parsowany ze składni URI musi być traktowany jako literalny łańcuch: tak, jak w przypadku składni STRING nie jest stosowana żadna normalizacja specyficzna dla URI.

Wszystkie łańcuchy — włączając łańcuch pusty i łańcuchy reprezentujące niepoprawne identyfikatory URI — są prawidłowymi nazwami przestrzeni nazw w deklaracjach @namespace.

3.2 Zakres

Przedrostek przestrzeni nazw jest zadeklarowany tylko w tym arkuszu stylów, w którym znajduje się jego reguła @namespace. Nie jest zadeklarowany w żadnym arkuszu stylów importującym lub importowanym przez ten arkusz stylów ani w żadnym innym arkuszu stylów mającym zastosowanie do dokumentu.

3.3 Deklarowanie przedrostków

Przedrostek przestrzeni nazw, kiedy zostanie zadeklarowany, reprezentuje przestrzeń nazw, dla której został zadeklarowany i może być używany do wskazywania przestrzeni nazw nazwy kwalifikowanej przestrzenią nazw. W przedrostkach przestrzeni nazw, tak jak w nazwach liczników CSS, rozpoznawana jest wielkość liter.

Jeśli w deklaracji przestrzeni nazw zostanie pominięty przedrostek przestrzeni nazw, to tak zadeklarowana przestrzeń nazw jest domyślną przestrzenią nazw. Domyślna przestrzeń nazw może odnosić się do nazw, które nie mają bezpośrednio przedrostka przestrzeni nazw: moduły używające przedrostków przestrzeni nazw muszą określać, w jakich kontekstach ma zastosowanie domyślna przestrzeń nazw. Na przykład, za [XML-NAMES], W Selektorach [SELECT] domyślna przestrzeń nazw odnosi się do selektorów typu — ale nie odnosi się do selektorów atrybutu. Nie ma domyślnej wartości dla domyślnej przestrzeni nazw: moduły, które przypisują niekwalifikowane nazwy do domyślnej przestrzeni nazw muszą definiować, jak te niekwalifikowane nazwy powinny być interpretowane, gdy nie jest zadeklarowana żadna domyślna przestrzeń nazw.

Uwaga: użycie domyślnych przestrzeni nazw z selektorami typu może spowodować, że aplikacje klienckie, które je obsługują i aplikacje klienckie, które ich nie obsługują, będą różnie interpretować te selektory.

Jeśli przedrostek przestrzeni nazw lub domyślna przestrzeń nazw są zadeklarowane więcej niż raz, w użyciu jest tylko ostatnia deklaracja. Deklaracja przedrostka przestrzeni nazw lub domyślnej przestrzeni nazw więcej niż raz jest działaniem niezgodnym z zasadami.

4 Nazwy kwalifikowane CSS

Nazwa kwalifikowana CSS to nazwa bezpośrednio ulokowana w przestrzeni nazw (z nią powiązana). Aby utworzyć nazwę kwalifikowaną w składni CSS, przedrostek przestrzeni nazw, który został zadeklarowany w obrębie zakresu, dodaje się przed nazwą lokalną (taką jak nazwa elementu lub atrybutu) i oddziela od niej znakiem „pionowej kreski” (|, U+007C). Przedrostek, który reprezentuj przestrzeń nazw, dla której został zadeklarowany, wskazuje przestrzeń nazw lokalnej nazwy. Przedrostek nazwy kwalifikowanej może zostać opuszczony na znak, że dana nazwa nie należy do żadnej przestrzeni nazw, tzn. że część reprezentująca przestrzeń nazw rozwiniętej nazwy nie ma wartości. Niektóre konteksty (zgodnie z definicją w języku hosta) mogą pozwalać na używanie znaku gwiazdki (*, U+002A) jako przedrostka wieloznacznego oznaczającego nazwę w dowolnej przestrzeni nazw, włącznie z jej brakiem.

Dla poniższych deklaracji przestrzeni nazw:

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

W kontekście, w którym ma zastosowanie domyślna przestrzeń nazw

toto|A
reprezentuje nazwę A z przestrzeni nazw http://toto.example.org.
|B
reprezentuje nazwę B, która nie należy do żadnej przestrzeni nazw.
*|C
reprezentuje nazwę C w jakiejkolwiek przestrzeni nazw, także nie należącą do żadnej przestrzeni nazw.
D
reprezentuje nazwę D z przestrzeni nazw http://example.com/foo.

Poniżej znajduje się składnia tej części kwalifikowanej nazwy CSS, która znajduje się przed nazwą lokalną. Jest ona przeznaczona zarówno dla nazw kwalifikowanych dopuszczających przedrostki wieloznaczne (wqname), jak i dla nazw kwalifikowanych, które ich nie dopuszczają (qname). (Składnia ta wykorzystuje notację zaczerpniętą z dodatku Gramatyka specyfikacji CSS 2.1. [CSS21]. Uwaga: to znaczy, że między tokenami dopuszczalne są komentarze, ale nie białe znaki).

qname_prefix : namespace_prefix? '|' ; wqname_prefix : [ namespace_prefix? | '*' ] '|' ; qname : qname_prefix? ident ; wqname : wqname_prefix? ident ; wqwname : wqname_prefix? [ ident | '*' ] ;

Nazw kwalifikowanych CSS można używać na przykład w selektorach i wartościach własności zgodnie z opisem w innych modułach. Moduły te muszą definiować sposób postępowania z przedrostkami przestrzeni nazw, które nie zostały niepoprawnie zadeklarowane. Niezadeklarowane przedrostki przestrzeni nazw powinny być traktowane jako błąd parsowania, który powoduje, że selektor lub deklaracja (itd.) zostają uznane za niepoprawne i, w CSS, zignorowane.

Na przykład, w module Selektory [SELECT] selektor typu z niezadeklarowanym przedrostkiem przestrzeni nazw jest uznawany za niepoprawny, a CSS [CSS21] wymaga, aby reguły stylistyczne zawierające niepoprawny selektor były ignorowane.

Zmiany

Zmiany wprowadzone od Rekomendacji z 29 września 2011 roku:

  • Dodano predefiniowane produkcje qname, wqname i wqwname, aby ułatwić używanie ich w innych specyfikacjach.

Podziękowania

Ten szkic czerpie w dużym stopniu z wcześniejszych szkiców na temat obsługi przestrzeni nazw CSS autorstwa Chrisa Lilleya i Petera Linssa oraz wstępnych (nieopublikowanych) szkiców na temat CSS i XML autorstwa Håkona Lie i Berta Bosa, a także na temat Przestrzeni nazw XML oraz CSS autorstwa Berta Bosa i Stevena Pembertona. Wkład w powstanie tego dokumentu miało wiele obecnych i byłych członków Grupy roboczej ds. CSS. W specyfikacji tej wykorzystano także pomysły przedstawione w dyskusjach na www-style@w3.org i w innych miejscach. Specjalne podziękowania za uwagi należą się następującym osobom: L. David Baron, Karl Dubost, Ian Hickson, Björn Höhrmann oraz Lachlan Hunt.

Źródła

Źródła normatywne

Źródła informacyjne

[SELECT]
Tantek Çelik; et al. Selectors Level 3. 29 września 2011 r. Rekomendacja W3C. URL: http://www.w3.org/TR/2011/REC-css3-selectors-20110929/

Indeks

  • nazwa kwalifikowana CSS, 4
  • domyślna przestrzeń nazw, 3.3
  • nazwa rozwinięta, 3
  • interpreter, 2
  • przedrostek przestrzeni nazw, 3.3
  • arkusz stylów, 2

Indeks własności

Żadne własności nie zostały zdefiniowane.

Tłumaczenie: Łukasz Piwko