xml - 使用逗号分隔的枚举列表的 XSD 架构

标签 xml xsd

我正在尝试为现有 XML 文档创建 XSD。我确实无法更改 XML,因此我需要使 XSD 适合它(我知道这有点倒退)。

在 XML 中,有一个称为 Group 的元素。该元素具有一个或多个特征。大约有 40 个有效的功能名称。所以我选择将它们建模为枚举。枚举看起来像这样:

<xs:simpleType name="FeatureNamesEnumType">
    <xs:restriction base="xs:normalizedString">
        <xs:enumeration value="Feature1"/>
        <xs:enumeration value="Feature2"/>
        <xs:enumeration value="Feature3"/>
    </xs:restriction>
</xs:simpleType>

然后,对于该组,我有以下内容:

<xs:complexType name="groupType">
    <xs:attribute type="FeatureNamesEnumType" name="features" use="required"/>
  </xs:complexType>

我一直遇到的问题是,在 XML 文件中,属性可能被设置为逗号分隔的功能列表。例如:

<group name="Group1"
       features="Feature1,Feature2"
</group>

这不会针对 XSD 进行验证,因为枚举中不存在此逗号分隔列表。

我知道最好让一个组包含一系列功能,但这不是一个选项,因为我无法更改 XML 文件。

我的目标是,如果功能与枚举值不匹配,则导致验证失败。例如,我希望以下内容无效:

<group name="Group1"
           features="Feature1,Featur2"
</group>

拼写错误应该会导致其无效。我的 XSD 中有没有办法指示 Group 上的 features 属性接受仅由有效枚举值组成的逗号分隔列表?

最佳答案

XSD 1.0 本身无法用于定义您所需的约束。如果您可以预处理或后处理这些字段以将逗号替换为空格,那么您可以定义 FeatureNamesEnumType 的 xsd:list。

正确的方法取决于您的平台。例如,如果在 .NET 上,我会将这些字段定义为字符串,可能受 xsd:pattern 约束;然后我将根据上面定义的 xsd:list 的简单类型手动验证每个字段的值 - 这在 .NET 中是非常简单的事情。如何有效地访问这些字段取决于您的处理模型......

关于xml - 使用逗号分隔的枚举列表的 XSD 架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14856575/

相关文章:

xml - 如何使 XML 模式中的元素可选?

python - 将 CSV 转换为 XML

xml - 我如何在 linq to xml 中使用 "like"

xml - 在 Delphi 中使用 XML(将特定数据返回给变量)

java - 使用 MOXy 读取 XML 时如何将字段标记为必填/可选?

java - 如何更改从 XSD (JAXB) 生成 Java 的默认目录

xml - SVG 图像文件显示 XML 代码而不是图像

sql-server - 为什么在为非 xml 数据查询链接服务器时出现错误 "Xml data type is not supported in distributed queries"?

xsd - 为什么 W3C XML Schema 规范允许整数有前导零?

java - 在 Java 中修改 XML 的内存有效方法