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で発生する型のセットに制限するとします。したがって、スキーマでは、制限/列挙の代わりにkey/keyrefを使用します。これは、制限/列挙を使用するには、有効な型属性の個別のリストを作成する必要があるためです。
ただし、key/keyrefが実際に機能するようには見えません。(MSXML 6.0で)試してみると、スキーマキーのセレクターはxpath引数でdocument()関数を受け入れないようです。そのため、外部ファイルに表示されているか、外部ファイルに表示されているかにかかわらず、item-metaデータを調べることはできません。スキーマファイル自体にあります。キーを探すことができるのはインスタンスドキュメントだけのようです。
したがって、有効なタイプの個別のリストが本当に必要ない場合は、事前検証変換を実行し、item-metaのものを取得してから、検証を実行してから、元の変換を実行する必要があります。これは、XMLスキーマとスタイルシートを比較的簡単に使用する必要があるため、複雑すぎるように思われます。
もっと良い方法はありますか?