Các phần tử phức hợp XSD
Một phần tử phức tạp chứa các phần tử và/hoặc thuộc tính khác.
Phần tử phức hợp là gì?
Phần tử phức hợp là phần tử XML chứa các phần tử và/hoặc thuộc tính khác.
Có bốn loại phần tử phức tạp:
- phần tử trống
- phần tử chỉ chứa các phần tử khác
- các phần tử chỉ chứa văn bản
- các phần tử chứa cả phần tử khác và văn bản
Lưu ý: Mỗi phần tử này cũng có thể chứa các thuộc tính!
Ví dụ về các phần tử phức tạp
Một phần tử XML phức tạp, "sản phẩm", trống:
<product pid="1345"/>
Một phần tử XML phức tạp, "nhân viên", chỉ chứa các phần tử khác:
<employee>
<firstname>John</firstname>
<lastname>Smith</lastname>
</employee>
Một phần tử XML phức tạp, "thực phẩm", chỉ chứa văn bản:
<food type="dessert">Ice cream</food>
Một phần tử XML phức tạp, "mô tả", chứa cả phần tử và văn bản:
<description>
It happened on <date lang="norwegian">03.03.99</date> ....
</description>
Cách xác định một phần tử phức tạp
Hãy xem phần tử XML phức tạp này, "nhân viên", chỉ chứa các phần tử khác:
<employee>
<firstname>John</firstname>
<lastname>Smith</lastname>
</employee>
Chúng ta có thể định nghĩa một phần tử phức tạp trong Lược đồ XML theo hai cách khác nhau:
1. Phần tử "nhân viên" có thể được khai báo trực tiếp bằng cách đặt tên cho phần tử đó, như sau:
<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>
Nếu bạn sử dụng phương pháp được mô tả ở trên, chỉ phần tử "nhân viên" mới có thể sử dụng loại phức tạp được chỉ định. Lưu ý rằng các phần tử con, "firstname" và "lastname", được bao quanh bởi chỉ báo <sequence>. Điều này có nghĩa là các phần tử con phải xuất hiện theo đúng thứ tự như chúng được khai báo. Bạn sẽ tìm hiểu thêm về các chỉ báo trong chương Chỉ báo XSD.
2. Phần tử "nhân viên" có thể có thuộc tính loại tham chiếu đến tên của loại phức hợp sẽ sử dụng:
<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>
Nếu bạn sử dụng phương pháp được mô tả ở trên, một số phần tử có thể tham chiếu đến cùng một kiểu phức tạp, như sau:
<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>
Bạn cũng có thể tạo kiểu phức dựa trên kiểu phức hiện có và thêm một số phần tử, như sau:
<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>