XSD独特验证

时间:2014-03-27 19:45:51

标签: xml xsd unique

我已尝试以下方法来测试元素是否具有唯一标识符。到目前为止,.net已经说xml对xsd有效,但它不应该是。

XML:

<Document>
   <Record>
     <Id>1</Id>
   </Record>
   <Record>
     <Id>1</Id>
   </Record>
</Document>

XSD:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="Filing_new"
           targetNamespace="http://tempuri.org/Filing_new.xsd"
           elementFormDefault="qualified"
           xmlns="http://tempuri.org/Filing_new.xsd"
           xmlns:mstns="http://tempuri.org/Filing_new.xsd"
           xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <!-- Document Schema -->
    <xs:element name="Document">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="Record" minOccurs="1" maxOccurs="unbounded">
                  <xs:complexType>
                    <xs:sequence>
                      <xs:element name="Id" type="xs:integer" />
                    </xs:sequence>
                  </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
        <xs:unique name="sequence">
            <xs:selector xpath="Record" />
            <xs:field xpath="Id" />
        </xs:unique>
    </xs:element>
</xs:schema>

我做错了什么?

1 个答案:

答案 0 :(得分:2)

它可以在无命名空间架构中工作。

在模式中,XPath表达式中的元素必须使用目标名称空间http://tempuri.org/Filing_new.xsd(在模式中声明了mstns前缀)进行限定,因此您可以使用它。如果将mstns:前缀添加到XPath表达式中的元素,它应该可以工作:

<xs:selector xpath="mstns:Record" />
<xs:field xpath="mstns:Id" />