【问题标题】:minOccurs maxOccurs don't work with dita?minOccurs maxOccurs 不适用于dita?
【发布时间】:2019-04-01 12:10:40
【问题描述】:

我已经用 xsd 中的一个元素修改了 minOccurs = 1,并且没有在 ditamap 中添加该元素。但是dita运行良好。没有警告,没有错误。 示例是书图,它是 dita-ot-3.3 的示例。

xsd:

   <xs:group name="bookmeta.content">
      <xs:sequence>
         <xs:group ref="linktext" minOccurs="1"/>
         <xs:group ref="searchtitle" minOccurs="1"/>
         <xs:group ref="shortdesc" minOccurs="1"/>
         <xs:group ref="author" minOccurs="1" maxOccurs="unbounded"/>
         <xs:group ref="source" minOccurs="1"/>
         <xs:group ref="publisherinformation" minOccurs="1" maxOccurs="unbounded"/>
         <xs:group ref="critdates" minOccurs="1"/>
         <xs:group ref="permissions" minOccurs="1"/>
         <xs:group ref="metadata" minOccurs="1" maxOccurs="unbounded"/>
         <xs:group ref="audience" minOccurs="1" maxOccurs="unbounded"/>
         <xs:group ref="category" minOccurs="1" maxOccurs="unbounded"/>
         <xs:group ref="keywords" minOccurs="1" maxOccurs="unbounded"/>
         <xs:group ref="prodinfo" minOccurs="1" maxOccurs="unbounded"/>
         <xs:group ref="othermeta" minOccurs="1" maxOccurs="unbounded"/>
         <xs:group ref="resourceid" minOccurs="1" maxOccurs="unbounded"/>
         <xs:group ref="ux-window" minOccurs="1" maxOccurs="unbounded"/>
         <xs:group ref="bookid" minOccurs="1"/>
         <xs:group ref="bookchangehistory" minOccurs="1" maxOccurs="unbounded"/>
         <xs:group ref="bookrights" minOccurs="1" maxOccurs="unbounded"/>
         <xs:group ref="data" minOccurs="1" maxOccurs="unbounded"/>
      </xs:sequence>
   </xs:group>

ditamap:

  <bookmeta>
    <author>Howe Tuduit</author>
    <bookid>
      <isbn>071271271X</isbn>
      <booknumber>SG99-9999-00</booknumber>
      <maintainer>
        <organization>Retro Tools</organization>
        <person/>
      </maintainer>
    </bookid>
    <bookrights>
      <copyrfirst>
        <year>2004</year>
      </copyrfirst>
      <copyrlast>
        <year>2007</year>
      </copyrlast>
      <bookowner>
        <organization>Retro Tools, Inc.</organization>
      </bookowner>
    </bookrights>
  </bookmeta>

我认为 minOccurs 应该是有效的。输出会失败。

【问题讨论】:

  • 你编辑了什么 .xsd 文件??
  • 我只是将 minOccurs 从“0”修改为“1”。
  • 我发现使用编辑器(PTC Arbortext Editor)时约束很好,但是dita编译不起作用,仍然输出。没有错误,没有警告。
  • 编辑器和 DITA-OT 是否引用了您修改的同一个 XSD 文件?

标签: dita


【解决方案1】:

您必须修改了另一个不同于 DITA-OT 引用的 XSD 文件。

如果我修改 dita-ot-3.3\plugins\org.oasis-open.dita.v1_3\schema\bookmap\xsd\bookmapMod.xsd 进行测试,DITA-OT 构建会失败并出现以下错误。这是预期的结果。

[bookmapMod.xsd]

  <xs:group name="bookmeta.content">
     <xs:sequence>
        <xs:group ref="linktext" minOccurs="1"/>
        <xs:group ref="searchtitle" minOccurs="1"/>
        <xs:group ref="shortdesc" minOccurs="1"/>
        <xs:group ref="author" minOccurs="1" maxOccurs="unbounded"/>
        <xs:group ref="source" minOccurs="1"/>
        <xs:group ref="publisherinformation" minOccurs="1" maxOccurs="unbounded"/>
        <xs:group ref="critdates" minOccurs="1"/>
        <xs:group ref="permissions" minOccurs="1"/>
        <xs:group ref="metadata" minOccurs="1" maxOccurs="unbounded"/>
        <xs:group ref="audience" minOccurs="1" maxOccurs="unbounded"/>
        <xs:group ref="category" minOccurs="1" maxOccurs="unbounded"/>
        <xs:group ref="keywords" minOccurs="1" maxOccurs="unbounded"/>
        <xs:group ref="prodinfo" minOccurs="1" maxOccurs="unbounded"/>
        <xs:group ref="othermeta" minOccurs="1" maxOccurs="unbounded"/>
        <xs:group ref="resourceid" minOccurs="1" maxOccurs="unbounded"/>
        <xs:group ref="ux-window" minOccurs="1" maxOccurs="unbounded"/>
        <xs:group ref="bookid" minOccurs="1"/>
        <xs:group ref="bookchangehistory" minOccurs="1" maxOccurs="unbounded"/>
        <xs:group ref="bookrights" minOccurs="1" maxOccurs="unbounded"/>
        <xs:group ref="data" minOccurs="1" maxOccurs="unbounded"/>
     </xs:sequence>
  </xs:group>

