Учитывая этот XML:<ВКИ: основная линия связи> не создавая интерактивную ссылку XSL-FO XSLT 1.0
<figure id="fig-0011">
<title>Removal of Shipping Kit(s)</title>
<graphic id="fig-0011-gra-0001" infoEntityIdent="66503-00129-A-001-01"></graphic>
</figure>
и
<proceduralStep><para>Remove screw (see <internalRef internalRefId="fig-0011" internalRefTargetType="irtt01"></internalRef>)
<proceduralStep><para>Remove two screws (10) (see <internalRef internalRefId="fig-0011-gra-0001" internalRefTargetType="irtt09"></internalRef>),
Я пытаюсь создать ссылки на цифры и графики , Ссылка на рисунке работает правильно, но ссылка на графике не является:
<fo:basic-link>
<xsl:attribute name="internal-destination"><xsl:apply-templates select="//dmodule/identAndStatusSection/dmAddress/dmIdent/dmCode"/><xsl:value-of select="@internalRefId"/></xsl:attribute>
<xsl:variable name="targetElement" select="local-name(key('id',@internalRefId))"/>
<xsl:for-each select="key('id',(@internalRefId))">
<xsl:choose>
<xsl:when test="$targetElement='graphic'">
<xsl:text>Fig </xsl:text>
<xsl:number count="figure" from="content" level="any"/>
</xsl:when>
<xsl:when test="$targetElement='figure'">
<xsl:text>Fig </xsl:text>
<xsl:number count="figure" from="content" level="any"/>
</xsl:when>
</xsl:choose>
</xsl:for-each>
Ключ:
<xsl:key name="id" match="*" use="@id"/>
Рисунок:
<xsl:template match="figure">
<xsl:apply-templates select="graphic"/>
</xsl:template>
<xsl:template match="figure/graphic" priority="10">
<fo:block text-align="center" start-indent="0pt" color="black" keep-with-next="always">
<xsl:call-template name="do-graphic">
<xsl:with-param name="include-graphic" select="true()"/>
</xsl:call-template>
</fo:block>
<xsl:if test="position()=last()">
<xsl:apply-templates select="../legend"/>
</xsl:if>
<xsl:if test="@infoEntityIdent">
<fo:block text-align="right" keep-with-previous="always">
<xsl:value-of select="@infoEntityIdent"/>
</fo:block>
</xsl:if>
<fo:block font-weight="normal" font-style="italic" text-align="center" space-before="12pt" space-after="8pt" start-indent="0pt" keep-with-previous="always">
<xsl:if test="../@id">
<xsl:attribute name="id"><xsl:apply-templates select="//dmodule/identAndStatusSection/dmAddress/dmIdent/dmCode"/><xsl:value-of select="../@id"/></xsl:attribute>
</xsl:if>
<xsl:text>Fig </xsl:text>
<xsl:number count="figure" level="any" format="1" from="content"/>
<xsl:apply-templates select="../title"/>
<xsl:variable name="numSheets" select="count(../graphic)"/>
<xsl:choose>
<xsl:when test="$numSheets>1">
<xsl:text> (Sheet </xsl:text>
<xsl:number count="graphic" level="any" format="1" from="figure"/>
<xsl:text> of </xsl:text>
<xsl:value-of select="$numSheets"/>
<xsl:text>)</xsl:text>
</xsl:when>
</xsl:choose>
</fo:block>
Графика:
<xsl:template match="graphic">
<fo:inline-container>
<fo:block space-before="12pt" space-before.conditionality="retain">
<xsl:call-template name="do-graphic"/>
</fo:block>
</fo:inline-container>
</xsl:template>
<xsl:template name="do-graphic">
<xsl:param name="include-graphic" select="true()"/>
<xsl:variable name="content-width">
<xsl:choose>
<xsl:when test="@reproductionWidth != ''">
<xsl:value-of select="@reproductionWidth"/>
</xsl:when>
<!-- coding for reproduction scale based on clarifications in Issue 4.1 -->
<xsl:when test="@reproductionScale != ''">
<xsl:value-of select="@reproductionScale"/>
<xsl:text>%</xsl:text>
</xsl:when>
<xsl:otherwise>95%</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="content-height">
<xsl:choose>
<xsl:when test="@reproductionHeight != ''">
<xsl:value-of select="@reproductionHeight"/>
</xsl:when>
<xsl:when test="@reproductionScale != ''">
<xsl:value-of select="@reproductionScale"/>
<xsl:text>%</xsl:text>
</xsl:when>
<xsl:otherwise>95%</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:choose>
<xsl:when test="$include-graphic">
<fo:external-graphic src="{unparsed-entity-uri(@infoEntityIdent)}" scaling="uniform" content-height="{$content-height}" content-width="{$content-width}"/>
</xsl:when>
<xsl:otherwise>
<fo:inline-container display-align="center" text-align="center" block-progression-dimension="{$content-height}" inline-progression-dimension="{$content-width}" background-color="silver" color="red">
<fo:block>Graphic Not Included</fo:block>
</fo:inline-container>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
Это возвращает:
Remove two screws (10) (see Fig 2)
который является правильным номером рисунка, но 2 не кликабельна ссылка на графику.
Шаблон dmcode создает строку. Если я удалю это из XSLT, то число цифр больше не связывается с рисунком.
Я использую XSLT 1.0. Я ценю любую помощь, спасибо.
Спасибо, Тони.'Graphic' не может быть за пределами' figure'. – Caroline
Я ценю ваше время, Тони. Я получил это, чтобы работать с вашими предложениями, однако часто на графике фигурирует более одного графика, и, как и ожидалось, ссылка всегда идет на первую цифру. Существуют и другие элементы с идентификаторами, например 'table', поэтому я добавил' 'в объявления' xsl: key', и это сработало. Ваше решение - это улучшение по сравнению с тем, что у меня было. Мой форматировщик - Antenna House 6.2. –
Caroline
Спасибо, Тони, я получил графическую ссылку для работы с вашим пересмотренным кодом. Поддержка AH указала, что мне нужно добавить '' to '', который было немного проще реализовать. Я благодарен за ваши усилия. –
Caroline