Предположим, у нас есть таблица стилей, которая извлекает метаданные с помощью функции key (). Другими словами, у нас есть экземпляры документов, подобные этому:
<items>
<item type="some_type"/>
<item type="another_type"/>
</items>
и таблица дополнительных данных, которые мы хотели бы связать с элементами во время обработки:
<item-meta>
<item type="some_type" meta="foo"/>
<item type="another_type" meta="bar"/>
<item type="yet_another_type" meta="baz"/>
</item-meta>
Наконец, предположим, что мы хотим выполнить проверку схемы в документе экземпляра, ограничив атрибуты типа набором типов, которые встречаются в item-meta. Поэтому в схеме мы хотим использовать ключ / keyref вместо ограничения / перечисления. Это связано с тем, что использование ограничения / перечисления потребует составления отдельного списка допустимых атрибутов типа.
Однако не похоже, что key / keyref действительно будет работать. Попробовав это (с MSXML 6.0), оказывается, что селектор ключа схемы не примет функцию document () в своем аргументе xpath, поэтому мы не можем проверить метаданные элемента, независимо от того, появляется ли он во внешнем файле или в самом файле схемы. Похоже, единственное место, где мы можем искать ключи - это экземпляр документа.
Так что, если мы действительно не хотим иметь отдельный список допустимых типов, мы должны выполнить преобразование перед проверкой, извлекая элемент мета-элемента, затем выполнить проверку, а затем выполнить наше исходное преобразование. Это кажется слишком сложным для того, что должно быть относительно простым использованием XML-схемы и таблиц стилей.
Есть ли лучший способ?