Ρ = x'βsin(Ξ±) + x'βcos(Ξ±),
Π³Π΄Π΅ x' ΠΈ y' β ΡΡΠ°ΡΡΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΡΠΎΡΠΊΠΈ, x ΠΈ y β Π½ΠΎΠ²ΡΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΡΠΎΡΠΊΠΈ, Π° Ξ± β ΡΠ³ΠΎΠ» ΠΏΠΎΠ²ΠΎΡΠΎΡΠ°. ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½Π°Ρ Π·Π°Π³Π²ΠΎΠ·Π΄ΠΊΠ° ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ sin ΠΈ cos Π² Π±Π°Π·ΠΎΠ²ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ XPath Π½Π΅Ρ.
Π‘Π°ΠΌΡΠΌ ΠΏΡΠΎΡΡΡΠΌ Π²ΡΡ ΠΎΠ΄ΠΎΠΌ Π² ΡΠ°ΠΊΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΡΠ»ΡΡΠ°Π΅ XSLT-ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Java-ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ (Saxon, Xalan, Oracle XSLT Processor ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅) Π½Π°Π΄ΠΎ Π±ΡΠ΄Π΅Ρ Π»ΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ±ΡΡΠ²ΠΈΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ Π²ΠΈΠ΄Π°:
xmlns:math="java:java.lang.Math"
ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ math:sin ΠΈ math:cos.
ΠΠΈΡΡΠΈΠ½Π³ 10.6. ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡΠ΅Π΅ ΠΏΠΎΠ²ΠΎΡΠΎΡ<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/2000/svg"
xmlns:math="java:java.lang.Math">
<xsl:output
indent="yes"
doctype-public="-//W3C//DTD SVG 1.0//EN"
doctype-system="http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"/>
<xsl:param name="alpha" select="30"/>
<xsl:variable name="alpha-radian" select="3.14 * ($alpha div 180)"/>
<xsl:template match="/">
<svg width="200" height="200">
<desc>Simple line-based figure</desc>
<xsl:apply-templates select="ΡΠΎΡΠΊΠΈ"/>
</svg>
</xsl:template>
<xsl:template match="ΡΠΎΡΠΊΠΈ">
<g style="stroke:black; stroke-width:2">
<xsl:apply-templates select="ΡΠΎΡΠΊΠ°"/>
</g>
</xsl:template>
<xsl:template match="ΡΠΎΡΠΊΠ°">
<xsl:variable name="x1" select="@x"/>
<xsl:variable name="y1" select="@y"/>
<xsl:variable name="x2r">
<xsl:choose>
<xsl:when test="position() = last()">
<xsl:value-of select="preceding-sibling::ΡΠΎΡΠΊΠ°[last()]/@x"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="following-sibling::ΡΠΎΡΠΊΠ°[1]/@x"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="y2r">
<xsl:choose>
<xsl:when test="position() = last()">
<xsl:value-of select="preceding-sibling::ΡΠΎΡΠΊΠ°[last()]/@y"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="following-sibling::ΡΠΎΡΠΊΠ°[1]/@y"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="x2" select="number($x2r)"/>
<xsl:variable name="y2" select="number($y2r)"/>
<line
x1="{$x1 * math:cos($alpha-radian) -
$y1 * math:sin($alpha-radian) + 100}"
y1="{$x1 * math:sin($alpha-radian) +
$y1 * math:cos($alpha-radian) + 100}"
x2="{$x2 * math:cos($alpha-radian) -
$y2 * math:sin($alpha-radian) + 100}"
y2="{$x2 * math:sin($alpha-radian) +
$y2 * math:cos($alpha-radian) + 100}"/>
</xsl:template>
</xsl:stylesheet>
Π Π΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ ΡΡΠΎΠ³ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ.
ΠΠΈΡΡΠΈΠ½Π³ 10.7. Π Π΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠΈΠΉ SVG-Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ<!DOCTYPE svg
PUBLIC "-//W3C//DTD SVG 1.0//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg
xmlns="http://www.w3.org/2000/svg"
xmlns:math="java:java.lang.Math"
width="200"
height="200">
<desc>Simple line-based figure</desc>
<g style="stroke:black; stroke-width:2">
<line
x1="81.68060041188197" y1="31.70359014757173"
x2="168.29640985242827" y2="81.68060041188197"/>
<line
x1="168.29640985242827" y1="81.68060041188197"
x2="118.31939958811803" y2="168.29640985242827"/>
<line
x1="118.31939958811803" y1="168.29640985242827"
x2="31.70359014757173" y2="118.31939958811803"/>
<line
x1="31.70359014757173" y1="118.31939958811803"
x2="81.68060041188197" y2="31.70359014757173"/>
</g>
</svg>
ΠΠΈΠ·ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅Ρ ΡΠΈΡ. 10.2, Π³Π΄Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ ΠΏΠΎΠ²ΠΎΡΠΎΡ, Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π½ΡΠΉ Π½Π° 30Β°:
Π ΠΈΡ. 10.2. ΠΠΈΠ·ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ³ΠΎ SVG-Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°
ΠΠ½Π°Π»ΠΈΠ·ΠΈΡΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΌΠ΅ΡΠΈΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ Ρ ΠΏΡΠ΅ΡΠΈΠΊΡΠΎΠΌ math, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ»ΠΎ Π² Π½Π΅Π³ΠΎ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΎ:
<svg
xmlns="http://www.w3.org/2000/svg"
xmlns:math="java:java.lang.Math"
width="200"
height="200">
...
ΠΡΠΎ ΡΠΎΡ ΡΠ°ΠΌΡΠΉ ΡΠ»ΡΡΠ°ΠΉ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΡΠ°ΠΌΠΎΠΌ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠΈ, Π½ΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈΡΠ½ΠΈΠΌ Π² Π²ΡΡ ΠΎΠ΄ΡΡΠ΅ΠΌ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ΅. ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π°Π²ΠΈΡΡΡΡ ΠΎΡ Π½Π΅Π³ΠΎ, Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ Π²ΠΊΠ»ΡΡΠΈΡΡ ΠΏΡΠ΅ΡΠΈΠΊΡ math Π² Π°ΡΡΠΈΠ±ΡΡ exclude-result-prefixes ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° xsl:stylesheet.
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/2000/svg"
xmlns:math="java:java.lang.Math"
exclude-result-prefixes="math">
...
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΡ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π² ΡΡΠΎΠΌ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ²ΠΎΠΉ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΊΠ»Π°ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΡΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ ΡΠΎΡΠΊΠΈ, ΠΈΡΠΊΠ»ΡΡΠΈΠ² ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΈΠ· ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π²ΡΠ΅ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ.
ΠΠΈΡΡΠΈΠ½Π³ 10.8. ΠΠ»Π°ΡΡ, Π²ΡΡΠΈΡΠ»ΡΡΡΠΈΠΉ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΡΠΎΡΠΊΠΈ ΠΏΠΎΡΠ»Π΅ ΠΏΠΎΠ²ΠΎΡΠΎΡΠ°package de.fzi.xslt;
public class rot {
public static double X(double x, double y, double degree) {
double radian = Math.PI * degree / 180;
return x * Math.cos(radian) - y * Math.sin(radian);
}
public static double Y(double x, double y, double degree) {
double radian = Math.PI * degree / 180;
return x * Math.sin(radian) + y * Math.cos(radian);
}
}
ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ ΡΡΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ, Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ Π² ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ΅ xsl:stylesheet:
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/2000/svg"
xmlns:rot="java:de.fzi.xslt.rot"
exclude-result-prefixes="rot">
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° line ΡΠ΅ΠΏΠ΅ΡΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°ΠΏΠΈΡΠ°Π½ΠΎ Π² Π²ΠΈΠ΄Π΅:
<line
x1="{rot:X($x1, $y1, $alpha) + 100}"
y1="{rot:Y($x1, $y1, $alpha) + 100}"
x2="{rot:X($x2, $y2, $alpha) + 100}"
y2="{rot:Y($x2, $y2, $alpha) + 100}"/>
ΠΠ°ΠΊ ΠΌΡ ΠΎΡΠΌΠ΅ΡΠ°Π»ΠΈ Π²ΡΡΠ΅, ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Π²Π΅ΡΡΠΌΠ° ΡΠ°Π·Π»ΠΈΡΠ°ΡΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π·Π½ΡΠΌΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°ΠΌΠΈ Π΄Π°ΠΆΠ΅ Π² ΡΠ»ΡΡΠ°Π΅ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ°, ΠΊΠ°ΠΊ Java. ΠΡΠ»ΠΈΡΠΈΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΈ Π² ΡΠΎΡΠΌΠ΅ Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΈ Π² ΡΠΎΡΠΌΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΉ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ΅ Saxon ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠ° de.fzi.xslt.rot ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΎ ΠΊΠ°ΠΊ:
xmlns:rot="java:de.fzi.xslt.rot"
Π² Xalan β ΠΊΠ°ΠΊ:
xmlns:rot="xalan://de.fzi.xslt.rot"
Π² Oracle XSLT Processor β ΠΊΠ°ΠΊ:
xmlns:rot="http://www.oracle.com/XSL/Transform/java/de.fzi.xslt.rot"
ΠΡΠΈ ΡΡΠΎΠΌ ΡΠ°ΠΌΠΈ Π²ΡΠ·ΠΎΠ²Ρ Π²ΠΎ Π²ΡΠ΅Ρ ΡΡΠ΅Ρ ΡΠ»ΡΡΠ°ΡΡ Π±ΡΠ΄ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌΠΈ:
rot:X($x, $y, $angle)
Π΄Π»Ρ ΠΌΠ΅ΡΠΎΠ΄Π° X ΠΈΠ»ΠΈ
rot:Y($x, $y, $angle)
Π΄Π»Ρ ΠΌΠ΅ΡΠΎΠ΄Π° Y.
Π€ΡΠ½ΠΊΡΠΈΡ function-available
ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Π²ΡΠ΅Π³Π΄Π° Π΅ΡΡΡ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΡΡΠΎ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ Π² ΡΠΈΠ»Ρ ΠΊΠ°ΠΊΠΈΡ -Π»ΠΈΠ±ΠΎ ΠΏΡΠΈΡΠΈΠ½ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ Π΄Π°Π½Π½ΡΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠΌ Π½Π΅ Π±ΡΠ΄Π΅Ρ. Π§Π°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΡΡΠΎ ΡΠ»ΡΡΠ°Π΅ΡΡΡ, Π²ΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ ΠΏΡΠΎΡΡΠΎ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ Π²ΡΠ·Π²Π°ΡΡ ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π½Π° C++, Π²ΡΡΠ΄ Π»ΠΈ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΡΡΠ΅Π΄ΡΡΠ²Π° Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Java-ΠΊΠΎΠ΄Π°), Π²ΠΎ-Π²ΡΠΎΡΡΡ , ΠΊΠΎΠ³Π΄Π° ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½ΠΎ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ Π½Π΅ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ Π½Π°ΠΉΡΠΈ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ Java-ΠΊΠ»Π°ΡΡ ΠΈΠ»ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ), ΠΈ Π²-ΡΡΠ΅ΡΡΠΈΡ , ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΎ Π½Π΅Π²Π΅ΡΠ½ΠΎ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ URI java:de.fzi.xslt.rot Π²ΠΌΠ΅ΡΡΠΎ xalan://de.fzi.xslt.rot). Π Π΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ Π½Π΅ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠΌΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ, Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ, ΠΎΡΠΈΠ±ΠΊΠ°.
XSLT ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ ΡΠΎΠ΄Π° ΠΎΡΠΈΠ±ΠΎΠΊ ΠΏΡΡΠ΅ΠΌ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π½Π°Π»ΠΈΡΠΈΡ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ. ΠΠ»Ρ ΡΡΠΎΠΉ ΡΠ΅Π»ΠΈ ΡΠ»ΡΠΆΠΈΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ function-available (ΠΎΡ Π°Π½Π³Π». function is available β ΡΡΠ½ΠΊΡΠΈΡ Π΄ΠΎΡΡΡΠΏΠ½Π°)
boolean function-available(string)
Π€ΡΠ½ΠΊΡΠΈΡ function-available ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π½Π° Π²Ρ ΠΎΠ΄ ΡΡΡΠΎΠΊΡ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΡΡ ΠΈΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ true, Π΅ΡΠ»ΠΈ ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΠ·Π²Π°Π½Π° ΠΈ false β Π΅ΡΠ»ΠΈ Π½Π΅Ρ.
Π‘ΡΡΠΎΠΊΠΎΠ²ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΠΎΠ΅ ΠΈΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΠΈ QName, ΡΠΎ Π΅ΡΡΡ ΠΈΠΌΠ΅ΡΡ Π²ΠΈΠ΄ ΠΈΠΌΡ ΠΈΠ»ΠΈ ΠΏΡΠ΅ΡΠΈΠΊΡ:ΠΈΠΌΡ. Π ΠΏΠ΅ΡΠ²ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ function-available ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π»ΠΈ Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Ρ ΡΠ°ΠΊΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ function-available('concat') ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, Π²ΠΎΠ·Π²ΡΠ°ΡΠΈΡ true.
Π ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ function-available ΠΈΠΌΠ΅Π΅Ρ Π²ΠΈΠ΄ ΠΏΡΠ΅ΡΠΈΠΊΡ:ΠΈΠΌΡ, ΡΡΠ½ΠΊΡΠΈΡ function-available ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΡ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, ΠΌΠΎΠΆΠ΅Ρ Π»ΠΈ Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ Π±ΡΡΡ Π²ΡΠ·Π²Π°Π½Π° ΡΡΠ½ΠΊΡΠΈΡ rot:X, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΡΠΈΡΠ»ΠΈΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
function-available('rot:X')