У меня возникают проблемы при создании ограничения идентификации из-за поля, оценивающего набор узлов в моих экземплярах.
Приведенный пример набора XML:
<data>
<Clusters>
<Cluster FileID="0" Function="1">
<Isotopes>
<Isotope StickID="0"/>
<Isotope StickID="1"/>
</Isotopes>
</Cluster>
<Cluster FileID="0" Function="2">
<Isotopes>
<Isotope StickID="2"/>
</Isotopes>
</Cluster>
</Clusters>
</data>
Я пытаюсь создать ограничение таким образом, чтобы для данного элемента изотопа каждая комбинация @StickID в сочетании с @FileID и @Function родительского кластера должна образовывать уникальный ключ.
Если из контекста данных я определяю селектор на кластере следующим образом:
<xs:key name="ClusterStickRefIdentity">
<xs:selector xpath="Clusters"/>
<xs:field xpath="Cluster/Isotopes/Isotope/@StickID"/>
<xs:field xpath="@Function"/>
<xs:field xpath="@FileID"/>
</xs:key>
Как и ожидалось, при проверке экземпляра генерируется ошибка о том, что первое поле оценивается как набор узлов с более чем одним членом, так как элемент Isotopes может содержать неограниченное количество элементов Isotope.
У меня сложилось впечатление, что поля могут быть применены только к дочерним контекстам, что означает, что я не могу определить свой селектор для любого узла глубже, чем Cluster, или я могу? Можно ли построить искомое ограничение?