XSD 제한 / Facets

제한(restriction)은 XML 요소나 속성에 허용 가능한 값을 정의하는 데 사용됩니다. XML 요소의 제한은 facet라고 합니다。

값 제한

다음 예제는 "age"라는 이름의 제한된 요소를 정의했습니다. "age"의 값은 0보다 낮지 않고 120보다 높지 않아야 합니다:

<xs:element name="age">
<xs:simpleType>
  <xs:restriction base="xs:integer">
    <xs:minInclusive value="0"/>
    <xs:maxInclusive value="120"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

값 집합 제한

XML 요소의 내용을 허용 가능한 값의 집합으로 제한하려면, 열거 제약조건(enumeration constraint)을 사용해야 합니다.

다음 예제는 "car"라는 이름의 제한된 요소를 정의했습니다. 허용되는 값은 Audi, Golf, BMW입니다:

<xs:element name="car">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:enumeration value="Audi"/>
    <xs:enumeration value="Golf"/>
    <xs:enumeration value="BMW"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

위의 예제는 다음과 같이 작성될 수도 있습니다:

<xs:element name="car"> type="carType"/>
<xs:simpleType name="carType">
  <xs:restriction base="xs:string">
    <xs:enumeration value="Audi"/>
    <xs:enumeration value="Golf"/>
    <xs:enumeration value="BMW"/>
  </xs:restriction>
</xs:simpleType>

주석:이 경우, "carType" 타입은 "car" 요소의 구성 요소가 아니기 때문에 다른 요소에서 사용될 수 있습니다.

값의 시리즈 제한

XML 요소의 내용을 사용 가능한 숫자나 문자의 시리즈로 제한하려면, 패턴 제약조건(pattern constraint)을 사용해야 합니다.

다음 예제는 "letter"라는 이름의 제한된 요소를 정의했습니다. 허용되는 값은 소문자 알파벳 a - z 중의 하나입니다:

<xs:element name="letter">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:pattern value="[a-z]"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

다음 예제도 "initials"라는 이름의 제한된 요소를 정의했습니다. 허용되는 값은 대문자 알파벳 A - Z 중의 세 개입니다:

<xs:element name="initials">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:pattern value="[A-Z][A-Z][A-Z]"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

다음 예제도 "initials"라는 이름의 제한된 요소를 정의했습니다. 허용되는 값은 대문자 또는 소문자 알파벳 a - z 중의 세 개입니다:

<xs:element name="initials">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:pattern value="[a-zA-Z][a-zA-Z][a-zA-Z]"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

다음 예제는 "choice"라는 이름의 요소를 정의합니다. 허용되는 값은 x, y 또는 z 중 하나입니다:

<xs:element name="choice">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:pattern value="[xyz]"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

다음 예제는 "prodid"라는 이름의 요소를 정의합니다. 허용되는 값은 0-9의 범위에 있는 다섯 개의 아라비아 숫자의 시퀀스입니다:

<xs:element name="prodid">
<xs:simpleType>
  <xs:restriction base="xs:integer">
    <xs:pattern value="[0-9][0-9][0-9][0-9][0-9]"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

일련의 값에 대한 다른 제한

아래의 예제는 "letter"라는 이름의 요소를 정의합니다. 허용되는 값은 a-z 중에서 0개 이상의 문자입니다:

<xs:element name="letter">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:pattern value="([a-z])*"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

아래의 예제는 "letter"라는 이름의 요소를 정의합니다. 허용되는 값은 한 쌍 또는 여러 쌍의 문자로 구성되며, 각 쌍은 소문자 후에 대문자가 오도록 구성되어야 합니다. 예를 들어, "sToP"은 이 패턴을 통과하지만, "Stop"、"STOP" 또는 "stop"은 통과하지 않습니다:

<xs:element name="letter">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:pattern value="([a-z][A-Z])+"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

아래의 예제는 "gender"라는 이름의 요소를 정의합니다. 허용되는 값은 male 또는 female입니다:

<xs:element name="gender">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:pattern value="male|female"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

아래의 예제는 "password"라는 이름의 요소를 정의합니다. 허용되는 값은 8개의 문자로 구성된 행 문자이며, 이 문자는 대문자 또는 소문자 a-z 또는 숫자 0-9여야 합니다:

<xs:element name="password">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:pattern value="[a-zA-Z0-9]{8}"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

공백 문자의 제한

공백 문자(whiteSpace characters)의 처리 방식을 지정하려면 whiteSpace 제한을 사용해야 합니다。

아래의 예제는 "address"라는 이름의 제한된 요소를 정의합니다. 이 whiteSpace 제한은 "preserve"로 설정되어 있으며, 이는 XML 처리기가 공백 문자를 제거하지 않도록 의미합니다:

<xs:element name="address">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:whiteSpace value="preserve"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

이 예제는 "address"라는 이름의 제한을 가진 요소를 정의합니다. 이 whiteSpace 제한은 "replace"으로 설정되어 있으며, 이는 XML 처리기가 모든 공백 문자(줄 바꿈, 엔터, 공백 및 탭)를 제거한다는 의미입니다:

<xs:element name="address">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:whiteSpace value="replace"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

이 예제는 "address"라는 이름의 제한을 가진 요소를 정의합니다. 이 whiteSpace 제한은 "collapse"으로 설정되어 있으며, 이는 XML 처리기가 모든 공백 문자(줄 바꿈, 엔터, 공백 및 탭을 공백으로 대체하고, 시작과 끝의 공백은 제거되며, 연속된 여러 공백은 하나의 단일 공백으로 축소됩니다)를 제거한다는 의미입니다:

<xs:element name="address">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:whiteSpace value="collapse"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

길이 제한

요소의 값의 길이를 제한하려면 length, maxLength, minLength 제한을 사용해야 합니다.

이 예제는 제한이 있고 이름이 "password"인 요소를 정의합니다. 값은 정확히 8자입니다:

<xs:element name="password">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:length value="8"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

이 예제는 "password"라는 이름의 제한을 가진 요소를 정의합니다. 값은 최소 5자, 최대 8자입니다:

<xs:element name="password">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:minLength value="5"/>
    <xs:maxLength value="8"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

데이터 유형의 제한

제한 설명
enumeration 허용되는 값의 목록을 정의합니다.
fractionDigits 허용되는 최대 소수점 자릿수를 정의합니다. 0보다 크거나 같아야 합니다.
length 허용되는 문자나 목록 항목의 정확한 수를 정의합니다. 0보다 크거나 같아야 합니다.
maxExclusive 数值의 상한을 정의합니다. 허용되는 값은 이 값보다 작아야 합니다.
maxInclusive 수치의 상한을 정의합니다. 허용되는 값은 이 값보다 작거나 같아야 합니다.
maxLength 허용되는 문자나 목록 항목의 최대 수를 정의합니다. 0보다 크거나 같아야 합니다.
minExclusive 수치의 하한을 정의합니다. 허용되는 값은 이 값보다 크거나 같아야 합니다.
minInclusive 수치의 하한을 정의합니다. 허용되는 값은 이 값보다 커야 합니다.
minLength 허용되는 문자나 목록 항목의 최소 수를 정의합니다. 0보다 크거나 같아야 합니다.
pattern 허용되는 문자의 정확한 시퀀스를 정의합니다.
totalDigits 허용되는 아라비아 숫자의 정확한 자릿수를 정의합니다. 0보다 커야 합니다.
whiteSpace 비어 있는 문자(줄 바꿈, 엔터, 공백 및 탭)의 처리 방식을 정의합니다.