計算スクリプトリファレンス

計算スクリプトボキャブラリの概要や使用方法、要素・属性を解説します。

1. 概要

計算スクリプトボキャブラリの概要を説明します。

1.1. 用途・役割

ボキャブラリコンポーネントで処理されるXML文書内で計算を行う仕組みを提供するボキャブラリです。

1.2. 名前空間URI参照

計算スクリプトボキャブラリの名前空間URI参照は http://xmlns.xfy.com/calc です。 以下の説明で、計算スクリプトボキャブラリの要素を記述するときは、calc:という名前空間接頭辞を使用します。

このほか、以下の説明中に出現するボキャブラリと、そのボキャブラリに使用している名前空間接頭辞は次のとおりです。

1.3. 計算スクリプトをXML文書で使用する方法

計算スクリプトを使用する方法には、処理命令で定義したスクリプトを割り当てる方法、計算スクリプトを任意の要素の属性として埋め込んで使用する方法(属性埋め込み)、XVCDに関連づけて使用する方法の3つがあります。

1.3.1. 処理命令による割り当て

処理命令で計算スクリプトをXML文書に割り当てて使用する方法には、次の2とおりの指定方法があります。

XML文書からの外部ファイル指定
XML文書内に処理命令を記述して、特定の計算スクリプトファイルをXML文書に割り当てることができます。特定の計算スクリプトファイルをXML文書に割り当てるときは、com.xfy処理命令にcalculationパラメータを指定して、次のようにXMLファイルに記述します。
<?com.xfy calculation href="計算スクリプトファイルのURL" ?>
XML文書内への埋め込み
計算スクリプトをXML文書に埋め込み記述できます。埋め込み計算スクリプトを使用する場合、埋め込む計算スクリプトのcalc:calc要素には、必ずid属性を設定します。埋め込み計算スクリプトのid属性に指定したID値を、com.xfy calculation処理命令に次のように記述します。
<?com.xfy calculation href="#埋め込み計算スクリプトのcalc:calc要素のid属性の値" ?>
XML文書に埋め込む計算スクリプトは、対象のXML文書のルート要素内に記述します。

com.xfy calculation処理命令で複数の計算スクリプトを割り当てたときは、先に記述された計算スクリプトが優先されます。

1.3.2. 属性埋め込み

属性埋め込みを使用して計算スクリプトを記述する場合は、値に計算式を記述した calc:expression大域属性を計算スクリプトを埋め込む要素に設定します。

1.3.3. XVCDへの関連づけ

XVCDに計算スクリプトを関連づける場合、 xvcd:xvcd要素の内容として calc:calc要素または calc:import要素を記述します。

計算スクリプトの適用範囲は、次のとおりです。

  • xvcd:vocabulary要素で作成されたボキャブラリコンポーネントが適用された文書に対して、そのxvcd:vocabulary要素が記述されたXVCDで定義された計算スクリプトがすべて有効となります。
  • また、 xvcd:include要素 xvcd:import要素で取り込まれたcalc:calc要素やcalc:import要素も、すべて有効となります。

また、計算スクリプトが実行されるタイミングは、次のとおりです。

  • ボキャブラリコンポーネントが文書に適用されたときに、すべての計算式に対して再計算処理が行われます。
    再計算の結果、文書に反映される計算結果が更新される場合は、編集フラグが設定されます。この変更はアンドゥで戻すことができます。
    ボキャブラリコンポーネントが文書に適用されるのは、ファイルを開いたときや、ボキャブラリコンポーネントを切り替えたときです。
  • 文書に対する計算スクリプトの自動計算は、ボキャブラリコンポーネントが適用されている限り有効です。

1.4. 計算の実行

計算の実行は、計算スクリプトに記述されている式が参照しているノードの内容が変更された場合と、計算スクリプトに記述されている式自体が変更された場合とで、実行されるタイミングが異なります。

計算スクリプトに記述されている式が参照しているノードの内容が変更された場合
自動的に計算が実行されます。
計算スクリプトに記述されている式が追加・変更された場合
XML文書に割り当てられた計算スクリプトと、属性埋め込みで記述された計算スクリプトとで異なります。
  • XML文書に割り当てられた計算スクリプトが追加・変更されたときは、その後、文書が再読み込みされたときに計算が実行されます。
  • 属性埋め込みで記述された計算スクリプトが追加・変更されたときは、計算スクリプトの編集が確定したときに自動的に計算が実行されます。
