XSD 단순 타입
단순 타입(simple type)요소
XSD에서 요소는 오직 값만을 포함할 수 있는 단순 타입(simple type) 요소로 선언된다.
단순 타입의 요소는 자식 요소나 속성을 포함할 수 없다.
여기서 값만을 포함한다는 의미는 오직 숫자나 불리언, 문자열만을 포함할 수 있는 요소라는 뜻이다.
단순 타입 요소의 선언
문법
<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"/>
단순 타입 요소의 고정값 선언
이렇게 고정값을 명시하면 자동으로 그 값이 부여되며, 사용자가 임의로 값을 변경할 수 없게 된다.
다음 예제에서 <grade>요소의 값은 무조건 'A'로 설정된다.
XSD 예제
<xs:element name="grade" type="xs:string" fixed="A"/>
XSD 속성(attribute)
XSD에서 단순 타입(simple type) 요소는 속성을 가질 수 없다.
만약에 단순 타입의 요소가 속성을 가지게 되면, 그 요소는 복합 타입(complex type)이 된다.
하지만 속성(attribute) 그 자체는 언제나 단순 타입(simple type)으로 선언된다.
속성의 선언
문법
<xs:attribute name="속성이름" type="속성타입"/>
다음 예제는 속성을 XSD에서 어떻게 선언하는지를 보여주는 예제이다.
XML 예제
<priority rating="3">middle</priority>
XSD 예제
<xs:attribute name="rating" type="xs:integer"/>
속성의 기본값 선언
이렇게 명시된 기본값은 값이 명시되지 않는 경우에 자동으로 설정된다.
다음 예제에서 division 속성값이 직접 명시되지 않으면, 기본값인 "man"으로 자동 설정된다.
XSD 예제
<xs:attribute name="division" type="xs:string" default="man"/>
속성의 고정값 선언
이렇게 고정값을 명시하면 자동으로 그 값이 부여되며, 사용자가 임의로 값을 변경할 수 없게 된다.
다음 예제에서 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"/>
Tip : use 속성값을 prohibited로 설정하면, 해당 속성이 존재하지 않아야만 해당 XML 문서가 유효한 문서로 간주한다.
XSD 제한(facets)
XSD에서 XML 요소나 속성을 선언할 때, 해당 요소나 속성이 가질 수 있는 값에 대한 범위를 제한할 수 있다.
이렇게 기존의 타입(simple type)을 제한함으로써 새로운 타입을 정의할 수 있다.
XSD에서는 값의 범위를 제한하기 위해 <restriction>요소를 사용한다.
문법
<restriction base="타입">
타입에 대한 제한 사항
</restriction>
base 속성은 제한 사항을 적용할 타입을 명시한다.
특정 범위의 값을 가지도록 제한
예제
<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>제한으로 나열된 값 중에서 하나만을 선택하여 대입해야 한다.
다음 예제는 새로운 단순 타입 요소인 <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 | 첫 번째 문자로 x가 0번 또는 1번만 나타나며, 두 번째 문자는 'a'인 텍스트 | a, xa |
a[^0] | 첫 번째 문자가 'a'로 시작하며, 두 번째 문자가 0은 제외한 숫자인 텍스트 | a1, a2, ..., a9 |
\d{2}-\d{5} | 처음에 두 자리의 숫자로 시작하고, 그 다음에 '-'가 나타나며, 마지막으로 다섯자리의 숫자로 끝나는 텍스트 | 11-22222, 12-12345, ... |
\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 속성값은 다음과 같은 값을 가질 수 있따.
다음 예제는 새로운 단순 타입 요소인 <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 return, table, spaces) |
fractionDigits | 허용되는 소수부의 자릿수를 명시함. (반드시 0과 같거나 0보다는 커야 함) |
totalDigits | 허용되는 자릿수를 명시함. (반드시 0보다는 커야 함) |