Предположим, у нас есть таблица стилей, которая извлекает метаданные с помощью функции key(). Другими словами, мы имеем экземпляра документов, как это:Можете ли вы использовать key/keyref вместо ограничения/перечисления в XML-схеме?
<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. Поэтому в схеме мы хотим использовать key/keyref вместо ограничения/перечисления. Это связано с тем, что использование ограничения/перечисления потребует создания отдельного списка допустимых атрибутов типа.
Однако, это не похоже, что key/keyref действительно будет работать. Попробовав его (с MSXML 6.0), похоже, что селектор ключа схемы не будет принимать функцию document() в своем аргументе xpath, поэтому мы не сможем проверить данные метаданных элемента, независимо от того, отображается ли он во внешнем файле или в самом файле схемы. Похоже, что единственным местом, где мы можем искать ключи, является документ экземпляра.
Итак, если мы действительно не хотим иметь отдельный список допустимых типов, мы должны сделать предварительное валидационное преобразование, потянув материал элемента-мета, затем выполнить проверку, а затем сделать свое первоначальное преобразование. Это кажется сложным для того, что должно быть относительно простым использованием XML-схемы и таблиц стилей.
Есть ли лучший способ?