2009-02-22 94 views
2

我有一个XML模式和一个客户的实例文档。 例如文档可以是:将属性添加到xml文档

<DOC>
    <carId/carId>
</DOC >

而且它根据模式是有效的。

我想和我的属性来标注这一点:

<DOC>
    < carId myns名字:有效= “真”/carId >
</DOC >

我希望注释文档根据某个模式有效 - 我不喜欢我不关心哪一个模式,我想这是基于原来的模式。

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

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

回答

1

这将使用xsd:anyattribute来声明。它可以是任何属性,仅限于某个特定的名称空间,或者(通常)允许任何名称空间,除了现在定义的名称空间外)。

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

只要复杂类型具有名称,并且原始模式未使用final来禁止这一点,那么对每个complexType生成具有所需的anyAttribute声明的模式也是相当容易的,这些声明是通过扩展派生的。

但是,如果您确实无法控制输入架构,除了修改它之外,我看不到任何选项。