2009. 2. 11. 14:22

XML 네임 스페이스

네임 스페이스의 정의


XML문서 1 : 고객정보

<정보>

      <번호>821023-1234567</번호>

      <이름>홍길동</이름>

      <주소>서울 영등포구 당산동</주소>

</정보>

XML 문서 2 : 상품정보

<정보>

      <번호>12</번호>

      <상품명>세탁기</상품명>

</정보>

위의 예제에서 각각의 문서를 사용하는데에는 문제가 없지만 두 문서의 내용을 하나의 문서로 포함될 경우 <정보>라는 동일한 엘리먼트가 중복되는 경우가 생긴다.


XML 내부에서 서로 다른 마크업 언어 사용시 동일한 이름을 가지는 엘리먼트가 각각의 마크업 언어에 존재한다면 문제발생의 가능성이 있다. 물론 엘리먼트 마다 고유한 이름을 주면 되지만 같은 이름을 부르지 않으리란 법이 있을까? 이러한 엘리먼트 이름의 충돌을 방지하기 위해서 엘리먼트 이름 앞에 서로 다른 접두사를 붙여 고유한 이름을 만든다.




네임스페이스 이름


네임스페이스 이름은 인터넷 주소인 URL 형식으로 만든다.

프로토콜명://웹서버명.도메인이름/작성년도/구체적인이름


예 : http://www.w3.org/2007/myname

네임스페이스 이름을 URL 형태로 만드는 이유는 세계적으로 유일한 이름을 부여해 주기 위해서이다.

마크업 언어가 네임스페이스 이름을 가지고 있다면 반드시 네임스페이스 선언 후 사용해야 한다.



네임스페이스 선언과 사용

<엘리먼트명 xmlns:접두사1="네임스페이스이름1"

                xmlns:접두사2="네임스페이스이름2>

       <접두사1:엘리먼트명/>

       <접두사2:엘리먼트명/>

</엘리먼트명>

  • 네임스페이스 이름은 URL형태이기때문에 태그명으로 부적합므로 접두사를 따로 만들어 사용한다.
  • 네임스페이스는 접두사만 다르게 하여 중복으로 선언할 수 있다.
  • 엘리먼트 이름 앞에 접두사를 붙여서 해당 네임스페이스에 속함을 표시할 수 있다.
  • 선언된 네임스페이스는 해당 엘리먼트와 그 자손 엘리먼트에 한정된다.
  • 접두사를 생략하고 선언하면 엘리먼트에서도 접두사를 생략할수 있다. (디폴트 네임스페이스)
  • 엘리먼트에 속성이 사용된 경우 속성에도 접두사를 붙여주어야 하며, 디폴트 네임스페이스 라도 속성에는 무조건 접두사를 붙여야 한다.
  • 디폴트 네임스페이스 영역에서 <엘리먼트명 xmlns=""></엘리먼트명> 을 표시하여 디폴트 네임스페이스 영역을 해제할 수 있다.

출처 : http://blog.naver.com/myshyz?Redirect=Log&logNo=50023521107