gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 05:14:37 28 4
gpt4 key购买 nike

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

在 XML 中,有一个称为组的元素。该元素具有一个或多个特征。大约有 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 不能用于定义您需要的约束。如果您可以预处理或后处理这些字段以将逗号替换为空格,那么您可以定义一个 xsd:list 您的 FeatureNamesEnumType

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

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

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