XSD 제한
XSD 제한(facets)
XSD에서 XML 요소나 속성을 선언할 때, 해당 요소나 속성이 가질 수 있는 값에 대한 범위를 제한할 수 있습니다.
이렇게 기존의 타입(simple type)을 제한함으로써 새로운 타입을 정의할 수 있습니다.
XSD에서는 값의 범위를 제한하기 위해 <restriction>요소를 사용합니다.
문법
<restriction base="타입">
타입에 대한 제한 사항
</resctriction>
base 속성은 제한 사항을 적용할 타입을 명시합니다.
특정 범위의 값을 가지도록 제한
단순 타입의 요소가 특정 범위 안의 값을 가지도록 제한할 때에는 다음 제한들을 사용합니다.
- maxExclusive : 특정 범위의 상한값을 명시합니다.
- maxInclusive : 특정 범위의 상한값을 명시합니다.
- minExclusive : 특정 범위의 하한값을 명시합니다.
- minInclusive : 특정 범위의 하한값을 명시합니다.
여기에서 exclusive와 inclusive의 차이는 명시한 값까지 포함하는지 안 하는 지입니다.
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 | 첫 번째 문자로 x가 0번 또는 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보다는 커야 함) |