アクセスがクラスファイルを介したものである場合、4つのケースが考えられます:
•クラスファイルはパッケージである。XSLT または XQuery ファイルが Java パッケージと同じ場所に収められている。 (下のサンプルを参照)
•クラスファイルはパッケージでは無い。XSLT または XQuery ファイルが Java パッケージと同じ場所に収められている。(下のサンプルを参照)
•クラスファイルはパッケージである。XSLT または XQuery ファイルがランダムな場所に収められている。 (下のサンプルを参照)
•クラスファイルはパッケージである。XSLT または XQuery ファイルがランダムな場所に収められている。 (下のサンプルを参照)
クラスファイルがパッケージではなく、XSLT または XQuery ドキュメントと同じ場所に収められているケースを考えてみましょう。この場合、フォルダー内の全クラスを発見することができるため、ファイルの場所を指定する必要はありません。クラスの識別を行う構文は以下のようになります:
java:classname
ここで、
| java: によりユーザー定義の Java 関数が呼ばれていることが示されます(デフォルトでカレントディレクトリにある Java クラスがロードされます)。 |
classname は目的となるメソッドのクラスが含まれているクラスの名前です。
| クラスが名前空間 URI にて識別され、名前空間がメソッド呼び出しにて使用されます。 |
以下の例では、com.altova.extfunc パッケージにある Car クラスの getVehicleType()メソッドが呼び出されています。com.altova.extfunc パッケージは JavaProjectという名前のフォルダーに置かれており、XSLT ファイルも同じフォルダーに配置されています。
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:fn="http://www.w3.org/2005/xpath-functions"
xmlns:car="java:com.altova.extfunc.Car" >
<xsl:output exclude-result-prefixes="fn car xsl fo xs"/>
<xsl:template match="/">
<a>
<xsl:value-of select="car:getVehicleType()"/>
</a>
</xsl:template>
</xsl:stylesheet>
下のサンプルでは Car クラスの getVehicleType()メソッドが呼び出されます。 以下を述べることができます: (i) Car クラスは次のフォルダー内にあります: JavaProject/com/altova/extfunc 。 (ii) このフォルダーは下のサンプルの現在のフォルダー内に存在します。 XSLT ファイルもフォルダー JavaProject/com/altova/extfunc 内にあります。
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:fn="http://www.w3.org/2005/xpath-functions"
xmlns:car="java:Car" >
<xsl:output exclude-result-prefixes="fn car xsl fo xs"/>
<xsl:template match="/">
<a>
<xsl:value-of select="car:getVehicleType()"/>
</a>
</xsl:template>
</xsl:stylesheet>
以下の例では、com.altova.extfunc パッケージにある Car クラスの getVehicleColor()メソッドが呼び出されています。com.altova.extfunc パッケージは JavaProject という名前のフォルダーに置かれており、XSLT ファイルが任意の場所に配置されています。この場合、以下のような構文でパッケージの場所をクエリ文字列として URI 内にて指定する必要があります:
java:classname[?path=uri-of-package]
ここで、
java: によりユーザー定義の Java 関数が呼ばれていることを表します。
uri-of-package は Java パッケージの URI です。
classname は目的のメソッドが含まれているクラス名です。
| クラスは名前空間 URI により特定され、名前空間がメソッド呼び出しのプレフィックスで使用されます。以下の例ではカレントディレクトリ以外にあるクラスファイルへのアクセスを行うことができます。 |
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:fn="http://www.w3.org/2005/xpath-functions"
xmlns:car="java:com.altova.extfunc.Car?path=file:///C:/JavaProject/" >
<xsl:output exclude-result-prefixes="fn car xsl xs"/>
<xsl:template match="/">
<xsl:variable name="myCar" select="car:new('red')" />
<a><xsl:value-of select="car:getCarColor($myCar)"/></a>
</xsl:template>
</xsl:stylesheet>
以下の例では、com.altova.extfunc パッケージにある Car クラスの getCarColor()メソッドが呼び出されています。 com.altova.extfunc パッケージは JavaProject という名前のフォルダーに置かれており、XSLT ファイルが任意の場所に配置されています。以下のような構文で、クラスファイルの場所をクエリ文字列として URI 内にて指定する必要があります:
java:classname[?path=uri-of-classfile]
ここで
java: によりユーザー定義の Java 関数が呼ばれていることを表します。
uri-of-classfile は Java パッケージの URI です。
classname は目的のメソッドが含まれているクラス名です。
| クラスは名前空間 URI により特定され、名前空間はメソッド呼び出しのプレフィックスで使用されます。以下の例ではカレントディレクトリ以外にあるクラスファイルへのアクセスを行うことができます。 |
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:fn="http://www.w3.org/2005/xpath-functions"
xmlns:car="java:Car?path=file:///C:/JavaProject/com/altova/extfunc/" >
<xsl:output exclude-result-prefixes="fn car xsl xs"/>
<xsl:template match="/">
<xsl:variable name="myCar" select="car:new('red')" />
<a><xsl:value-of select="car:getCarColor($myCar)"/></a>
</xsl:template>
</xsl:stylesheet>
| メモ: | パスが外部関数により与えられている場合、ClassLoader によりパスが追加されます。 |