23
XML 스키마의 이해 4 4

9.- CDI ç · 9.- c d Ý ai¢i¢i¢i¢i¢i¢i¢ Á x k9.- c d ³ ¿ × 3 ± Ù Þ Ý À ²9.- c 3 i Þ È x ¿ à ² d Ø 3 > ç

Embed Size (px)

Citation preview

Page 1: 9.- CDI ç · 9.- c d Ý ai¢i¢i¢i¢i¢i¢i¢ Á x k9.- c d ³ ¿ × 3 ± Ù Þ Ý À ²9.- c 3 i Þ È x ¿ à ² d Ø 3 > ç

XML 스키마의 이해44

Page 2: 9.- CDI ç · 9.- c d Ý ai¢i¢i¢i¢i¢i¢i¢ Á x k9.- c d ³ ¿ × 3 ± Ù Þ Ý À ²9.- c 3 i Þ È x ¿ à ² d Ø 3 > ç

XML 표준화 기구인 W3C에서는 XML 문서를 구조화하기 위해 XML DTD와 함께

XML 스키마 기술을 표준화하여 제공하고 있다. DTD에 비하여 상당히 최근에 표준화된

XML 스키마기술은 XML의최신기술들을지원하고있으며, DTD에서문제점으로지적

되었던부분들을상당부분개선하여XML 문서구조화를위한중요한기술로인식되고있

다. 이장에서는3장의DTD에이어XML 문서구조화를위한표준인XML 스키마의개념

과문법에대하여소개하기로한다.

4.1 XML 스키마의 개요 ---------------------

XML DTD는 SGML 시절부터 널리 사용되고 있던 DTD의 형태와 개념을 가져 와서

XML에적용시켰기때문에XML 스펙이발표된이후차례차례발표된XML 관련기술표

준들에대한지원이미흡하다. XML 스키마는이러한DTD의한계와더효율적인XML 활

용을위하여시작된표준화작업이며, 2001년 5월에W3C에서권고안으로채택되어다양

한XML 활용분야에서문서구조화및자료의계층화와구조화, 자료형의제한등을수행

하여효과적인데이터검증방식을제공하고있다.

이절에서는XML 스키마와XML DTD의특징을비교하고XML 스키마의표준화과정

에대하여살펴본다.

4.1.1 XML 스키마의 특징 및 DTD와의 비교

원래스키마라는용어는XML에서만특별히사용되는용어는아니다. 전산분야에서스

키마는일반적으로데이터베이스의조직또는구조를의미한다. XML에서의스키마역시

조직또는구조라는의미를지니며 3장에서배웠던 DTD와함께문서의구조를정의하기

위해 제안된 기술이다. DTD는 이미 언급했던 바와 같이 몇 가지 한계점을 지님으로써

XML 문서구조를정의하기위한새로운규칙의필요성이대두되었다.

그렇다면 DTD를 사용하여 문서를 작성할 때와 비교하여 XML 스키마가 가지는 특징

및장점에대하여살펴보자.

128 |4장 XML 스키마의 이해

Page 3: 9.- CDI ç · 9.- c d Ý ai¢i¢i¢i¢i¢i¢i¢ Á x k9.- c d ³ ¿ × 3 ± Ù Þ Ý À ²9.- c 3 i Þ È x ¿ à ² d Ø 3 > ç

표 4.1 DTD와 XML 스키마의 특징 비교

비교 항목 DTD XML 스키마

문법 SGML 문법준수 XML 문법준수

네임스페이스지원 지원하지않음 지원함

지원데이터형식 단순한텍스트데이터형식지원

반복연산자지원 0회, 1회, n회반복지원

표준화단계 W3C 표준(1999년) W3C 표준(2001년)

첫째로, XML 스키마는DTD와달리XML 문법에의거하여작성되며XML 네임스페이

스와결합하여사용한다. 따라서, 특별한구문을배울필요가없으며XML을사용하기위

해개발된도구들을그대로사용할수있다는이점이있다.

둘째로, DTD에서지원되는데이터형식이단순한텍스트형식이었던것에반해XML 스

키마에서지원되는데이터형식은텍스트형식뿐만아니라부울형, 숫자형, 실수형, 시간표

현, 날짜표현등수십가지종류의데이터타입을지원하여문서에대해보다세세한유효성

검증을수행할수있게하고데이터처리시고유의타입을유지할수있다. 특히, DTD에서

제공되는제한된데이터타입만으로는데이터베이스시스템에매끄럽게연계시키기어려웠

기때문에다양한데이터타입을지원하는XML 스키마에이목이집중되었다.

셋째로, 엘리먼트가문서내에서몇회반복되는지를나타내기위해사용하는반복연산

자의경우, DTD에서는세번사용된다든지 10번사용된다는식으로세세한제어를해줄

수없는반면, XML 스키마에서는엘리먼트에대한최소반복횟수와최대반복횟수의지

정이가능하기때문에‘0회또는15회반복’과같이지정하는것이가능하다.

넷째로, XML 스키마에는 확장성이 존재한다. 다른 스키마에서 정의되어 있는 내용의

일부를재사용할수도있고내가작성하는스키마를다른스키마에서재사용할수있도록

구조화시킬수도있다. 그리고, 스키마에서제공하는데이터타입의경우스펙에서제시하

고있는빌트인데이터타입이외에도이를바탕으로하는사용자정의데이터타입의정의

가가능하다. 또한하나의문서에대하여다중스키마를참조할수있다.

4.1 XML 스키마의 개요 |129

다양한 빌트인 데이터 형식과 사용자

지정데이터형식을지원

최소 반복 횟수와 최대 반복 횟수를

다양하게저정가능

