XSD thay thế phần tử (Element Substitution)
- Trang trước XSD <anyAttribute>
- Trang tiếp theo Ví dụ XSD
Qua XML Schema, một phần tử có thể thay thế một phần tử khác.
Thay thế phần tử
Hãy để chúng ta举一个例子: người dùng của chúng ta đến từ Anh và Na Uy. Chúng ta hy vọng có khả năng để người dùng chọn trong tài liệu XML sử dụng tên phần tử tiếng Na Uy hay tiếng Anh.
Để giải quyết vấn đề này, chúng ta có thể định nghĩa một trong XML schema. substitutionGroupTrước tiên, chúng ta tuyên bố phần tử chính, sau đó chúng ta sẽ tuyên bố phần tử phụ, những phần tử phụ có thể tuyên bố chúng có thể thay thế phần tử chính.
<xs:element name="name" type="xs:string"/> <xs:element name="navn"}} substitutionGroup="name"/>
Trong ví dụ trên, phần tử "name" là phần tử chính, trong khi phần tử "navn" có thể thay thế phần tử "name".
Xin xem đoạn tài liệu của XML schema nào đó:
<xs:element name="name" type="xs:string"/> <xs:element name="navn" substitutionGroup="name"/> <xs:complexType name="custinfo"> <xs:sequence> <xs:element ref="name"/> </xs:sequence> </xs:complexType> <xs:element name="customer" type="custinfo"/> <xs:element name="kunde" substitutionGroup="customer"/>
Tài liệu XML hợp lệ nên giống như thế này (theo schema trên):
<customer> <name>John Smith</name> </customer>
hoặc tương tự như thế này:
<kunde> <navn>John Smith</navn> </kunde>
Ngăn chặn phần tử thay thế
Để ngăn chặn các phần tử khác thay thế phần tử cụ thể nào đó, hãy sử dụng thuộc tính block:
<xs:element name="name" type="xs:string" block="substitution"/>
Xin xem đoạn tài liệu của XML schema nào đó:
<xs:element name="name" type="xs:string" block="substitution"/> <xs:element name="navn" substitutionGroup="name"/> <xs:complexType name="custinfo"> <xs:sequence> <xs:element ref="name"/> </xs:sequence> </xs:complexType> <xs:element name="customer" type="custinfo" block="substitution"/> <xs:element name="kunde" substitutionGroup="customer"/>
Tài liệu XML hợp lệ nên giống như thế này (theo schema trên):
<customer> <name>John Smith</name> </customer>
Nhưng tài liệu sau không hợp lệ:
<kunde> <navn>John Smith</navn> </kunde>
Sử dụng substitutionGroup
Loại của phần tử có thể thay thế phải giống hệt phần tử chính hoặc từ phần tử chính phát triển而来. Nếu loại của phần tử có thể thay thế giống hệt loại của phần tử chính, bạn không cần quy định loại của phần tử có thể thay thế.
Lưu ý rằng tất cả các phần tử trong substitutionGroup (phần tử chính và phần tử có thể thay thế) phải được tuyên bố là phần tử toàn cục, nếu không sẽ không hoạt động được!
Tại sao là phần tử toàn cục (Global Elements)?
Các phần tử toàn cục là các phần tử trực tiếp con của phần tử "schema"! Các phần tử cục bộ (Local elements) là các phần tử được chôn trong các phần tử khác.
- Trang trước XSD <anyAttribute>
- Trang tiếp theo Ví dụ XSD