Java 拡張関数

www.altova.com このトピックを印刷 前のページ 1つ上のレベル 次のページ

ホーム >  付録 > XSLT と XPath/XQuery 関数 > その他の拡張関数 >

Java 拡張関数

Java 拡張関数は、XPath または XQuery 条件式にて使用することができるほか、Java のコンストラクターを呼び出したり、Java の(静的またはインスタンス)メソッドを呼び出すことができます。

 

Java クラスのフィールドは、引数を持たないメソッドとして扱われます。フィールドは静的またはインスタンスとして存在することができます。フィールドへのアクセス方法については、静的とインスタンスの両方について、以下のサブセクションにて記述されます。

 

このセクションは以下のサブセクションにより構成されます:

 

Java:コンストラクター
Java:静的メソッドと静的フィールド
Java:インスタンスメソッドとインスタンスフィールド
データ型:XPath/XQuery から Java へ
データ型:Java から XPath/XQuery へ

 

以下の点に注意してください

Altova デスクトップ製品を使用している場合、 Altova アプリケーションは、 Java 仮想マシンへのパスを(以下の順序で)読み取ることにより自動的に検知しようとします : (i) Windows レジストリ (ii) JAVA_HOME 環境変数。アプリケーションのオプションダイアログ内にカスタムパスを追加することもできます。 このエントリは自動的に検知された他の Java VM パス以上の優先順位を有します。
Altova サーバー製品が Windows マシン上で作動している場合、 the path to the Java 仮想マシンへのパスは Windows レジストリから最初に読み取られます。成功しない場合、 JAVA_HOME 環境変数が使用されます。
Altova サーバー製品を作動する場合、および、Linux または macOS マシン上でサーバー製品を作動する場合、Java 仮想マシンへのパスが JAVA_HOME 環境変数内に保管されていることを確認してください。\bin\server または \bin\client ディレクトリ内の jvm.dll ファイルを指している必要があります。

 

 

 

 

拡張関数のフォーム

XPath/XQuery 条件式における拡張関数では、 prefix:fname()の形式を取る必要があります。

 

prefix: 部により拡張関数が Java 関数として認識されます。 java:から始まる URI のスコープ内の名前空間宣言に拡張関数を関連付けることで Java 関数であるという認識が行われます。名前空間の宣言により、例えば xmlns:myns="java:java.lang.Math" という Java クラスが特定されます。名前空間の宣言は、(コロン無しの) xmlns:myns="java" という形式で、Java クラスの識別子を拡張関数にある fname() 部の左型に配置することでも行うことができます。
fname() 部により、呼び出されている Java メソッドが識別され、メソッドの引数が提供されます(以下の例を参照ください)。 prefix: 部にて識別された名前空間 URI が Java クラスを識別できなかった場合、Java クラスの識別はクラスの前にくる fname() 部にて行うことになり、ピリオドによりクラスから分離されることになります(以下にある2番目の XSLT サンプルを参照)。

 

メモ:呼び出されるクラスはコンピューターのクラスパス上にある必要がありあす。

 

 

XSLT サンプル

以下に静的メソッドを呼び出す2つのサンプルを示します。最初のサンプルでは、クラス名 (java.lang.Math) が名前空間 URI に加えられており、 fname() へ加えることはできません。 2 番目のサンプルでは、 prefix: 部に java: が与えられており、 fname() 部にてクラスとメソッドが識別されます。

 

 <xsl:value-of xmlns:jMath="java:java.lang.Math
                 select="jMath:cos(3.14)" />

 

 <xsl:value-of xmlns:jmath="java
                 select="jmath:java.lang.Math.cos(3.14)" />

 

拡張関数内にあるメソッド名(上の例では cos() )は、名前付き Java クラス(上の例ではjava.lang.Math )の public な静的メソッドの名前に一致する必要があります。

 

 

XQuery サンプル

以下に XSLT のサンプルに似た XQuery のサンプルを示します:

 

 <cosine xmlns:jMath="java:java.lang.Math">

    {jMath:cos(3.14)}

 </cosine>

 

 

ユーザー定義された Java クラス

独自の Java クラスやメソッドを作成した場合、(i) JAR ファイル(または class ファイル)を介してこれらクラスファイルへアクセスしているか、(ii) これら(JAR または class)ファイルが、カレントディレクトリ(XSLT や XQuery ドキュメントが存在するディレクトリ)に配置されているかにより、これらクラスの呼び出し方法が変わってきます。これらファイルの特定方法については、ユーザー定義クラスファイルならびにユーザー定義 JAR ファイルを参照ください。カレントディレクトリには無いクラスファイルや JAR ファイルへのパスは指定しなければならないことに注意してください。

 


(C) 2019 Altova GmbH