Page 4: 9.- CDI ç · 9.- c d Ý ai¢i¢i¢i¢i¢i¢i¢ Á x k9.- c d ³ ¿ × 3 ± Ù Þ Ý À ²9.- c 3 i Þ È x ¿ à ² d Ø 3 > ç

마지막으로, XML 코드를문서화하기위한몇가지메커니즘을제공하고있어서 XML

문서를더욱효과적으로생성할수있다. XML 스키마는일반적으로사용되는주석문을지

원할뿐아니라XML 스키마문서내의모든엘리먼트들이다른네임스페이스에속하는어

트리뷰트를가질수있기때문에엘리먼트에대한설명을담기위한목적으로어트리뷰트

를사용할수있다. 그리고, 주해(Annotation)라는것을지원하여문서화를위한정보의기

술및애플리케이션에필요한정보를제공할수있다.

4.1.2 XML 스키마의 표준화

XML 스키마는DTD와유사한목적을위해설계된기술이다. 즉, 문서의형식을구조화

하여표현하고자제안된기술인데, W3C에서XML 스키마라는명칭으로표준화를진행하

기이전에도DTD를대신할스키마들이많이존재하고있었다. 대표적인스키마기술로써

마이크로소프트사의 XML-Data(현재 XML-Data Reduced), IBM사와 마이크로소프트

사가 합작하여 개발한 DCD(Document Content Description), B2B 분야의 선두 기업인

CommerceOne에서 개발한 SOX(Schema for Objeect-Oriented XML), XML.ORG 및

OASIS에서주관하고자체적으로조정된포럼인XML-Dev에서제안된DDML (Document

Definition Markup Language) 등이있으며이외에도 Schematron, DSD, RELAX 등다

양한종류의스키마기술이만들어졌다. 하지만, 각기업또는기관에서필요에의하여만들

어낸스키마들사이에는호환성이존재하지않기때문에공통된스키마의필요성을느끼게

되었고W3C에서XML 스키마라는명칭으로스키마를표준화하여2001년5월XML 스키마

1.0을권고안(Recommendation)으로발표하게되었다.

130 |4장 XML 스키마의 이해

■ XML 스키마의 특징

XML 문법 준수

XML 네임스페이스 지원

다양한 데이터 타입 제공

확장성을 지님

문서화 메커니즘 제공

Page 5: 9.- CDI ç · 9.- c d Ý ai¢i¢i¢i¢i¢i¢i¢ Á x k9.- c d ³ ¿ × 3 ± Ù Þ Ý À ²9.- c 3 i Þ È x ¿ à ² d Ø 3 > ç

현재W3C에서권고안으로발표한XML 스키마 1.0은크게세부분으로구성되어있으

며, 각각의명칭은다음과같다.

XML 스키마Part 0 : Primer

XML 스키마Part 1 : Structures

XML 스키마Part 2 : Datatypes

Part 0 : Primer는비표준화문서(Non-Normative Document)로써XML 스키마의특

성에대한이해를돕기위하여만들어진문서이다. 문서내용은W3C의XML 스키마가무엇

인지, DTD와어떤차이점이있는지, XML 스키마언어를사용하여어떻게스키마를작성할

것인지를다루고있다.

Part 1 : Structures는새로운XML 문법을사용하여지켜야할XML 문서의내용과구

조에관하여다루고있으며, 표준화문서(Normative Document)이다. 문서내용은스키마

유효성을결정하기위한규칙에관한정의와엘리먼트, 어트리뷰트, 노테이션등에대한정

의를다루고있다.

Part 2 : Datatypes는 XML 엘리먼트콘텐츠와어트리뷰트값에관련된데이터타입의

집합을정의하는문서로써표준화문서(Normative docuement)이다. 문서내용은빌트인

데이터타입과사용자정의데이터타입의집합에대하여다루고있다.

4.1 XML 스키마의 개요 |131

XML 스키마는앞절에서언급하 던바와같이여러가지장점을지니고있기는하지만, 지니고있는장점이다양하다고하여모든애플리케이션에서사용해야하는것은아니다. DTD를사용하여 문서를 이미 구조화한 경우에는 특별한 필요성이 없을 경우 굳이 XML 스키마를 사용하여 재구조화할필요가없다. 다만, 새롭게문서를구조화해야할경우 필요하다면 XML 스키마를선택하여 문서를 생성하면 된다. 새롭게 제안된 기술이라고 해서 반드시 따라야 하는 게 아니라 자신의필요와경제적비용및노력비용을모두고려하여최선의선택을하면되는것이다. 그리고, DTD의 경우 XML 스키마에서 제공하지 못하는 엔티티(ENTITY) 기능을 제공하고 있으며, XML 기술 중 유일하게 스펙 내에 포함된 기술로서 별도의 파일을 필요로 하지 않기 때문에XML 스키마의제안으로인하여DTD가도태되지는않을것으로전망된다.

Page 6: 9.- CDI ç · 9.- c d Ý ai¢i¢i¢i¢i¢i¢i¢ Á x k9.- c d ³ ¿ × 3 ± Ù Þ Ý À ²9.- c 3 i Þ È x ¿ à ² d Ø 3 > ç

4.2 XML 스키마의 기초 --------------------

세부적인XML 스키마의구성요소를언급하기에앞서XML 스키마를이용하여작성한

문서의예를통해전체적인 XML 스키마의구조를파악하도록한다. 스키마문서는항상

<schema> 태그를루트엘리먼트로서사용하게되며네임스페이스, 버전정보등을포함하

게된다. 다음은간단한메모내용을나타내는XML 문서이다.

위의XML 문서에대한DTD 문서를작성하면다음과같다.

