XSD 独特:为什么 field/@xpath="."不行?

XSD unique: why does field/@xpath="." not work?

我在使用 XSD 验证 XML 中的一些唯一约束时遇到问题。 (我正在使用 XMLlint 进行验证)我有以下结构:

<xsd:element name="elem" type="elemType" >
      <xsd:unique name="uniqueJob">
        <xsd:selector xpath=".//jobs/job"/>
        <xsd:field xpath="."/>
    </xsd:unique>
</xsd:element>

Jobs 的复杂类型深深嵌套在 <elem> 中(我多次使用 <jobs>,这就是我在根元素中定义约束的原因):

       <xsd:complexType name="jobType">
            <xsd:sequence>
                <xsd:element name="job" minOccurs="0" maxOccurs="3" />
            </xsd:sequence>
        </xsd:complexType>

我现在的问题如下:如果我有类似

            <jobs>
                <job>Programmer</job>
                <job>Scientist</job>
            </jobs>

它确实以某种方式无法验证。我从 XMLlint 得到以下错误: Element 'job': The XPath './/jobs/job' of a field of unique identity-constraint 'uniqueJob' does evaluate to a node of non-simple type. 但是 'job' 是一个简单的类型。我在这里缺少什么? 提前致谢!

PS:我想在每个 <jobs> 标签中实现每个作业都是唯一的。

改变

    <xsd:selector xpath=".//jobs/job"/>
    <xsd:field xpath="."/>

    <xsd:selector xpath=".//jobs"/>
    <xsd:field xpath="job"/>

说明

  • 前者要求job元素在自身范围内是唯一的——无论如何总是正确的。

  • 后者要求 job 元素在其父 jobs 元素的范围内是唯一的——可能是您的实际意图。

另见

  • Where to place xs:unique constraint in XSD?