XSD:要求属性具有特定值

时间:2011-01-02 00:29:10

标签: xml xsd

我正在尝试创建一个XSD,指定<a>元素必须包含4个子<b>元素,其中包含c属性1到4,如下所示:

有效:

<a>
  <b c="1" d="valueof1" />
  <b c="2" d="valueof2" />
  <b c="3" d="valueof3" />
  <b c="4" d="valueof4" />
</a>

无效:

<a>
  <b c="1" d="valueof1" />
  <b c="1" d="valueof1_other" />
  <b c="3" d="valueof3" />
  <b c="4" d="valueof4" />
</a>

无效:

<a>
  <b c="1" d="valueof1" />
  <b c="2" d="valueof2" />
  <b c="3" d="valueof3" />
  <b c="4" d="valueof4" />
  <b c="5" d="valueof5" />
</a>

这可能吗?我能找到的最接近的是all元素,但这似乎只适用于指定唯一元素,而不是属性值。

1 个答案:

答案 0 :(得分:0)

您可以通过使用bminOccurs=4声明元素maxOccurs=4来强制执行第一条规则,如下所示:

<xs:element name="a">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="b" minOccurs="4" maxOccurs="4"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

但是,您无法使用XSD 来强制执行第二条规则。如果你真的想这样做,你可以用例如bb1b2b3替换4 b4个元素,每个都将分别隐含地表示c属性1到4。