是否有可能在W3C的XML模式语言(文件),以允许一系列的要素在任何命令,但仍然限制事件吗?
题
我知道关于 all
和 choice
, 但他们不账户的情况下,我想要一些元素可能会发生多次,例如:
<Root>
<ThingA/>
<ThingB/>
<ThingC/>
<ThingC/>
<ThingC/>
</Root>
我可以用 sequence
, 但我更愿意让这些儿童可以在任何顺序。我可以用 any
, 但是我不能多于一个 ThingC
.我可以用 choice
, 但是我不能限制 ThingA
和 ThingB
为0或1。
我想我可能读的地方,这是困难或不可能在文件,但有可能放松。我不记得在哪里我读,不幸的。
感谢任何的帮助!
解决方案
这是正确的:你不能做你想要做什么在XML模式,但可以在放松NG:
<element name="Root">
<interleave>
<element name="ThingA"><empty /></element>
<element name="ThingB"><empty /></element>
<oneOrMore><element name="ThingC"><empty /></element></oneOrMore>
</interleave>
</element>
你的选择在XML模式是:
- 增加一个预处理步骤,该步骤规格化输入XML入一个特定的顺序,那么使用
<xs:sequence>
- 使用
<xs:choice>
, 并添加额外的验证(例如使用在),以检查没有多于一个<ThingA>
或<ThingB>
- 决定修订的元素在你标记语言
事实证明,第三次通常是最好的选择;那里通常没有多少费用发电机的XML要产出要素在一个特定的顺序,不仅有助于验证,但这也艾滋病消耗XML如果可以在事先得知。
不隶属于 StackOverflow