1

我有一个导入另一个模式 (z) 的模式 (a)。然后我有另一个模式 (b) 导入相同的模式 (z)。

恰好符合模式 (a) 的 XML 文档 (d) 也可以包含符合模式 (z) 的可选元素。

因此,当 (d) 在 .NET 中验证时,我遇到异常“已声明 simpleType 'z:x'”。

但氧气也不例外。

我想以不抛出此异常的方式配置.net。只是为了表现得像氧气。

如何?

4

1 回答 1

2

问题的出现是由于 XSD 建议允许但不要求一致的处理器忽略从已经遇到的名称空间导入 XSD。.NET 正在重新导入,这是允许的。氧气忽略了重新进口,因为它被允许这样做。

两者都按照 XSD 建议进行操作。请参阅4.2.3 跨命名空间引用模式组件中的最后一条注释:

注意:以上措辞谨慎,因此<import>同一模式文档的多个 ing 不会构成违反 Schema Properties Correct (§3.15.6)的第2条,但允许(确实鼓励)应用程序避免使用相同的模式文档不止一次地阻止了逐个组件建立身份的必要性。鉴于 [attribute] 只是一个提示,对于给定名称空间,应用程序可以忽略除第一个以外的所有内容,而不管 的·实际值·如何,但是这种策略在提供新信息时可能会丢失有用的信息。<import>schemaLocation<import>schemaLocationschemaLocations

幸运的是,Oxygen 基于 Xerces,它允许用户通过

http://apache.org/xml/features/honour-all-schemaLocations

不幸的是,.NET XML/XSD 处理器不是基于 Xerces,而且我不知道任何 .NET 版本中的任何并行配置选项。(如果另有说明,我会很乐意更新这个答案。)

于 2015-01-15T05:16:10.417 回答