【问题标题】:Specify unique element in xml在 xml 中指定唯一元素
【发布时间】:2015-05-15 12:06:06
【问题描述】:

谁能弄清楚我的架构有什么问题,因为我可以在我的架构中添加重复的 PersonID:

<xs:element name="Persons" minOccurs="1" maxOccurs="1">
      <xs:complexType>
        <xs:sequence>
          <xs:element name="Person" minOccurs="1" maxOccurs="unbounded">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="PersonID" minOccurs="1" maxOccurs="1">
                  <xs:simpleType>
                    <xs:restriction base="xs:int">
                      <xs:minExclusive value="0"/>
                    </xs:restriction>
                  </xs:simpleType>
                </xs:element>
                <xs:element name="JoinedDate" type="xs:date" minOccurs="1" maxOccurs="1"/>
              </xs:sequence>
            </xs:complexType>
          </xs:element>
        </xs:sequence>
      </xs:complexType>
      <xs:unique name="UniquePeronID">
        <xs:selector xpath="Person" />
        <xs:field xpath="@PersonID" />
      </xs:unique>
    </xs:element>

和我的 xml 类似:

<Persons>
     <Person>
       <PersonID>69674</PersonID>
       <JoinedDate>2006-08-25</JoinedDate>
    </Person>
    <Person>
       <PersonID>69674</PersonID>
       <JoinedDate>2006-08-25</JoinedDate>
    </Person>
</Persons>

我阅读了以下参考但没有帮助我: How do I ensure unique element values in an XML schema?

https://msdn.microsoft.com/en-us/library/ms256146(v=vs.110).aspx

XML XSD Schema - Enforce Unique Attribute Values in Schema

http://support.liquid-technologies.com/KB/a79/creating-a-unique-constrant-with-an-xsd.aspx

我注意到他们在 xpath 中有 'mstns:' 但在我的情况下,我的架构没有它,例如

【问题讨论】:

    标签: xml xsd xsd-validation


    【解决方案1】:
    <xs:field xpath="@PersonID" />
    

    这是指定 PersonID 属性(这就是 @ 的含义),因此您的架构正在寻找重复的属性。您需要改写它以引用子元素。

    试试这个:

    <xs:field xpath="PersonID" />
    

    您的xs:unique 约束将按预期工作。

    次要注意:如果 Persons 旨在成为 XSD 中的顶级元素,请删除 minOccursmaxOccurs,因为它们不允许出现在顶级元素定义中。

    另见Unique constraint in XML Schema

    【讨论】:

    • 非常感谢!你太棒了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多