XForms:复杂的绑定计算



我正在寻找为绑定执行复杂计算的可能性。给出了以下实例:

<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

我的问题是,我不知道把这些计算"放"在哪里。正如您所看到的,我们需要一个带有变量的循环,它可以在循环周期之间存储一些信息。因此,我评估了以下选项:

  1. xforms:variable与xforms:repeat=>repeat内部的xforms:variable不能写入"外部"范围
  2. xforms:setvalue与一个保存临时变量的额外实例结合使用xforms:repeat
  3. xforms:xpath中的循环可以使用calculate attribute=>绑定,但没有变量

如何解决这个问题有什么建议吗?非常感谢。

您可以尝试在Javascript中实现计算,如果约会节点集发生更改,则会触发该计算。如果您使用的是Orbeon Forms,则可以使用xxforms:script扩展名。Orbeon wiki提供了一个如何基于javascript计算设置实例值的示例。

另一种解决方案是将计算完全"外部化",并创建一个小的web服务(XQuery?)来返回计算结果。您可以使用xforms:submit机制来提供该服务并访问其结果。

最新更新