.NET プラットフォームにて作業を行なっている場合、.NET 言語(例えば C#)で記述された拡張関数を使用することができます。.NET 拡張関数は XPath や XQuery 条件式内部から使用することができ、.NET クラス内部にあるコンストラクターや(static またはインスタンス変数)プロパティを呼び出すことができます。
get_PropertyName() 構文を使用することにより .NET クラスのプロパティを呼び出すことができます。
このセクションは、以下のサブセクションにより構成されています:
XPath/XQuery 条件式にある拡張関数は、 prefix:fname() の形式を取る必要があります。
•prefix: 部は、呼び出されている .NET クラスを特定する URI となります。
•fname() 部により、.NET クラス内にあるコンストラクター、プロパティ、または(静的またはインスタンス)メソッドが特定され、必要な場合は引数が与えられます。
•URI は clitype: で開始する必要があり、これにより関数が .NET 拡張関数であることが認識されます。
•拡張関数の prefix:fname() 形式は、システムクラスならびにロードされたアセンブリとともに使用することもできます。しかしクラスをロードする必要がある場合、必要な情報が含まれるパラメーターが必要になります。
アセンブリをロードするには以下のパラメーターを使用してください:
asm |
ロードするアセンブリの名前。 |
ver |
バージョン番号(ピリオドにより分離された最大4桁の整数)。 |
sn |
アセンブリ厳密名のキートークン(16新数の数値)。 |
from |
ロードするアセンブリ (DLL) の場所を特定する URI。URI が相対パスの場合、XSLT や XQuery ドキュメントに対して相対的になります。このパラメーターが指定された場合、その他のパラメーターが無視されます。 |
partialname |
アセンブリ名の一部。Assembly.LoadWith.PartialName() へ渡され、アセンブリへのロードが試みられます。 partialname が指定された場合、その他のパラメーターが無視されます。 |
loc |
例えば en-US というロケール。デフォルトは neutral です。 |
アセンブリが DLL からロードされる場合、 from パラメータが使用して、sn パラメーターは使用しないでください。アセンブリがグローバルアセンブリキャッシュ (GAC) からロードされる場合、sn パラメータを使用して from パラメーターは使用しないでください。
最初のパラメーターの前に疑問符 (?) を挿入し、パラメーター同士はセミコロンで分離する必要があります。パラメーター名へ値を受け渡すには、統合符号 (=) を使用します(以下の例を参照ください)。
XSLT において、システムクラス System.Environment を特定する名前空間宣言の例を以下に示します:
xmlns:myns="clitype:System.Environment"
XSLT において、ロードするクラスを Trade.Forward.Scrip として特定する名前空間宣言の例を以下に示します:
xmlns:myns="clitype:Trade.Forward.Scrip?asm=forward;version=10.6.2.1"
XQuery において、システムクラス MyManagedDLL.testClass を特定する名前空間宣言の例を以下に示します。2つのケースが考えられます:
1.アセンブリが GAC からロードされた場合:
| declare namespace cs="clitype:MyManagedDLL.testClass?asm=MyManagedDLL; |
ver=1.2.3.4;loc=neutral;sn=b9f091b72dccfba8";
2.アセンブリが DLL からロードされた場合(完全参照と一部の参照):
declare namespace cs="clitype:MyManagedDLL.testClass?from=file:///C:/Altova
Projects/extFunctions/MyManagedDLL.dll;
| declare namespace cs="clitype:MyManagedDLL.testClass?from=MyManagedDLL.dll; |
システムクラス System.Math 内の関数を呼び出すための完全な 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">
<xsl:output method="xml" omit-xml-declaration="yes" />
<xsl:template match="/">
<math xmlns:math="clitype:System.Math">
<sqrt><xsl:value-of select="math:Sqrt(9)"/></sqrt>
<pi><xsl:value-of select="math:PI()"/></pi>
<e><xsl:value-of select="math:E()"/></e>
<pow><xsl:value-of select="math:Pow(math:PI(), math:E())"/></pow>
</math>
</xsl:template>
</xsl:stylesheet>
math 要素にある名前空間宣言により、 math: プレフィックスと clitype:System.Math URI が関連付けられます。URI の最初にある clitype:により、それ以降の記述がシステムクラスまたはロードされたクラスを特定するものであることが示されます。XPath 条件式にある math: プレフィックスにより、拡張関数が URI (そしてクラス) System.Math に関連付けられます。拡張関数により、System.Math クラス内のメソッドが特定され、必要な場所に引数が与えられます。
上の XSLT に対する例と同様の XQuery 例を以下に示します:
<math xmlns:math="clitype:System.Math">
{math:Sqrt(9)}
</math>
上の XSLT と同様に、名前空間宣言により .NET クラス(この場合はシステムクラス)が特定されます。XQuery 式により呼び出されるメソッドが特定され、引数が与えられます。