[XML응용]XML 네임스페이스 정리

류명운

·

2015. 10. 8. 13:22

반응형

 - namespace의 의미

 - namespace 선언하는 방법 2가지(접두사, 기본 네임스페이스 어떻게 표현하는지)


이름공간(namespace)의 이해

-> 문서 내에서 이름충돌을 일으킬 수 있는 앨리멘트나 속성 이름에 고유한 이름을 갖는 접두사(prefix)를 지정함으로써 그 이름이 문서 내에서 유일하다는 것을 보장하도록 한다. 또한, DTD 내에 있는 앨리멘트나 속성의 이름충돌을 방지하기 위해 적용될 수가 있다. 


접두사 이름공간(namespace)의 선언

-> xmlns:접두사 = "URI"

  * 'xmlns'는 XML의 이름공간을 나타내는 예약어이다. 이 예약어와 그 다음의 접두사 사이에는 콜론(:) 문자가 나와야 한다

  * '접두사'는 사용자에 의해서 지정되는 namespace의 속성 이름이다. 이를 namespace의 식별자라 부른다

  * 'URI'는 이름공간의 속성 값이다. URI를 사용하는 이유는 전 세계적으로 유일한 주소를 만들어 내기 떄문이다

-> namespace는 XML 문서의 루트 앨리멘트 또는 다른 하위 앨리멘트의 시작 태그 안에서 선언될 수 있다

-> namespace는 일반적으로 루트 앨리멘트에서 사용하는데 그 이유는 선언된 하위의 앨리멘트에서만 사용될 수 있기 떄문

  ex) <item-list xmlns:cdlist="http://www.cdworld.com"> ... </item-list>

 

접두사 이름공간(namespace)의 사용

* namespace가 선언되고 나면 문서 내의 앨리멘트와 속성 이름 앞에 namespace의 접두사를 지정할 수 있다. 이렇게 접두사를 이름 앞에 지정함으로써 지역이름이 한정된 의미를 갖도록 하는데 이를 한정된 이름(qualified name)이라 한다.

-> 한정된 이름의 형식 : '접두사:지역이름'

  ex) <cdlist:item-list xmlns:cdlist="http://www.cdworld.com"> ... </cdlist:item-list>
* namespace의 접두사가 태그 내에서 사용된다면, 반드시 시작태그와 종료태그에 다 나타나야 하고 동일한 이름이 사용되어야 한다

 

[실습] 여러 개의 이름공간을 가지는 XML 문서를 작성하여 보자

 <?xml version="1.0" encoding="euc-kr">

 <item-list

   xmlns:cdlist="http://www.cdworld.com"

   xmlns:booklist=http://www.bookworld.com>

  <cdlist:item>

   <title>Beset Classic</title>

   <test>wewe</test>

  </cdlist:item>

  <booklist:item>

   <title>beser</title>

   <test>wewe</test>

  </booklist:item>

 </item-list>


기본 이름공간(namespace)

default namespace는 접두사 없이 선언되는 이름공간을 말한다. 접두사 namespace와 마찬가지로 선언된 앨리멘트와 그 하위의 앨리멘트들에 적용된다. 

접두사 사용에 따른 번거로움을 없앨 수 있으며 더 간결한 방식으로 앨리멘트들에 namespace를 표현할 수가 있게 된다

 

[실습] default namespace의 선언을 작성하여 보자

 <?xml version="1.0" encoding="euc-kr"?>

 <item-list xmlns="http://www.cdworld.com">

  <item>

   <title>awewe</title>

  </item>

 </item-list>

-> 'item-list' 앨리멘트는 'http://www.cdworld.com'와 연관되는 기본 namespace를 선언하였으며 그 하위에 있는 'item' 'title'는 어떠한 접두사도 사용하지 않고 있기 때문에 기본 namespace 내에 있다

 

[실습] default namespace의 재정의를 해보자

<?xml version="1.0" encoding="euc-kr"?>

 <item-list xmlns="http://www.cdworld.com">

  <item>

   <title>awewe</title>

  </item>

  <item xmlns="http://www.bookworld.com">

   <myBook:title xmlns:myBook="http://www.mybook.ac.kr">awewe</myBook:title>

  </item>

 </item-list>

 

 

[실습] namespace의 적용을 받지 않도록 특정 앨리멘트를 제외해보자 

 <test xmlns="">test</test>

 

속성과 namespace

* 하나의 앨리멘트 안에 동일한 속성 이름이 1나를 초과해서 사용되어질 수 없다

ex) <bad a="1" a="2" />

 

DTD내에서의 namespace 선언에 대한 일반적인 형식

