[웹 서비스 개발] XML Schema - (4)

김광일·2024년 10월 10일

웹 서비스 개발

목록 보기
17/45
post-thumbnail

5. Indicator

: 문서에 표시기를 사용하여 요소를 사용하는 방법을 제어한다.

[0] 종류

  1. Order indicators
    a. All: 요소들이 순서 상관없이 나타날 수 있지만, 각 요소는 0 또는 1번만 나올 수 있다.
    b. Choice: 지정된 여러 요소 중 하나만 선택해 나타날 수 있다.
    c. Sequence: 요소들이 반드시 지정된 순서대로 나타나야 한다.

  2. Occurrence indicators
    a. maxOccurs: 특정 요소가 최대 몇 번 나타날 수 있는지를 지정한다.
    b. minOccurs: 특정 요소가 최소 몇 번 나타나야 하는지를 지정한다.

  3. Group indicators
    a. Group name: 여러 요소들을 하나의 그룹으로 묶어 재사용할 수 있도록 정의한다.
    b. attributeGroup name: 여러 속성들을 하나의 그룹으로 묶어 재사용할 수 있도록 정의한다.

[1-1] Order indicators - All

: 하위 요소가 어떤 순서로든 표시될 수 있고, 각 하위 요소는 한 번만 표시되어야 함을 지정한다.

1) 예시

<xs:complexType>
    <xs:all>
        <xs:element name="firstname" type="xs:string" />
        <xs:element name="lastname" type="xs:string" />
    </xs:all>
</xs:complexType>

설명: firstnamelastname 요소는 순서에 상관없이 한 번씩만 나타날 수 있다.

[1-2] Order indicators - Choice

: 하나의 하위 요소 또는 다른 하위 요소가 발생할 수 있음을 지정한다. (있는 것 중 하나만 사용)

1) 예시

<xs:complexType>
  <xs:choice>
    <xs:element name="lastname" type="xs:string" />
    <xs:element name="age" type="xs:integer" />
    <xs:element name="dateborn" type="xs:date" />
  </xs:choice>
</xs:complexType>

설명: lastname, age, dateborn 중 하나만 선택해서 사용할 수 있다.

[1-3] Order indicators - Sequence

: 하위 요소가 특정 순서로 표시되도록 지정한다.

1) 예시

<xs:complexType>
  <xs:sequence>
    <xs:element name="lastname" type="xs:string" />
    <xs:element name="age" type="xs:integer" />
    <xs:element name="dateborn" type="xs:date" />
  </xs:sequence>
</xs:complexType>

설명: lastname, age, dateborn 요소는 반드시 작성된 순서대로 나타나야 한다.

[2-1] Occurrence indicators - maxOccurs, minOccurs

  • maxOccurs: 최대 발생할 수 있는 경우
  • minOccurs: 최소 발생할 수 있는 경우
  • etc) unbounded : 무제한

1) 예시

<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="5" minOccurs="1" />
        </xs:sequence>
    </xs:complexType>
</xs:element>

설명: child_name 요소는 최소 1번, 최대 5번까지 나타날 수 있다.

2) 추가 예시

(1) xml
<?xml version="1.0" encoding="UTF-8"?>

<persons xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:noNamespaceSchemaLocation="familyAttr.xsd">

  <person firstname="Peter">
    <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>
(2) 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>

[3] Attribute Group

1) 예시

(1) xml

<?xml version="1.0" encoding="UTF-8"?>

<persons xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:noNamespaceSchemaLocation="familyAttr.xsd">

  <person firstname="Peter" lastname="brwon" birthday="2020-10-10">
    <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>
(2) xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">

<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="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:attributeGroup ref="personattrgroup"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
</xs:element>

</xs:schema>

profile
안녕하세요, 사용자들의 문제 해결을 중심으로 하는 프론트엔드 개발자입니다. 티스토리로 전환했어요 : https://pangil-log.tistory.com

0개의 댓글