验证Xml失败:提供的命名空间“X”与架构的targetNamespace“Y”不同

时间:2009-10-09 15:59:59

标签: xml xsd

在使用IXMLDOMDocument2(C ++)时验证xml文档时出现以下错误:

  

提供的命名空间“http://www.somesite.com/schema/2.0”与架构的targetNamespace“http://www.somesite.com/schema/2.0/SomeObject”不同。

我正在尝试验证的Xml是:

<id:envelope xmlns:id="http://www.somesite.com/schema/2.0/SomeObject" 
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
             xsi:schemaLocation="http://www.somesite.com/schema/2.0 SomeObject.xsd">
    <!-- content -->
</id:envelope>

现在我可以看到xsi:schemaLocation标签看起来像空格一样(“http://www.somesite.com/schema/2.0 SomeObject.xsd”似乎被解释为“http://www.somesite.com/schema/2.0”),但我仍然不明白最新情况,因为这似乎表明schemaLoaction需要与指定的xmlns完全匹配......

  • 架构名称中是否不允许使用空格?
  • schemaLoaction是否需要与targetNamespace匹配?
  • 如果是这样,为什么!?

2 个答案:

答案 0 :(得分:1)

schemaLocation包含一种将架构映射到可以找到架构表示的位置的方法

在这种情况下,schemaLocation应该包含一对字符串

The schema name - exactly matching the namespace id given

Where it is found in this case a relative file SomeObject.xsd

定义见W3C schema spec见4.3.2节中的例子

所以更正的版本可能是     xsi:schemaLocation =“http://www.somesite.com/schema/2.0/SomeObject http://www.somesite.com/schema/2.0SomeObject.xsd

答案 1 :(得分:0)

我不知道您正在使用的实际解析器,但由于架构位置是URL并且不允许URL包含空格,因此解析器可能只是吐出不正确的错误消息。尝试对schmea位置进行适当的URL编码,看看是否有帮助: