본문 바로가기
XML

XML XSD simple type

by FraisGout 2020. 7. 3.

단순 타입(simple type) 요소

XSD에서 요소는 오직 값만을 포함할 수 있는 단순 타입(simple type) 요소로 선언됩니다.

 

단순 타입의 요소는 자식 요소나 속성을 포함할 수 없습니다.

 

여기서 값만을 포함한다는 의미는 오직 숫자나 불리언, 문자열만을 포함할 수 있는 요소라는 뜻입니다.

 

단순 타입 요소의 선언

XSD에서 단순 타입 요소를 선언하는 문법은 다음과 같습니다.

 

문법

<xs:element name="요소이름" type="요소타입"/>

 

 

 

요소의 타입에는 XSD에서 제공하는 다양한 기본 타입과 파생된 타입을 사용할 수 있습니다.

 

 

 

다음 예제는 단순 타입 요소를 XSD에서 어떻게 선언하는지를 보여주는 예제입니다.

 

XML 예제

<player>홍길동</player>

 

<rank>24</rank>

 

<goal>13:15:00</goal>

 

XSD 예제

<xs:element name="player" type="xs:string"/> // 문자열 타입

 

<xs:element name="rank" type="xs:integer"/> // 숫자 타입

 

<xs:element name="goal" type="xs:time"/> // 시간 타입

 

단순 타입 요소의 기본값 선언

단순 타입 요소는 default 속성을 이용하여 기본값을 명시할 수 있습니다.

 

이렇게 명시된 기본값은 값이 명시되지 않는 경우에 자동으로 설정됩니다.

 

 

 

다음 예제에서 <grade>요소의 값이 직접 명시되지 않으면, 기본값인 'D'로 자동 설정됩니다.

 

XSD 예제

<xs:element name="grade" type="xs:string" default="D"/>

 

단순 타입 요소의 고정값 선언

단순 타입 요소는 fixed 속성을 이용하여 고정값을 명시할 수 있습니다.

 

이렇게 고정값을 명시하면 자동으로 그 값이 부여되며, 사용자가 임의로 값을 변경할 수 없게 됩니다.

 

 

 

다음 예제에서 <grade>요소의 값은 무조건 'A'로 설정됩니다.

 

XSD 예제

<xs:element name="grade" type="xs:string" fixed="A"/>

 

XSD 속성(attribute)

XSD에서 단순 타입(simple type) 요소는 속성을 가질 수 없습니다.

 

만약에 단순 타입의 요소가 속성을 가지게 되면, 그 요소는 복합 타입(complex type)이 됩니다.

 

 

 

하지만 속성(attribute) 그 자체는 언제나 단순 타입(simple type)으로 선언됩니다.

 

속성의 선언

XSD에서 속성을 선언하는 문법은 다음과 같습니다.

 

문법

<xs:attribute name="속성이름" type="속성타입"/>

 

 

 

속성의 타입에는 XSD에서 제공하는 다양한 기본 타입과 파생된 타입을 사용할 수 있습니다.

 

 

 

다음 예제는 속성을 XSD에서 어떻게 선언하는지를 보여주는 예제입니다.

 

XML 예제

<priority rating="3">middle</priority>

 

XSD 예제

<xs:attribute name="rating" type="xs:integer"/>

 

속성의 기본값 선언

요소와 마찬가지로 속성도 default 속성을 이용하여 기본값을 명시할 수 있습니다.

 

이렇게 명시된 기본값은 값이 명시되지 않는 경우에 자동으로 설정됩니다.

 

 

 

다음 예제에서 division 속성값이 직접 명시되지 않으면, 기본값인 "man"으로 자동 설정됩니다.

 

XSD 예제

<xs:attribute name="division" type="xs:string" default="man"/>

 

속성의 고정값 선언

요소와 마찬가지로 속성도 fixed 속성을 사용하여 고정값을 명시할 수 있습니다.

 

이렇게 고정값을 명시하면 자동으로 그 값이 부여되며, 사용자가 임의로 값을 변경할 수 없게 됩니다.

 

 

 

다음 예제에서 division 속성값은 무조건 "woman"으로 설정됩니다.

 

XSD 예제

<xs:attribute name="division" type="xs:string" fixed="woman"/>

 

필수 속성의 선언

속성은 기본적으로 필수가 아닙니다.

 

하지만 use 속성값을 required로 설정하면 해당 속성을 필수 속성으로 선언할 수 있습니다.

 

 

 

이렇게 선언된 필수 속성은 요소의 선언 시 반드시 같이 선언되어야 합니다.

 

만약 요소의 선언 시 필수 속성이 함께 선언되지 않으면, 해당 XML 문서는 유효하지 않은 문서로 간주합니다.

 

 

 

다음 예제에서 division 속성은 반드시 선언되어야만 합니다.

 

XSD 예제

<xs:attribute name="division" type="xs:string" use="required"/>

use 속성값을 prohibited로 설정하면, 해당 속성이 존재하지 않아야만 해당 XML 문서가 유효한 문서로 간주합니다.

 

XSD 제한(facets)

XSD에서 XML 요소나 속성을 선언할 때, 해당 요소나 속성이 가질 수 있는 값에 대한 범위를 제한할 수 있습니다.

 

이렇게 기존의 타입(simple type)을 제한함으로써 새로운 타입을 정의할 수 있습니다.

 

 

 

XSD에서는 값의 범위를 제한하기 위해 <restriction>요소를 사용합니다.

 

문법

<restriction base="타입">

 

타입에 대한 제한 사항

 

</resctriction>

 

 

 

base 속성은 제한 사항을 적용할 타입을 명시합니다.

 

특정 범위의 값을 가지도록 제한

단순 타입의 요소가 특정 범위 안의 값을 가지도록 제한할 때에는 다음 제한들을 사용합니다.

 

 

 

- maxExclusive : 특정 범위의 상한값을 명시합니다.

 

- maxInclusive : 특정 범위의 상한값을 명시합니다.

 

- minExclusive : 특정 범위의 하한값을 명시합니다.

 

- minInclusive : 특정 범위의 하한값을 명시합니다.

 

 

 

여기에서 exclusiveinclusive의 차이는 명시한 값까지 포함하는지 안 하는 지입니다.

 

inclusive는 명시한 값까지 포함하며, exclusive는 명시한 값은 포함하지 않습니다.

 

 

 

다음 예제는 새로운 단순 타입(simple type) 요소인 <allowance>요소를 선언하는 예제입니다.

 

예제

<xs:element name="allowance">

 

<xs:simpleType>

 

<xs:restriction base="xs:integer">

 

<xs:minInclusive value="0"/>

 

<xs:maxInclusive value="100000"/>

 

</xs:restriction>

 

</xs:simpleType>

 

</xs:element>

 

 

 

위의 예제에서 선언된 <allowance>요소에는 최소 0부터 최대 100,000까지의 값을 대입할 수 있습니다.

 

특정 값 중에서 선택하도록 제한

단순 타입 요소의 값을 특정 값 중에서 선택하도록 제한하고자 할 때는 다음 제한을 사용합니다.

 

 

 

- enumeration : 값으로 설정할 수 있는 허용된 값들의 리스트를 명시합니다.

 

 

 

사용자는 요소를 선언할 때 <enumeration>제한으로 나열된 값 중에서 하나만을 선택하여 대입해야 합니다.

 

 

 

다음 예제는 새로운 단순 타입 요소인 <unit>요소를 선언하는 예제입니다.

 

예제

<xs:element name="unit">

 

<xs:simpleType>

 

<xs:restriction base="xs:string">

 

<xs:enumeration value=""/>

 

<xs:enumeration value="달러"/>

 

<xs:enumeration value=""/>

 

</xs:restriction>

 

</xs:simpleType>

 

</xs:element>

 

 

 

위의 예제에서 선언된 <unit>요소는 원, 달러, 엔 중에서 하나의 값만을 대입할 수 있습니다.

 

텍스트 데이터의 패턴 지정

단순 타입 요소의 텍스트 데이터가 특정 패턴을 보이도록 제한할 때에는 다음 제한을 사용합니다.

 

 

 

- pattern : 텍스트 데이터의 형식을 정규 표현식을 사용하여 명시합니다.

 

 

 

사용자는 <pattern>제한에 정규 표현식을 사용하여 허용되는 고정된 패턴을 만들 수 있습니다.

 

 

 

<pattern>제한에 사용되는 대표적인 정규 표현식은 다음과 같습니다.

 

정규 표현식

설명

예제

a\d

첫 번째 문자가 'a'로 시작하며, 두 번째 문자가 0부터 9까지의 숫자인 텍스트

a0, a1, ..., a9

a\d*

첫 번째 문자가 'a'로 시작하며, 두 번째 문자부터는 0부터 9까지의 숫자가 0번 이상 나타나는 텍스트

a, a0, a1, ..., a9, a10, ...

a\d+

첫 번째 문자가 'a'로 시작하며, 두 번째 문자부터는 0부터 9까지의 숫자가 1번 이상 나타나는 텍스트

a0, a1, ..., a9, a10, ...

x?a

첫 번째 문자로 x0번 또는 1번만 나타나며, 두 번째 문자는 'a'인 텍스트

a, xa

a[^0]

첫 번째 문자가 'a'로 시작하며, 두 번째 문자가 0은 제외한 숫자인 텍스트

a1, a2, ..., a9

\d{2}-\d{5}

처음에 두 자리의 숫자로 시작하고, 그 다음에 '-'가 나타나며, 마지막으로 다섯 자리의 숫자로 끝나는 텍스트

11-22222, 12-12345, ...

\d{1,2}-\d{2,3}

처음에 한 자리나 두 자리의 숫자로 시작하고, 그 다음에 '-'가 나타나며, 마지막으로 두 자리나 세 자리의 숫자로 끝나는 텍스트

