我需要编写一个 xml 模式(我正在使用relax NG 来生成一个 rng ...),它至少需要 2 个不同元素中的 1 个。因此,如果元素是“水果”和“蔬菜”,可接受的 xml 将包含水果、蔬菜或两者。
<fruit>apple</fruit>
<vegetable>broccoli</vegetable>
这是我到目前为止所拥有的,但这是水果或蔬菜,如果你既不通过水果也不通过蔬菜,它也可以...
& (element Fruit {
xsd:string { .. }
| (element Vegatable {
xsd:string { .. }
})?
更新 答案似乎是正确的,但我不知道如何整合它。当你说我不能使用交错时,你的意思是我可以做这样的事情吗?
<meal>
<drink>Water</drink>
<meat>Chicken</meat>
<fruit>Apple</fruit>
<vegetable>Broccoli</vegetable>
</meal>
哪里需要水果或蔬菜或两者兼而有之?
更新 2:这看起来正确吗?
fruit = element fruit { xsd:string }
vegetable = element vegetable { xsd:string }
start =
element Meal {
element Drink { xsd:string },
element Meat { xsd:string },
((fruit , vegetable?) | (fruit? , vegetable))
}