“ <xsl:call-template name="commonattributes"/>” 是啥意思,它是如何使用的?

Posted

技术标签:

【中文标题】“ <xsl:call-template name="commonattributes"/>” 是啥意思,它是如何使用的?【英文标题】:What does " <xsl:call-template name="commonattributes"/>" mean and how is it used?“ <xsl:call-template name="commonattributes"/>” 是什么意思,它是如何使用的? 【发布时间】:2017-06-18 13:45:59 【问题描述】:

我正在使用 Oxygen 处理(我的第一个)DITA 项目,并调用 FOP 来生成 PDF 输出。试图弄清楚链上的所有内容都在做什么,链在哪里:文档 -> 元素 -> 类 -> .xsl 中的类模板定义 -> attr.xsl 中的属性设置

除了类模板定义之外,我都做得很好,这似乎总是涉及以下行:&lt;xsl:call-template name="commonattributes"/&gt;

该模板存储在哪里以及如何配置?

(我发现很多问题显示了调用此模板或其他模板的正确语法,但不是这样做的实际含义。)

【问题讨论】:

表达式调用名为 commonattributes 的模板 "该模板存储在哪里..." 它存储在调用它的同一个样式表中或您的样式表包含或导入的另一个样式表中。 -- "...又是如何配置的?" 我们看不到,所以无从得知。 谢谢!由此,我终于弄清楚要搜索什么。恶作剧管理。 @M.Rivera:如果您找到了解决您自己问题的方法,请通过发布您自己的问题的答案让 SO 参与其中。 我无法很好地解释它来撰写答案!但是下面的答案很棒。 【参考方案1】:

我假设您使用的是 DITA Open Toolkit (OT)。在 OT 的 2.2.4 版本中,此命名模板位于以下文件中:

DITA-OT/plugins/org.dita.pdf2/xsl/fo/commons.xsl

此模板将其他模板应用于一些常见的属性,例如@id。我怀疑您是否需要“配置”它,并且它没有任何参数。这里是:

<!-- Process common attributes -->
<xsl:template name="commonattributes">
  <xsl:apply-templates select="@id"/>
  <xsl:apply-templates select="*[contains(@class,' ditaot-d/ditaval-startprop ')] |
                               *[contains(@class,' ditaot-d/ditaval-endprop ')]" mode="flag-attributes"/>
</xsl:template>

【讨论】:

【参考方案2】:

XSLT 模板可以在使用@match 属性编写时与输入文档进行匹配,或者在使用@name 属性编写时以程序方式调用。

您遇到了一个名为 commonattributes 的模板的过程调用,该模板将直接在您的 XSLT 文件中定义或通过 xsl:includexsl:import 间接定义。

在没有看到commonattributes 的定义的情况下,我们很容易猜到它的目的是将一组通用属性的定义合并到一个位置,以便通过xsl:call-template 对它们进行集中管理和应用到由生成的多个元素你的 XSLT。这是 XSLT 中的常见模式。

【讨论】:

以上是关于“ <xsl:call-template name="commonattributes"/>” 是啥意思,它是如何使用的?的主要内容,如果未能解决你的问题,请参考以下文章