XML로 만들어진 여러 마크업언어를 혼합하여 사용할 수 있는데, 그럴 경우 발생하는 문제가 바로 엘리먼트 이름의 충돌이다. 흔히 이런 류의 문제는 네임스페이스라는 것을 선언해서 해결하게된다.
<!--네임스페이스 선언--> <접두사:엘리먼트명 xmlns:접두사="네임스페이스명"> <!--네임스페이스 사용--> <접두사:엘리먼트명></접두사:엘리먼트명> |
<!-- 여러 네임스페이스 선언 루트엘리먼트는 A네임스페이스에 속하는 엘리먼트지만, 루트엘리먼트에 다른 모든 네임스페이스를 선언하고있다. 엘리먼트의 선언은 소속에 관계없이 어떤 엘리먼트에서도 가능하지만, 사용은 반드시 소속엘리먼트에만 해야한다. --> <A:루트엘리먼트 xmlns:A="A네임스페이스" xmlns:B="B네임스페이스" xmlns:C="C네임스페이스"> <A:엘리먼트 /> <B:엘리먼트> <B:자식엘리먼트 /> </B:엘리먼트> <C:엘리먼트 /> |
<!-- Default Namespace는 Namespace선언 시 접두사를 생략하면 된다. --> <엘리먼트명 xmlns="네임스페이스"> <자식엘리먼트 /> </엘리먼트명> |
<!-- Default Namespace선언--> <루트엘리먼트 xmlns="네임스페이스"> <!-- Default Namespace에 속하지 않는 엘리먼트--> <엘리먼트A xmlns="" /> <!-- 다른 Namespace에 속하는 엘리먼트의 경우--> <엘리먼트B xmlns="네임스페이스B" /> </엘리먼트> |
<!-- 같은 네임스페이스 선언을 Default Namespace와 일반 Namespace방법 모두 선언함으로서, 속성이 Default Namesapce에 속하지 않는 문제를 해결한다. 속성은 Default Namespace에 속하지 않으므로, 속성 앞에는 접두사를 사용한다. --> <엘리먼트 xmlns="네임스페이스" xmlns:접두사="네임스페이스"> <자식엘리먼트 접두사:속성="값" /> </엘리먼트> |