Tôi đang cố gắng để tạo ra một sơ đồ cho một yếu tố <property>
mà phải có một tiểu yếu tố <key>
, và là một trong <val>
, <shell>
hoặc <perl>
và một tùy chọn <os>
hoặc <condition>
, và thứ tự của các phần tử con không quan trọng .Lược đồ XML: Tại sao không thể <xs:all> có <choice> trẻ em? và làm thế nào điều này có thể được bỏ qua?
Dưới đây là một số mẫu cho <property>
yếu tố hợp lệ:
<property>
<key>A</key>
<val>b</val>
</property>
<property>
<key>A</key>
<val>b</val>
<os>Windows</os>
</property>
<property>
<condition>a == 1</condition>
<key>A</key>
<perl>1+1</perl>
<os>unix</os>
</property>
Lý tưởng nhất, tôi nghĩ đến việc sử dụng <xs:all>
cho việc này:
<xs:element name="property">
<xs:complexType>
<xs:all>
<xs:element name="key" type="xs:string" />
<xs:choice>
<xs:element name="val" type="xs:string" />
<xs:element name="perl" type="xs:string" />
<xs:element name="shell" type="xs:string" />
</xs:choice>
<xs:element name="os" type="xs:string" minOccurs="0" />
<xs:element name="condition" type="xs:string" minOccurs="0" />
</xs:all>
</xs:complexType>
</xs:element>
Nhưng tôi phát hiện ra rằng <xs:all>
có thể chứa chỉ <xs:element>
và không <xs:choice>
. Ai đó có thể giải thích tại sao nó?
Quan trọng hơn, ai đó có thể cung cấp cách xác thực yếu tố <property>
như vậy?
tôi có thể đưa ba yếu tố - <val>
, <perl>
và <shell>
- như các yếu tố bắt buộc trong <xs:all>
, nhưng tôi muốn các lược đồ để xác nhận rằng một và chỉ một trong ba tồn tại trong phần tử. Điều này có thể được thực hiện?
@splintor: Bạn đã thực sự xem cửa sổ xem trước khi viết câu hỏi chưa? Ý tôi là, một nửa của nó là vô hình ... – Tomalak
Bạn có nghĩa là cả hai os và điều kiện có thể xảy ra trong cùng một yếu tố tài sản hoặc một hoặc khác hoặc không có thể xảy ra? –
@Tomalak: Không - tôi đã bỏ lỡ cửa sổ xem trước đó. Cảm ơn rất nhiều vì đã chỉnh sửa nó để có nghĩa là những gì tôi muốn. – splintor