“架构必须以命名空间中的<schema>元素开头'http://www.w3.org/2001/XMLSchema'”错误?</schema>

时间:2009-12-21 05:57:54

标签: xml xsd

当试图在XML spy中显示XML Schema时,我收到以下错误。 “架构必须以命名空间”http://www.w3.org/2001/XMLSchema“中的元素开头”

我用一个简单的样本xml尝试了它并得到了同样的错误

<?xml version="1.0"?>
<Book xmlns:lib="http://www.library.com">
  <lib:Title>Sherlock Holmes</lib:Title>
  <lib:Author>Arthur Conan Doyle</lib:Author>
</Book>

任何想法?

2 个答案:

答案 0 :(得分:8)

您包含的示例是实例文档;它不是架构。架构将从以下内容开始:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
   xmlns:lib="http://www.library.com"
   targetNamespace="http://www.library.com"
   elementFormDefault="qualified">

您的示例文档不一定格式错误,但不同寻常之处在于它需要两个模式来验证:一个用于http://www.library.com命名空间,另一个用于Book元素的无命名空间。

我建议您阅读XMLSchema Primer

答案 1 :(得分:-1)

您的xml验证程序正在尝试验证文档。 该文档说它符合某个位置的架构。 验证器获取该架构。 但是omg:它获取的文档根本不是xml架构!它只是xml的一些随机位。

解决此问题:

xml命名空间名称只是一个名称。在这种情况下,http://www.library.com。模式验证器应用程序需要知道如何获取该名称的xml +模式文档。在其他任何事情的缺席,它可能只是做一个http获取和获取一个HTML页面。

您需要告诉验证程序 名称空间 http://www.library.com架构文档http://www.library.com/static/theschema.xsd定义(管他呢)。将xml名称空间与模式文档相关联取决于应用程序。大多数使用XML的应用程序都有一些您必须配置和设置的缓存。

如果您正在使用java,那么您需要实现一个EntityResolver(我认为),当解析器请求http://www.library.com时,它返回一个包含XML的输入流。您通常将其作为java资源文件执行此操作。