출판 이후 보고된 오류나 이슈는 정오표를 꼭 확인하시기 바랍니다. 또한 번역본도 참고하세요.
Copyright © 2014 W3C® (MIT, ERCIM, Keio, Beihang), All Rights Reserved. W3C liability, trademark and document use rules apply.
이 CSS 네임스페이스 모듈은 CSS에서 네임스페이스를 사용하는 문법을 정의합니다. 기본 네임스페이스 선언과 네임스페이스를 네임스페이스 접두사에 바인딩하는 @namespace 규칙을 정의하며, 다른 명세들이 이러한 접두사를 네임스페이스가 지정된 이름에 사용할 수 있도록 하는 문법도 정의합니다. CSS는 구조화된 문서(HTML, XML 등)의 렌더링을 화면, 인쇄, 음성 등으로 기술하는 언어입니다.
이 섹션은 이 문서가 출판될 당시의 상태를 설명합니다. 다른 문서가 이 문서를 대체할 수 있습니다. W3C의 최신 기술 보고서 목록과 이 기술 보고서의 최신 개정판은 W3C 기술 보고서 색인 http://www.w3.org/TR/에서 확인할 수 있습니다.
이 문서는 CSS 작업 그룹에서 권고안으로 작성되었습니다.
이 문서는 W3C 회원, 소프트웨어 개발자, 다른 W3C 그룹 및 관심 있는 당사자들의 검토를 받았으며, W3C 이사의 승인으로 W3C 권고안으로 채택되었습니다. 이 문서는 안정적인 문서로, 참고 자료로 사용하거나 다른 문서에서 인용할 수 있습니다. W3C의 역할은 권고안에 대한 관심을 환기시키고, 그 보급을 촉진하는 것입니다. 이는 웹의 기능과 상호운용성을 높여줍니다.
W3C는 누구나 이 명세서를 구현할 것을 권장합니다. 의견은 (아카이브됨) 공개 메일링 리스트 www-style@w3.org (자세한 방법은 설명서 참조). 이메일을 보낼 때 제목에 “css-namespaces-3”을 반드시 포함해 주시고, 예시로는 “[css-namespaces-3] …의견 요약…”와 같이 작성해 주세요.
이 문서는 2004년 2월 5일 W3C 특허 정책에 따라 운영되는 그룹에서 작성되었습니다. W3C는 그룹 산출물과 관련하여 공개된 특허 공개 목록을 유지하고 있으며, 이 페이지에는 특허 공개 방법도 안내되어 있습니다.
이전 버전 이후 변경사항에 대한 자세한 내용은 변경사항 섹션을 참고하십시오.
이 섹션은 비규범적입니다.
이 CSS 네임스페이스 모듈은 CSS에서 네임스페이스를 사용하는 문법을 정의합니다. 기본 네임스페이스를 선언하고, 네임스페이스를 네임스페이스 접두사에 바인딩하는 @namespace 규칙을 정의합니다. 또한 이러한 접두사를 네임스페이스가 지정된 이름을 나타내는 데 사용하는 문법도 정의합니다. 이름이 어디에서 유효한지 또는 의미가 무엇인지에 대해서는 정의하지 않으며, 그것은 해당 이름의 컨텍스트에 따라 달라지며 Selectors([SELECT])와 같이 CSS 네임스페이스 모듈에서 정의된 문법을 참조하는 호스트 언어에 의해 정의됩니다.
이 모듈을 지원하지 않는 CSS 클라이언트는 (CSS의 미래 호환성 파싱 규칙을 올바르게 준수한다면) 모든 @namespace 규칙과 네임스페이스가 지정된 이름을 사용하는 모든 스타일 규칙을 무시합니다. CSS에서 네임스페이스 접두사를 구분하는 문법은, 이러한 CSS 클라이언트가 스타일 규칙을 무시하도록 의도적으로 선택되었으며, 잘못 매칭되는 일이 없도록 설계되었습니다.
문서나 구현체는 CSS 네임스페이스 자체에만 준수할 수는 없지만, CSS나 이 명세서를 규범적으로 참조하는 다른 호스트 언어를 구현할 때 이 명세서의 준수 요구사항을 만족하면 CSS 네임스페이스에 준수한다고 주장할 수 있습니다.
CSS 네임스페이스의 준수성은 두 가지 클래스에 대해 정의됩니다:
준수 요구사항은 설명적 주장과 RFC 2119 용어의 조합으로 표현됩니다. 표준 부분에서 "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", "OPTIONAL" 등의 주요 단어들은 RFC 2119에서 정의된 대로 해석해야 합니다. 가독성을 위해 이 단어들은 본 명세서에서 모두 대문자로 표기되지 않습니다. 이 명세서의 모든 텍스트는 명시적으로 비규범적, 예시, 참고로 표시된 섹션을 제외하고는 규범적입니다. [RFC2119]
이 명세서의 예시는 "for example"이라는 문구로 시작하거나, class="example"
처럼 규범 텍스트와 구분하여 표시됩니다. 예시:
이것은 안내용 예시입니다.
안내 참고는 "Note"라는 단어로 시작하며 class="note"
와 같이 규범 텍스트와 구분하여 표시됩니다. 예시:
참고, 이것은 안내 참고입니다.
이 명세서에서 도입된 용어 외에도, CSS 네임스페이스는 Namespaces in XML 1.0에서 정의된 용어를 사용합니다. [XML-NAMES] 하지만, 여기서 정의된 문법은 XML 요소와 속성 이름만을 나타내는 데 제한되지 않으며, 호스트 언어에서 정의하는 다른 종류의 네임스페이스를 나타낼 수도 있습니다.
CSS 네임스페이스에서 빈 문자열로 구성된 네임스페이스 이름은 null 네임스페이스, 즉 네임스페이스가 없음을 나타냅니다.
@namespace empty ""; @namespace "";
타입
셀렉터
elem
,
|elem
,
그리고 empty|elem
은 모두 동일합니다.
@namespace at-rule은 네임스페이스 접두사를 선언하고, 해당 네임스페이스 이름(문자열)에 연결합니다. 이 네임스페이스 접두사는 아래에 정의된 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 네임스페이스에서, Namespaces in XML 1.0과 마찬가지로, 접두사는 단지 문법적 구문일 뿐이며, 중요한 것은 확장 이름 (로컬 이름과 네임스페이스 이름의 쌍)입니다. 따라서 CSS 스타일 시트에서 실제로 사용되는 접두사와, 기본값인지 아닌지 여부는, 마크업에서 사용되는 네임스페이스 접두사와 기본값인지 아닌지 여부와는 독립적입니다.
<qml:elem xmlns:qml="http://example.com/q-markup"></qml:elem>
그리고 CSS 파일 맨 앞에 다음과 같이 @namespace를 선언한 경우:
@namespace Q "http://example.com/q-markup"; @namespace lq "http://example.com/q-markup";
이 CSS 파일에서 Q|elem와 lq|elem 셀렉터는
모두 <qml:elem>
요소를 매칭합니다.
(셀렉터 qml|elem은 유효하지 않은데, CSS 네임스페이스는 CSS에서 선언된 접두사만 인식하고, 문서 언어에서 선언된 것은 인식하지 않기 때문입니다.)
@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-rule 및 스타일 규칙 앞에 와야 합니다.
CSS 문법에서는 [ import [S|CDO|CDC]* ]*
바로 뒤에 [ namespace [S|CDO|CDC]* ]*
가 추가됩니다.
문법적으로 잘못되었거나 위치가 잘못된 @namespace 규칙은 무시되어야 합니다. 잘못된 @namespace 규칙이 포함된 CSS 스타일 시트는 유효한 스타일 시트가 아닙니다.
URI
문법에서 파싱된 URI 문자열은 리터럴 문자열로 처리되어야 하며,
STRING
과 마찬가지로
URI 고유의 정규화는 적용되지 않습니다.
빈 문자열 및 잘못된 URI를 나타내는 문자열을 포함하여 모든 문자열은 @namespace 선언에서 유효한 네임스페이스 이름입니다.
네임스페이스 접두사는 해당 @namespace 규칙이 나타나는 스타일 시트 내에서만 선언됩니다. 해당 스타일 시트를 가져오거나 가져오는 다른 스타일 시트, 문서에 적용되는 다른 스타일 시트에는 선언되지 않습니다.
네임스페이스 접두사는 선언되면, 해당 접두사가 선언된 네임스페이스를 나타내며, 네임스페이스가 지정된 이름의 네임스페이스를 표시하는 데 사용할 수 있습니다. 네임스페이스 접두사는 CSS 카운터 이름과 마찬가지로 대소문자를 구분합니다.
네임스페이스 선언에서 접두사를 생략하면, 그렇게 선언된 네임스페이스가 기본 네임스페이스가 됩니다. 기본 네임스페이스는 명시적인 네임스페이스 접두사가 없는 이름에 적용될 수 있으며, 네임스페이스 접두사를 사용하는 모듈에서는 어떤 컨텍스트에서 기본 네임스페이스가 적용되는지 정의해야 합니다. 예를 들어, [XML-NAMES]에 따라, Selectors [SELECT] 에서는 기본 네임스페이스가 타입 셀렉터에 적용되지만, 속성 셀렉터에는 적용되지 않습니다. 기본 네임스페이스의 기본값은 없습니다: 기본 네임스페이스에 자격 없는 이름을 할당하는 모듈은 기본 네임스페이스가 선언되지 않은 경우 자격 없는 이름을 어떻게 해석하는지 정의해야 합니다.
참고: 기본 네임스페이스와 타입 셀렉터를 함께 사용하면 기본 네임스페이스를 지원하는 UA와 지원하지 않는 UA가 셀렉터를 다르게 해석할 수 있습니다.
네임스페이스 접두사 또는 기본 네임스페이스가 여러 번 선언되면 마지막 선언만 사용해야 합니다. 네임스페이스 접두사 또는 기본 네임스페이스를 여러 번 선언하는 것은 비준수입니다.
CSS 한정 이름은 명시적으로 네임스페이스 내(연결된)에 위치한 이름입니다.
CSS 문법에서 한정 이름을 만들려면,
범위 내에서 선언된 네임스페이스 접두사를 로컬 이름(예: 요소나 속성 이름) 앞에 붙이고,
"vertical bar"(|
, U+007C)로 구분합니다.
해당 접두사는 선언된 네임스페이스를 나타내며,
로컬 이름의 네임스페이스를 의미합니다.
한정 이름의 접두사는 생략할 수 있는데, 이는 해당 이름이 네임스페이스에 속하지 않음을 의미하며,
즉, 확장 이름의 네임스페이스 이름 부분이 값이 없음을 뜻합니다.
일부 컨텍스트(호스트 언어에서 정의)는
별표(*
, U+002A)를 와일드카드 접두사로 사용하여
어떤 네임스페이스(네임스페이스 없음 포함)에 속한 이름을 나타내는 것을 허용할 수도 있습니다.
@namespace toto "http://toto.example.org"; @namespace "http://example.com/foo";
기본 네임스페이스가 적용되는 컨텍스트에서는
toto|A
http://toto.example.org
네임스페이스의 A
이름을 나타냅니다.
|B
B
이름을 나타냅니다.
*|C
C
이름을 나타냅니다.
D
http://example.com/foo
네임스페이스의 D
이름을 나타냅니다.
CSS 한정 이름에서 로컬 이름 앞 부분의 문법은 아래와 같이 정의됩니다.
와일드카드 접두사를 허용하는 한정 이름(wqname
)과, 허용하지 않는 한정 이름(qname
) 모두에 대해 제시합니다.
(문법은 CSS 2.1 문법 부록의 표기법을 사용합니다. [CSS21]
즉, 토큰 사이에 주석은 허용되지만, 공백은 암묵적으로 허용되지 않습니다.):
qname_prefix : namespace_prefix? '|' ; wqname_prefix : [ namespace_prefix? | '*' ] '|' ; qname : qname_prefix? ident ; wqname : wqname_prefix? ident ; wqwname : wqname_prefix? [ ident | '*' ] ;
CSS 한정 이름은 (예를 들어) 다른 모듈에서 설명한 대로 셀렉터와 속성값에서 사용할 수 있습니다. 그런 모듈에서는 올바르게 선언되지 않은 네임스페이스 접두사를 처리하는 방법을 정의해야 합니다. 이런 처리에서는 선언되지 않은 네임스페이스 접두사를 파싱 오류로 간주하여, 셀렉터, 선언 등이 무효가 되고, CSS에서는 무시되어야 합니다.
2011년 9월 29일 권고안 이후 변경사항:
이 초안은 Chris Lilley와 Peter Linss가 작성한 CSS 네임스페이스 지원 관련 초기 초안, Håkon Lie와 Bert Bos가 작성한 CSS와 XML에 관한 초기(미공개) 초안, Bert Bos와 Steven Pemberton이 작성한 XML 네임스페이스와 CSS 관련 초안의 내용을 많이 참고하였습니다. CSS 작업 그룹의 현재 및 이전 구성원들이 이 문서에 많은 기여를 해주셨습니다. www-style@w3.org와 기타 여러 곳에서의 논의도 본 명세서에 아이디어를 제공했습니다. 특히 L. David Baron, Karl Dubost, Ian Hickson, Björn Höhrmann, 그리고 Lachlan Hunt 에게 의견을 주신 것에 대해 감사드립니다.
정의된 속성이 없습니다.