gpt4 book ai didi

xml - 创建 'flexible' XML 架构

转载 作者:数据小太阳 更新时间:2023-10-29 01:55:09 27 4
gpt4 key购买 nike

我需要为一个非常灵活的 XML 文件创建一个架构。它必须满足以下要求:

  1. 验证我们要求存在的一些元素,并知道它们的确切结构
  2. 验证一些可选的元素,我们知道的确切结构
  3. 允许任何其他元素
  4. 以任何顺序允许它们

简单示例:

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 条要求,因为您的模式将违反唯一粒子属性规则(基本上,处理器将不知道是根据名字还是根据任何验证名字)。

就验证而言,您不限于单一模式。如果您可以在不同的命名空间中使用两个模式,您可以这样做:

Schema one - 允许任何内容:

<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 引用了这两个模式。

关于xml - 创建 'flexible' XML 架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2592205/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com