我需要为 XML 文件创建一个非常灵活的架构。它必须满足以下要求:
- 验证我们需要存在的一些元素,并了解其确切结构
- 验证一些可选元素,我们知道其确切结构
- 允许任何其他元素
- 以任意顺序允许它们
快速示例:
XML
<person>
<age></age>
<lastname></lastname>
<height></height>
</person>
我对 XSD 的尝试:
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" minOccurs="0" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
现在我的 XSD 满足要求 1 和 3。但是,如果名字和姓氏都是可选的,那么它不是有效的架构,因此它不满足要求 2,并且顺序是固定的,这无法满足要求 4。
现在我需要的只是验证我的 XML。我愿意接受有关任何方式的建议,无论是在 .NET 3.5 中以编程方式,还是另一种类型的架构等。
谁能想到一个解决方案来满足所有 4 个要求?
如果名称元素是可选的,则无法满足您的要求 3,因为您的架构将违反唯一粒子归因规则(基本上,处理器不知道是否根据名字或任何名称来验证名字)。
就验证而言,您并不局限于单一模式。如果您可以在不同的命名空间中使用两个模式,您可以这样做:
架构一- 允许任何事情:
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="document">
<xs:complexType>
<xs:sequence>
<xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
方案二- 为某些元素添加特定验证:
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://other" xmlns="http://other">
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:schema>
然后确保实例文档的 xsi:include 引用这两个架构。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)