본문 바로가기
XML

XML XSD

by FraisGout 2020. 7. 3.

XSD?

XSDXML 스키마 정의(XML Schema Definition)를 의미합니다.

 

XSDXML 문서의 구조 및 해당 문서가 포함할 수 있는 적법한 요소와 속성을 명시합니다.

 

, 해당 XML 문서가 유효한(valid) XML 문서로써 포함할 수 있는 관계를 정의합니다.

 

 

 

XML에서 스키마를 정의할 때는 XSD뿐만 아니라 앞서 배운 DTD를 사용할 수도 있습니다.

 

DTD의 단점

DTD는 오래전부터 엔티티를 정의할 수 있고, 빠른 개발을 위한 내부 DTD를 사용할 수 있어서 많이 사용되었습니다.

 

하지만 시간이 지날수록 다음과 같은 단점들이 발생합니다.

 

 

 

1. 네임스페이스를 지원하지 않습니다.

 

2. XML 문법이 아닌 별도의 문법으로 작성해야 합니다.

 

3. 제한된 타입만을 지원합니다.

 

4. 재사용과 확장이 불가능합니다.

 

 

 

위와 같은 단점 때문에 2001W3C에서는 새로운 스키마 언어인 XSD를 공표합니다.

 

XSD의 특징

DTD의 단점을 개선한 XSD는 다음과 같은 특징을 가집니다.

 

 

 

1. 네임스페이스를 지원합니다.

 

2. XML 문법으로 작성할 수 있어 재사용과 확장이 쉽습니다.

 

3. 정수, 문자열 등의 다양한 타입을 지원합니다.

 

XSD 문법

모든 XSD 문서의 루트 요소는 <schema>요소입니다.

 

 

 

<schema>요소를 이용한 XML 스키마의 선언은 다음과 같은 문법을 따릅니다.

 

예제

<?xml version="1.0" encoding="UTF-8" ?>

 

 

 

targetNamespace="http://codingsam.com"

 

xmlns="http://codingsam.com"

 

elementFormDefault="qualified">

 

...

 

</xs:schema>

 

 

 

xmlns:xs 속성은 XSD의 요소와 타입에 사용할 W3CXML 스키마 네임스페이스를 명시합니다.

 

targetNamespace 속성은 요소를 정의할 XML 스키마 네임스페이스를 명시합니다.

 

xmlns 속성은 기본 XML 스키마 네임스페이스를 명시합니다.

 

elementFormDefault 속성은 해당 스키마를 이용해 선언한 XML 문서의 모든 요소가 네임스페이스를 만족한다는 것을 명시합니다.

 

XSD 예제

다음 예제는 간단한 XML 파일 예제입니다.

 

food.xml

<?xml version="1.0" encoding="UTF-8" ?>

 

<food>

 

<name>상추</name>

 

<type>야채</type>

 

<cost>2000</cost>

 

</food>

 

 

 

다음 예제는 앞선 XML 문서의 요소들을 정의한 DTD 파일 예제입니다.

 

food.dtd

<!ELEMENT food (name,type,cost)>

 

