Ограничение идентичности XSD с набором узлов - PullRequest
3 голосов
/ 14 сентября 2010

У меня возникают проблемы при создании ограничения идентификации из-за поля, оценивающего набор узлов в моих экземплярах.

Приведенный пример набора 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, или я могу? Можно ли построить искомое ограничение?

...