.NET 拡張関数

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

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

.NET 拡張関数

.NET プラットフォームにて作業を行なっている場合、.NET 言語(例えば C#)で記述された拡張関数を使用することができます。.NET 拡張関数は XPath や XQuery 条件式内部から使用することができ、.NET クラス内部にあるコンストラクターや(static またはインスタンス変数)プロパティを呼び出すことができます。

 

get_PropertyName() 構文を使用することにより .NET クラスのプロパティを呼び出すことができます。

 

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

 

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

 

 

拡張関数のフォーム

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;

 

 

XSLT の例

システムクラス 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 クラス内のメソッドが特定され、必要な場所に引数が与えられます。

 

 

XQuery の例

上の XSLT に対する例と同様の XQuery 例を以下に示します:

 

 <math xmlns:math="clitype:System.Math">

    {math:Sqrt(9)}

 </math>

 

上の XSLT と同様に、名前空間宣言により .NET クラス(この場合はシステムクラス)が特定されます。XQuery 式により呼び出されるメソッドが特定され、引数が与えられます。

 


(C) 2019 Altova GmbH