【问题标题】:Add uniqueness to element value in XSD为 XSD 中的元素值添加唯一性
【发布时间】:2018-04-09 21:41:59
【问题描述】:

我需要一些关于 XSD 的帮助,我想让 itemName 唯一,也就是说你不能指定 2 个具有相同名称的项目。我在 xsd 下面尝试了这个 XML。请让我知道我哪里出错了。下面的 xml 正在使用 XSD 进行验证,但它应该返回错误。

<records>
  <name>John</name>
  <items>
    <itemName>Dryer</itemName>
    <itemPrice>20</itemPrice>
  </items>
  <items>
    <itemName>Dryer</itemName>
    <itemPrice>20</itemPrice>
  </items>
</records>

XSD:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="records">
    <xs:complexType>
      <xs:sequence>
        <xs:element type="xs:string" name="name"/>
        <xs:element name="items" maxOccurs="unbounded" minOccurs="1">
          <xs:complexType>
            <xs:sequence>
              <xs:element type="xs:string" name="itemName"/>
              <xs:element type="xs:int" name="itemPrice"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
    <xs:unique name="uniqueItemName">
      <xs:selector xpath="itemName"/>
      <xs:field xpath="."/>
    </xs:unique>
  </xs:element>
</xs:schema>

【问题讨论】:

    标签: xml xslt xsd wsdl xsd-validation


    【解决方案1】:

    你快到了。您只需要调整 xs:selector 的 XPath 以匹配 records 定义 xs:unique 的元素中的相对 items/itemName

    <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
        <xs:element name="records">
            <xs:complexType>
                <xs:sequence>
                    <xs:element type="xs:string" name="name"/>
                    <xs:element name="items" maxOccurs="unbounded" minOccurs="1">
                        <xs:complexType>
                            <xs:sequence>
                                <xs:element type="xs:string" name="itemName"/>
                                <xs:element type="xs:int" name="itemPrice"/>
                            </xs:sequence>
                        </xs:complexType>
                    </xs:element>
                </xs:sequence>
            </xs:complexType>
            <xs:unique name="uniqueItemName">
                <xs:selector xpath="items/itemName"/>
                <xs:field xpath="."/>
            </xs:unique>
        </xs:element>
    </xs:schema>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多