XSD 복합 요소
복합 요소는 다른 요소 및/또는 속성을 포함합니다.
복합 요소 란 무엇입니까?
복합 요소는 다른 요소 및/또는 특성을 포함하는 XML 요소입니다.
복잡한 요소에는 네 가지 종류가 있습니다.
- 빈 요소
- 다른 요소만 포함하는 요소
- 텍스트만 포함하는 요소
- 다른 요소와 텍스트를 모두 포함하는 요소
참고: 이러한 각 요소에는 속성도 포함될 수 있습니다!
복잡한 요소의 예
비어 있는 복잡한 XML 요소 "product":
<product pid="1345"/>
다른 요소만 포함하는 복잡한 XML 요소 "employee":
<employee>
<firstname>John</firstname>
<lastname>Smith</lastname>
</employee>
텍스트만 포함하는 복잡한 XML 요소 "음식":
<food type="dessert">Ice cream</food>
요소와 텍스트를 모두 포함하는 복잡한 XML 요소 "description":
<description>
It happened on <date lang="norwegian">03.03.99</date> ....
</description>
복합 요소를 정의하는 방법
다른 요소만 포함하는 이 복잡한 XML 요소 "employee"를 살펴보세요.
<employee>
<firstname>John</firstname>
<lastname>Smith</lastname>
</employee>
XML 스키마에서 복잡한 요소를 두 가지 다른 방법으로 정의할 수 있습니다.
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" 요소는 사용할 복합 유형의 이름을 참조하는 유형 속성을 가질 수 있습니다.
<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>