DITA-OTには前処理の工程(preprocessと呼ばれる)があって、入力となるmapやtopicをパースし、conrefやフィルタリングなど様々な処理をやってくれます.ここでのDITA-OTの処理をカスタマイズできるのが「拡張ポイント」(Extension point)と呼ばれるものです.例えばDITA-OT 1.8.xの場合、つぎのような拡張ポイントが定義されています.
Override styles with XSLT
今まで拡張ポイントなんて使ったことがなかったのですが、前のポストで書いたようにどうしても修正が必要になってしまいました.なんとか自力でできたので、仕組みもそれなりにわかりました.すこしそれについて紹介します.
[DITA-OT1.8.5]/xsl/preprocess/mapref_template.xsl
これは実際に動くmapref.xslの雛型になるものです.次のような構造になっています.簡単ですので載せます.
<!-- This file is part of the DITA Open Toolkit project hosted on
Sourceforge.net. See the accompanying license.txt file for
applicable licenses.-->
<!-- (c) Copyright IBM Corp. 2006 All Rights Reserved. -->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:import href="maprefImpl.xsl"/>
<dita:extension id="dita.xsl.mapref" behavior="org.dita.dost.platform.ImportXSLAction" xmlns:dita="http://dita-ot.sourceforge.net"/>
</xsl:stylesheet>
中ほどにある、dita:extensionというのがオマジナイです.DITA-OT 1.8.5をインストールした状態ではこれはmapref.xslで次のように変わっています.
<?xml version="1.0" encoding="utf-8"?><!-- This file is part of the DITA Open Toolkit project hosted on
Sourceforge.net. See the accompanying license.txt file for
applicable licenses.--><!-- (c) Copyright IBM Corp. 2006 All Rights Reserved. -->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:import href="maprefImpl.xsl"></xsl:import>
<xsl:import href="../../plugins/org.dita.specialization.eclipsemap/xsl/mapref-plugin.xsl"/>
</xsl:stylesheet>
このようにdita:extensionはxsl:importに変わっています.これはEclipse Helpのプラグイン(DITA-OT1.8.5/plugins/org.dita.specialization.eclipsemap)で、plugin.xmlが次のようになっているからです.
<feature extension="dita.xsl.mapref" file="xsl/mapref-plugin.xsl"/>
例えば私のプラグイン(com.myCompany.pdf)で同じように拡張ポイントを定義し、startcmd.batを実行して、ant -f integrator.xmlと叩いてプラグインを組み込めばmapref.xmlは次のように変わります.
<!-- This file is part of the DITA Open Toolkit project hosted on
Sourceforge.net. See the accompanying license.txt file for
applicable licenses.-->
<!-- (c) Copyright IBM Corp. 2006 All Rights Reserved. -->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:import href="maprefImpl.xsl"/>
<xsl:import href="../../plugins/com.myCompany.pdf/xsl/dita2fo_mapref_customize.xsl"/>
<xsl:import href="../../plugins/org.dita.specialization.eclipsemap/xsl/mapref-plugin.xsl"/>
</xsl:stylesheet>
きわめてよくできているように見えるかもしれません.しかしこのDITA-OTの拡張ポイントの定義には大きな問題があります.次にその問題について気が付いた点を書きたいと思います.