Я нахожу связанный элемент по его идентификатору, сохраненному в href ссылочного элемента, например:
let $item := ($doc//(map|question|theory|reading|glossgroup))[@id = $ref/@href]
Читая документацию ExistDB, я почти уверен, что простого индекса <create qname="@ID" type="xs:string" />
должно быть достаточно, и, возможно, его даже нужно автоматически сгенерировать ... но, глядя на профилировщик, мой запрос не использует индексы.
Я даже пытался
let $item := $doc//map[@id = $ref/@href]
И создал индекс с полем id примерно так:
<index>
<range>
<create qname="map" type="xs:string">
<field name="map-id" match="@id" type="xs:string" />
</create>
</range>
</index>
Но, похоже, ничего не работает.
Я довольно новичок в ExistDB ... возможно, делаю что-то явно не так, так что, если кто-нибудь может указать мне правильное направление :)?
Пример XML:
<root>
<map id="ide931fee3-6a45-4435-a8d2-f018ae2ca2ea">
<mapref href="f80cc8c8-6b6d-4005-b2e9-85eac2ee2fbf.1.36" />
</map>
<map id="f80cc8c8-6b6d-4005-b2e9-85eac2ee2fbf.1.36">
<topicref href="47aed1dd-62f7-4fb6-ae76-dbfcde0a4bab.1.9" />
</map>
<question id="47aed1dd-62f7-4fb6-ae76-dbfcde0a4bab.1.9">
...
</question>
</root>