XML不符合架构

时间:2017-02-08 17:07:14

标签: xml xsd schema xsd-validation

似乎无论我如何构建我的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">

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

1 个答案:

答案 0 :(得分:2)

解决两个问题:

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

具体而言,从

更改格式不正确的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">