是否有可能在W3C的XML模式语言(文件),以允许一系列的要素在任何命令,但仍然限制事件吗?

StackOverflow https://stackoverflow.com/questions/104248

  •  01-07-2019
  •  | 
  •  

我知道关于 allchoice, 但他们不账户的情况下,我想要一些元素可能会发生多次,例如:

<Root>
    <ThingA/>
    <ThingB/>
    <ThingC/>
    <ThingC/>
    <ThingC/>
</Root>

我可以用 sequence, 但我更愿意让这些儿童可以在任何顺序。我可以用 any, 但是我不能多于一个 ThingC.我可以用 choice, 但是我不能限制 ThingAThingB 为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如果可以在事先得知。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top