XSD 具有无序必需、可选和任意标记的架构
XSD schema with unordered required, optional and arbitrary tags
我正在尝试提出具有以下限制的 XSD 1.0 架构:
- 没有排序
- 有些元素必须恰好出现一次
- 某些元素可能出现零次或无限次
- 允许无法识别的元素(不验证它们)
3. 的原因是如果元素存在,我想验证类型。
例如,一个人必须只有一个名字,一个可选的年龄(最多一个),可选的 phone 个数字(无限制)和任何其他标签。这些应该验证:
<person>
<name>Bob</name>
<age>33</age>
<phone>123456789</phone>
<phone>123456788</phone>
</person>
<person>
<name>Alice</name>
</person>
<person>
<name>John</name>
<!-- unrecognized, arbitrary tags: -->
<location>city</location>
<occupation>laywer</occupation>
</person>
然而,这些应该不验证:
<person>
<!-- I am missing a name -->
<phone>123456789</phone>
</person>
<person>
<!-- I should only have one name -->
<name>Sally</name>
<name>Mary</name>
</person>
<person>
<name>Josh</name>
<!-- Phone number is not an int -->
<phone>not a number</phone>
</person>
这是无效的XSD,它以一种人类可以理解的方式捕获了我正在尝试做的事情:
<xs:element name="person">
<xs:complexType>
<xs:all>
<xs:element type="xs:string" name="name" minOccurs="1" maxOccurs="1"/>
<xs:element type="xs:int" name="age" minOccurs="0" maxOccurs="1"/>
<xs:element type="xs:int" name="phone" minOccurs="0" maxOccurs="unbounded"/>
<xs:any />
</xs:all>
</xs:complexType>
</xs:element>
此 XSD 无效,因为 <all>
下不能有 <any>
,并且 XSD 1.0 不允许 maxOccurs="unbounded"
在一个 <all>
元素。有人知道如何实现吗?
您可以在 XSD 1.1.
中使用 xs:all
来完成您想要的事情
在XSD 1.0中无法实现。
我正在尝试提出具有以下限制的 XSD 1.0 架构:
- 没有排序
- 有些元素必须恰好出现一次
- 某些元素可能出现零次或无限次
- 允许无法识别的元素(不验证它们)
3. 的原因是如果元素存在,我想验证类型。
例如,一个人必须只有一个名字,一个可选的年龄(最多一个),可选的 phone 个数字(无限制)和任何其他标签。这些应该验证:
<person>
<name>Bob</name>
<age>33</age>
<phone>123456789</phone>
<phone>123456788</phone>
</person>
<person>
<name>Alice</name>
</person>
<person>
<name>John</name>
<!-- unrecognized, arbitrary tags: -->
<location>city</location>
<occupation>laywer</occupation>
</person>
然而,这些应该不验证:
<person>
<!-- I am missing a name -->
<phone>123456789</phone>
</person>
<person>
<!-- I should only have one name -->
<name>Sally</name>
<name>Mary</name>
</person>
<person>
<name>Josh</name>
<!-- Phone number is not an int -->
<phone>not a number</phone>
</person>
这是无效的XSD,它以一种人类可以理解的方式捕获了我正在尝试做的事情:
<xs:element name="person">
<xs:complexType>
<xs:all>
<xs:element type="xs:string" name="name" minOccurs="1" maxOccurs="1"/>
<xs:element type="xs:int" name="age" minOccurs="0" maxOccurs="1"/>
<xs:element type="xs:int" name="phone" minOccurs="0" maxOccurs="unbounded"/>
<xs:any />
</xs:all>
</xs:complexType>
</xs:element>
此 XSD 无效,因为 <all>
下不能有 <any>
,并且 XSD 1.0 不允许 maxOccurs="unbounded"
在一个 <all>
元素。有人知道如何实现吗?
您可以在 XSD 1.1.
中使用xs:all
来完成您想要的事情
在XSD 1.0中无法实现。