XML 스키마 만들기


IT Story/Database이야기 2010.10.28 16:03



  • XML 스키마 ?

DTD (Document Type Definition)의 복잡성 해결을 위해 W3C에서 만들어 졌다.

- DTD와 같이 문서의 문법을 지정

- 각 구성요소의 내용에 대한 실제 데이터 형식들을 지정

- 다른 스키마로부터 문법을 상속받거나 스키마의 주석을 만듦

- 다중 Namespace와 함께 사용

- 간단하고 복잡한 데이터 형식들을 만듦

- 목록 형식(list type)을 만들거나 속성 그룹을 만듦

 

  • XML 스키마 작성하기

복합형(complex type) : 하위 구성요소 또는 속성들을 포함하는 구성요소

단순형(simple type) : 숫자, 문자열이나 날짜 등과 같은 단순한 데이터만 포함, 하위 구성요소를 포함하지 않는 구성요소

 

  • 스키마의 구성요소

형식

설명

all 

그룹에 속한 구성 요소들이 아무 순서로 나타나는 것을 허용

annotation 

주석문을 생성

any

주어진 Namespace의 구성요소가 sequence, choice에 나타나는 것을 허용

anyAttribute 

주어진 NS의 속성이 complexType , attributeGroup에 나타내는 것을 허용

appinfo 

annotation 내에서 응용 프로그램에서 사용되는 정보들을 지정

attribute 

속성을 만듦

attributeGroup 

속성 선언을 그룹으로 구성. 복합형 정의에 대한 그룹으로도 사용 가능

choice 

그룹에 포함된 구성요소들 중 하나만이 구성요소에 나타나도록 함

complexContent

복합형 구성요소에 대한 확장 또는 제한 조건을 포함

complexType 

복합형을 정의하며 속성과 구성요소 내용을 지원한다

documentation 

annotation 내에 사용자가 읽거나 사용 가능한 텍스트를 저장

element 

구성요소를 만듦

extension 

단순형 또는 복합형을 확장시킴

field 

상수(unique, key, keyref)를 정의하려고 값을 지정하는 XPath현식 가리킴

group

구성요소 선언문 집합을 그룹으로 만들어, 복합형 정의에 그룹으로 합침.

import 

스키마에서 참조하는 스키마 컴포넌트의 NS를 가져옴

include 

스키마의 targetNamespace에 스키마 문서를 포함

key 

속성 또는 구성요소의 값이 반드시 key이어야 함을 가리킴

keyref 

속성 또는 구성요소가 주어진 키 또는 고유 값에 해당됨을 가리킴

list 

simpleType 구성요소를 주어진 데이터 형식의 값에 대한 목록으로 정의

notation 

XML문서 내에 비-XML 데이터 형식을 나타내는 notation 정의를 포함

redefine 

단순형, 복합형, 그룹 등을 현재 스키마에서 재정의

restriction 

데이터 형식 등의 제한 조건을 정의

schema 

스키마 정의를 포함

selector 

unique, key, keyref 구성요소의 ID 제한 조건에 대해 구성요소 집합을 선택하는 XPath 표현식을 나타냄

sequence 

구성요소 내에서 주어진 순서대로 그룹의 구성요소들이 나타나도록 함

simpleContent

단순형 구성요소에 대한 확장 또는 제한 조건을 포함

simpleType 

단순형을 정의

union 

simpleType 구성요소를 주어진 단순 데이터 형식 값들의 집합으로 정의

unique 

속성 또는 구성요소 값이 반드시 고유해야 함

 

  • 형식과 구성요소 선언하기

[XML 스키마에 내장되어 있는 단순형 구성요소]

XML 스키마와 DTD의 호환성을 유지하려면 속성을 사용할 때 ID, IDREF, IDREFS, ENTITY, ENTITIES, NOTATION, NMTOKEN, NMTOKENS 등 단순형만을 사용

  • 구성요소들이 나타나는 빈도 지정하기

minOccurs는 최소 빈도수를 나타내고, maxOccurs는 최대 빈도수를 나타낸다.

 

  • 구성요소의 기본값 지정하기

- fixed : 고정 값. 반드시 무조건 고정 값 사용

<xsd:element name="maxTrials" type="xsd:integer" fixed="100"/>

- default : 기본 값. 실제 문서 적용 시 기본값이 아닌 문서에 지정해놓은 값이 사용

<xsd:element name="maxTrials" type="xsd:integer" default="100"/>

 

  • 속성의 제한조건과 기본값 지정하기

