XSD-如何在complexType中以任意顺序要求许多元素,但又允许任何其他元素

时间:2018-10-15 19:32:20

标签: xml xsd schema

我正在尝试创建一个概念上很简单的需求的XSD架构文档,但是我已经花了两天的时间研究并测试了解决方案,但是没有运气。请帮忙!

我试图要求每个“ item”元素以任意顺序包含许多必需的子元素,但同时也允许“ item”元素与任何其他任意子元素一起扩展。

从概念上讲,这就是我所需要的:

<xs:element name="item">
  <xs:complexType>
    <xs:all>
      <xs:element name="title" type="xs:string"></xs:element>
      <xs:element name="id" type="xs:int"></xs:element>
      <xs:element name="description" type="xs:string"></xs:element>
      <xs:any processContents="skip" minOccurs="0" maxOccurs="unbounded">
    </xs:all>
  </xs:complexType>
</xs:element>

也就是说,以下两项均应有效:

<item>
  <title>Some-title</title>
  <id>1</id>
  <description>Some-description</description>
</item>

<item>
  <description>Some-description</description>
  <id>1</id>
  <title>Some-title</title>
  <customProperty>I don't care about other elements</customProperty>
</item>

但这应该无效:

<item>
  <title>Some invalid item with no id</title>
  <description>Some-description</description>
  <otherProperty>Other properties should simply be irrelevant - I only care that all required fields are provided</otherProperty>
</item>

请注意,实际上我实际上需要大约十二个特定的属性,而不仅仅是“ id”,“ title”和“ description”,但为简洁起见,在此省略了它们。原理是相同的-应该按要求将它们枚举,但可以任何顺序。

我不控制XML-目标是创建一个松散的XSD文档来验证来自客户的XML提交。

对我来说,这似乎是一个简单的用例,但是我的研究尚未使我找到解决方案。

使用XSD可以吗?任何帮助表示赞赏!

0 个答案:

没有答案