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 사이의 다섯 개의 아라비아 숫자의 시퀀스로, 각 숫자는 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 처리기가 모든 공백 문자(줄 바꿈, Enter, 공백 및 탭은 공백으로 대체되고, 시작과 끝의 공백은 제거되며, 연속된 여러 공백은 하나의 공백으로 축소됩니다)를 제거할 것입니다:

<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 비어 있는 문자(줄 바꿈, 엔터, 공백 및 탭) 처리 방식을 정의합니다.