0
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"   
           xmlns:aid="http://ns.adobe.com/AdobeInDesign/4.0/">
  <xs:import namespace="http://ns.adobe.com/AdobeInDesign/4.0/"
             schemaLocation="aid.xsd"/>
  <xs:element name="Table">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="Cell"/>
      </xs:sequence>
      <xs:attribute ref="aid:table" use="required"/>
      <xs:attribute ref="aid:tcols" use="required"/>
      <xs:attribute ref="aid:trows" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="Cell">
    <xs:complexType mixed="true">
      <xs:sequence>
        <xs:element minOccurs="0" 
                    maxOccurs="unbounded" 
                    ref="mathImage"/>
      </xs:sequence>
      <xs:attribute ref="aid:ccols" use="required"/>
      <xs:attribute ref="aid:ccolwidth" use="required"/>
      <xs:attribute ref="aid:crows" use="required"/>
      <xs:attribute ref="aid:table" use="required"/>
      <xs:attribute ref="aid:theader"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="mathImage">
    <xs:complexType>
      <xs:attribute name="href" 
        use="required" 
        type="xs:anyURI"/>
    </xs:complexType>
  </xs:element>
</xs:schema>

我遇到的问题是 Adob​​e InDesign 的命名空间无效,架构位置也无效。有没有人可以替代这种情况?

这是我的问题的要点:我正在尝试在我编写的架构中验证来自 Adob​​e InDesign 的表格。由于我们需要捕获样式信息,我们决定将表格导出为 InDesign 表格,而不是 CALS。我已经编写了经过验证的架构的其余部分,但这部分给我带来了麻烦。

4

1 回答 1

0

如果我正确理解了您的问题描述,则您正在尝试从三个架构文档构建架构:

  1. 您的主要架构文档(未显示),其中包括或导入您的问题描述中显示的架构文档。
  2. 问题描述中显示的架构文档,其中
    • 声明元素 Table、Cell 和 mathImage,它不绑定到命名空间
    • 导入命名空间http://ns.adobe.com/AdobeInDesign/4.0/并指向本地模式文档aid.xsd作为查找适当声明的位置
  3. 架构文档aid.xsd,未显示,但从架构文档2中引用。从架构文档2中的声明,我们可以推断出该架构文档
    • 应该位于本地(在与模式文档 2 相同的目录中,因为使用了相对引用来指向它)
    • 应该声明http://ns.adobe.com/AdobeInDesign/4.0/为其目标命名空间
    • 应该声明名为 table、tcol、trows、ccol、ccolwidth、crows 和 theader 的顶级属性

您的错误消息涉及读取名为“Table_ASVAB.xsd”的模式文档的问题;从您的描述中我不清楚这个文件名是表示模式文档 1 还是模式文档 2。

如果 Table_ASVAB.xsd 是您的问题描述中显示的架构文档,则问题的可能原因是错误消息中给出的原因,减去我们可以看到的情况并非如此:

  • 找不到文档。很有可能:不同的验证器在不同的地方寻找模式文档,你需要查阅验证器的文档,看看如何告诉它在哪里可以找到你的模式文档。从您的描述中不清楚您当前如何告诉或试图告诉验证器在哪里可以找到模式文档。

  • 无法读取文档。也可能:检查运行验证器的进程是否具有模式文档的读取权限。

  • 文档的根元素不是 xsd:schema。不是此错误消息的原因;我们可以看到问题描述中显示的架构文档的根元素架构,并且它位于XSD 命名空间中。

如果 Table_ASVAB.xsd 不是您的问题描述中显示的架构文档,而是您的主架构文档,那么同样可能的原因也适用(您还应该检查以确保它的根元素具有正确的命名空间绑定和名称)。

关于附带问题的几点评论:

如果您aid.xsd自己提供架构文档,那么 Adob​​e 是否支持该产品并不重要:架构验证器将像从 adobe.com 的 URI 一样愉快地从您的硬盘读取给定名称空间的架构文档。如果您自己不提供aid.xsd,那么您有两个问题(至少):您必须为该名称空间找到一个现有的模式文档,并且您必须在导入的 schemaLocation 属性中为其提供适当的 URI .

import 和 include 之间的区别很简单:include获取在​​调用模式文档的目标命名空间中声明附加组件的模式文档;import声明导入模式文档依赖于导入命名空间中的组件(这种依赖关系通常采用对这些组件的引用的形式;在您显示的模式文档的情况下,它是对属性的引用aid:table等。包含模式是错误的指定不同目标命名空间的文档;导入与当前架构文档的目标命名空间相同的命名空间是错误的。如果您在这一点上感到困惑,您可能会发现参考一个很好的 XSD 教程介绍很有帮助。

于 2012-12-19T19:54:33.683 回答