Цель :
<xsl:param name="pFun" select="/.."/>
указывает (по крайней мере, в XPath 1.0, система типов которого очень слаба), что тип параметра $pFun
является узлом (или, более обычно, набором узлов). Таким образом, читатель знает, что значение, передаваемое для этого параметра, не должно быть строкой или целым числом.
Он также указывает, что значением по умолчанию, если этот параметр не был явно указан при вызове или применении шаблона, является пустой набор узлов.
Эта нотация имеет в первую очередь значимость документации (но см. Обновление в конце этого ответа) и полезна только в XPath 1.0, где система типов слаба. В XPath 2.0 рекомендуется явно указывать тип, чтобы процессор XPath мог лучше выполнять проверку типов, а сгенерированный код мог быть более оптимизированным и эффективным.
Таким образом, в XPath 2.0 / XSLT 2.0 (в данном конкретном случае) было бы лучше выполнить рефакторинг вышеприведенного:
<xsl:param name="pFun" as="element()">
Существуют и другие варианты таких обозначений. В ранних книгах @Michael Kay также можно найти такие выражения, как:
@comment()
Обновление : выражение /..
имеет более практическое применение, чем простое использование в целях документирования.
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/*">
<xsl:param name="pNode"/>
<xsl:copy-of select=".|$pNode"/>
</xsl:template>
</xsl:stylesheet>
Попробуйте применить это преобразование к любому документу XML. В нашем случае самый простой из возможных :
<t/>
В результате получается следующее сообщение об ошибке Saxon (аналогичная ошибка с другими процессорами XSLT 1.0):
Error at xsl:copy-of on line 8 of file:/(Untitled):
The value is not a node-set
Transformation failed: Run-time errors were reported
Теперь замените :
<xsl:param name="pNode"/>
с
<xsl:param name="pNode" select="/.."/>
и снова запустите преобразование .
На этот раз преобразование выполняется без ошибки времени выполнения.
Заключение : Возможность указать пустой набор узлов важна на практике, и выражение /..
является одним из способов достижения этого.