<!ATTLIST 접두사:앨리멘트이름 xmlns:접두사 CDATA # FIXED "URI">

 

[실습] DTD 내에서 이름공간의 사용 문서를 작성하여 보자

 <?xml version="1.0"?>

 <!DOCTYPE sample_order [

 <!ELEMENT sample_order (pkg:order_list | single:order_list)*>

 <!ELEMENT pkg:order_list (pkg:name, prg:price)+ >

 <!ATTLIST pkg:order_list xmlns:pkg CDATA #FIXED "http://www.commerce.com">

 <!ELEMENT pkg:name (#PCDATA)>

 <!ELEMENT pkg:price (#PCDATA)>

 

 <!ELEMENT single:order_list (single:name, single:price)+ >

 <!ATTLIST single:order_list xmlns:single CDATA #IMPLIED>

 <!ELEMENT single:name (#PCDATA)>

 <!ELEMENT single:price (#PCDATA)>

 ]>

 

 <sample_order>

  <pkg:order_list xmlns:pkg="http://www.commerce.com">

   <pkg:name>best dsd</pkg:name>

  </pkg:order_list>

  <single:order_list xmlns:single="http:/www.catalog.com">

   <single:name>Old wewe</single:name>

   <single:price>12</single:price>

  </single:order_list>

 </sample_order>

 

 



연습문제


Q1. XML namespace의 개념에 대해서 간랸히 기술하시오

 A. 같은 이름의 앨리멘트와 속성이 문서에서 서로 충돌을 일으키지 않도록 이름을 구별할 수 있도록 해주는 표준 규약이다.

 * 문서 내에서 이름충돌을 일으킬 수 있는 앨리멘트나 속성 이름에 고유한 이름을 갖는 접두사(prefix)를 지정함으로써 그 이름이 문서 내에서 유일하다는 것을 보장하도록 한다. 또한, DTD 내에 있는 앨리멘트나 속성의 이름충돌을 방지하기 위해 적용될 수가 있다



Q2. 다음과 같은 두 개의 독립적인 XML 문서가 있으며 이를 통합하여 하나의 문서로 만들려고 한다. 통합된 문서에는 book과 cd의 앨리멘트들을 구별할 수 있도록 이름공간을 선언하고 지정하시오.

 <cd.xml>

<book.xml> 

 <item-list>

 <title>Best Classic</title>

 <artist>Various artists</artist>

 <price>17000</price>

 </item-list>

 <item-list>

 <title>The XML Handbook</title>

 <author>Goldfarb</author>

 <publisher>PTR PH</publisher>

 </item-list>


Q3. 다음은 이름공간의 접두사 사용 예이다. 잘못된 부분을 찾아내고 틀린 이유에 대해서 설명하시오

 (a) myDVD:List:title

 (b) myDVD::title

 (c) <cdlist:title>Best Classic</title> 


Q4. 다음은 CD 목록을 위한 간단한 XML 문서이다. 이름공간에 대한 다음의 각 질문에 대해 답하시오

 <?xml version="1.0" encoding="euc-kr"?>

 <cd-list>

  <item>

   <title>Rising Sun</title>

   <artist>동방신기</artist>

   <price>9700</price>

  </item>

  <item>

   <title>Face to Face</title>

   <artist>Westlife</artist>

   <price>11800</price>

  </item>

  <item>

   <title>Love Final Concert Tour 2004</title>

   <artist>Nakashima Mika</artist>

   <price>25000</price>

  </item>

 </cd-list>


 (1) 문서 전체에 적용되는 기본이름공간을 지정하라. 단, 이름공간이 적용되도록 기본 이름공간을 재정의 하시오. 이 앨리멘트에 적용되는 이름공간의 URL은 "http://www.popworld.com"으로 지정한다.   


 (2) 두 번째 item 앨리멘트에 대해서 다른 이름공간이 적용되도록 기본 이름공간을 재정의 하시오. 이 앨리멘트에 적용되는 이름공간의 URL은 "http://www.popworld.com"으로 지정한다.


 (3) 세 번째 item 앨리멘트에 대해서는 어떤 이름공간에도 속하지 않도록 이름공간을 재지정하시오.


Q5. 다음은 속성에 대한 이름공간의 지정 예를 나타낸다. 잘못된 부분을 찾아내고 틀린 이유에 대해서 설명하시오

 <?xml version="1.0" encoding="euc-kr"?>

 <doc

  xmlns:n1="http://www.w3.org"

  xmlns:n2="http://www.w3.org">

  <value a="1" a="2" />

  <value n1:a="1" n2:a="2" />

 </doc>


반응형