似乎无论我如何构建我的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">
消息的第一行应如何显示?
答案 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">