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>