XSD 唯一性约束

问题描述 投票:0回答:1

我正在尝试为下面的示例 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
1个回答
0
投票

您的元素位于命名空间中,XPath 表达式需要反映这一点。使用

<xs:selector xpath="p:labels/p:fullName"/>
并将
xmlns:p="http://soap.sforce.com/2006/04/metadata"
添加到
xs:schema
元素。

© www.soinside.com 2019 - 2024. All rights reserved.