InDesignタグ付きテキストを使用して相互参照を作成する方法の解決策を探していますが、適切な提案が見つかりません。
これが私のシナリオで、XMLからInDesignおよびInDesignからXML、またはその逆のラウンドトリップワークフローを作成するタスクでした。また、URLリンクとEndNotesリンクを相互参照する必要があります。
そのため、最初に、XMLをInDesignタグ付きテキストに変換するXSLTスクリプトを作成する必要があります(ほとんどのオペレーターがまだInDesign CS3を使用しているため、タグ付きテキストを使用しました)。次に、ページの作成が完了したら、InDesignファイルをXHTMLにエクスポートする必要があります(dreamweaver用にエクスポートします)。別のXSLTスクリプトを作成して、ePub変換に使用するXHTMLからXMLに変換し直します(InDesignをePubに直接エクスポートしないのはなぜですか?答えは、多くのカスタマイズが必要なことです)。
以下は、タグ付きテキストの相互参照を作成するためのXSLTコードです。
InDesignへの相互参照の追加:
<xsl:template match="/">
<--! End Notes -->
<xsl:text><XRefFmtDefn:=<FmtNm:ntf><CharStyleRef:ntf><BldBlkLen:1><BldBlk:=<BlkTyp:ParagraphNumber><CstmTxt:><CharStyleRef:><InclDlm:0>>></xsl:text>
<xsl:for-each select="descendant::apnf">
<xsl:variable name="num" select="count(preceding::apnf) + 1"/>
<xsl:text><HplDestDfn:=<HplDestName:Anchor </xsl:text><xsl:value-of select="$num"/><xsl:text>><DestKey:</xsl:text><xsl:value-of select="$num"/><xsl:text>><HplDestIdx:1</xsl:text><xsl:text>><IsPara:1><Hid:0>></xsl:text>
</xsl:for-each>
<--! URL -->
<xsl:text disable-output-escaping="yes"><HplDestDfn:=</xsl:text>
<xsl:for-each select="descendant::libelle[generate-id()=generate-id(key('urlDistinct', @cible)[1])]">
<xsl:value-of select="concat('<HplDestName:', replace(@cible,'/', '\\/'),'><DestKey:1><HplDestUrl:http\:\/\/', replace(@cible,'/', '\\/'), '>')"/>
</xsl:for-each>
<xsl:text disable-output-escaping="yes"><Hid:0>></xsl:text>
<xsl:apply-templates/>
</xsl:template>
エンドノートの相互参照リンクを作成します。
<xsl:template match="apnf">
<xsl:variable name="num" select="count(preceding::apnf) + 1"/>
<xsl:text><cstyle:ntf></xsl:text>
<xsl:text><Hpl:=<HplName:</xsl:text><xsl:value-of select="@id"/> <xsl:text>><HplDest:Anchor </xsl:text><xsl:value-of select="$num"/><xsl:text>><DestKey:</xsl:text><xsl:value-of select="$num"/><xsl:text>><XRefFmt:ntf><CharStyleRef:><HplLen:1><HplOff:0><Hid:0><Brdrv:0><Brdrw:Thin><Brdrh:None><Brdrs:Solid><Brdrc:0\,0\,0>></xsl:text>
<xsl:value-of select="$num"/>
<xsl:text><cstyle:></xsl:text>
</xsl:template>
相互参照URLを作成する
<xsl:template match="url">
<xsl:text><cstyle:url></xsl:text>
<xsl:choose>
<xsl:when test="exists(libelle)">
<xsl:text><Hpl:=<HplName:</xsl:text><xsl:value-of select="replace(libelle/@cible,'/', '\\/')"/><xsl:text>><HplDest:http\:\/\/</xsl:text><xsl:value-of select="replace(libelle/@cible,'/', '\\/')"/><xsl:text>><DestKey:1><CharStyleRef:><HplLen:3><HplOff:0><Hid:0><Brdrv:0><Brdrw:Thin><Brdrh:None><Brdrs:Solid><Brdrc:0\,0\,0>></xsl:text>
<xsl:sequence select="libelle/text()"/>
</xsl:when>
<xsl:otherwise>
<xsl:sequence select="./text()"/>
</xsl:otherwise>
</xsl:choose>
<xsl:text><cstyle:></xsl:text>
</xsl:template>
タグ付けされたテキストをInDesignURLにインポートし、文末脚注にリンク切れがある場合の問題があります。作業リンクを使用してサンプルのInDesignをエクスポートしようとしたときに、宛先キーが相互参照する必要のある文字の位置をターゲットにしているため、これが宛先キーであると思われます。
私の質問は次のとおりです。
- 相互参照は、ICMLのようにInDesignタグ付きテキストでサポートされていますか?
- XSLT(単一ノード内の位置ではなくXML全体内の文字の位置を意味する)を使用してXML内の文字のposition()を取得する方法はありますか?可能であれば、宛先キーを正しく取得できるかもしれません。
提案や推奨事項は大歓迎です。
ありがとう!
PSこのリンクhttp://forums.adobe.com/message/3978432#3978432は、相互参照エントリのInDesignタグ付きテキストについても説明していますが、完全な解決策は示されていません。