XSD 복합 요소

복합 요소는 다른 요소 및/또는 속성을 포함하고 있습니다。

복합 요소는 무엇인가요?

복합 요소는 다른 요소 및/또는 속성을 포함하는 XML 요소입니다。

복합 요소는 네 가지 유형이 있습니다:

  • 비어 있는 요소
  • 다른 요소를 포함하는 요소
  • 텍스트만 포함하는 요소
  • 요소와 텍스트를 포함하는 요소

주의사항:위 요소들은 모두 속성을 포함할 수 있습니다!

복합 요소의 예제

복합 요소, "product"는 비어 있습니다:

<product pid="1345"/>

복합 요소, "employee"는 다른 요소만 포함하고 있습니다:

<employee>
<firstname>John</firstname>
<lastname>Smith</lastname>
</employee>

복합 요소, "food"는 텍스트만 포함하고 있습니다:

<food type="dessert">Ice cream</food>

복합 요소, "description"는 요소와 텍스트를 포함하고 있습니다:

<description>
이 일은 <date lang="norwegian">03.03.99</date>에 일어났습니다 ....
</description>

복합 요소를 어떻게 정의하나요?

이 복합 XML 요소, "employee"를 보세요. 다른 요소만 포함하고 있습니다:

<employee>
<firstname>John</firstname>
<lastname>Smith</lastname>
</employee>

XML Schema에서는 복합 요소를 정의하는 두 가지 방법이 있습니다:

1. 이 요소를 이름 지정하면, "employee" 요소를 직접 선언할 수 있습니다. 이렇게 하면 됩니다:

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

위에 설명한 방법을 사용하면 "employee" 만이 지정된 복합 타입을 사용할 수 있습니다. 주의해야 할 것은 그 서브 요소, "firstname" 및 "lastname"이 <sequence> 지시자로 포함되어 있다는 것입니다. 이는 서브 요소가 선언된 순서로 나타나야 한다는 의미입니다. 그들에 대해 더 알아보고 싶다면: XSD 지시자 이 장에서는 지시자에 대한 더 많은 지식을 배울 수 있습니다.

2. "employee" 요소는 type 속성을 사용할 수 있습니다. 이 속성은 사용할 복합 타입의 이름을 참조합니다:

<xs:element name="employee" type="personinfo"/>
<xs:complexType name="personinfo">
  <xs:sequence>
    <xs:element name="firstname" type="xs:string"/>
    <xs:element name="lastname" type="xs:string"/>
  </xs:sequence>
</xs:complexType>

위에 설명한 방법을 사용하면 여러 요소들이 동일한 복합 타입을 사용할 수 있습니다. 예를 들어:

<xs:element name="employee" type="personinfo"/>
<xs:element name="student" type="personinfo"/>
<xs:element name="member" type="personinfo"/>
<xs:complexType name="personinfo">
  <xs:sequence>
    <xs:element name="firstname" type="xs:string"/>
    <xs:element name="lastname" type="xs:string"/>
  </xs:sequence>
</xs:complexType>

대신 이미 존재하는 복합 요소 위에서 어떤 복합 요소를 기반으로 추가적인 요소들을 추가할 수 있습니다. 예를 들어:

<xs:element name="employee" type="fullpersoninfo"/>
<xs:complexType name="personinfo">
  <xs:sequence>
    <xs:element name="firstname" type="xs:string"/>
    <xs:element name="lastname" type="xs:string"/>
  </xs:sequence>
</xs:complexType>
<xs:complexType name="fullpersoninfo">
  <xs:complexContent>
    <xs:extension base="personinfo">
      <xs:sequence>
        <xs:element name="address" type="xs:string"/>
        <xs:element name="city" type="xs:string"/>
        <xs:element name="country" type="xs:string"/>
      </xs:sequence>
    </xs:extension>
  </xs:complexContent>
</xs:complexType>