Với bố cục XML như thế này, tôi đang cố gắng tạo lược đồ XSD để xác nhận hợp lệ nó.Cách tạo lược đồ cho danh sách các nút XML không theo thứ tự, với các ràng buộc xuất hiện
<RootNode>
<ChildA />
<ChildC />
<ChildB />
<ChildB />
<ChildA />
</RootNode>
Những yêu cầu như sau:
- ChildA, ChildB và ChildC có thể xảy ra trong bất kỳ thứ tự. (
<xs:sequence>
không phù hợp) - ChildA là bắt buộc nhưng có thể xảy ra nhiều lần.
- ChildB là tùy chọn và có thể xảy ra nhiều lần.
- ChildC là tùy chọn và có thể xảy ra chỉ một lần.
Kỹ thuật tôi thường sử dụng để tạo ra một danh sách có thứ tự các nút là sử dụng một <xs:choice maxOccurs="unbounded">
với mỗi nút có thể có trong danh sách, tuy nhiên, tôi không thể để tạo ra các hạn chế về ChildA và maxOccurs="1"
contraint trên ChildC. (Số lần xuất hiện của sự lựa chọn được ưu tiên hơn so với các lần xuất hiện của các phần tử ở đây).
<xs:element name="RootNode">
<xs:complexType>
<xs:choice minOccurs="1" maxOccurs="unbounded">
<xs:element name="ChildA" minOccurs="1"/>
<xs:element name="ChildB" />
<xs:element name="ChildC" maxOccurs="1"/>
</xs:choice>
</xs:complexType>
</xs:element>
Tôi không nghĩ rằng các lược đồ XML hiện nay là khả năng làm điều này ngay bây giờ. Bạn đã kiểm tra vào các hệ thống xác thực khác, như RelaxNG (www.relaxng.org) có thể ?? –
Câu hỏi liên quan với, tại thời điểm viết bài này, câu trả lời hay hơn: https://stackoverflow.com/questions/2290360/xsd-how-to-allow-elements-in-any-order-any-number-of-times/12012599 – Flow