- 속성은 반드시 단순형(simple type)이어야 한다.

- 기껏해야 한 번 나타날 수 있으므로 minOccurs와 maxOccurs속성을 사용하지 않는다.

- 속성은 <xsd:attribute> 구성요소에서 선언한다.

*use속성

속성을 (필수조건/선택조건)으로 할 것인지를 지정, 속성의 값을 (고정 값/기본 값)을 지정할 것인지 등을 지정할 때 사용

*value속성

필요한 값을 지정할 때 사용

[use 속성에 사용 할 수 있는 값들의 목록]

Required

속성이 반드시 필요하며 어떤 값을 가질 수 있다

Optional

속성을 생략할 수 있으며 어떤 값을 가질 수 있다

Filxed

속성을 고정시키며 그 값은 value 속성에 지정한다

Default

속성이 나타나지 않는다면 value 속성의 값을 기본값으로 사용한다

Prohibited

속성이 나타나서는 안된다

 

<xsd:attribute name="counter" type="xsd:int" use="fixed" value="400">

>> counter라는 이름으로 항상 400이라는 값을 갖는 정수형 속성을 선언

 

  • 단순형 만들기

catalogID는 XML 스키마 규격에 내장되어 있지 않은 단순형이지만, simpleType을 사용하여 정의

단순형의 속성을 세부적으로 정의하려면 XML 스키마의 파셋(facet)을 사용한다.

단순형에서는 텍스트를 표시하기 위한 pattern 파셋을 사용하여 정규 표현식"\d{3}-\d{4}-\d{3}"을 지정해 주어야 한다.

  • 파셋을 사용하여 단순형 만들기

dayOfMonth라는 단순형을 만들고 minInclusive와 maxInclusive의 두 가지 파셋을 사용하여 1부터31까지라고 세부적으로 정의

[단순형과 적용 가능한 파셋들]

 

 

[순서 배열이 가능한 단순형과 적용 가능한 파셋들]

 

  • 익명(anonymous)의 형식 정의 사용하기

익명의 형식 정의를 사용하면 한 번만 참조하게 되는 형식을 새로 정의하지 않아도 된다.

이제 이름을 부여한 별도의 복합형을 전혀 정의하지 않아도 book 구성요소 내에 원하는 구성요소를 추가할 수 있다

  • 빈 구성요소 만들기

빈(empty) 구성요소는 내용을 갖지 않지만 속성을 가질 수 있다

이 때 복합형을 선언하는 <complexContent> 요소를 사용한다

  • 혼합-내용 구성요소 만들기

텍스트와 다른 구성 요소를 포함하는 혼합-내용의 구성요소를 스키마와 DTD에서 모두 만들 수 있다.

복합 내용을 처리할 수 있도록 하기 위해 <complexType> 구성요소의 mixed 속성에 "true"를 지정해야 한다.

  • 주석문 스키마

스키마에서는 주석문(annotating)을 추가하기 위해 <annotation>, <documentation>, <appInfo> 새로운 구성 요소를 정의해야 한다

<annotation>구성요소는 <documentation>과 <appInfo>를 포함하는 상위 구성 요소이다.

 

  • 선택 만들기

선택 기능에서는 여러 개의 구성요소를 지정하고, 그 중 하나만을 선택하도록 한다.

<xsd:choice>

<xsd:element name="books" type="books"/>

<xsd:element ref="book"/>

<xsd:choice>

한 권을 빌리거나 여러 권을 빌리거나 선택할 수 있는 구성요소

  • 구성요소의 그룹 만들기

bookAndMagazine이라는 새로운 그룹을 만들어서 다른 곳에서 참조할 수 있다.

속성 그룹도 똑 같은 방법으로 만들 수 있다.

  • all 그룹 만들기

- all그룹의 자식들은 모두 개별적인 구성요소 이어야 한다. 절대 그룹을 포함 할 수 없다.

- minOccurs와 maxOccurs의 값으로 0과 1만을 허용한다.

transactionType을 all 그룹으로 변경

- 이 형식의 요소들은 최대한 한 번까지만 나타날 수 있다.

- 추가적으로 구성요소를 선언 할 수 없다.

 

 

P.S 근데 저도 잘 모르는 게 왜 XML에 선택 구문을 만들어야하죠 ?

Book, books, magazine 만 xml에 분류해놓고 xml불러와서 사용하는 코드에서 조정해주는 것 아닌가요?ㅜㅜ

고수님들 답변부탁드려요

신고

WRITTEN BY
ShakeJ

0 ,