Да, функция idref () извлекает только атрибуты, помеченные как IDREF, и это происходит только в результате проверки схемы.
Существует устаревший устаревший параметр config.setRetainDTDAttributeTypes (), который позволяет работать в результате проверки DTD, но я бы не стал его использовать.
Вы всегда можете сделать doc("doc.xml")//*[@idref="xyz"]
. Это приведет к последовательному поиску в Saxon-HE и Saxon-PE, но будет использовать индекс в Saxon-EE. Я бы вообще рекомендовал это использовать функцию idref()
.
В XSLT, конечно, вы можете использовать ключи.