XML 문서는 하나의 markup 언어로 작성하는 것이 일반적이나,
여러 개의 markup 언어들을 이용해서 작성하는 것도 가능하다.
• CML: Customer Markup Language
• PML: Product Markup Language
• OML: Order Markup Language
여러 언어에서 정의된 같은 이름의 엘리먼트들을 사용할 때 이름 충돌이 발생한다.
☛ namespace를 이용하여 각 언어에서 정의되는 이름들의 집합을 구분한다. (접두사를 붙여 사용)
• Markup 언어의 namespace 이름은 그 언어를 개발할 때 정의한다.
• Namespace 이름은 URI 형태로 정의
✔︎ URI (Uniform Resource Locator)
✔︎ URN (Uniform Resource Name)
• XML 문서에서 namespace 선언
✔︎ Markup 언어가 namespace 이름을 갖고 있을 경우,
XML 문서에서 namespace에 관한 속성 선언을 해야 함
XML 문서에서 namespace 이름을 대신할 접두사 선언
✔︎ 일반적으로 루트 엘리먼트의 시작 태그 안에서 선언
접두사는 XML 이름 작성 규칙을 따름
✔︎ 이름은 문자나 _
로 시작할 수 있음
✔︎ 두 번째 문자부터 숫자, _
, -
, .
도 가능 (:
불가능)
✔︎ 공백 포함 불가능
각 엘리먼트 이름 앞에 접두사 붙여서 사용
✔︎ 해당 엘리먼트 이름이 그 namespace에 속한다는 것을 의미
✔︎ XML parser는 prefix를 포함한 Qualified Name으로 엘리먼트를 인식 (식별)
<!-- namespace prefix 선언 -->
<root-element xmlns:prefix="namespace 이름" ... >
<!-- namespace 사용 -->
<prefix:local-name> ... </prefix:local-name>
</root-element>
Namespace prefix가 선언된 엘리먼트를 포함하여, 그 엘리먼트의 자손 엘리먼트들에 대해서만 적용 가능
접두사를 생략하고 선언 및 사용하는 namespace
☛ 접두사를 생략한 모든 이름들은 default namespace에 포함된 것으로 간주
Default namespace 선언은 여러 개의 markup 언어를 혼용해서 작성하는 XML 문서에서도 사용 가능
속성에 대한 namespace 적용
• 속성이 엘리먼트와 무관하게 (전역적으로) 정의되는 경우, namespace 접두사를 사용하여 특정 namespace에 포함됨을 명시함
• 속성이 특정 엘리먼트 내에 (지역적으로) 정의되는 경우, namespace 사용 불필요
• 속성에 대해서는 default namespace가 적용되지 않음