多次导入相同的XSD是错误的吗?

时间:2015-01-15 03:16:41

标签: .net xml xsd xerces oxygenxml

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

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

因此,当(d)在.NET中验证时,我有异常" simpleType' z:x'已被宣布。"

但氧气也不例外。

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

如何?

1 个答案:

答案 0 :(得分:2)

由于XSD建议书允许(但不要求)符合要求的处理器忽略从已经遇到的命名空间导入XSD,因此出现了问题。 .NET正在重新导入,因为它允许这样做。正如它允许的那样,氧气忽略了重新进口。

两者的运行均符合XSD建议书。请参阅4.2.3 References to schema components across namespaces中的最后一个注释:

  

注意:以上内容经过精心设计,因此同一架构文档的多个<import>不会构成违反条款   2 Schema Properties Correct (§3.15.6),但应用程序   允许,实际上是鼓励,以避免<import>相同的架构   不止一次地记录以防止建立的必要性   身份组件。鉴于schemaLocation   [attribute]只是一个提示,它向应用程序开放,忽略所有   但是给定命名空间的第一个<import>,无论如何   ·schemaLocation的实际值,但这种策略可能会丢失   提供新schemaLocations时的有用信息。

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

控制此行为
  

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

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