XSD: 具有相同元素的多个组
XSD: multiple groups with the same elements
我正在尝试验证只能读取不能更改的 XML。我知道 XML 及其结构的可能性,但不知道会收到什么。其中一些具有与其他名称相同的元素,要么完全相同,要么具有不同的类型等。
有没有办法将这些组从彼此的范围中删除,或者我是否必须将 XML 分开,分别验证块,等等?我在下面提供了我的一项尝试的示例,以澄清我正在尝试的内容。
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="8" minOccurs="8" name="request">
<xs:complexType>
<xs:choice maxOccurs="unbounded" minOccurs="1">
<xs:group ref="group1"/>
<xs:group ref="group2"/>
<xs:group ref="group3"/>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:group name="group1">
<xs:sequence>
<xs:element name="hello" minOccurs="0" type="xs:string"/>
</xs:sequence>
</xs:group>
<xs:group name="group2">
<xs:sequence>
<xs:element name="hello" minOccurs="0" type="xs:string"/>
<xs:element name="world" minOccurs="0" type="xs:string"/>
</xs:sequence>
</xs:group>
<xs:group name="group3">
<xs:sequence>
<xs:element name="hello" minOccurs="0" type="xs:integer"/>
<xs:element name="world" minOccurs="0" type="xs:boolean"/>
</xs:sequence>
</xs:group>
</xs:schema>
单个内容模型中不能有名称相同但类型不同的元素,request
在您的特定情况下。
您可以通过使 group1
、group2
和 group3
实际上成为 XML 中的元素而不仅仅是 [= 中的组来绕过此限制25=].
如果您不能更改 XML,那么您采用了一种模棱两可的语法,如果不比您可能希望的更笼统,XSD 将无法帮助您进行验证。例如,您可以使用 xsd:any
或将 world
概括为一个可以适应所有情况的简单类型——xs:string
可能有效。
我正在尝试验证只能读取不能更改的 XML。我知道 XML 及其结构的可能性,但不知道会收到什么。其中一些具有与其他名称相同的元素,要么完全相同,要么具有不同的类型等。
有没有办法将这些组从彼此的范围中删除,或者我是否必须将 XML 分开,分别验证块,等等?我在下面提供了我的一项尝试的示例,以澄清我正在尝试的内容。
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="8" minOccurs="8" name="request">
<xs:complexType>
<xs:choice maxOccurs="unbounded" minOccurs="1">
<xs:group ref="group1"/>
<xs:group ref="group2"/>
<xs:group ref="group3"/>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:group name="group1">
<xs:sequence>
<xs:element name="hello" minOccurs="0" type="xs:string"/>
</xs:sequence>
</xs:group>
<xs:group name="group2">
<xs:sequence>
<xs:element name="hello" minOccurs="0" type="xs:string"/>
<xs:element name="world" minOccurs="0" type="xs:string"/>
</xs:sequence>
</xs:group>
<xs:group name="group3">
<xs:sequence>
<xs:element name="hello" minOccurs="0" type="xs:integer"/>
<xs:element name="world" minOccurs="0" type="xs:boolean"/>
</xs:sequence>
</xs:group>
</xs:schema>
单个内容模型中不能有名称相同但类型不同的元素,request
在您的特定情况下。
您可以通过使 group1
、group2
和 group3
实际上成为 XML 中的元素而不仅仅是 [= 中的组来绕过此限制25=].
如果您不能更改 XML,那么您采用了一种模棱两可的语法,如果不比您可能希望的更笼统,XSD 将无法帮助您进行验证。例如,您可以使用 xsd:any
或将 world
概括为一个可以适应所有情况的简单类型——xs:string
可能有效。