XML 不符合架构

XML is not schema compliant

我的 XML 格式似乎并不重要,我收到以下错误:

Schema Violation in message: Element 'message': No matching global declaration available for the validation root.

XSD 的前两行如下所示:

<xsd:schema targetNamespace="urn:gtig:/stuff/gunk/v7.9 xmlns:Geek="urn:gtig:/stuff/gunk/7.9 xmlns:xsd="http://www.w3.org/2001/XMLSchema elementFormDefault="qualified" attributeFormDefault="unqualified">
  <xsd:element name="message" type="Geek:Message"/>

我的 XML 的第一行是这样的:

<message xmlns:xsi="http://www.w3.org/2001/XMLSchema-Instance" xmlns:v7.9="urn:gtig:/stuff/gunk/v7.9 xsi:type="Geek:Message" xsi:schemaLocation="v7.9 /path/to/the/schema">

消息的第一行应该如何显示?

解决两个问题:

  • xmlns:v7.9="urn:gtig:/stuff/gunk/v7.9 缺少终止双引号。
  • xsi:schemaLocation 应该是命名空间 URI - 模式位置对,而不是命名空间前缀 - 模式对。

具体来说,将 not-well-formed message 元素从

<message xmlns:xsi="http://www.w3.org/2001/XMLSchema-Instance"
         xmlns:v7.9="urn:gtig:/stuff/gunk/v7.9 
         xsi:type="Geek:Message" 
         xsi:schemaLocation="v7.9 /path/to/the/schema">

<message xmlns:xsi="http://www.w3.org/2001/XMLSchema-Instance"
         xmlns:v7.9="urn:gtig:/stuff/gunk/v7.9"
         xsi:type="Geek:Message" 
         xsi:schemaLocation="urn:gtig:/stuff/gunk/v7.9 /path/to/the/schema">

更新: 正如 Michael Kay 在评论中指出的那样,这里还有更多需要更正的地方,因为 message 目前不在命名空间中,因此 xsi:schemaLocation 不会帮助将此 XML 与 XSD.

相关联

一个修复方法是将 message 添加到 XSD 的目标命名空间:

<v7.9:message xmlns:xsi="http://www.w3.org/2001/XMLSchema-Instance"
              xmlns:v7.9="urn:gtig:/stuff/gunk/v7.9"
              xsi:type="Geek:Message" 
              xsi:schemaLocation="urn:gtig:/stuff/gunk/v7.9 /path/to/the/schema">