XSD 唯一性约束

XSD uniqueness constraint

提问人:Manu Murukesan 提问时间:10/22/2023 最后编辑:Manu Murukesan 更新时间:10/22/2023 访问量:23

问:

我正在尝试为以下示例 xml 文件生成 XSD。这个想法是生成此文件并将其作为自动化的一部分进行验证。

<?xml version="1.0" encoding="UTF-8"?>
<CustomLabels
    xmlns="http://soap.sforce.com/2006/04/metadata">
    <labels>
        <fullName>Label1</fullName>
        <categories>L1</categories>
        <language>en_US</language>
        <protected>false</protected>
        <shortDescription>This is label 1</shortDescription>
        <value>1</value>
    </labels>
    <labels>
        <fullName>Label2</fullName>
        <categories>L2</categories>
        <language>en_US</language>
        <protected>false</protected>
        <shortDescription>Label 2 </shortDescription>
        <value>2</value>
    </labels>
        <labels>
        <fullName>Label2</fullName>
        <categories>L2</categories>
        <language>en_US</language>
        <protected>false</protected>
        <shortDescription>New label</shortDescription>
        <value>New value</value>
    </labels>
</CustomLabels>

到目前为止,我生成的 xsd 是:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns="http://soap.sforce.com/2006/04/metadata"
           targetNamespace="http://soap.sforce.com/2006/04/metadata"
           elementFormDefault="qualified"
           attributeFormDefault="unqualified">

  <xs:element name="CustomLabels">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" name="labels">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="fullName" type="xs:string"/>
              <xs:element name="categories" type="xs:string" minOccurs="0"/>
              <xs:element name="language" type="xs:string"/>
              <xs:element name="protected" type="xs:boolean" minOccurs="0"/>
              <xs:element name="shortDescription" type="xs:string" minOccurs="0"/>
              <xs:element name="value" type="xs:string"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
    <xs:unique name="fullname_unique">
            <xs:selector xpath="labels/fullName"/>
            <xs:field xpath="."/>
    </xs:unique>
  </xs:element>
</xs:schema>

我已经对 fullName 进行了唯一性检查,但这似乎在某种程度上不起作用。有人可以解释这里的问题是什么并指导如何实现这一目标吗?

XML XSD

评论


答:

0赞 Michael Kay 10/22/2023 #1

元素位于命名空间中,XPath 表达式需要反映这一点。使用并添加到元素中。<xs:selector xpath="p:labels/p:fullName"/>xmlns:p="http://soap.sforce.com/2006/04/metadata"xs:schema