반응형

NameSpace란 무엇인가?

우선 이것이 무엇인지부터 알기전에 Namespace라는 개념이 왜 생겨났는지에 대해 알아보도록 하자.

[1] NameSpace가 생기게 된 계기

 흔히 HTML, WML 등등 MarkUp Language들은 많이있다. 이들 마크업 언어들의 특징은 무엇인가? 그렇다 바로 단일화된 표현방법이다. 즉, HTML은 HTML로 , WML은 WML로 작성한다. 그럼 XML의 경우는 어떠한가? XML은 다수의 마크업 언어로 작성이 가능하다. 아래 예를 보도록 하자.

[ 고객정보 XML 표현] => CML
<?xml version="1.0" encoding="euc-kr">
<정보>
<주민번호>852255-1512555</주민번호>
<이름>홍길동</이름>
<이메일>aaaa@gmail.com</이메일>
</정보>

[ 제품 XML 표현] => PML
<?xml version="1.0" encoding="euc-kr">
<정보>
<제품코드>AD333D</제품코드>
<제품명>멋진냉장고</제품명>
<소비전력>250W</소비전력>
</정보>

위의 정보를 보라. 위 처럼 ,CML과 PML 두가지 마크업 언어로 작성된 코드가 있다. XML에서 이 두가지를 병합한다고 가정해 보자.

[ 주문 XML 표현] => OML
<?xml version="1.0" encoding="euc-kr">
<주문정보>
<정보>
<주민번호>852255-1512555</주민번호>
<이름>홍길동</이름>
<이메일>aaaa@gmail.com</이메일>
</정보>
<정보>
<제품코드>AD333D</제품코드>
<제품명>멋진냉장고</제품명>
<소비전력>250W</소비전력>
</정보>
</주문정보>

위 코드를 보라 하나의 XML로 두가지 마크업 언어를 병합하였을때 문제가 생기게 된다. 즉, 동일한 이름을 가지는 엘리먼트가 발생시 일반 어플리케이션이 두 "정보" 라는 단어에 대해서 정확한 Parsing 과정을 할 수 없게 된다.

즉 어떤정보가 유저가 원하는 정보인지를 찾을 수가 없다.

이런 문제를 해결하기 위해 [NameSpace] 가 존재하게 된것이다.

즉 NameSpace가 왜 존재하느냐에 대한 답은 각 Element간의 충돌을 방지 하기 위해서이다.

[2] NameSpace의 해결 방안.

W3C 에서는 위와 같은 충돌을 방지하기 위해 각 Element와 속성 이름을 전 세계적으로 유일하게 구분 할 수 있도록 새로운 메커니즘을 고안하여 Open 하게 된다.

그것이 바로 오늘 설명하고자 하는 Namespace in XML 이며 현재 W3C의 권고안으로 표준화 되어있는 상태이다.

[3] NameSpace의 형태

NameSpace는 URI로 표현이 된다. URI란 Uniform Resource Identifier 의 약어로 서 각 엘리먼트를 리소스 라는 명칭을 사용해 표현시, 리소스를 구분할 수 있는 문자열 이란 의미이다.

흔히들 URL과 많이 햇갈리는 사람이 있을 것이지만, 우리가 현재 웹상에서 많이 사용하고 있는 URL은 URI의 한 부분임을 잊지 말도록 하자.

XML에서는 이 Namespace를 결정짓는 이름으로 URL사용을 많이 한다.왜 URL로 많이 사용하는 것인가? 바로 도메인은 세계에서 유일하게 보장해주는 값이기 때문이다.

[3] URI 표현방법

이제 URI란 것이 무엇인지도 알았다 . 그럼 이걸 어떻게 표현하는지를 한번 살펴 보도록 하자.
URI를 표현하기위해 URL을 이용한다는 것은 앞에서도 언급했던 부분이다. 그럼 모든 엘리먼트 마다 URL을 다 적어 준다면, 과연, XML문서를 읽기가 쉬울것인가? 아니다. 분명 더 난감해질것이다. 그래서 생긴것이 "접두어" 이다.

아래 코드를 보도록 하자.

[ 네임스페이스 선언 방법 ]
<Element 명 xmlns:접두어="네임스페이스이름">
     <접두어:엘리먼트명> </접두어:엘리먼트명>
</Element 명>

네임스페이스선언이라함은 이제 알게 될것이다.바로 접두어를 선언하는 것과같은 것이다. 접두어란 긴~~~ NameSpace를 짧은 Alias로 변환해 준다고생각하면 좀 더 쉬울 것이다.

아래 코드를 보자 위 [1]번에 언급되었던 중복된 엘리먼트 간의 관계를 접두어로 표현한 것이다.

[ 주문 XML 표현] => OML
<?xml version="1.0" encoding="euc-kr">
<주문정보 xmlns:고객= "http://pedora.co.kr/11/aaaML" xmlns:제품="http://pedora.co.kr/11/bbbML">
<고객:정보>
<고객:주민번호>852255-1512555</고객:주민번호>
<고객:이름>홍길동</고객:이름>
<고객:이메일>aaaa@gmail.com</고객:이메일>
</고객:정보>
<제품:정보>
<제품:제품코드>AD333D</제품:제품코드>
<제품:제품명>멋진냉장고</제품:제품명>
<제품:소비전력>250W</제품:소비전력>
</제품:정보>
</주문정보>

위 코드를 보면 확실히 어플리케이션이 Parsing시 어떠한 정보를 Parsing 해야하는지

감이잡히게 된다.



[정리]

지금까지 XML를 기준으로 NameSpace란 무엇인가에 대해 한번 알아보는 시간을 가졌다. 이 개념을 공부하게 된 계기는 RDF 즉, 온톨로지 모델링에 있어서 NameSpace는 중요한 역할을 하기 때문이다.

위의 관점에서 다음 에 오는 어떠한 MarkUp 랭귀지도 XML에서는 표현 가능하다는 것을 알 수 있다.

                                                               - 2010.09.14 랑이씀 -

반응형

'Semantic Web > 용어정리' 카테고리의 다른 글

[RDFWeb] FOAF 란?  (0) 2010.09.13
[ Semantic Web 이란 ? ] => 업데이트중  (0) 2010.08.25

+ Recent posts