XML模式-两个两个元素上的键约束

时间:2018-11-13 11:33:06

标签: xml xsd schema xmlschemaset

我的.xml文件是这样的:

<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="file.xsd">
  <parent id="">
    <child>
      <part>A1</part>
    </child>
  </parent>
  <another-parent name="AAA">
    <part name="A1"/>
    <part name="A2"/>
    <part name="A3"/>
  </another-parent>
  <another-parent name="BBB">
    <part name="A1"/>
  </another-parent>
</root>

我想要的是:

    name中的
  1. <another-parent>必须是唯一的。没关系。
  2. name
  3. <part>在放置name的{​​{1}}中必须是唯一的。没关系。
  4. <another-parent>中的
  5. <part name="A1">必须是<child>的keyref。而且我做不到。

关于第一点,我使用了以下内容,并且可以正常工作。

<another-parent>

对于第二个,我在元素声明中使用了这个:

<xsd:key name="anotherParentKey">
    <xsd:selector xpath="another-parent"/>
    <xsd:field xpath="@name"/>
</xsd:key>

现在可以使用。

但是对于第三部分,我试图将这段代码放在(第一个共同祖先)中,但是它不起作用:

<xsd:key name="partKey">
    <xsd:selector xpath="part"/>
    <xsd:field xpath="./@name"/>
</xsd:key>

但是我得到的只是:

<xsd:keyref name="roadSegmentRef" refer="roadSegmentKey">
    <xsd:selector xpath="identifiedEntity/place/roadSegment" />
    <xsd:field xpath="." />
</xsd:keyref>

1 个答案:

答案 0 :(得分:0)

您没有向我们展示您在何处放置这些声明,而我猜测是您将它们放置在错误的位置。

如果您希望某个Y内的每个X都有一个唯一的Z值,那么您的键/唯一声明需要放入Y的元素声明中;选择器需要从Y开始选择X,并且字段需要从X开始选择Z。