計算スクリプトが削除された場合
XML文書に割り当てられた計算スクリプトが削除されたり、calc:expression大域属性が要素から削除されたり、calc:expression大域属性が設定された要素自体が削除されたりした場合は、その計算スクリプトに基づいた計算は実行されなくなります。

計算式が参照しているノードと計算式との参照関係が循環参照になった場合、計算は反復せずに1回だけ実行されます。

2. 計算スクリプトボキャブラリに属する要素・属性

計算スクリプトボキャブラリに属する要素・属性を解説します。

2.1. 計算スクリプト

計算スクリプトの記述に使用される要素・属性は以下のとおりです。

calc:calc 要素

計算スクリプト全体を含む要素です。

属性:
id

calc:calc要素を識別する属性です。ID値を記述します。XML文書内に計算スクリプトを埋め込む場合、この属性で設定されたID値でcalc:calc要素を識別します。

省略した場合、属性に値が設定されていないと見なされます。

version (必須)

計算スクリプトのバージョン番号を設定する属性です。必ず1.0を設定します。

内容:

calc:calc要素内には、 calc:bind要素を1つ以上、任意の数だけ記述できます。

calc:bind 要素

計算式と、計算結果の出力先のノードを指定する要素です。 計算結果の出力先には、ノードセットを指定することもできます。ノードセットを指定した場合、ノードセット内のそれぞれの要素に計算結果が出力されます。

属性:
target (必須)

計算結果の出力先のノードまたはノードセットを指定する属性です。XPath式で記述します。XPath式を評価するときのコンテキストノードは、計算スクリプトの関連付け方法によって異なります。

XVCDに関連づけられている場合
ボキャブラリコンポーネントが適用された頂点要素をコンテキストノードとします。
それ以外の場合
文書ノードをコンテキストノードとします。

計算結果の出力先は、XPath式を評価した結果、得られたノードの種類によって異なります。

テキストノードの場合
そのテキストノードに計算結果を出力します。
要素ノードの場合
子ノードの最初のテキストノードを取得し、そのテキストノードに計算結果を出力します。
属性ノードの場合
その属性ノードに計算結果を出力します。
ノードセットの場合
ノードセット内の各ノードの種類を判断して出力対象となるノードに出力します。

計算式は、この属性で指定されたノードをコンテキストノードとして評価されます。ノードセットが指定された場合は、ノードセット内の各ノードをコンテキストノードとして、計算式が評価されます。

expression (必須)

計算式を設定する属性です。XPath式で記述します。 計算式には数値を参照するノードを指定できます。ノードを指定するときは、絶対パスだけでなく、target属性で指定したノードまたはノードセットからの相対パスを使用することもできます。

内容:

calc:bind要素は空要素です。

calc:import 要素

別のファイルに記述された計算スクリプトを取り込む要素です。この要素は計算スクリプトをXVCDに関連づける場合にのみ使用できます。

属性:
href (必須)

取り込みたい計算スクリプトファイルのURIを設定する属性です。XVCDファイルからの相対URIで指定することもできます。

内容:

calc:import要素は空要素です。

2.2. 属性埋め込み

計算スクリプトを属性埋め込みで記述するときに使用される大域属性は、以下のとおりです。

calc:expression 属性

XML文書内の任意の要素に計算スクリプトを埋め込みで記述するときに使用する大域属性です。値には、計算式を表すXPath式を設定します。

3. 計算スクリプトボキャブラリに属する関数

計算スクリプト内で利用可能な関数は、以下のとおりです。

calc:apex-element 関数

計算スクリプトがXVCDに関連づけられているときに、ボキャブラリコンポーネントが適用されている頂点要素を返す関数です。

構文:
node-set calc:apex-element( )
引数:

引数をとりません。

返値:
node-set

計算スクリプトがXVCDに関連づけられているときは、ボキャブラリコンポーネントが適用されている頂点ノードだけを含むノードセットを返します。そうでないときは、空のノードセットを返します。