[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> |
'삶의 늪에 들어 가기 전 > 정리중(미정리)' 카테고리의 다른 글
[컴퓨터구조]디지털 논리회로 정리 (0) | 2015.10.09 |
---|---|
[XML응용]스타일시트로 XML 표현하기 (0) | 2015.10.08 |
한국성서대학교 15년도 2학기 7주차 묵상지[한국성서대 묵상지] (0) | 2015.10.05 |
[컴퓨터구조]연습문제 pp.210-217 (2) | 2015.10.05 |
[XML응용]DTD를 이용하여 XML 문서 작성하기 (2) | 2015.10.05 |