我希望为FamilyConvention
复杂类型的Name元素添加唯一约束。出于某种原因,下面的模式不会检测重复的名称:
<xs:element name="ValidatedConvention">
<xs:complexType>
<xs:sequence>
<xs:element name="Family" type="FamilyConvention" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:unique name="KeyFamilyName">
<xs:selector xpath="Family/Name"/>
<xs:field xpath="."/>
</xs:unique>
</xs:element>
<xs:complexType name="FamilyConvention">
<xs:sequence>
<xs:element name="Name" minOccurs="1" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="([a-zA-Z0-9])+" />
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
与此XML比较:
<ValidatedConvention">
<Family>
<Name>john</Name>
</Family>
<Family>
<Name>john</Name>
</Family>
</ValidatedConvention >
你看到我的架构有什么问题吗?
答案 0 :(得分:0)
似乎有效
使用http://www.utilities-online.info/xsdvalidation/
我得到了:
无效。 错误 - 第9行,第26行:org.xml.sax.SAXParseException; lineNumber:9; columnNumber:26;为元素的身份约束声明的重复唯一值[john]&#34; ValidatedConvention&#34;。
这似乎是你希望的结果
为了能够测试你的xml,我必须添加一个目标命名空间和xml版本 这就是我使用的代码:
<强> XML 强>
<?xml version='1.0' encoding='utf-8'?>
<ValidatedConvention xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Family>
<Name>john</Name>
</Family>
<Family>
<Name>john</Name>
</Family>
</ValidatedConvention >
<强> XSD 强>
<?xml version='1.0' encoding='utf-8'?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="ValidatedConvention">
<xs:complexType>
<xs:sequence>
<xs:element name="Family" type="FamilyConvention" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:unique name="KeyFamilyName">
<xs:selector xpath="Family/Name"/>
<xs:field xpath="."/>
</xs:unique>
</xs:element>
<xs:complexType name="FamilyConvention">
<xs:sequence>
<xs:element name="Name" minOccurs="1" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="([a-zA-Z0-9])+" />
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:schema>
顺便说一句:你有一个&#34;在根元素的末尾:ValidatedConvention
更新
是的,命名空间导致问题。请参阅初始问题下的评论。
请参阅:https://msdn.microsoft.com/en-us/library/ms757863(v=vs.85).aspx了解如何引用架构
答案 1 :(得分:0)
感谢您的回答!
我的原始命名空间详细信息是:
XML:
<ValidatedConvention xmlns="dnx_ns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="dnx_ns file:///C:/Users/summer/workspace/project1/NewXMLSchema.xsd ">
模式:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="dnx_ns" xmlns="dnx_ns" elementFormDefault="qualified">
他们错了吗?如何在没有它的情况下将我的XML引用到我的架构?