<!ELEMENT name (#PCDATA)>

 

<!ELEMENT type (#PCDATA)>

 

<!ELEMENT cost (#PCDATA)>

 

 

 

다음 예제는 앞선 XML 문서의 요소들을 정의한 XSD 파일 예제입니다.

 

food.xsd

<?xml version="1.0" encoding="UTF-8" ?>

 

 

 

targetNamespace="http://codingsam.com"

 

xmlns="http://codingsam.com"

 

elementFormDefault="qualified">

 

 

 

<xs:element name="food">

 

<xs:complexType>

 

<xs:sequence>

 

<xs:element name="name" type="xs:string"/>

 

<xs:element name="type" type="xs:string"/>

 

<xs:element name="cost" type="xs:string"/>

 

</xs:sequence>

 

</xs:complexType>

 

</xs:element>

 

 

 

</xs:schema>

 

 

 

다음 예제는 외부 DTD 파일을 포함하는 XML 파일 예제입니다.

 

food.xml

<?xml version="1.0" encoding="UTF-8" ?>

 

<!DOCTYPE food SYSTEM "food.dtd">

 

<food>

 

<name>상추</name>

 

<type>야채</type>

 

<cost>2000</cost>

 

</food>

 

 

 

다음 예제는 외부 XSD 파일을 포함하는 XML 파일 예제입니다.

 

food.xml

<?xml version="1.0" encoding="UTF-8" ?>

 

<food

 

xmlns="http://codingsam.com"

 

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

 

xsi:schemaLocation="http://codingsam.com food.xsd">

 

<name>상추</name>

 

<type>야채</type>

 

<cost>2000</cost>

 

</food>

 

XSD 타입

XSD에서는 사용자를 위해 다양한 타입을 제공합니다.

 

또한, 사용자가 임의의 타입을 직접 정의하여 사용할 수도 있습니다.

 

 

 

XSD에서 기본적으로 제공하는 타입은 기본 타입과 파생된 타입으로 구분됩니다.

 

기본 타입(primitive datatype)

XSD에서 제공하는 기본 타입을 사용할 때에는 반드시 네임스페이스 선언 시 사용한 접두사를 붙여야 합니다.

 

XSD 예제

<xs:element name="player" type="xs:string"/>

 

문자열(string)

문자열 타입은 문자, 줄 바꿈 문자(line feed), 개행 복귀 문자(carriage return), 탭 문자(tab) 등을 포함할 수 있습니다.

 

XSD 예제

<xs:element name="student" type="xs:string"/>

 

 

 

위의 XSD 예제에서 정의한 요소는 XML 문서에서 다음과 같이 표현될 수 있습니다.

 

XML 예제

<student>홍길동</student>

 

또는

 

<student>홍 길 동 </student>

 

날짜와 시간(dateTime)

날짜와 시간 타입은 날짜와 시간을 동시에 표현할 수 있습니다.

 

문법

yyyy-mm-ddThh:mm:ss

 

 

 

- yyyy-mm-dd : yyyymmdd일을 나타냅니다.

 

- T : 시간 부분이 시작됨을 알려주며, 반드시 표기해야 하는 문자입니다.

 

- hh:mm:ss : hhmmss초를 나타냅니다.

 

 

 

XSD 예제

<xs:element name="deadline" type="xs:dateTime"/>

 

 

 

위의 XSD 예제에서 정의한 요소는 XML 문서에서 다음과 같이 표현될 수 있습니다.

 

XML 예제

<deadline>2017-07-01T09:00:00</deadline>

 

시간 간격(duration)

시간 간격 타입은 시간 사이의 간격을 표현할 수 있습니다.

 

문법

PnYnMnDTnHnMnS

 

 

 

- P : 기간을 의미하며 반드시 표기해야 하는 문자입니다.

 

- nYnMnD : 기간을 연월일로 나타냅니다.

 

- T : 시간 부분이 시작됨을 알려주며, 시간 부분을 나타낼 때는 반드시 표기해야 합니다.

 

- nHnMnS : 기간을 시분초로 나타냅니다.

 

 

 

XSD 예제

<xs:element name="season" type="xs:duration"/>

 

 

 

위의 XSD 예제에서 정의한 요소는 XML 문서에서 다음과 같이 표현될 수 있습니다.

 

XML 예제

<season>P2YT10M</season> // 210

 

<season>PT60S</season> // 60

 

<season>-P2Y</season> // -2

 

실수(decimal)

실수 타입은 실수를 표현할 수 있습니다.

 

XSD 예제

<xs:element name="answer" type="xs:decimal"/>

 

 

 

위의 XSD 예제에서 정의한 요소는 XML 문서에서 다음과 같이 표현될 수 있습니다.

 

XML 예제

<answer>12.5</answer>

 

<answer>+12345.678</answer>

 

<answer>-0.123</answer>

실수(decimal) 타입이 표현할 수 있는 최대 자릿수는 18자리입니다.

 

불리언(boolean)

불리언 타입은 참과 거짓을 표현할 수 있습니다.

 

XSD 예제

<xs:attribute name="disabled" type="xs:boolean"/>

 

 

 

위의 XSD 예제에서 정의한 요소는 XML 문서에서 다음과 같이 표현될 수 있습니다.

 

XML 예제

<rank disabled="true">10</rank>

 

anyURI

anyURI 타입은 통합 자원 식별자(URI)를 표현할 수 있습니다.

 

XSD 예제

<xs:attribute name="src" type="xs:anyURI"/>

 

 

 

위의 XSD 예제에서 정의한 요소는 XML 문서에서 다음과 같이 표현될 수 있습니다.

 

 

XSD 기본 타입

 

타입

설명

string

문자열을 표현함.

boolean

참 또는 거짓을 표현함.

decimal

소수를 표현함.

float

32비트 부동 소수점 수를 표현함.

double

64비트 부동 소수점 수를 표현함.

duration

시간 간격을 표현함.

dateTime

날짜와 시간을 표현함. (yyyy-mm-ddThh:mm:ss)

time

시간을 표현함. (hh:mm:ss)

date

날짜를 표현함. (yyyy-mm-dd)

gYearMonth

연도와 월을 표현함. (yyyy-mm)

gYear

연도를 표현함. (yyyy)

gMonthDay

월과 일을 표현함. (--mm-dd)

gDay

일을 표현함. (----dd)

gMonth

월을 표현함. (--mm--)

hexBinary

16진수를 표현함.

base64Binary

base64 방식으로 인코딩된 이진 데이터를 표현함.

anyURI

절대 또는 상대 URI를 표현함.

QName

[Namespace in XML] 문법을 만족하는 적법한 XML 이름을 표현함.

NOTATION

<enumeration>요소를 사용하여 간단한 타입을 만들 때 사용함.

 

파생된 타입(derived datatype)

파생된 타입이란 기본 타입으로부터 파생되어 생성된 타입을 의미합니다.

 

파생된 타입을 사용할 때에는 기본 타입과 마찬가지로 반드시 네임스페이스 접두사를 붙여야 합니다.

 

XSD 예제

<xs:element name="player" type="xs:normalizedString"/>

 

정규화된 문자열(normalizedString)

정규화된 문자열 타입은 기본 타입인 문자열(string) 타입으로부터 파생된 타입입니다.

 

 

 

이 타입은 기본 타입인 문자열 타입과 같이 문자를 포함할 수 있습니다.

 

하지만 XML 프로세서가 줄 바꿈 문자(line feed), 개행 복귀 문자(carriage return), 탭 문자(tab)를 제거할 것입니다.

 

 

 

XSD 예제

<xs:element name="student" type="xs:normalizedString"/>

 

 

 

위의 XSD 예제에서 정의한 요소는 XML 문서에서 다음과 같이 표현될 수 있습니다.

 

XML 예제

<student>홍 길 동 </student>

 

 

 

위의 예제에서 XML 프로세서는 탭 문자를 하나의 띄어쓰기로 대체할 것입니다.

 

화면

홍 길 동

 

토큰(token)

토큰 타입은 기본 타입인 문자열(string) 타입으로부터 파생된 타입입니다.

 

 

 

이 타입은 기본 타입인 문자열 타입과 같이 문자를 포함할 수 있습니다.

 

하지만 XML 프로세서가 줄 바꿈 문자(line feed), 개행 복귀 문자(carriage return), 탭 문자(tab), 문자열 앞뒤의 공백, 여러 개의 띄어쓰기를 모두 제거할 것입니다.

 

 

 

XSD 예제

<xs:element name="student" type="xs:token"/>

 

 

 

위의 XSD 예제에서 정의한 요소는 XML 문서에서 다음과 같이 표현될 수 있습니다.

 

XML 예제

<student>홍 길 동 </student>

 

 

 

위의 예제에서 XML 프로세서는 탭 문자와 문자열 앞뒤의 공백, 그리고 여러 개의 띄어쓰기를 모두 제거할 것입니다.

 

화면

홍길동

 

정수(integer)

정수 타입은 기본 타입인 소수(decimal) 타입으로부터 파생된 타입입니다.

 

정수 타입은 소수 부분이 없는 정수를 나타낼 때 사용합니다.

 

 

 

XSD 예제

<xs:element name="answer" type="xs:integer"/>

 

 

 

위의 XSD 예제에서 정의한 요소는 XML 문서에서 다음과 같이 표현될 수 있습니다.

 

XML 예제

<answer>12</answer>

 

<answer>+12345</answer>

 

<answer>-123</answer>

 

XSD 파생된 타입

 

타입

설명

normalizedString

줄 바꾸기 문자(line feed), 개행 복귀 문자(carriage return), 탭 문자(tab)를 포함하지 않는 문자열을 표현함.

token

줄 바꾸기 문자(line feed), 개행 복귀 문자(carriage return), 탭 문자(tab), 문자열 앞뒤의 공백, 여러 개의 띄어쓰기를 포함하지 않는 문자열을 표현함.

language

유효한 언어 아이디를 포함하는 문자열을 표현함.

NMTOKEN

NMTOKEN 속성 타입을  표현함.

NMTOKENS

NMTOKENS 속성 타입을  표현함.

Name

유효한 XML 이름을 포함하는 문자열을 표현함.

NCName

[Namespace in XML] 문법을 만족하는 NCName을 표현함.

ID

XML에서 id 속성을 나타내는 문자열을 표현함. (XSD 속성값에만 사용함)

IDREF

XML에서 IDREF 속성을 나타내는 문자열을 표현함. (XSD 속성값에만 사용함)

IDREFS

여러 개의 id 값을 참조함.

ENTITY

엔티티를 참조함.

ENTITIES

여러 개의 엔티티를 참조함.

integer

정수를 표현함.

positiveInteger

양의 정수를 표현함. (1, 2, ...)

NonNegativeInteger

0과 양의 정수를 표현함. (0, 1, 2, ...)

negativeInteger

음의 정수를 표현함. (-1, -2, ...)

NonPositiveInteger

0과 음의 정수를 표현함. (0, -1, -2, ...)

long

64비트 정수를 표현함.

int

32비트 정수를 표현함.

short

16비트 정수를 표현함.

byte

8비트 정수를 표현함.

unsignedLong

부호없는 64비트 정수를 표현함.

unsignedInt

부호없는 32비트 정수를 표현함.

unsignedShort

부호없는 16비트 정수를 표현함.

unsignedByte

부호없는 8비트 정수를 표현함.

 

 

'XML' 카테고리의 다른 글

XML XSD complex type  (0) 2020.07.03
XML XSD simple type  (0) 2020.07.03
XML DTD  (0) 2020.07.03
XML XPath  (0) 2020.07.03
XML DOM  (0) 2020.07.03

댓글