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">
我的 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">