0

我需要编写一个 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))
  }
4

1 回答 1

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可能是 this start = element foo { (fruit | vegetable)+ }

于 2014-03-08T02:22:25.047 回答