..

Search

37) XSD 제한

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보다는 커야 함)

연습문제