132 |4장 XML 스키마의 이해

ex4_1.xml 간단한 메모 XML 문서

<?xml version="1.0" encoding="EUC-KR"?>

<Memo no="1">

<PInfo>

<from>김광수</from>

<to>박수란</to>

</PInfo>

<MInfo>

<date>2003년 8월 15일</date>

<main>수란아!! 생일 정말정말 축하해. 좋은 하루 보내</main>

</MInfo>

</Memo>

ex4_2.dtd ex4_1.xml에 대한 DTD 문서

<!DOCTYPE Memo [

<!ELEMENT Memo (PInfo, MInfo)>

<!ELEMENT PInfo (from, to)>

<!ELEMENT MInfo (date, main)>

<!ELEMENT form (#PCDATA)>

<!ELEMENT to (#PCDATA)>

<!ELEMENT date (#PCDATA)>

<!ELEMENT main (#PCDATA)>

]>

Page 7: 9.- CDI ç · 9.- c d Ý ai¢i¢i¢i¢i¢i¢i¢ Á x k9.- c d ³ ¿ × 3 ± Ù Þ Ý À ²9.- c 3 i Þ È x ¿ à ² d Ø 3 > ç

이번에는위의XML 문서에대한스키마문서를작성해보자. 스키마문서의확장자로는

‘xsd’를사용한다.

4.2 XML 스키마의 기초 |133

ex4_3.xsd ex4_1.xml에 대한 스키마 문서

<?xml version="1.0" encoding="EUC-KR"?>

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"

targetNamespace="http://www.lisia.net"

xmlns="http://www.lisia.net"

elementFormDefault="qualified">

<xsd:element name="Memo">

<xsd:complexType>

<xsd:sequence>

<xsd:element name="PInfo">

<xsd:complexType>

<xsd:sequence>

<xsd:element name="from type="xsd:string"/>

<xsd:element name="to" type="xsd:string"/>

</xsd:sequence>

</xsd:complexType>

</xsd:element>

<xsd:element name="MInfo">

<xsd:complexType>

<xsd:sequence>

<xsd:element name="date" type="xsd:string"/>

<xsd:element name="main" type="xsd:string"/>

</xsd:sequence>

</xsd:complexType>

</xsd:element>

</xsd:sequence>

<xsd:attribute name="no" type="xsd:positiveInteger"/>

</xsd:complexType>

</xsd:element>

</xsd:schema>

Page 8: 9.- CDI ç · 9.- c d Ý ai¢i¢i¢i¢i¢i¢i¢ Á x k9.- c d ³ ¿ × 3 ± Ù Þ Ý À ²9.- c 3 i Þ È x ¿ à ² d Ø 3 > ç

ex4_2.dtd와비교해볼때문서의길이가길고, 네임스페이스를사용하고있어서다소복

잡해보이지만, 스키마를사용하여문서를작성하면가독성이향상되고더욱효율적이다. 먼

저기본적인XML 스키마의틀을형성하는다음의개념에대하여살펴보기로한다.

<schema> 엘리먼트

네임스페이스

XML 문서와연결하기

4.2.1 <schema> 엘리먼트

XML 스키마 문서에 있어서 루트 엘리먼트가 되는 태그는 <schema>이다. <schema>

엘리먼트는문서내에서사용할기본적인내용과네임스페이스에관한정보를담고있다.

먼저<schema> 엘리먼트의선언형식을살펴보자.

■ 형식 ■

<schema xmlns:xsd="www.w3.org/2001/XMLSchema" ①

targetNamespace="URI" ②

xmlns="URI" ③

attributeFormDefault="qualified or unqualified" ④

elementFormDefault="qualified or unqualified" ⑤

version="version 번호"> ⑥

<schema> 엘리먼트의어트리뷰트는크게네임스페이스관련어트리뷰트들과어트리뷰

트/엘리먼트의형식에관련된어트리뷰트들, 버전정보의세종류로나눌수있다.

네임스페이스 관련 어트리뷰트들은 위 형식에서 ①~③부분과 같이 나타낼 수 있으며,

각각의네임스페이스는스키마네임스페이스, target 네임스페이스, 기본네임스페이스를

의미한다. XML 스키마스펙에서지정하고있는스키마네임스페이스는접두사로‘xsd’를

사용하고있으므로, 이책에서도‘xsd’를네임스페이스접두사로사용하고있으며, 네임스

페이스 URI로는‘http://www.w3.org/2001/XMLSchema’을사용한다. 한 가지주의할

점은네임스페이스의접두사의경우에는‘xsd’이외의다른문자를사용하여나타내더라

도관계가없지만, 네임스페이스 URI의 경우에는반드시스펙에서명시하고있는 URI를

134 |4장 XML 스키마의 이해

Page 9: 9.- CDI ç · 9.- c d Ý ai¢i¢i¢i¢i¢i¢i¢ Á x k9.- c d ³ ¿ × 3 ± Ù Þ Ý À ²9.- c 3 i Þ È x ¿ à ² d Ø 3 > ç

따라야한다는것이다. URI는대·소문자를구분하므로정확하게표기해주어야하며, 반

드시유일한URI로명시되어야한다. 다음은세가지종류의네임스페이스의사용목적과

설명이다.

표 4.2 스키마 네임스페이스

네임스페이스 목적 설명

XML 스키마 스키마스펙에서명시하는

네임스페이스 네임스페이스를나타내기위하여사용

target

네임스페이스

기본네임스페이스 접두사를명시하지않고네임스페이스를

선언하며가독성향상과작성의편리성을

제공하기위하여사용

다음으로는 <schema> 엘리먼트형식의④, ⑤부분에서정의하고있는어트리뷰트/엘

리먼트 형식에 관련된 선언에 대하여 살펴보자. elementFormDefault와 attribute

FormDefault 어트리뷰트는 스키마 문서가 적용되는 XML 문서 내에서 엘리먼트와 어트

리뷰트에대한한정되는(Qualified) 형태를지정해주기위하여사용한다. 여기서한정된다

는 말은 엘리먼트 또는 어트리뷰트가 네임스페이스 URI와 결합된다는 의미이고, 반대로

한정되지않는다는말은엘리먼트또는어트리뷰트가네임스페이스URI와결합되지않는

다는것을의미한다. 다소복잡하게여겨지겠지만일반적으로는‘qualified’를기본값으로

가지므로관용적으로지정하도록한다.

4.2 XML 스키마의 기초 |135

문서의 엘리먼트, 어트리뷰트, 데이터형

등을지정하기위해사용

사용자가정의하는요소들, 즉엘리먼트,

어트리뷰트등사용자가임의로지정하는

요소들이 포함될 네임스페이스를 지정

하기위해사용

작성하는 스키마 문서 내에서 사용자가

임의로 정의하는 문서 요소들이 위치할

네임스페이스를나타내기위하여사용

일반적으로는 target 네임스페이스의

URI와 동일하며, target 네임스페이스

또는XML 스키마네임스페이스와동일

하게 지정 가능함. 주로 편의를 위하여

사용

Page 10: 9.- CDI ç · 9.- c d Ý ai¢i¢i¢i¢i¢i¢i¢ Á x k9.- c d ³ ¿ × 3 ± Ù Þ Ý À ²9.- c 3 i Þ È x ¿ à ² d Ø 3 > ç

4.2.2 XML 문서와 연결하기

앞절에서는 XML 문서와스키마문서를따로따로작성하 다. 그러나작성한스키마

문서를이용하여XML 문서를검증하기위해서는두문서를연결해주어야한다. 앞절에

서작성하 던ex4_1.xml 문서와ex4_3.xsd 문서를연결하는방법을살펴보기로하자. 스

키마문서는작성한그대로저장해두고ex4_1.xml 문서는ex4_4.xml 문서로이름을변경

하여저장한후문서의전반부에서XML 선언문을선언한다음에아래의내용을삽입한다.

XML 문서의루트엘리먼트인 <Memo> 엘리먼트내에스키마문서를연결시키기위한

네임스페이스를추가하여선언한다. ①부분에서기본네임스페이스를선언하고있으며, 문

서를 검증할 네임스페이스를 지정하기 위하여 ②부분에서 인스턴스 네임스페이스 URI인

‘http://www.w3.org/2001/XMLSchema-instance’를지정한다. 스키마문서를기반으

로 하여 구체적인 데이터를 작성하는 XML 문서는‘스키마 문서를 인스턴스화한다’라고

표현하게되는데, 이 때인스턴스화하기위한어트리뷰트인‘schemaLocation’을사용하

기 위하여 이 어트리뷰트가 속하는 네임스페이스인‘http://www.w3.org/2001/

XMLSchema-instance’를지정한다. ③부분은‘schemaLocation’어트리뷰트를사용하

136 |4장 XML 스키마의 이해

ex4_4.xml 스키마 문서와 연결하기 위해 네임스페이스 선언 추가

<?xml version="1.0" encoding="EUC-KR"?>

<Memo xmlns="http://www.lisia.net" ①

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ②

xsi:schemaLocation="http://www.lisia.net ex4_3.xsd"> ③

<PInfo>

<from>김광수</from>

<to>박수란</to>

</PInfo>

<MInfo>

<date>2003년 8월 15일</date>

<main>수란아!! 생일 정말정말 축하해. 좋은 하루 보내</main>

</MInfo>

</Memo>

Page 11: 9.- CDI ç · 9.- c d Ý ai¢i¢i¢i¢i¢i¢i¢ Á x k9.- c d ³ ¿ × 3 ± Ù Þ Ý À ²9.- c 3 i Þ È x ¿ à ² d Ø 3 > ç

여XML 문서와연결할스키마문서경로를지정하는부분이다. ‘xsi:schemaLocation’이

라고적은다음기본네임스페이스와동일한네임스페이스를지정하고공백을준다음연

결할스키마파일명을적는다.

브라우저에서는다음과같이확인할수있다.

오류없이위와같은화면이나타나면스키마문서를이용하여XML 문서를정상적으로

검증하 음을알수있다.

지금까지XML 스키마를구성하는몇가지개념들에대하여간략하게다루었는데, 다음

절에서는스키마의구성요소각각에대하여좀더자세히살펴보기로한다.

4.3 XML 스키마 구조 -----------------------

XML 스키마문서는 XML 문법규칙을준수하기때문에일종의 XML 문서라고할수

있다. 따라서, XML 문서와 마찬가지로 스키마 문서를 구성하는 기본 단위는 엘리먼트와

어트리뷰트이다. 이절에서는스키마문서내에서엘리먼트와어트리뷰트를정의하는기본

적인규칙과방법에대하여다룬다.

4.2 XML 스키마의 기초 |137

그림 4.1 ex4_4.xml 문서

Page 12: 9.- CDI ç · 9.- c d Ý ai¢i¢i¢i¢i¢i¢i¢ Á x k9.- c d ³ ¿ × 3 ± Ù Þ Ý À ²9.- c 3 i Þ È x ¿ à ² d Ø 3 > ç

4.3.1 엘리먼트 정의

XML 스키마문서내에서엘리먼트를선언할때에는 <element> 엘리먼트를사용한다.

이때<element> 엘리먼트는크게두가지부류의정보를나타내게되는데, 첫번째는선언

하고자하는엘리먼트의이름을지정하는것이고다음으로는선언하고자하는엘리먼트에

대한정보그룹을나타내는것이다. 먼저선언형식에대하여알아보자.

■ 형식 ■

<element name="엘리먼트명" type="데이터의 형식 지정" ref="전역 엘리먼트 선언 참조"

minOccurs="음이 아닌 정수" maxOccurs="음이 아닌 정수 또는 "unbounded" .../>

<element> 엘리먼트가다양한어트리뷰트를가질수있음을알수있다.

각어트리뷰트와관련된설명을간단하게살펴보면다음과같다.

표 4.3 <element>의 어트리뷰트 종류

어트리뷰트명 설명 예

name 엘리먼트의이름을정의한다. <element name=”tag”.../>

type 데이터의형식을지정한다. <element type=”string”.../>

ref 전역엘리먼트를참조하기위해사용한다. <element ref=”lisia:tag”.../>

반드시네임스페이스와함께사용되어야한다.

form 선언되는엘리먼트가한정되는지(qualified), <element form=”qualified”../>

한정되지않는지(unqualified) 지정한다. 또는

<element form=”unqualified”../>

minOccurs/ <element minOccurs=”3”../>

maxOccurs 또는

<element maxOccurs=”56”../>

또는

<element minOccurs=”1”

maxOccurs=”12”../>

default 기본값을지정하기위하여사용한다. <element name=”pet”

default=”dog”/>

fixed 고정된값을지정하기위하여사용한다. <element name=”version”

fixed=”1.0”/>

138 |4장 XML 스키마의 이해

해당 엘리먼트가 문서 내에서 사용될 수 있는

회수에 대한 최소값/ 최대값을 지정하기 위해

사용된다.

두어트리뷰트는함께또는따로사용된다.

기본값은‘1’

Page 13: 9.- CDI ç · 9.- c d Ý ai¢i¢i¢i¢i¢i¢i¢ Á x k9.- c d ³ ¿ × 3 ± Ù Þ Ý À ²9.- c 3 i Þ È x ¿ à ² d Ø 3 > ç

4.3.2 <complexType> 과 그밖의 정의

XML 스키마에서 엘리먼트를 선언할 때에는 엘리먼트 내용에 따라 <simpleType>과

<complexType> 정의를사용하여정의할수있다. <complexType> 정의는앞의예제에서

우리가이미사용하 던정의이다.

<xsd:element name="Memo">

<xsd:complexType>

<xsd:sequence>

<xsd:element name="PInfo">

<xsd:element> 엘리먼트다음에 <xsd:complexType> 엘리먼트가사용되고있음을볼

수있다. 문서내에서엘리먼트를선언할때자식엘리먼트를가지지않는엘리먼트를선언

할 수도 있겠지만 보통은 문서 자체가 엘리먼트의 중첩으로 구성되는 경우가 많다.

<complexType> 정의는이러한중첩관계를가지는엘리먼트를선언할경우에스키마문

서를 작성하기 위하여 사용하도록 XML 스키마 스펙에서 정의된 엘리먼트다. 그리고,

<complexType> 정의와함께항상등장하는몇가지정의로 <sequence>, <choice>, <all>

정의가있는데엘리먼트의등장순서와관련하여사용하게된다. 이에대하여는잠시후에

다루기로 한다. <complexType> 정의 이외에도 <simpleType> 정의라는 것이 있는데 이

정의는단순형식즉, 엘리먼트내용을가지지않는경우를선언하거나참조하기위하여사

용한다.

그런데위의코드일부를살펴보게되면, 모든엘리먼트들앞에네임스페이스접두사가

사용되고있음을알수있다. 그렇다면, 지금이야기하고있는 <complexType> 정의와코

드내에포함되어있는 <xsd:complexType> 정의는다른것일까? 그렇지는않다. 이렇게

다르게나타나는이유는바로스키마문서내에서선언된기본네임스페이스때문이다. 저

자가제시한 ex4_3.xsd 문서의기본네임스페이스는표준에서정의하고있는네임스페이

스가 아니기 때문에 <complexType>과 같이 표준에서 정의된 태그를 사용하기 위해서는

구분을위하여접두사를사용하게되는것이다.

4.3 XML 스키마 구조 |139

Page 14: 9.- CDI ç · 9.- c d Ý ai¢i¢i¢i¢i¢i¢i¢ Á x k9.- c d ³ ¿ × 3 ± Ù Þ Ý À ²9.- c 3 i Þ È x ¿ à ² d Ø 3 > ç

정의하는엘리먼트가내용모델을가지는경우에대하여좀더살펴보자. 이경우에사용

할수있는엘리먼트들은다음과같다.

분류 엘리먼트

내용모델을가지는엘리먼트정의 <complexType>

내용모델의선언순서또는선택정의 <sequence>, <choice>, <all>

새로운엘리먼트정의 <simpleType>

이번에는 <complexType> 엘리먼트와함께사용할수있는순서정의에관한태그들인

<sequence>, <choice>, <all> 엘리먼트에대하여간략하게살펴보기로하자. <sequence>

는단어의의미그대로나열한다는의미이다. 예를들어 <Memo>라는엘리먼트가자식엘

리먼트로 <Date>, <Message> 엘리먼트를 가지는 XML 문서를 작성하고자 할 경우

<complexType>, <sequence> 엘리먼트를 사용하여 다음과 같은 XML 스키마 문서를 나

타낼수있다.

예제 1 XML 문서

<Memo>

<Date/>

<Message/>

</Memo>

예제 2 <sequence> 엘리먼트의사용

<element name="Memo">

<complexType>

<sequence>

140 |4장 XML 스키마의 이해

■ 엘리먼트의 정의

단일 값을 가지는 엘리먼트 : <simpleType>

내용 모델을 가지는 엘리먼트 : <complexType>

Page 15: 9.- CDI ç · 9.- c d Ý ai¢i¢i¢i¢i¢i¢i¢ Á x k9.- c d ³ ¿ × 3 ± Ù Þ Ý À ²9.- c 3 i Þ È x ¿ à ² d Ø 3 > ç

<element name="Date"/>

<element name="Message"/>

</sequence>

</complexType>

</element>

즉, 자식엘리먼트가여러개사용되고있을경우에모든자식엘리먼트에대한정의를

하기위하여위와같이표현할수있다.

<choice> 엘리먼트의경우에도단어의의미인선택한다는의미를따르는데, <Beverage>

엘리먼트가 자식 엘리먼트로 <Coke>, <Juice>, <Coffee>를 가지는 데, 세 가지 엘리먼트

중 한 가지만 선택하도록 문서를 작성하고 싶을 경우에 사용할 수 있다. 즉, 다음과 같은

XML 문서가있을때아래와같이나타낼수있다.

예제 3 XML 문서

<Beverage>

<Coke/>

<Juice/>

<Coffee/>

</Beverage>

‘예제 3’에서나타낸 XML 문서는 XML 스키마문서가적용된결과문서는아니지만,

위와같은포함관계를가지는일련의태그들에대하여<choice> 엘리먼트를적용하겠다는

사실을언급하기위하여위와같이나타낸것이다. 아래의문서일부는실제로<choice> 엘

리먼트를사용하는예이다.

예제 4 <choice> 엘리먼트의사용

<element name="Beverage">

<complexType>

<choice>

<element name="Coke"/>

<element name="Juice"/>

4.3 XML 스키마 구조 |141

Page 16: 9.- CDI ç · 9.- c d Ý ai¢i¢i¢i¢i¢i¢i¢ Á x k9.- c d ³ ¿ × 3 ± Ù Þ Ý À ²9.- c 3 i Þ È x ¿ à ² d Ø 3 > ç

<element name="Coffee"/>

</choice>

</complexType>

</element>

‘예제4’와같이XML 스키마문서를정의하면<complexType> 정의의<Beverage> 엘

리먼트에대하여 <choice> 엘리먼트내부에서정의하고있는엘리먼트중단하나의엘리

먼트만이실제XML 문서내에사용될수있다는것을의미한다.

<all> 엘리먼트는문서내에서정의되는엘리먼트들이순서에관계없이한번나타나거

나한번도 나타나지 않도록 지정하기 위하여 사용한다. 위의‘예제 3’문서를 다시한번

활용하여XML 스키마문서를작성하면다음과같다.

예제 5 <all> 엘리먼트의사용

<element name="Beverage">

<complexType>

<all>

<element name="Coke"/> ①

<element name="Juice"/>

<element name="Coffee"/> ②

</all>

</complexType>

</element>

위와같이나타내면 <all> 엘리먼트로묶여있는①∼②부분의엘리먼트들은실제XML

문서내에서한번나타나거나한번도나타나지않도록정의되며, 반드시위의순서대로

나타나지않을수도있다.

엘리먼트정의에있어서마지막으로다루고자하는부분은엘리먼트의선언위치이다.

일반적인 프로그래밍 언어에서와 같이 전역으로 엘리먼트를 선언할 수도 있고, 지역으로

엘리먼트를선언할수도있다. 물론전역으로선언된엘리먼트를문서내에서호출하여사

용하는것도가능하다.

142 |4장 XML 스키마의 이해

Page 17: 9.- CDI ç · 9.- c d Ý ai¢i¢i¢i¢i¢i¢i¢ Á x k9.- c d ³ ¿ × 3 ± Ù Þ Ý À ²9.- c 3 i Þ È x ¿ à ² d Ø 3 > ç

엘리먼트 선언 위치 명칭 설명

전역(Global) 전역엘리먼트 문서의루트엘리먼트인<schema> 엘리먼트의자식

엘리먼트로정의한다.

지역(Local) 지역엘리먼트 일반적으로문서내의적절한위치에선언하는엘리먼

트이다.

참조(Reference) 참조엘리먼트 루트엘리먼트인<schema> 엘리먼트의자식엘리먼

트로선언된전역엘리먼트를문서내에서참조한다.

4.3.3 어트리뷰트 정의

XML 스키마에서는엘리먼트의선언과함께XML 문서의기본요소인어트리뷰트를정

의하기위한엘리먼트를제공하고있다. 이것은 <attribute>라는엘리먼트로서다양한어

트리뷰트와함께사용될수있다. 다음은어트리뷰트의선언형식이다.

■ 형식 ■

<attribute name="어트리뷰트명" type="데이터 형식" use="optional|prohibited|required"

default="기본값" fixed="고정값">

<attribute> 엘리먼트 내의 어트리뷰트들은 그다지 어려운 개념을 내포하고 있지는 않

다. 여기서use 어트리뷰트의값으로선택할수있는값이세가지인데, optional이선택되

었을경우에는XML 문서내에서어트리뷰트를생략할수있고, prohibited가선택되었을

경우에는 어트리뷰트가 XML 문서 내에서 절대로 포함될 수 없다. required의 경우에는

XML 문서내에서어트리뷰트가반드시포함되어야함을의미한다.

어트리뷰트는하나의엘리먼트에대하여단지하나만존재하지않을수도있다. 여러가

지의어트리뷰트가여러가지의엘리먼트에대하여동일하게사용될경우에는어트리뷰트

를표현하기위하여<attributeGroup> 엘리먼트를사용할수있다.

4.3 XML 스키마 구조 |143

Page 18: 9.- CDI ç · 9.- c d Ý ai¢i¢i¢i¢i¢i¢i¢ Á x k9.- c d ³ ¿ × 3 ± Ù Þ Ý À ²9.- c 3 i Þ È x ¿ à ² d Ø 3 > ç

예제 1 <attributeGroup> 엘리먼트의예

<xsd:attributeGroup name="기본정보">

<xsd:attribute name="성별" type="xsd:char" use="optional"/>

<xsd:attribyte name="나이" type="xsd:decimal" use="optional"/>

</xsd:attributeGroup>

<xsd:element name="사람">

<xsd:complexType>

<xsd:sequence>

<!-- 엘리먼트 내용을 기입한다. -->

</xsd:sequence>

<xsd:attributeGroup ref="기본정보"/> ①

</xsd:complexType>

</xsd:element>

<attributeGroup> 엘리먼트를 선언한 후 ①부분에서와 같이 ref 어트리뷰트를 사용하

여참조하게된다.

4.3.4 엘리먼트의 반복 사용

XML DTD에서엘리먼트의사용횟수에관한지정을해줄수있었는데, 이때가능한

지정방식으로는 *, +, ?를 사용하여 0번, 1번, 또는 n번사용가능하도록설정할수있었

다. 그러나, DTD에서제공하는사용횟수규칙으로는예를들어엘리먼트를7번반복하라

든지, 세번이상 12번이하로반복되도록설정하는것이불가능하다. XML 스키마에서는

보다 세세한 설정을 할 수 있도록 어트리뷰트를 정의하고 있는데 바로 minOccurs와

maxOccurs이다. 두 어트리뷰트는이미앞에서도소개한바있는데, 잘 활용하면상당한

유연성을제공하는어트리뷰트이다. 예를들어시간을나타내는XML 스키마문서를작성

하는경우를살펴보자.

144 |4장 XML 스키마의 이해

ex4_5.xsd 엘리먼트 반복 사용을 나타내는 XSD 문서

<xsd:element name="time">

<xsd:complexType>

<xsd:sequence>

Page 19: 9.- CDI ç · 9.- c d Ý ai¢i¢i¢i¢i¢i¢i¢ Á x k9.- c d ³ ¿ × 3 ± Ù Þ Ý À ²9.- c 3 i Þ È x ¿ à ² d Ø 3 > ç

시간을나타내는단위를시(clock), 분(minutes), 초(second)로분류할경우‘시’는오전

과오후로나타낼경우12시를넘을수없다. 따라서<clock> 엘리먼트의최소값은‘1’부터

‘12’까지로지정하여 13 이상의숫자를값으로받지않도록지정하고있다. 동일한원리로

‘분’과‘초‘는 59분 또는 59초가 넘을 수 없으므로 최대값을‘59’까지로 한정하고 있다.

물론 시간은 음의 숫자로 나타낼 수 없으므로 각 단위의 type 어트리뷰트값은

‘positiveInteger’로지정하여양의정수를값으로받도록하고있다.

4.4 XML 스키마 데이터 타입 -------------------

XML 스키마스펙에서는다양한종류의데이터타입을제공하고있다. 스키마에서제공

하는다양한데이터타입은그야말로스키마라는기술자체가표준화되면서가장중요하게

지원되도록고려된부분이다. 이러한중요도로인해스키마에서는DTD와비교할수없을

만큼다양한데이터타입이제공되고있다.

스키마데이터타입은크게세부분으로나누어살펴볼수있으며, 다음절에서자세히

살펴보도록하자.

4.4.1 데이터 시스템

스키마데이터타입은크게세부분으로구성되면각각 Value Space, Lexical Space,

Facets로분류된다.

4.4 XML 스키마 데이터 타입 |145

<element name="clock" type="positiveInteger" minOccurs="1" maxOccurs=”12”/>

<element name="minutes" type="positiveInteger" minOccurs="1"

maxOccurs="59"/>

<element name="second" type="positiveInteger" minOccurs="1"

maxOccurs="59"/>

</xsd:sequence>

</xsd:complexType>

</xsd:element>

Page 20: 9.- CDI ç · 9.- c d Ý ai¢i¢i¢i¢i¢i¢i¢ Á x k9.- c d ³ ¿ × 3 ± Ù Þ Ý À ²9.- c 3 i Þ È x ¿ à ² d Ø 3 > ç

Value Space는 주어진 자료형을 위한 값 집합을 의미한다. 각 자료형에 대한 Value

Space는 Lexical Space 내에서하나이상의문자로표현된다. Lexical space는자료형에

대한유효한리터럴(Literals) 집합이다. 예를들어‘100’과‘1.0E2’는동일한값을표현하

는실수형(Float) Lexical Space에서유래된두개의다른문자이다. Facets는패싯이라고

읽는다. 이러한패싯은새로운데이터타입을생성하기위해사용할수있다.

4.4.2 데이터 타입

스키마에서제공되는데이터타입은크게두종류로분류할수있다. 빌트인데이터타

입(Built-in Datatypes)과 사용자정의데이터타입(User-derived Datatypes)이 그것인

데, XML 스키마스펙인‘http://www.w3.org/TR/xmlschema-2’에서다음과같이빌트

인데이터타입을정의하고있다.

146 |4장 XML 스키마의 이해

그림 4.2 빌트인 데이터 타입 계층 구조

Page 21: 9.- CDI ç · 9.- c d Ý ai¢i¢i¢i¢i¢i¢i¢ Á x k9.- c d ³ ¿ × 3 ± Ù Þ Ý À ²9.- c 3 i Þ È x ¿ à ² d Ø 3 > ç

XML 스키마스펙내에서정의하고있는빌트인데이터타입은XML 스키마내에서사

용하기위하여제안되었을뿐만아니라다른XML 관련표준들에서모두통용되도록제정

되었다. 그리고 빌트인 데이터 타입은 네임스페이스와 연관지어서 사용되는데 일반적인

XML 스키마스펙을의미하는‘http://www.w3.org/2001/XMLSchema’를사용할수도

있고단순히스키마에서제안되고있는데이터타입에관하여서만알고자하는사용자들을

위해서는‘http://www.w3.org/2001/XMLSchema-datatypes’라는 별도의 네임스페이

스를제공하고있다.

빌트인데이터타입은[그림4.2]에서보는바와같이상당히다양하여너무복잡해보이

는경향이있다. 그러나빌트인데이터타입은각특징에따라분류할수있으므로, 이러한

분류를통해데이터타입에대한개념과성격을이해하도록하자.

① 원자 VS 리스트 VS 유니온 데이터 타입

원자데이터타입: 더이상분해가불가능한데이터타입을의미한다. 아래에서설명

할원형데이터타입이여기에포함된다.

리스트데이터타입 : 원자데이터타입이유한한길이를가지면서순차적으로구성

된 값을 가질 경우에 해당한다. XML 스키마에서는 NMTOKENS, IDREFS,

ENTITIES의세가지리스트데이터타입을정의하고있다.

유니온데이터타입 : Value Space와 lexical Space가한개이상의또다른데이터

타입의Value Space와 lexical Space의결합(Union)으로구성된다. 현재XML 스키

마에서정의하고있는유니온데이터타입은존재하지않는다.

② 원형(Primitive) VS 유도(Derived) 데이터 타입

원형데이터타입 : 다른데이터타입의관점에서정의된것이아니라처음부터존재

하는데이터타입이다.

유도데이터타입: 다른데이터타입의관점에서정의된데이터타입이다.

4.4 XML 스키마 데이터 타입 |147

■ 빌트인 데이터 타입의 분류

① 원자(Atomic) VS 리스트(List) VS 유니온(Union) 데이터 타입

② 원형(Primitive) VS 유도(Derived) 데이터 타입

Page 22: 9.- CDI ç · 9.- c d Ý ai¢i¢i¢i¢i¢i¢i¢ Á x k9.- c d ³ ¿ × 3 ± Ù Þ Ý À ²9.- c 3 i Þ È x ¿ à ² d Ø 3 > ç

원형데이터타입과유도데이터타입은다음과같이분류된다.

[표 4.4] 빌트인 데이터 타입의 분류 - 원형 VS 유도 데이터 타입

원형 데이터 타입 데이터 타입 설명 유도 데이터 타입 데이터 타입 설명

string 제한된길이의문자열 normalizedString 공백이정규화된문자열

boolean 참(true) 또는거짓(false) token 토큰화된문자열

decimal 십진수 Name XML 이름을표기

float 32비트단정도부동소수 ID XML 1.0 스펙의ID

double 64비트단정도부동소수 IDREF XML 1.0 스펙의IDREF

duration PnYnMnDTnHnMnS 형식으로 language RFC 1766에정의된

표시되는시간의지속 자연언어식별자

dateTime CCYY-MM-DDThh:mm:ss NCName 네임스페이스와결합되지

않은이름

time HH:MM:SS 형식의시간 NMTOKEN XML 1.0 스펙의

NMTOKEN

date NMTOKENS XML 1.0 스펙의

NMTOKENS

gYearMonth CCYY-MM 형식의 IDREFS XML 1.0 스펙의

그레고리언력의연도/월표기 IDREFS

gYear ENTITY XML 1.0 스펙의

ENTITY

gMonthDay ENTITIES XML 1.0 스펙의

ENTITIES

gDay integer 정수

gMonth --MM-- 형식의그레고리언력의 nonPositiveInteger 양이아닌정수

반복되는월표기 (0을포함)

hexBinary negativeInteger 음의정수

(0을미포함)

148 |4장 XML 스키마의 이해

CCYY 형식의 그레고리언력의 연

도표기

CCYY-MM-DD형식의 그레고

리언력의 날짜, ISO 8601과 호환

--DD 형식의 그레고리언력의 반

복되는일표기

16진수로인코딩되는 임의의바이

너리데이터

--MM-DD 형식의 그레고리 언

력의 반복되는 월의 반복되는 일

표기

Page 23: 9.- CDI ç · 9.- c d Ý ai¢i¢i¢i¢i¢i¢i¢ Á x k9.- c d ³ ¿ × 3 ± Ù Þ Ý À ²9.- c 3 i Þ È x ¿ à ² d Ø 3 > ç

base64Binary long

anyURI URI를표기 int

QName short -32768 ∼32768

사이의정수

NOTATION XML 1.0 스펙의 NOTATION byte -128 ∼127

사이의정수

nonNegativeInteger 0을포함하는양의정수

unsignedLong

unsignedInt 0 ∼4294967295

사이의unsignedLong

unsignedShort 0 ∼65535 사이의

unsignedInt

unsignedByte 0 ∼255 사이의

unsignedShort

positiveInteger 1 또는1 이상의integer

4.4 XML 스키마 데이터 타입 |149

-9223372036854775808

∼9223372036854775808

사이의정수

-2147483648 ∼

2147483648 사이의정수

0 ∼18446744073709551615

사이의nonNegativeInteger

네임스페이스에서사용하는접두

사와 결합되는 모든 엘리먼트를

의미

Base64로 인코딩되는 임의의 바

이너리데이터