1-22, 1-123, 12-123, ...

\d{2,}

두 자리 이상의 숫자인 텍스트

12, 123, 1234, ...

(x|y)a

첫 번째 문자가 'x''y' 중 하나이며, 두 번째 문자는 'a'인 텍스트

xa, ya

(x|y)+a

'x''y'중 하나의 문자가 1번 이상 나타나며, 마지막은 'a'로 끝나는 텍스트

xa, ya, xxa, yya, xya, ...

(xy){3}a

'xy' 문자열이 3번 반복되고, 마지막은 'a'로 끝나는 텍스트

xyxyxya

[a-c]x

첫 번째 문자가 'a'부터 'c'까지의 문자이며, 마지막은 'x'로 끝나는 텍스트

ax, bx, cx

 

다음 예제는 새로운 단순 타입 요소인 <init>요소를 선언하는 예제입니다.

 

예제

<xs:element name="init">

 

<xs:simpleType>

 

<xs:restriction base="xs:string">

 

<xs:pattern value="[a-zA-Z][a-zA-Z]"/>

 

</xs:restriction>

 

</xs:simpleType>

 

</xs:element>

 

 

 

위의 예제에서 선언된 <init>요소에는 정확히 두 자리의 영문자로 이루어진 값만을 대입할 수 있습니다.

 

<init>요소에 대입할 수 있는 유효한 값을 예로 들어보면 'ab', 'az', 'Az', 'bF' 등이 있습니다.

 

 

 

다음 예제는 새로운 단순 타입 요소인 <camel>요소를 선언하는 예제입니다.

 

예제

<xs:element name="camel">

 

<xs:simpleType>

 

<xs:restriction base="xs:string">

 

<xs:pattern value="([A-Z][a-z])+"/>

 

</xs:restriction>

 

</xs:simpleType>

 

</xs:element>

 

 

 

위의 예제에서 선언된 <camel>요소에는 영문 대문자와 영문 소문자로 이루어진 한 쌍 이상의 텍스트만을 대입할 수 있습니다.

 

, <camel>요소에 대입할 수 있는 유효한 값에는 'Ad', 'BcDd', 'ZaGdEi' 등이 있습니다.

 

공백(whitespace)에 대한 제한

<whiteSpace>제한을 사용하면 공백을 어떤 식으로 다룰지를 명시할 수 있습니다.

 

이 제한의 value 속성값은 다음과 같은 값을 가질 수 있습니다.

 

 

 

- preserve : 어떠한 공백도 제거하지 않습니다.

 

- replace : 모든 종류의 공백(line feeds, carriage returns, tabs, spaces)을 띄어쓰기로 모두 대체합니다.

 

- collapse : 모든 종류의 공백은 띄어쓰기로 모두 대체되고, 문자열 앞뒤의 여백도 제거되며, 많은 수의 띄어쓰기는 하나의 띄어쓰기로 변환됩니다.

 

 

 

다음 예제는 새로운 단순 타입 요소인 <white>요소를 선언하는 예제입니다.

 

예제

<xs:element name="white">

 

<xs:simpleType>

 

<xs:restriction base="xs:string">

 

<xs:whiteSpace value="replace"/>

 

</xs:restriction>

 

</xs:simpleType>

 

</xs:element>

 

 

 

위의 예제에서 선언된 <white>요소에 포함된 모든 종류의 공백은 모두 띄어쓰기로 대체될 것입니다.

 

XSD 제한(facets)

 

제한

설명

length

허용되는 문자열의 길이나 리스트 요소의 수를 명시함. (반드시 0과 같거나 0보다는 커야 함)

maxLength

허용되는 문자열의 최대 길이나 리스트 요소의 최댓값을 명시함. (반드시 0과 같거나 0보다는 커야 함)

minLength

허용되는 문자열의 최소 길이나 리스트 요소의 최솟값을 명시함. (반드시 0과 같거나 0보다는 커야 함)

maxExclusive

허용치의 상한값을 명시함. (모든 값은 반드시 이 값보다 작아야 함)

maxInclusive

허용치의 상한값을 명시함. (모든 값은 반드시 이 값과 같거나 이 값보다 작아야 함)

minExclusive

허용치의 하한값을 명시함. (모든 값은 반드시 이 값보다 커야 함)

minInclusive

허용치의 하한값을 명시함. (모든 값은 반드시 이 값과 같거나 이 값보다 커야 함)

enumeration

허용되는 값의 리스트를 정의함.

pattern

텍스트 데이터의 형식을 정규 표현식을 이용하여 정의함.

whiteSpace

공백이 어떻게 다루어질지를 명시함. (line feeds, carriage returns, tabs, spaces)

fractionDigits

허용되는 소수부의 자릿수를 명시함. (반드시 0과 같거나 0보다는 커야 함)

totalDigits

허용되는 자릿수를 명시함. (반드시 0보다는 커야 함)

 

 

'XML' 카테고리의 다른 글

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

댓글