我正在尝试为下面的示例 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 进行了唯一性检查,但这似乎不起作用。有人可以解释这里的问题是什么并指导如何实现这一目标吗?
您的元素位于命名空间中,XPath 表达式需要反映这一点。使用
<xs:selector xpath="p:labels/p:fullName"/>
并将 xmlns:p="http://soap.sforce.com/2006/04/metadata"
添加到 xs:schema
元素。