순서 지시자
XSD 지시자(indicator)
XSD 지시자를 사용하면 XML 문서에서 요소들이 구성되는 방식을 설정할 수 있습니다.
XSD에서 사용할 수 있는 지시자는 다음과 같습니다.
1. 순서 지시자 : sequence, all, choice
2. 출현 빈도 지시자 : maxOccurs, minOccurs
3. 그룹 지시자 : group, attributeGroup
순서 지시자
순서 지시자는 요소들이 나타나는 순서를 정의할 때 사용합니다.
XSD에서 사용할 수 있는 순서 지시자는 다음과 같습니다.
1. sequence
2. all
3. choice
sequence 지시자
sequence 지시자는 자식 요소가 명시된 순서대로만 나타날 수 있다는 것을 명시합니다.
다음 XSD 예제의 <physical>요소는 자식 요소를 <height>요소와 <waist>요소 순으로 가져야만 합니다.
xsd01.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="physical">
<xs:complexType>
<xs:sequence>
<xs:element name="height" type="xs:integer"/>
<xs:element name="waist" type="xs:integer"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
다음 예제는 위에서 작성한 xsd01.xsd에 적합한 XML 문서입니다.
xsd01_good.xml
<?xml version="1.0" encoding="UTF-8"?>
<physical>
<height>180</height>
<waist>72</waist>
</physical>
다음 예제는 위에서 작성한 xsd01.xsd에 적합하지 않은 XML 문서입니다.
xsd01_bad.xml
<?xml version="1.0" encoding="UTF-8"?>
<physical>
<height>180</height>
<footsize>275</footsize>
</physical>
위 예제의 결과 화면을 살펴보면 다음과 같은 메시지를 확인할 수 있습니다.
결과 화면
'footsize' 요소로 시작하는 부적합한 콘텐츠가 발견되었습니다. '{waist}' 중 하나가 필요합니다.
즉, xsd01.xsd에서 정의한 대로 두 번째 자식 요소로 <waist>요소를 가지지 않고, 대신 <footsize>요소를 가지므로 부적합합니다.
all 지시자
all 지시자는 자식 요소가 어떤 순서로 나오든지 단 한 번씩만 나올 수 있다는 것을 명시합니다.
따라서 all 지시자를 사용할 때는 출현 빈도 지시자인 minOccurs 지시자는 0 또는 1, maxOccurs 지시자는 1로만 명시할 수 있습니다.
다음 XSD 예제의 <physical>요소는 <height>요소와 <waist>요소를 순서에 상관없이 하나씩만 자식 요소로 가질 수 있습니다.
xsd02.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="physical">
<xs:complexType>
<xs:all>
<xs:element name="height" type="xs:integer"/>
<xs:element name="waist" type="xs:integer"/>
</xs:all>
</xs:complexType>
</xs:element>
</xs:schema>
다음 예제는 위에서 작성한 xsd02.xsd에 적합한 XML 문서입니다.
xsd02_good.xml
<?xml version="1.0" encoding="UTF-8"?>
<physical>
<waist>72</waist>
<height>180</height>
</physical>
위의 예제처럼 all 지시자는 명시된 자식 요소가 등장하는 순서에 상관없이 단 한 번씩만 가질 수 있습니다.
다음 예제는 위에서 작성한 xsd02.xsd에 적합하지 않은 XML 문서입니다.
xsd02_bad.xml
<?xml version="1.0" encoding="UTF-8"?>
<physical>
<height>180</height>
<height>185</height>
</physical>
위의 예제는 xsd02.xsd에서 정의한 대로 자식 요소로 <height>요소와 <waist>요소를 하나씩 가지지 않고, <height>요소만을 두 번 가지므로 부적합합니다.
choice 지시자
choice 지시자는 복합 타입 요소가 포함할 수 있는 자식 요소의 선택 집합을 명시합니다.
복합 타입 요소는 이렇게 선언된 선택 집합 내에서 단 하나의 자식 요소만을 가질 수 있습니다.
단, 선택 집합은 다른 선택 집합이나 다른 시퀀스 안에 포함될 수 있습니다.
다음 예제의 <physical>요소는 <height>요소와 <waist>요소 둘 중 하나만을 자식 요소로 가질 수 있습니다.
xsd03.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="physical">
<xs:complexType>
<xs:choice>
<xs:element name="height" type="xs:integer"/>
<xs:element name="waist" type="xs:integer"/>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
다음 예제는 위에서 작성한 xsd03.xsd에 적합한 XML 문서입니다.
xsd03_good.xml
<?xml version="1.0" encoding="UTF-8"?>
<physical>
<height>180</height>
</physical>
위의 예제처럼 choice 지시자는 명시된 자식 요소 중에서 단 하나만을 자식 요소로 가져야 합니다.
다음 예제는 위에서 작성한 xsd03.xsd에 적합하지 않은 XML 문서입니다.
xsd03_bad.xml
<?xml version="1.0" encoding="UTF-8"?>
<physical>
<height>180</height>
<waist>72</waist>
</physical>
위의 예제는 xsd03.xsd에서 정의한 대로 자식 요소로 <height>요소와 <waist>요소 중 단 하나만을 가지지 않고, <height>요소와 <waist>요소를 모두 가지므로 부적합합니다.