解决方案 1 失败,因为
type="Department"
是对默认命名空间中具有本地名称 Department
的类型的引用。默认命名空间(使用 xmlns=...
声明)是 MainNameSpace
,并且该命名空间中没有类型 Department
。撒克逊错误消息(如果有帮助的话)是:
Error on line 15 of test.xsd:
Unknown type Q{MainNameSpace}Department
Error on line 15 of test.xsd:
The type {Department} is referenced, but has not been declared
解决方案 2 和 3 失败,因为 xs:import 上的命名空间与所识别的架构文档的实际 targetNamespace 不匹配。
解决方案 4 在 Saxon 中成功。它依赖于 XSD 规范的一个相当模糊的功能,通常称为“变色龙包含”。 (实际术语在 XSD 1.1 规范中使用,但该功能已在 XSD 1.0 中存在,但没有该名称)。 §4.2.1 中的一句话很好地涵盖了这一点:
此类包含的架构文档必须 (a) 具有相同的 targetNamespace 作为 ing 架构文档,或者 (b) 否 targetNamespace 根本没有,在这种情况下是 d 模式文档 转换为包含架构文档的 targetNamespace。
从您的证据来看,Microsoft 架构处理器似乎没有实现此功能。
我认为您应该能够使用解决方案 1 使其工作,但修改对
Department
类型的引用:
<xs:element name="Department" type="Department" xmlns=""/>
因此
Department
被视为不存在命名空间。