【问题标题】:can't compile a W3C-provided XSD schema; can't resolve "id"?无法编译 W3C 提供的 XSD 架构;无法解析“id”?
【发布时间】:2013-03-12 22:28:49
【问题描述】:

我正在使用 XML 模式并尝试生成使用它的简单有效文档。

架构 XSD 由 W3C 提供,所以我无法想象它实际上有什么问题。但是命令行上的xmllint 以及任何数量的免费在线验证器都抱怨实际的 XSD(不是我的测试文档):

The QName value '{http://www.w3.org/XML/1998/namespace}id' does not resolve to a(n) attribute declaration.

请注意,它无法解析 id 类型/名称,这是基本的 XML 内容。我不是 XML 大师,所以我可能在这里遗漏了一些关于名称空间/链接的明显内容。这不是我的测试文档的问题,因为即使是一个简单的测试文档在 XSD 编译位中也会失败。

Here's the XSD file。这是一个简单的测试文档:

 <?xml version="1.0" encoding="UTF-8"?>
 <ink xmlns="http://www.w3.org/2003/InkML" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://www.w3.org/TR/2011/REC-InkML-20110920/inkml.xsd">
 </ink>

但尽我所能,我无法让xmllint 或任何在线验证器通过 XSD 解析/编译阶段,因为 XML id 类型在某种程度上是不稳定的。

我对 XML 的理解不正确吗?我问的是 SO(与另一个站点相比),因为最终这是关于理解 XML 规范和依赖关系以编写和验证文档。我欢迎代码 sn-ps 做正确的事情,不管是什么正确的事情。

想法?谢谢。

【问题讨论】:

    标签: xml xsd xml-validation inkml


    【解决方案1】:

    您指向的架构包含一个对众所周知的 XML 架构的导入语句。

    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" id="xml" />
    <!-- schemaLocation="http://www.w3.org/2001/xml.xsd" -->
    

    如您所见,与下面的另一个不同...

    <xsd:import namespace="http://www.w3.org/1998/Math/MathML" schemaLocation="inkml-mathml2-subset.xsd" id="mathml" />
    

    前者没有为您提供 schemaLocation 属性。

    如果您将http://www.w3.org/2001/xml.xsd URL 粘贴到浏览器中,一段时间后(或不,这取决于这些链接被限制),您应该会看到 xml.xsd - 缺少的部分在你的情况下;如果您看到的是 HTML 而不是普通的 XML,请切换到源代码视图来查看它,这意味着 ../2008/09/xsd.xsl 样式表已被您的浏览器自动应用。

    我确信,如果您现在修改第一个导入以包含 schemaLocation 属性,那么大多数验证器现在应该可以工作了。

    此导入最有可能作为一种安全措施被“悬空”,以确保人们不会因为被认为是众所周知的 XSD 而一遍又一遍地访问 W3C 站点。期望(至少从我过去看到的情况来看)是 XSD 处理器自动将这些众所周知的命名空间引用解析为这些 XSD 的某种本地/嵌入式副本。显然,您尝试过的处理器默认情况下不会这样做。

    QTAssistant(我与它相关联)确实解决了它,因此如果您在本地下载这两个 XSD,然后按原样加载它们,每个都可以验证。

    如果您不想修改 XSD - 例如当您实际上想从远程 URL 加载 XSD 时,解决方案是向您的 XSD 处理器提供某种目录信息以帮助它解析 xml.xsd。对于 xmllint,使用 --catalogs 选项。我建议使用 xml.xsd 的本地副本。浏览您系统上可能已经拥有的目录(如果设置为 $SGML_CATALOG_FILES,否则 /etc/xml/catalog),也许您已经可以使用现有的目录了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-03
      • 1970-01-01
      • 2013-04-05
      • 1970-01-01
      相关资源
      最近更新 更多