当试图在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>
任何想法?
答案 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资源文件执行此操作。