假设我们有一个样式表,它使用 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 的东西,然后做验证,然后做我们原来的转换。对于应该相对直接地使用 XML 模式和样式表来说,这似乎过于复杂了。
有没有更好的办法?