Thay thế yếu tố của XSD (Element Substitution)
- Trang trước XSD <anyAttribute>
- Trang tiếp theo Ví dụ về XSD
Thông 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 muốn có khả năng để người dùng chọn trong tài liệu XML sử dụng tên yếu tố bằng 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 substitutionGroupTrước hết, chúng ta tuyên bố yếu tố chính, sau đó chúng ta sẽ tuyên bố yếu tố phụ, những yếu tố phụ có thể tuyên bố chúng có thể thay thế yếu tố chính.
<xs:element name="name" type="xs:string"/> <xs:element name="navn" substitutionGroup="name"/>
Trong ví dụ trên, "name" là yếu tố chính, trong khi "navn" có thể thay thế yếu 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 tương tự như sau (theo schema trên):
<customer> <name>John Smith</name> </customer>
hoặc tương tự như sau:
<kunde> <navn>John Smith</navn> </kunde>
Ngăn chặn yếu tố thay thế
Để ngăn chặn các yếu tố khác thay thế một yếu tố cụ thể, 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 tương tự như sau (theo schema trên):
<customer> <name>John Smith</name> </customer>
Nhưng tài liệu dưới đây không còn hợp lệ:
<kunde> <navn>John Smith</navn> </kunde>
Sử dụng substitutionGroup
Loại của yếu tố có thể thay thế phải giống hệt với loại của yếu tố chính, hoặc phải phát sinh từ yếu tố chính. Nếu loại của yếu tố có thể thay thế giống hệt với loại của yếu tố chính, bạn không cần quy định loại của yếu tố có thể thay thế.
Lưu ý rằng tất cả các yếu tố trong substitutionGroup (yếu tố chính và yếu tố có thể thay thế) phải được khai báo là yếu tố toàn cục, không thì không thể hoạt động!
Tại sao các yếu tố toàn cục (Global Elements) lại quan trọng?
Các yếu tố toàn cục là các yếu tố trực tiếp là con của yếu tố "schema"! Các yếu tố cục bộ (Local elements) là các yếu tố chìm trong các yếu tố khác.
- Trang trước XSD <anyAttribute>
- Trang tiếp theo Ví dụ về XSD