[图书地图]

<?xml version="1.0" encoding="UTF-8"?>
<bookmap xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="urn:oasis:names:tc:dita:xsd:bookmap.xsd">
    <booktitle>
        <mainbooktitle>BookMapTest</mainbooktitle>
    </booktitle>
    <bookmeta>
        <author>Howe Tuduit</author>
        <bookid>
            <isbn>071271271X</isbn>
            <booknumber>SG99-9999-00</booknumber>
            <maintainer>
                <organization>Retro Tools</organization>
                <person/>
            </maintainer>
        </bookid>
        <bookrights>
            <copyrfirst>
                <year>2004</year>
            </copyrfirst>
            <copyrlast>
                <year>2007</year>
            </copyrlast>
            <bookowner>
                <organization>Retro Tools, Inc.</organization>
            </bookowner>
        </bookrights>
    </bookmeta>
    <chapter navtitle="Chapter"/>
</bookmap>

[错误日志]

构建失败 D:\DITA-OT\dita-ot-3.3\plugins\org.dita.base\build.xml:31: 执行此行时发生以下错误: D:\DITA-OT\dita-ot-3.3\plugins\org.dita.base\build_preprocess.xml:62: 无法运行管道:[DOTJ012F][FATAL] 无法解析输入 文件 'file:/C:/Users/toshi/OneDrive/Documents/test/dita/20190402-xsd/Bookmaptest.ditamap'.: 文件:/C:/Users/toshi/OneDrive/Documents/test/dita/20190402-xsd/Bookmaptest.ditamap 第 -1 行:发现以元素“作者”开头的无效内容。一 '{linktext}' 是预期的。

总时间:2秒

请注意,不推荐直接修改 OASIS XSD 文件的方式。这仅用于测试。

[HTML 帮助输出的答案]

我修改 dita-ot-3.3\plugins\org.oasis-open.dita.v1_3\schema\bookmap\xsd\bookmapMod.xsd 和你的一样然后编译:dita -f htmlhelp -i D:\dita-ot-3.3\docsrc\samples\taskbook.ditamap -o F:\Study\Dita\output -v。当然,我使用 bookmap.xsd 而不是 DTD 修改任务簿引用。输出还是不错的。没有错误。 ——

这是因为HTML帮助输出采用了下面介绍的“preprocess2”:

Map-first preprocessing

如果你在dita-ot-3.3\plugins\org.dita.htmlhelp\build_dita2htmlhelp.xml中将下面一行从“preprocess2”修改为“preprocess”,你肯定会得到验证错误。

<target name="dita2htmlhelp" unless="noMap" depends="dita2htmlhelp.init,
build-init, use-init.envhhcdir, use-init.hhcdir, preprocess2,
htmlhelp.topics, htmlhelp.copy-image, copy-css">
<antcall target="dita.map.htmlhelp"/>
</target>

preprocess.init:

 [echo] *****************************************************************

 [echo] * input = D:\DITA-OT\dita-ot-3.3\docsrc\samples\taskbook.ditamap

 [echo] *****************************************************************

二元合并:

gen-list: [gen-list] 为 DTD 和模式使用 Xerces 语法池 缓存。 [gen-list] 处理 文件:/D:/DITA-OT/dita-ot-3.3/docsrc/samples/taskbook.ditamap 错误: 无法运行管道:[DOTJ012F][FATAL] 无法解析输入 文件'file:/D:/DITA-OT/dita-ot-3.3/docsrc/samples/taskbook.ditamap'.: file:/D:/DITA-OT/dita-ot-3.3/docsrc/samples/taskbook.ditamap 行 14:cvc-complex-type.2.4.a: 发现无效内容以 元素“作者”。应为“{linktext}”之一。

【讨论】:

  • 非常感谢。我仍然感到困惑,因为我找不到您的修改和我的修改之间的区别。我像你一样修改dita-ot-3.3\plugins\org.oasis-open.dita.v1_3\schema\bookmap\xsd\bookmapMod.xsd 然后编译:dita -f htmlhelp -i D:\dita-ot-3.3\ docsrc\samples\taskbook.ditamap -o F:\Study\Dita\output -v。当然,我使用 bookmap.xsd 而不是 DTD 修改任务簿引用。输出还是不错的。没有错误。
  • @Stone 我为你的问题添加了答案。
  • 我收到了错误信息并将了解有关 dita 的更多信息。感谢您的帮助。
  • @Stone 我也会去谷歌DITA-OT用户论坛问问原因,
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-16
  • 2022-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-09
  • 1970-01-01
相关资源
最近更新 更多