我需要编写一个xml架构(我正在使用relax NG来生成一个rng ...),它需要2个不同元素中的至少1个。因此,如果元素是'水果'和'蔬菜',可接受的xml将包含水果,蔬菜或两者。
<fruit>apple</fruit>
<vegetable>broccoli</vegetable>
这是我到目前为止所做的,但这是水果或蔬菜,如果你既不通过水果NOR蔬菜,它也有效...
& (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))
}
答案 0 :(得分:2)
以下Relax NG架构至少需要一个fruit
或一个vegetable
并允许两者:
start = element foo { (fruit, vegetable?) | (vegetable, fruit?) }
fruit = element fruit { xsd:string }
vegetable = element vegetable { xsd:string }
我不相信你可以使用交错模式来准确地满足你的规范。
我假设您最多只需要一个fruit
和一个vegetable
,否则start
可能是start = element foo { (fruit | vegetable)+ }
。