Thay thế phần tử XSD
Với các Lược đồ XML, một phần tử có thể thay thế một phần tử khác.
Thay thế phần tử
Giả sử rằng chúng tôi 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 phần tử tiếng Na Uy hay tên phần tử tiếng Anh trong tài liệu XML.
Để giải quyết vấn đề này, chúng ta có thể xác định một nhóm thay thế trong lược đồ XML. Đầu tiên, chúng tôi khai báo một phần tử head và sau đó chúng tôi khai báo các phần tử khác để nói rằng 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".
Nhìn vào đoạn này của một 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 giống như sau:
<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ử đã chỉ định, hãy sử dụng thuộc tính khối:
<xs:element name="name" type="xs:string" block="substitution"/>
Nhìn vào đoạn này của một 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 giống như sau:
<customer>
<name>John Smith</name>
</customer>
NHƯNG ĐIỀU NÀY KHÔNG CÒN HIỆU LỰC:
<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 có nguồn gốc từ, loại của phần tử đứng đầu. Nếu loại của phần tử có thể thay thế giống với loại của phần tử đứng đầu, bạn sẽ không phải chỉ đị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 nhóm substitutionGroup (phần tử đứng đầu và các 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ì?
Phần tử toàn cục là phần tử là con của phần tử "lược đồ"! Phần tử cục bộ là phần tử được lồng trong các phần tử khác.