PDFの関連リンクを生成するしくみ

DITA-OTを使ってPDFを生成するときに、トピック末尾の関連リンクを生成するために、DITA-OT内部でどのような処理が行われるかについて説明します。

結合済みDITAファイルの構造

DITA-OT処理フローの中で、topic mergeのステップにより出力されるXMLファイル(temp\xxx_MERGED.xml)のことを、結合済みDITAファイルと呼びます。PDFにおけるトピック末尾の関連リンクは、この結合済みDITAファイルを入力として、XSLTスタイルシート%DITA-OT%demo\fo\xml\fo\links.xslによって生成されます。
下図に示したように、結合済みDITAファイルのルート要素はmapで、map要素の最初の子どもにopentopic:mapという要素が出力されます。opentopic:map要素の後には、文書の本体にあたるトピックの要素(concept, task, またはreference)が続きます。

結合済みDITAファイル


opentopic:map要素は*.ditamapファイルを基に作られ、トピックの階層構造と、トピックの関係を表しています。topicref要素の階層構造がトピックの階層構造を表し、reltable要素(Relationship Tableと呼ぶ)がトピックの関係を表しています。

結合済みDITAファイル(続き)


結合済みDITAファイルの中では、concept、task、refereneといったトピックも、DITAマップに従って階層化されています。opentopic:mapの下のtopicref要素とトピックは、共通のid属性値(unique_xx)によって関連付けられています。

ヒント:
collection-type属性の情報は、Aのマップ情報からのみ取得できます。

各トピックの末尾にはrelated-links要素が出力されます。related-links要素の下には、トピックの中でrelated-links要素を使って書いたリンクの他に、parent/childリンクとRelationship Tableによるリンクの情報も出力されます。

link要素に基づく関連リンクの生成

結合済みDITAファイルの中の、related-links要素の下には、そのトピックに関するすべてのリンクの情報が出力されています。1つのlink要素が1つのリンク情報に対応します。
related-links要素のクラス属性は' topic/related-links '、link要素のクラス属性は、' topic/link 'です。%DITA-OT%demo\fo\xml\fo\links.xslの中には、以下のようなテンプレートがあり、このテンプレートによって「関連リンク」というタイトルが生成されます。

<xsl:template match="*[contains(@class,' topic/related-links ')]">
    <xsl:if test="$disableRelatedLinks = 'no'">
        <fo:block xsl:use-attribute-sets="related-links">

            <fo:block xsl:use-attribute-sets="related-links.title">
                <xsl:call-template name="insertVariable">
                    <xsl:with-param name="theVariableID" select="'Related Links'"/>
                </xsl:call-template>
            </fo:block>

            <fo:block xsl:use-attribute-sets="related-links__content">
                <xsl:apply-templates/>
            </fo:block>
        </fo:block>
    </xsl:if>
</xsl:template>

「関連リンク」というタイトルに続く、各リンクの、リンク先タイトルやショートデスクリプション(shortdesc要素のコンテンツ)は、以下のコードで始まるテンプレートによって生成されます。

<xsl:template match="*[contains(@class,' topic/link ')]">
     :
     :

関連リンク:
Topicmerge improvements
DITA Open Toolkit User Guide and Reference October 2006, DITA Open Toolkit Release 1.3の中の、TopicMergeモジュールに関する説明です。