Схема XML - ограничение ключа на два элемента - PullRequest
0 голосов
/ 13 ноября 2018

Мой 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>

То, что я хочу, это:

  1. name из <another-parent> должно быть уникальным. И это нормально.
  2. name из <part> должен быть уникальным в пределах name от <another-parent>. И это нормально.
  3. <part name="A1"> внутри <child> должно быть ключевым значением <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>

Но я получаю только:

cvc-identity-constraint.4.3: Key 'partRef' with value 'A1' not found for identity constraint of element 'parent'.   file.xml    /sheet/xsd  line 19 XML Problem

1 Ответ

0 голосов
/ 13 ноября 2018

Вы не показали нам, ГДЕ вы помещаете эти объявления, и я предполагаю, что вы поместили их не в том месте.

Если вы хотите, чтобы каждый X в некотором Y имел уникальное значение для Z,тогда ваши ключевые / уникальные объявления должны идти в объявлении элемента для Y;селектор должен выбрать X, начиная с Y, а поля должны выбрать Z, начиная с X.

...