データ型:XPath/XQuery から .NET へ

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

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

データ型:XPath/XQuery から .NET へ

.NET 拡張関数が XPath/XQuery 条件式内部で使用された場合、複数ある .NET メソッドのうち、どれが呼び出されたのか決定するのに関数の引数に使用されるデータ型が重要になります。

 

.NET では、以下のルールが適用されます:

 

クラス内に同名のメソッドが2つ以上ある場合、呼び出しに使用された引数の数がマッチするメソッドだけが、呼び出される関数の候補に狭められます。
XPath/XQuery の文字列、数値、boolean データ型は黙示的に対応する .NET データ型へ変換されます(以下のリストを参照)。与えられた XPath/XQuery 型が2つ以上の .NET 型へ変換できる場合(例: xs:integer )、選択されたメソッドにて宣言されている .NET 型が使用されます。例えば、呼び出された .NET メソッドが fx(fouble) で、与えられた XPath/XQuery データ型が xs:integer の場合、 xs:integer が .NET の double データ型へ変換されます。

 

以下のテーブルに、XPath/XQuery の文字列、数値、boolean 型から .NET データ型へ行われる黙示的な変換リストを示します。

 

xs:string

StringValue, string

xs:boolean

BooleanValue, bool

xs:integer

IntegerValue, decimal, long, integer, short, byte, double, float

xs:float

FloatValue, float, double

xs:double

DoubleValue, double

xs:decimal

DecimalValue, decimal, double, float

 

 

上のリストにある XML スキーマ型(ならびに XPath や XQuery で使用されているデータ型)のサブタイプも、対応する祖先のサブタイプとして .NET のデータ型へ変換されます。

 

場合によっては、与えられた情報から正しい.NET メソッドを選択することができない場合もあります。例えば、以下のような場合を考えてみましょう:

 

与えられた引数が10ある xs:untypedAtomic 値で、mymethod(float) メソッドへ渡されるのを意図している。
しかし、そのクラスには別のデータ型をとる mymethod(double) というメソッドも存在する。
メソッド名が同じで、与えられた型 (xs:untypedAtomic) も floatdouble の両方に変換することができるため、xs:untypedAtomicfloat ではなく double に変換される可能性もある。
結果として、意図したメソッドは選択されず、予期しない動作結果がを招く可能性がある。この問題を回避するには、意図したメソッドを使用するユーザー定義のメソッドを別の名前で新たに作成する必要があります。

 

上のリストでカバーされていない型(例: xs:date)は変換されずエラーとなります。

 


(C) 2018 Altova GmbH