본문 바로가기

카테고리 없음

네임스페이스를 갖는 스키마

(1) 네임스페이스를 갖는  스키마 분석
스키마 언어는 네임스페이스를 고려해서 설계가 되었기 때문에 DTD와는 달리 스키마 언어 차원에서 네임스페이스에 대한 언급 부분이 있다.

스키마 언어가 네임스페이스를 갖기 위해서는 다음과 같은 문법을 사용한다.

<?xml version"1.0" encoding="euc-kr" ?>
<xsd:schema xmlns:xsd="
http://www.w3.org/2001/XMLSchema" targetNamespace="네임스페이스  이름" elementFormDefalut="엘리먼트의 네임스페이스 포함 여부" attributeFormDefault="속성의 네임스페이스 포함 여부" xmlns="네임스페이스 이름">

....

</xsd:schema>

schema 엘리먼트의 타겟 네임스페이스 속성(targetNamespace)에는 스키마 문서에서 정의되는 새로운 마크업 언어가 가질 네임스페이스를 지정해주면 된다.

elementFromDefalut 속성은 스키마 문서에서 선언된 엘리먼트들이 주어진 타겟 네임스페이스에  속할 것인지를 언급해 주면 된다. 속성값이 qualified라면 주어진 타겟 네임스페이스에 속하게 되고, XML 문서에서 엘리먼트를 사용할 경우에 반드시 네임스페이스 접두사를 붙여서 사용해야 된다는 뜻이 된다. 만약에 속성값이 unqualified라면 스키마 문서에 선언된 엘리먼트들은 타겟 네임스페이스에 속하지 않게 되고, XML 문서에서 엘리먼트를 사용할 경우 네임스페이스 접두사 없이 사용될 수 있다는 뜻이 된다. 보통은 qualified가 사용된다.

attributeformDefault 속성은 스키마 문서에서 선언된 속성들이 주어진 타겟 네임스페이스에 속할 것인지를 언급해 주면 된다. 속성값이 qualified라면 주어진 타겟 네임스페이스에 속하게 되고, XML 문서에서 속성을 사용할 경우에 반드시 네임스페이스 접두사를 붙여서 사용해야 된다는 뜻이 된다. 만약에 속성값이 unqualified라면 스키마 문서에 선언된 속성들은 타겟 네임스페이스에 속하지 않게 되고, XML 문서에서 속성을 사용할 경우 네임스페이스 접두사 없이 사용될 수 있다는 뜻이 된다. 보통은 unqualified가 사용된다.
스키마 문서 내에서 글로벌 엘리먼트 선언을 로컬 엘리먼트  선언에서 참조할 경우 접두사 없이 참조 가능하도록 하기 위해 xmlns="네임스페이스 이름"으로 디폴트 네임스페이스 선언을 해 두 었다.

(2) 스키마 인스턴스 지정 방법
다음은 XML 문서가 특정 네임스페이스를 가지고 있는 스키마 문서의 인스턴스라는 것을 지정해 주는 문법이다.


<?xml version="1.0" encoding="euc-kr"?>
<접두사:루트엘리먼트 xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation ="네임스페이스이름 스키마 문서 URI" xmlns:접두사="네임스페이스이름">
...
</접두사:루트엘리먼트>


네임스페이스가 없는 스키마 문서 URI를 지정하는 xsi:noNamesspaceSchemaLocation 속성 대신에 네임스페이스가 있는 스키마 문서를 지정하는 속성인 xsi:schemaLocation을 언겁하고, 해당 스키마 문서의 네임스페이스 이름과 스키마 문서 URI를 공백 문자열로 구분해서 기술해 주면 된다.

스키마 문서가 XML 문서와 같은 로컬 디렉토리에 위치할 경우 xsi:schemaLocation 지정 방법이다.


xsi:schemaLocation="네임스페이스이름 ~.xsd"

스키마 문서가 웹 서버에 위치할 경우 xsi:schemaLocation 지정 방법이다.


xsi:schemaLocation="네임스페이스이름 http://웹서버주소/경로명/.../~.xsd"

다음은 한 개의 XML 문서 내에서 네임스페이스를 가지는 여러 개의 마크업 언어를 사용할 경우에 xsi:schemaLocation 지정 방법이다.


xsi:schemaLocation="네임스페이스이름1 http://웹서버주소1/경로명/.../~.xsd
                               네임스페이스이름2 http://웹서버주소2/경로명/.../~.xsd"

그리고 xsd:schemaLocation에서 언급된 네임스페이스에 대해서는 반드시 네임스페이스 선언을 하고 엘리먼트를 사용해야 한다.

<출처 : http://sgsoft.co.kr/blog/sgsoft >