XML 模式包含 C# 中没有命名空间编译错误的模式

问题描述 投票:0回答:1
c# xml validation namespaces
1个回答
0
投票

解决方案 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
被视为不存在命名空间。

© www.soinside.com 2019 - 2024. All rights reserved.