본문 바로가기
XML

[본문스크랩] 1.4 XML 네임스페이스(Namespace)

by 사우람 2010. 7. 12.

1. 서로 연관이 없이 독자적으로 배포된 DTD를 같이 사용한다면 서로 다른 것을 뜻하는

   엘리먼트를 같은 이름으로 사용하려는 충돌이 일어날 수 있다.

   이럴경우 네임스페이스를 사용하여 충돌을 해결 할 수 있다.

   또한 엘리먼트 속성의 인식성을 높이기 위해 네임스페이스를 사용할 수 있다.

 

2. 문법

   

    1) 접두어(Prefix)

        일반적으로 <name>이라는 엘리먼트를 사용하는 대신에 <prefix:name>으로 사용한다.

        접두어를 지정하는 규칙은 XML의 엘리먼트 이름 규칙과 같으며 ":"이 들어갈 수 없다는

        것만 다르다.

 

        <TroubleTicket>

            <Ticket:Note>Can't Martha take this ticket?</Ticket:Note>

            <Incident>

               <Incident:Note>This is a recurring problem</Incident:Note>

             </Incident>

        </TroubleTicket>

 

    2) xmlns 어트리뷰트

        접두어의 유일성을 보장하기 위해 사용하는 속성으로 어떤 엘리먼트에도 사용 될 수 있다.

        속성의 값은 유일함을 보장하기 위해 URI를 사용한다.

 

        <Ticket:Note xmlns:Ticket="http://www.cdilearn.com/xml/ticket">

        <.. xmlns:prefix="URI"...>

         접두어(prefix)는 URI에 대한 지정자로 URI는 xmlns의 이름으로 사용된다.

 

     3) 로컬(Local) 이름

         한 문서내에서는 두개 이상의 엘리먼트에 대해 같은 이름으로 선언하지 않으며

         한 엘리먼트네의 속성 이름은 달라야 하는 일반적인 규칙을 따르는 XML 엘리

         먼트 이름.

 

     4) 보편적(Universal) 이름

         접두어와 결합된 형태의 이름으로 접두어는 반듯이 유일 해야 함으로 보편적인 이름

         이라고 한다.

 

     5) xmlns를 포함하는 엘리먼트

         접두어가 한 엘리먼트에서 사용되었지만 그 엘리먼트에 접두어에 대한 선언이 없다면

         접두어 선언을 찾기위하여 부모를 탐색하게 된다.

         그래서 관래상 xmlns속성을 루트 엘리먼트에 두곤 한다.

 

      6) 디폴트 네임 스페이스

          한 네임스페이스에 속하는 엘리먼트를 주로 사용한다면 접두어를 두지 말고 선언한다.

          그러면 문서에서 접두어를 사용하지 않는 원소는 디폴트 네임스페이스에 속하게 된다.

 

         <TroubleTicket

               xmlns="http://www.cdilern.com/xml/trouble"

               xmlns:ticket="http://www.cdilearn,com/xml/ticket"

               ticket:ID="t746284"

               important="Hight"

              status="Oprn">

 

          디폴트 네임스페이스를 선언하지 않고 사용되는 엘리먼트는 어느 네임스페이스에도

          속해있지 않다.

 

       7) 네임스페이스와 DTD

 

           <!ATTLIST TroubleTicket

                           xmlns:ticket CDATA #FIXED "http://www.cdilearn.com/xml/ticket"

              .......

           네임스페이스를 정의하고 나면 이에 속한 엘리먼트들과 속성을 변경해 주어야 한다.

 

           문서에서 외부 DTD는 오직 하나만 참조 가능하다.

             

      8) 네임스페이스 인식

          엘리먼트가 가지고 있는 속성은 유일한 이름을 갖고 있어야 한다.

          하지만 속성 값을 사용하는 애플리케이션에서의 사용성을 높이기 위해

          속성에 네임 스페이스를 사용 한다.

 

         <Contact

                 Status="Primary"

                 Name="Ann McKinsey"

                 Phone="417-555-9318"

                 Fax="417-555-9319"

                 Email=Ann.mckinesy@InteSteel.com">

 

         만약 전화 번호에 관한 정보를 사용하는 에플리케이션이 있다면

         <Contact>에 있는 요청자의 전화 번호인지 <Support>에 있는 지원자의 전화번호

        인지 구별 할 수 없다는 것이다. 그래서 다음과 같인 인식성을 높이기 위해 속성에

        네임스페이스를 사용한다.

 

        <Contact

                 Status="Primary"

                 PersonnalIdentifiers:Name="Ann McKinsey"

                 Phonnumber:Phone="417-555-9318"

                 Phonnumber:Fax="417-555-9319"

                 InternetResource:Email=Ann.mckinesy@InteSteel.com">