我正在寻找为绑定执行复杂计算的可能性。给出了以下实例:
<root>
<appointments>
<appointment><date>2012-01-01</date></appointment>
<appointment><date>2012-01-03</date></appointment>
</appointments>
<weeks />
</root>
weeks
节点依赖于appointment
节点:
$weeks = 0
$week_begin = xs:date("1970-01-01")
for $appointment in //appointments/appoinment
if # Check if $appointment is in new week
$weeks = $weeks + 1
$week_begin = # Do some more calculationx
我的问题是,我不知道把这些计算"放"在哪里。正如您所看到的,我们需要一个带有变量的循环,它可以在循环周期之间存储一些信息。因此,我评估了以下选项:
- xforms:variable与xforms:repeat=>repeat内部的xforms:variable不能写入"外部"范围
- xforms:setvalue与一个保存临时变量的额外实例结合使用xforms:repeat
- xforms:xpath中的循环可以使用calculate attribute=>绑定,但没有变量
如何解决这个问题有什么建议吗?非常感谢。
您可以尝试在Javascript中实现计算,如果约会节点集发生更改,则会触发该计算。如果您使用的是Orbeon Forms,则可以使用xxforms:script
扩展名。Orbeon wiki提供了一个如何基于javascript计算设置实例值的示例。
另一种解决方案是将计算完全"外部化",并创建一个小的web服务(XQuery?)来返回计算结果。您可以使用xforms:submit
机制来提供该服务并访问其结果。