导入XSD文件

时间:2012-12-18 18:46:41

标签: xml xsd adobe-indesign xmltable

<?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>

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

以下是我的问题的要点:我正在尝试在我编写的模式中验证Adobe InDesign中的表。由于需要捕获样式信息,我们决定将表导出为InDesign表,而不是CALS。我已经编写了一个经过验证的模式的剩余部分,但这部分给了我麻烦。

1 个答案:

答案 0 :(得分: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的顶级属性
  4. 您的错误消息是指读取名为“Table_ASVAB.xsd”的架构文档的问题;我从描述中不清楚这个文件名是表示模式文档1还是模式文档2。

    如果Table_ASVAB.xsd是问题描述中显示的模式文档,那么问题的可能原因是错误消息中给出的那些,减去我们看不到的情况:

    • 找不到该文件。很可能:不同的验证器在不同的地方查找模式文档,您需要查阅验证器的文档,以了解如何告诉它在何处查找模式文档。从您的描述中不清楚您当前是如何告诉或试图告诉验证者在哪里找到架构文档。

    • 无法读取文件。也可以:检查运行验证程序的进程是否具有架构文档的读取权限。

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

    如果Table_ASVAB.xsd不是您的问题描述中显示的架构文档,而是您的主架构文档,则应用相同的可能原因(并且您还应检查以确保它具有正确的命名空间绑定并为其根命名元素)。

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

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

    import和include之间的区别很简单:include获取模式文档,这些文档在调用模式文档的目标名称空间中声明其他组件; import声明导入模式文档依赖于导入的命名空间中的组件(此依赖关系通常采用对这些组件的引用的形式;对于您显示的模式文档,它是对属性的引用{{1包含指定不同目标命名空间的模式文档是错误的;导入与当前模式文档的目标命名空间相同的命名空间是错误的。如果您在这一点上遇到困惑,您可能会发现它有助于查阅XSD的良好教程介绍。