XML文書内へ計算スクリプトを埋め込んで計算を行うには、
calc:calc要素とcom.xfy calculation処理命令をXML文書内に記述します。calc:calc要素のid属性には、calc:calc要素を識別する値を記述します。com.xfy calculation処理命令のhref属性には、埋め込み計算スクリプトを記述したcalc:calc要素のid属性に設定した値を、先頭に#を付けて記述します。今回は、com.xfy calculation処理命令のid属性の値をcalcとします。これらを大まかに記述したXML文書は、次のようになります。
<?xml version="1.0"?>
<?com.xfy calculation href="#calc"?>
<!-- id値の前に#を付ける -->
<sample:items>
<calc:calc id="calc" version="1.0">
....
</calc:calc>
....
</sample:items>
calc:calc要素のversion属性には計算スクリプトのバージョンを記述します。現在提供されている計算スクリプトのバージョンは1.0です。そのため、version属性の値には「
1.0
」を設定します。
calc:calc要素の内容には、
calc:bind要素を記述します。calc:bind要素のそれぞれの属性には、次の値を記述します。
-
target属性
- 計算結果の出力先に指定するノード
-
expression属性
- XPath式で表された計算式
ここでは、計算結果の出力先のノードはsample:total要素とsample:sum要素なので、計算スクリプトは次のようになります。
<calc:calc id="calc" version="1.0">
<calc:bind
target="/sample:items/sample:item/sample:total"
expression="number(../sample:price)*number(../sample:quantity)" />
<calc:bind
target="/sample:items/sample:sum"
expression="sum(/sample:items/sample:item/sample:total)" />
</calc:calc>
ここまでの内容を反映したXML文書は、次のようになります。強調文字で表記した箇所が、変更された箇所です。
<?xml version="1.0"?>
<?com.xfy vocabulary-connection href="Calculation2.xvcd" ?>
<?com.xfy calculation href="#calc"?>
<sample:items
xmlns:calc="http://xmlns.xfy.com/calc"
xmlns:sample="http://xmlns.xfy.com/sample/calculation"
>
<calc:calc id="calc" version="1.0">
<calc:bind
target="/sample:items/sample:item/sample:total"
expression="number(../sample:price)*number(../sample:quantity)" />
<calc:bind
target="/sample:items/sample:sum"
expression="sum(/sample:items/sample:item/sample:total)" />
</calc:calc>
<sample:item>
<sample:title>リンゴ</sample:title>
<sample:price>100</sample:price>
<sample:quantity>10</sample:quantity>
<sample:total>
0
</sample:total>
</sample:item>
<sample:item>
<sample:title>ミカン</sample:title>
<sample:price>50</sample:price>
<sample:quantity>30</sample:quantity>
<sample:total>
0
</sample:total>
</sample:item>
<sample:sum>0</sample:sum>
</sample:items>
編集が完了したら、Calculation3.xmlというファイル名で、Calculation2.xvcdと同じフォルダに保存します。