我正在尝试为现有的 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 进行验证,因为这个逗号分隔的列表在枚举中是 no。
我知道最好让一个组包含一系列功能,但这不是一个选项,因为我无法更改 XML 文件。
如果功能与枚举值不匹配,我的目标是导致验证失败。因此,例如,我希望以下内容无效:
<group name="Group1"
features="Feature1,Featur2"
</group>
拼写错误应该导致它无效。我的 XSD 中有没有办法表明 Group 上的 features 属性接受一个逗号分隔的列表,该列表仅由有效的枚举值组成?