XML Namespace
2006-05-08
영남대학교 지능 및 시스템 제어 연구실 이인근
email) terminator800@hanmail.net
Namespace의 필요성
여러 가지 마크업 언어로 작성된 XML 문서
한 개의 XML 문서는 한 개의 마크업 언어로 작성하는 것이 일반적 HTML 문서 : HTML 마크업 언어로 작성
(무선인터넷에서 사용되는) WML 문서 : WML 마크업 언어 (Wireless Markup Language)
한 개의 XML문서를 여러 가지 마크업 언어의 혼용 작성도 가능
CML(Customer Markup Language) : 고객정보를 표현하는 마크업 언어 PML(Product Markup Language) : 상품의 정보를 표현하는 마크업 언어 OML(Order Markup Language) : 주문 정보를 표현하는 마크업 언어
필요정보 주문정보 고객정보 주문된 상품정보
CML과 PML을 혼용해서 사용할 수 있도록 구성가능함
즉, OML 로 작성된 문서 내에 CML의 엘리먼트와 PML의 엘리먼트를 혼용해서 사용가능
CML 마크업 언어 PML 마크업 언어
OML 로 작성된 문서
Namespace의 필요성 CML 문서
PML 문서
OML 문서
OML
CML
PML
문제점 : 엘리먼트 이름 충돌
XML 문서 내를 여러 가지 마크업 언어로 작성할 때, 동일 한 이름을 가지고 있는 엘리먼트가 각기 다른 마크업 언어 에서 같이 사용될 경우에 발생함
Namespace의 필요성
“정보” 엘리먼트 고객정보 ? 상품정보?
XML파서는 “정보”라는 이름의 엘리먼트만으로 고객정조와 상품정보를
구별할 수 없음
문서 통합
CML 문서 PML 문서
OML 문서
Namespace 개념
네임스페이스로 이름 충돌 방지 방법
방법 : 엘리먼트 이름 충돌의 문제점은 엘리먼트 이름을 모두 다르게 해 주면 해결된다??
문제점 : 엘리먼트 이름을 고유하게 주기 위해 마크업 언어를 개발하는 개발자는 고유이름을 찾는 데만 많은 시간을 투자해야 함 해결방안 : XML Namespace
기본 개념
네임스페이스로 이름 충돌 방지
엘리먼트의 이름이 같더라도 접두사가 다르면 엘리먼트를 구별할 수 있지 않을까?
[이인근]
[이인근]
A University B Company
[이인근]
[이인근] [이인근]
A University | 이인근 B Company | 이인근
Namespace !
Namespace 사용
OML
CML
PML
고객:고유번호 고객 :이름 고객:고유번호 고객
:이름고객 그룹(고객 이름 공간) 고객 그룹(고객 이름 공간)
상품:고유번호 상품 :이름 상품:고유번호 상품
:이름상품 그룹(상품 이름 공간) 상품 그룹(상품 이름 공간)
Namespace
접두사를 첨가하는 것만으로 불충분한 이유
서로 다른 사용자가 동일한 접두사를 사용할 수 있음 Î 유일성이 보장되는 요소를 접두사 만드는데 이용하자
유일성이 보장되는 요소
인터넷 도메인 이름 (URI – Uniform Resource Locator)
Îhttp://www.w3.org/2001/XMLSchema
[이인근]
[이인근]
A University A University
[이인근] [이인근]
A University | 이인근 B Company | 이인근
http://www.a.ac.kr http://www.a-univ.ac.kr
http://www.a.ac.kr | 이인근 http://www.a-univ.ac.kr | 이인근
Namespace
네임스페이스 선언은
마크업 언어가 네임스페이스 이름을 가지고 있을 때 네임스페이스 이름을 접두사 자리에 바로 사용할 수 없음 네임스페이스 이름은 URL 형태를 가지고 있기 때문
ex) <http://isac.yu.ac.kr: Name>이인근</http://isac.yu.ac.kr: Name> ? 네임스페이스 이름을 대신하는 접두사를 따로 만들어 사용해야 함
ex) [isac = http://isac.yu.ac.kr] <isac:Name>이인근</isac:Name>
네임스페이스 선언이란?
네임스페이스 이름과 그 이름을 대신하여 사용할 접두사와 연관 짓는 것을 말함
<?xml version="1.0" encoding="euc-kr"?>
<yu:University xmlns:yu="http://www.yu.ac.kr"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
schemaLocation="yu.xsd">
<yu:Student>
<yu:Name>이인근</yu:Name>
<yu:ID>20650099</yu:ID>
</yu:Student>
<yu:Student>
<yu:Name>서석태</yu:Name>
<yu:ID>20650098</yu:ID>
</yu:Student>
</yu:University>
yu01.xml
Internet Explorer
Namespace
네임스페이스 사용 범위
네임스페이스 접두사를 붙일 수 있는 영역
네임스페이스를 선언했다고 해서 XML문서 내의 어느 엘리먼트에나 접두사를 붙일 수 는 없다.!!
네임스페이스 선언을 한 엘리먼트를 포함해서 그 엘리먼트의 자손 엘리먼트들 내에서 사용가능함
<?xml version="1.0" encoding="euc-kr"?>
<yu:University
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
schemaLocation="yu.xsd">
<yu:Studentxmlns:yu="http://www.yu.ac.kr">
<yu:Name>이인근</yu:Name>
<yu:ID>20650099</yu:ID>
</yu:Student>
<yu:Student>
<yu:Name>서석태</yu:Name>
<yu:ID>20650098</yu:ID>
</yu:Student>
</yu:University>
루트 엘리먼트 University 는 yu 접두사를 사용할 수 없음
루트 엘리먼트University 는 yu 접두사를 사용할 수 없음두번째 Student 엘리먼트는 yu 접두사를 사용할 수 없음
두번째Student 엘리먼트는 yu 접두사를 사용할 수 없음
yu02.xml
Namespace
속성 이름의 네임스페이스 적용
네임스페이스 이름을 가지고 있는 마크업 언어에 엘리먼트 및 속성이 선언되어 있을 경우에, XML 문서 작성시 엘리먼트 및 속 성에도 네임스페이스를 적용해야 함
<?xml version="1.0" encoding="euc-kr"?>
<isac:Lab xmlns:isac="http://isac.yu.ac.kr"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
schemaLocation="isac.xsd">
<isac:Equipment
isac:orderNo="01">
<isac:Name>오실로스코프</isac:Name>
<isac:ID>00524214</isac:ID>
</isac:Equipment>
<isac:Equipment
isac:orderNo="02">
<isac:Name>프린터</isac:Name>
<isac:ID>4452142</isac:ID>
</isac:Equipment>
</isac:Lab>
isac01.xml
Default Namespace
디폴트 네임스페이스란?
접두사를 포함하지 않는 모든 엘리먼트들이 기본적으로 속하는 네임스페이스를 말함
네임스페이스 이름이 있는 마크업 언어를 가지고 XML 문서를 작성할 경우에는 반드시 네임스페이스를 선언하고 XML문서를 작 성함
한 개의 마크업 언어로만 작성된 경우, 접두사를 생략하고 엘리먼트를 작성한 다음, XML 문서 내에 있는 모든 엘리먼트가 특정 네임 스페이스에 속함을 지정해 줌
<?xml version="1.0" encoding="euc-kr"?>
<University xmlns="http://www.yu.ac.kr"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
schemaLocation="yu.xsd">
<Student>
<Name>이인근</Name>
<ID>20650099</ID>
</Student>
<Student>
<Name>서석태</Name>
<ID>20650098</ID>
</Student>
</University>
XML문서가 한 개의 마크업 언어로만 작성될 경우, 접두 사는 오히려 거추장스러움
접두사를 생략하고 엘리먼트를 작성한 다음, XML 문서 내에 있는 모든 엘리먼트가 특정 네임 스페이스에 속함
을 지정해 줌
yu.xml
다른 마크업 언어와 구분할 필요가 없으므로
다른 마크업 언어와 구분할 필요가 없으므로
Default Namespace
디폴트 네임스페이스 사용 해지 영역
디폴트 네임스페이스가 사용되는 범위에서 일부분을 사용 해지 영역을 만들고, 그 사용 해지 영역에 엘리먼트를 작성하면, 해당 엘리먼트는 디폴트 네임스페이스에 속하지 않는 엘리먼트가 됨
<?xml version="1.0" encoding="euc-kr"?>
<University
xmlns="http://www.yu.ac.kr"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
schemaLocation="yu.xsd">
<Student>
<Name>이인근</Name>
<ID>20650099</ID>
</Student>
<!-- Default Namespace 해지 영역 -->
<html xmlns="">
html 본문내용
</html>
<!-- - - -->
<Student>
<Name>서석태</Name>
<ID>20650098</ID>
</Student>
</University> 파란색 마킹 부분은디폴트 네임스페이스 해지 영역
Æ 이 영역에서 작성된 엘리먼트는
“http://www.yu.ac.kr”
라는 네임스페이스 이름에 속하지 않는 엘리먼트
yu03.xml
Default Namespace
모든 element는 Default Namespace에 적용되지만 attribute는 Default Namespace에 적용되지 않는다
<?xml version="1.0" encoding="euc-kr"?>
<Lab xmlns="http://isac.yu.ac.kr"
xmlns:isacattri="http://isac.yu.ac.kr"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
schemaLocation="isac.xsd">
<Equipment isacattri:orderNo="01">
<Name>오실로스코프</Name>
<ID>00524214</ID>
</Equipment>
<Equipment isacattriorderNo="02">
<Name>프린터</Name>
<ID>4452142</ID>
</Equipment>
</Lab>
<?xml version="1.0" encoding="euc-kr"?>
<Lab xmlns="http://isac.yu.ac.kr"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
schemaLocation="isac.xsd">
<Equipment orderNo="01">
<Name>오실로스코프</Name>
<ID>00524214</ID>
</Equipment>
<Equipment orderNo="02">
<Name>프린터</Name>
<ID>4452142</ID>
</Equipment>
</Lab> 모든 엘리먼트는 디폴트 네임스페이스에 적용됨
Equipment 엘리먼트의 속성인orderNo는 어느 네임스페이스에도 속하지 않음
Multiple Namespace
복수 개의 Namespace를 선언
여러 형식의 문서를 하나의 문서로 통합하고자 할 경우 유용
<?xml version="1.0" encoding="euc-kr"?>
<University xmlns="http://www.yu.ac.kr"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
schemaLocation="yu.xsd">
<Student>
<Name>이인근</Name>
<ID>20650099</ID>
</Student>
<Student>
<Name>서석태</Name>
<ID>20650098</ID>
</Student>
</University>
<?xml version="1.0" encoding="euc-kr"?>
<Lab xmlns=http://isac.yu.ac.kr
xmlns:isacattri="http://isac.yu.ac.kr"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
schemaLocation="isac.xsd">
<Equipment isacattri:orderNo="01">
<Name>오실로스코프</Name>
<ID>00524214</ID>
</Equipment>
<Equipment isacattri:orderNo="02">
<Name>프린터</Name>
<ID>4452142</ID>
</Equipment>
</Lab>
<?xml version="1.0" encoding="euc-kr"?>
<Rent xmlns="http://www.rent.org"
xmlns:isac="http://isac.yu.ac.kr"
xmlns:yu="http://www.yu.ac.kr"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
schemaLocation="rent.xsd">
<isac:Equipment isac:orderNo="01">
<isac:Name>오실로스코프</isac:Name>
<isac:ID>00524214</isac:ID>
<yu:Student>
<yu:Name>이인근</yu:Name>
<yu:ID>20650099</yu:ID>
</yu:Student>
</isac:Equipment>
</Rent>
yu.xml
rent.xml
isac.xml
XML Namespaces Recommendation
Namespace Recommendation Namespaces in XML 1999년 1월 14일
W3C에서는 이름 충돌을 해결하기 위해 엘리먼트와 속성 이름을 세계적으로 유일하게 식별할 수 있는 새로운 매커니즘을 개발 하여 그에 대한 규격을 공포함
네임스페이스를 선언하는 문법 및 사용하는 방법에 대해 기술됨