我有一个根插入标记,一系列Inserts标记,每个标记都有一个“name”属性.
我无法获得在线验证器,以发现有重复的“名称”值.
我们一直在努力奋斗……天.谢谢你找到答案.
XSD:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.osames.org/osamesorm" targetNamespace="http://www.osames.org/osamesorm" elementFormDefault="qualified"> <xs:element name="Inserts"> <xs:complexType> <xs:sequence> <xs:element name="Insert" maxOccurs="unbounded"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute name="name" type="xs:string" use="required"/> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> <xs:unique name="unique-isbn"> <xs:selector xpath="Inserts/Insert"/> <xs:field xpath="@name"/> </xs:unique> </xs:element> </xs:schema>
XML:
<?xml version="1.0" encoding="UTF-8"?> <Inserts xmlns="http://www.osames.org/osamesorm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.osames.org/osamesorm ./xml_schemas/verysimple.xsd"> <Insert name="BaseInsert">INSERT INTO {0} ({1}) values ({2});</Insert> <Insert name="BaseInsert">INSERT INTO {0} ({1}) values ({2});</Insert> </Inserts>
解决方法
架构中存在两个问题:
第一个是您的选择器XPath不正确,基于您定义它的位置. < xs:unique>元素位于< Inserts>内元素,但你的XPath读取插入/插入,这意味着在< Inserts> element,another< Inserts>元素是预期的,并且只在其中< Insert>元件.
< xs:unique>但是,约束已经在< Inserts>中了.元素,这就是为什么你只需要找到< Insert>元件:
<xs:unique name="unique-isbn"> <xs:selector xpath="Insert"/> <xs:field xpath="@name"/> </xs:unique>
第二个问题是XPath没有使用xmlns属性在Xml中定义的默认命名空间的概念.您在XPath中引用的Insert元素不是XSD默认命名空间中的Insert元素,而是没有命名空间URI的Insert元素.
要处理这个问题,请为您的命名空间添加名称空间前缀(作为默认名称空间的替代方法)到XSD文件:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.osames.org/osamesorm" targetNamespace="http://www.osames.org/osamesorm" xmlns:o="http://www.osames.org/osamesorm" elementFormDefault="qualified">
然后,在XPath中使用该命名空间前缀:
<xs:unique name="unique-isbn"> <xs:selector xpath="o:Insert"/> <xs:field xpath="@name"/> </xs:unique>
随着这些变化,this validator输出
There is a duplicate key sequence ‘BaseInsert’ for the ‘07001’ key or unique identity constraint. Line: 1 Column:357
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。