2

我有一个 XML 模式和一个从客户那里获得的实例文档。例如,文档可以是:

<doc>
   <carId>12</carId>
</doc>

并且根据架构是有效的。

我想用我的属性对此进行注释:

<doc>
   <carId myns:valid="true">12</carId>
</doc>

我希望带注释的文档根据某些模式有效 - 我不在乎哪个模式,我想它会基于原始模式。

我的问题是,是否有某种方法可以在不更改新模式的情况下“扩展”原始模式?或者,只要它们根据自己的模式有效,添加这些属性总是合法的吗?

我不能假设关于原始模式的任何事情,即它不一定声明 xsd:anyAttribute 在其元素上是允许的。

4

1 回答 1

1

这将使用xsd:anyattribute声明。它可以完全对任何属性开放,仅限于特定的命名空间,或者(最常见的)允许任何命名空间,而不是现在定义的命名空间)。

如果您只想检查有效性并且在运行时不需要模式数据,一个简单的答案是从副本中删除您的属性并对其进行验证。

只要 complexType 具有名称,并且原始模式没有使用 final 来禁止这一点,通过扩展派生,为每个 complexType 生成具有所需 anyAttribute 声明的模式也相当容易。

但是,如果您真的无法控制输入模式,那么除了修改它之外,我看不到任何选择。

于 2009-02-22T19:17:07.497 回答