XSD 지표
지표가 있는 문서에서 요소를 사용하는 방법을 제어할 수 있습니다.
지표
7가지 지표가 있습니다.
주문 표시기:
- 모두
- 선택
- 순서
발생 지표:
- 최대 발생
- 최소 발생
그룹 표시기:
- 그룹 이름
- 속성 그룹 이름
주문 지표
순서 표시기는 요소의 순서를 정의하는 데 사용됩니다.
모든 표시기
<all> 표시기는 하위 요소가 임의의 순서로 나타날 수 있고 각 하위 요소가 한 번만 발생해야 함을 지정합니다.
<xs:element name="person">
<xs:complexType>
<xs:all>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:all>
</xs:complexType>
</xs:element>
참고: <all> 표시기를 사용할 때 <minOccurs> 표시기를 0 또는 1로 설정할 수 있고 <maxOccurs> 표시기를 1로만 설정할 수 있습니다(<minOccurs> 및 <maxOccurs>는 나중에 설명됨).
선택 표시기
<choice> 표시기는 하나 또는 다른 하위 요소가 발생할 수 있음을 지정합니다.
<xs:element name="person">
<xs:complexType>
<xs:choice>
<xs:element name="employee" type="employee"/>
<xs:element name="member" type="member"/>
</xs:choice>
</xs:complexType>
</xs:element>
시퀀스 표시기
<sequence> 표시자는 자식 요소가 특정 순서로 나타나야 함을 지정합니다.
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
발생 지표
발생 표시기는 요소가 발생할 수 있는 빈도를 정의하는 데 사용됩니다.
참고: 모든 "주문" 및 "그룹" 표시기(임의, 모두, 선택, 시퀀스, 그룹 이름 및 그룹 참조)에 대해 maxOccurs 및 minOccurs의 기본값은 1입니다.
maxOccurs 표시기
<maxOccurs> 표시기는 요소가 발생할 수 있는 최대 횟수를 지정합니다.
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="full_name" type="xs:string"/>
<xs:element name="child_name" type="xs:string" maxOccurs="10"/>
</xs:sequence>
</xs:complexType>
</xs:element>
위의 예는 "child_name" 요소가 "person" 요소에서 최소 한 번(minOccurs의 기본값은 1) 및 최대 10번 발생할 수 있음을 나타냅니다.
minOccurs 표시기
<minOccurs> 표시기는 요소가 발생할 수 있는 최소 횟수를 지정합니다.
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="full_name" type="xs:string"/>
<xs:element name="child_name" type="xs:string"
maxOccurs="10" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
위의 예는 "child_name" 요소가 "person" 요소에서 최소 0번, 최대 10번 나타날 수 있음을 나타냅니다.
팁: 요소가 무제한으로 표시되도록 하려면 maxOccurs="unbounded" 문을 사용하세요.
작동 예:
"Myfamily.xml"이라는 XML 파일:
<?xml version="1.0" encoding="UTF-8"?>
<persons xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="family.xsd">
<person>
<full_name>Hege Refsnes</full_name>
<child_name>Cecilie</child_name>
</person>
<person>
<full_name>Tove Refsnes</full_name>
<child_name>Hege</child_name>
<child_name>Stale</child_name>
<child_name>Jim</child_name>
<child_name>Borge</child_name>
</person>
<person>
<full_name>Stale Refsnes</full_name>
</person>
</persons>
위의 XML 파일에는 "persons"라는 루트 요소가 포함되어 있습니다. 이 루트 요소 안에 우리는 세 개의 "사람" 요소를 정의했습니다. 각 "person" 요소는 "full_name" 요소를 포함해야 하며 최대 5개의 "child_name" 요소를 포함할 수 있습니다.
다음은 스키마 파일 "family.xsd"입니다.
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xs:element name="persons">
<xs:complexType>
<xs:sequence>
<xs:element name="person" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="full_name" type="xs:string"/>
<xs:element name="child_name" type="xs:string"
minOccurs="0" maxOccurs="5"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
그룹 지표
그룹 표시기는 관련 요소 집합을 정의하는 데 사용됩니다.
요소 그룹
요소 그룹은 다음과 같이 그룹 선언으로 정의됩니다.
<xs:group name="groupname">
...
</xs:group>
그룹 선언 내에서 all, choice 또는 sequence 요소를 정의해야 합니다. 다음 예는 정확한 순서로 발생해야 하는 요소 그룹을 정의하는 "persongroup"이라는 그룹을 정의합니다.
<xs:group name="persongroup">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:element name="birthday" type="xs:date"/>
</xs:sequence>
</xs:group>
그룹을 정의한 후에는 다음과 같이 다른 정의에서 참조할 수 있습니다.
<xs:group name="persongroup">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:element name="birthday" type="xs:date"/>
</xs:sequence>
</xs:group>
<xs:element name="person" type="personinfo"/>
<xs:complexType name="personinfo">
<xs:sequence>
<xs:group ref="persongroup"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:complexType>
속성 그룹
속성 그룹은 다음과 같이 attributeGroup 선언으로 정의됩니다.
<xs:attributeGroup name="groupname">
...
</xs:attributeGroup>
다음 예는 "personattrgroup"이라는 속성 그룹을 정의합니다.
<xs:attributeGroup name="personattrgroup">
<xs:attribute name="firstname" type="xs:string"/>
<xs:attribute name="lastname" type="xs:string"/>
<xs:attribute name="birthday" type="xs:date"/>
</xs:attributeGroup>
속성 그룹을 정의한 후에는 다음과 같이 다른 정의에서 참조할 수 있습니다.
<xs:attributeGroup name="personattrgroup">
<xs:attribute name="firstname" type="xs:string"/>
<xs:attribute name="lastname" type="xs:string"/>
<xs:attribute name="birthday" type="xs:date"/>
</xs:attributeGroup>
<xs:element name="person">
<xs:complexType>
<xs:attributeGroup ref="personattrgroup"/>
</xs:complexType>
</xs:element>