XML Schema:子元素验证列表

时间:2012-01-04 11:23:43

标签: xml validation xsd

<structure>
  <pause length="2s" />
  <action ref="move" />
  <action ref="replace" />
  <pause length="2s" />
  <pause length="2s" /> <!-- error -->
  <action ref="move" />
  <action ref="move" /> <!-- error -->
  <pause length="2s" title="cd"/>
  <pause length="2s" title="cu"/> <!-- ok -->
  <action ref="move" title="m1" />
  <action ref="move" title="m2" /> <!-- ok-->
  <action ref="remove" />
  <pause length="2s" /> <!-- error -->
<structure>

我是编写XML Schema的新手。我想知道有没有办法用XSD进行以下验证操作:

  • STRUCTURE以任何顺序包含PAUSE和ACTION
    • STRUCTURE至少包含一个ACTION
    • 没有仅允许暂停的结构
  • 没有PAUSE可以跟随PAUSE,直到他们两个(或者只有一个,如果不可能)有不同的@TITLE
  • STRUCTURE不能以PAUSE结束
  • 没有ACTION可以使用相同的@REF跟随ACTION,直到它们(或者只有一个,如果不可能)具有不同的@TITLE

1 个答案:

答案 0 :(得分:1)

XSD 1.0基本上允许您以语法的形式指定约束。你没有用这种方式描述你的约束,我怀疑是否有可能将它们表达为语法。对于这样的规则,您需要一个描述一组完整性约束或规则的模式,这意味着Schematron或XSD 1.1或使用XSLT编写的自定义验证器。

将这些规则表达为结构元素上的XSD 1.1断言相当容易。详细信息取决于您的描述中的“跟随”是否意味着“紧随其后”。