gpt4 book ai didi

xml - XSD 架构尝试使属性值唯一

转载 作者:行者123 更新时间:2023-12-04 06:17:30 26 4
gpt4 key购买 nike

到目前为止,我一直在尝试使用 xs:unique,但没有成功。我有以下简单的架构:

    <?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns="http://testuri/test.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://testuri/test.xsd"
elementFormDefault="qualified"
id="XMLSchema1">
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element name="items">
<xs:complexType>
<xs:sequence>
<xs:element name="item" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="id" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

使用此验证以下简单的 XML 文件:
    <?xml version="1.0" encoding="utf-8" ?>
<root xmlns="http://testuri/test.xsd">
<items>
<item id="1"/>
<item id="1"/>
<item id="1"/>
</items>
</root>

现在假设我们想让属性 id 唯一。我正在考虑简单地将架构更改为:
    <?xml version="1.0" encoding="utf-8"?>
<xs:schema
xmlns="http://testuri/test.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://testuri/test.xsd"
elementFormDefault="qualified" id="XMLSchema1">
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element name="items">
<xs:complexType>
<xs:sequence>
<xs:element name="item" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="id" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:unique name="itemKey">
<xs:selector xpath="items/item"/>
<xs:field xpath="@id"/>
</xs:unique>
</xs:element>
</xs:schema>

然而,上面的 xml 仍然得到验证。

我最确定问题出在选择器的 xpath 上。有任何想法吗?

最佳答案

我认为您必须使用 namespace 前缀限定 xpath 表达式(因为 XPath 1.0 没有默认 namespace 的概念)。因此,为您的目标命名空间添加命名空间声明:

<xs:schema 
xmlns="http://testuri/test.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://testuri/test.xsd"
xmlns:p="http://testuri/test.xsd"
elementFormDefault="qualified" id="XMLSchema1">

然后在您的 xpath 表达式中使用该前缀:
    <xs:unique name="itemKey">
<xs:selector xpath="p:items/p:item"/>
<xs:field xpath="@id"/>
</xs:unique>

不过,我还没有验证这一点。

关于xml - XSD 架构尝试使属性值唯一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7047493/

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