xml - 为密钥设置 xsd 并验证 xml
问题描述
我正在尝试为 xml 设置一个 xsd,并确保元素没有重复的子元素值。下面是一个无效的 xml 示例。
<NonSectorSpecific>
<ElementTypes>
<item>
<Type>textarea</Type>
</item>
<item>
<Type>select</Type>
</item>
<item>
<Type>select</Type>
</item>
</ElementTypes>
</NonSectorSpecific>
我已经创建了 xsd,它可以正确验证架构,但不能因为 Type 元素的键无效而引发异常。
<xs:schema
targetNamespace="http://internal.gug.icmemo.com/test"
elementFormDefault="qualified"
xmlns="http://internal.gug.icmemo.com/test"
xmlns:o="http://internal.gug.icmemo.com/test"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
>
<xs:element name="Configuration">
<xs:complexType>
<xs:sequence>
<xs:element name="NonSectorSpecific">
<xs:complexType>
<xs:sequence>
<xs:element ref="ElementTypes" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:unique name="PKElementType">
<xs:selector xpath="NonSectorSpecific/ElementTypes/item/Type"/>
<xs:field xpath="."/>
</xs:unique >
</xs:element>
<xs:complexType name="ElementType">
<xs:sequence>
<xs:element name="Type" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:element name="ElementTypes">
<xs:complexType>
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="item" type="ElementType"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
老实说,我已经很久没有使用 XMl 了,而且似乎找不到太多关于处理元素值(而不是属性)处的键的在线文档。
解决方案
您已在Configuration
元素上定义了约束,但您发布的示例 XML 中没有Configuration
元素。如果要施加一个约束,即没有 NonSectorSpecific
元素有两个Type
具有相同值的 ,则需要在元素声明中为 定义约束NonSectorSpecific
。
顺便说一句,在我看来,依靠“在线文档”,您正在用一只手绑在背后工作。最好的信息可以在您必须付费购买的书籍中找到:您将从一位作者那里获得更好的信息,这位作者已经花费了六个月到一年的时间来寻找呈现该主题的最佳方式。我有两本关于 XSD 的书,分别是 Eric van der Vlist 和 Priscilla Walmsley 所著,您可以毫不费力地从中找到这个问题的答案。
推荐阅读
- java - 从字符串数组中获取值,其中每个字符串都包含一个值 获取值
- angular - Angular - 我无法在我的页面上显示数据
- angular - 在以角度 6 将视频文件上传到服务器之前压缩视频文件
- javascript - 选择下拉值更改时如何调用javascript函数?
- google-sheets - 空白单元格为零(数据透视表)
- youtube-api - 在 YouTube 数据 API V3 上列出 YouTube 订阅者错误?
- php - 如何修复此错误“Eloquent 构建器实例上不存在属性 [折扣]。”
- javascript - 如何将数组推入嵌套数组?
- spring - 将用户保存在数据库中,Spring Security 注册表单
- java - 使用移位运算符了解 java 数组初始化