Thay thế phần tử XSD
Với Lược đồ XML, một phần tử có thể thay thế phần tử khác.
Thay thế phần tử
Giả sử chúng ta có người dùng từ hai quốc gia khác nhau: Anh và Na Uy. Chúng tôi muốn có khả năng cho phép người dùng chọn xem họ muốn sử dụng tên thành phần tiếng Na Uy hay tên thành phần tiếng Anh trong tài liệu XML.
Để giải quyết vấn đề này, chúng ta có thể định nghĩa một Nhóm thay thế trong lược đồ XML. Đầu tiên, chúng ta khai báo phần tử head và sau đó chúng ta khai báo các phần tử khác cho biết chúng có thể thay thế cho phần tử head.
<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ử head và phần tử "navn" có thể thay thế cho "name".
Hãy xem đoạn này của lược đồ XML:
<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"/>
Một tài liệu XML hợp lệ (theo lược đồ ở trên) có thể trông như thế này:
<customer>
<name>John Smith</name>
</customer>
hoặc như thế này:
<kunde>
<navn>John Smith</navn>
</kunde>
Thay thế phần tử chặn
Để ngăn các phần tử khác thay thế bằng một phần tử được chỉ định, hãy sử dụng thuộc tính block:
<xs:element name="name" type="xs:string" block="substitution"/>
Hãy xem đoạn này của lược đồ XML:
<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"/>
Một tài liệu XML hợp lệ (theo lược đồ ở trên) trông như thế này:
<customer>
<name>John Smith</name>
</customer>
NHƯNG ĐIỀU NÀY KHÔNG CÒN CÓ GIÁ TRỊ:
<kunde>
<navn>John Smith</navn>
</kunde>
Sử dụng nhóm thay thế
Loại của các phần tử có thể thay thế phải giống hoặc bắt nguồn từ loại của phần tử đầu. Nếu loại phần tử có thể thay thế giống với loại phần tử đầu, bạn sẽ không phải chỉ định loại phần tử có thể thay thế.
Lưu ý rằng tất cả các phần tử trong nhóm thay thế (phần tử đầu và phần tử có thể thay thế) phải được khai báo là phần tử toàn cục, nếu không nó sẽ không hoạt động!
Các yếu tố toàn cầu là gì?
Các phần tử toàn cục là các phần tử con trực tiếp của phần tử "lược đồ"! Các phần tử cục bộ là các phần tử được lồng trong các phần tử khác.