0

シーケンスから取得した引数を使用してxquery関数を呼び出す一般的な方法はありますか?

たとえば、私はこれを行うことができます:

let $dateandtime := (xs:date('2006-08-15'),xs:time('12:30:45-05:00'))
return fn:dateTime($dateandtime[1], $dateandtime[2])

しかし、すべての引数を明示的に指定fn:dateTime せずに、シーケンスを指定するだけで呼び出す方法はありますか?(シーケンスはネストできないため、これの有用性は限られていることに気づきました。)

これを他の言語でどのように達成するかの例を次に示します。

  • Python:functionname(*args)
  • javascript:functionname.apply(null, args)
  • php:call_user_func_array('functionname', $args)
4

1 に答える 1

2

現在、XQueryでこれを行う方法はありません。Javaなどの他の型付き言語と同様に、関数シグネチャの割り当ては通常、コンパイル時に行われます。クエリを評価する前にシーケンス内のアイテムの数が不明な場合があるため、多くの場合、正しい関数シグネチャの静的な選択は失敗します(一般的な注意:関数には複数の関数シグネチャがあり、各シグネチャには異なる数が含まれる場合があります)引数の)。

ただし、Javaには、実行時に関数に動的にアクセスして呼び出すためのリフレクションパッケージが用意されています。XQuery 3.0の新しい高次機能を使用して、別のapply($f as function(*), $s as item()*)関数を導入できます。それが役立つと思われる場合は、W3IssueTrackerがそのような機能を要求するのに最適なプラットフォームである可能性があります。

于 2012-08-10T20:24:14.440 に答える