..

Search

39) 순서 지시자

순서 지시자


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>요소를 모두 가지므로 부적합합니다.


연습문제