Моя структура XML следующая:
ROOT
|_ SetOfBandC (*)
| |_ SetOfB (1)
| | |_ ElementB (*)
| | |_ ElementB__Key
| |_ SetOfC (1)
| |_ ElementC (*)
| |_ ElementC__Key
|_ ElementD (*)
|
|_ SetOfBandC__Key
|_ ElementD__Key
|
|_ ElementD->SetOfBandC__Keyref
|_ ElementD->ElementB__Keyref
В этой структуре у меня может быть несколько SetOfBandC
, а также несколько ElementB
и ElementC
, но только 1 SetofB
и SetOfC
для каждого SetOfBandC
.
Проблема в том, что ElementD
имеет ключевую ссылку, ссылающуюся на конкретный SetOfBandC
, а другой ссылается на ElementB
из этого набора, но XML-валидатор при проверке достоверности ElementD->ElementB__Keyref
ищет только в последнем SetOfBandC
, а не в все из них или, лучше, в том, на который ссылается ElementD->SetOfBandC__Keyref
. Поэтому, когда ElementD->ElementB__Keyref
ссылается на ElementB
, которого нет в последнем SetOfBandC
, проверка не будет работать.
Вот мой ElementD->ElementB__Keyref
:
<xs:keyref name="ElementD->ElementB__Keyref" refer="tns:ElementB__Key ">
<xs:selector xpath="tns:ElementD" />
<xs:field xpath="@elementD_ref" />
</xs:keyref>
И мой ElementB__Key
:
<xs:key name="ElementB__Key">
<xs:selector xpath="tns:ElementB" />
<xs:field xpath="@elemB_name" />
</xs:key>
Где tns — мое целевое пространство имен. Что мне не хватает?
PS: имена в моем коде другие и в них нет ->
.