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 => xforms:variable внутри повтора не может записывать во «внешнюю» область
  2. xforms:setvalue в сочетании с дополнительным экземпляром, который содержит временные переменные и xforms:repeat
  3. xforms:bind с атрибутом calculate => циклы for в xpath возможны, но не переменные

Любые советы, как подойти к этой проблеме? Спасибо!


person lacco    schedule 17.02.2012    source источник
comment
Можете ли вы привести мне один пример таких сложных расчетов. Приведенный выше пример является неполным.   -  person Jayy    schedule 17.02.2012
comment
У меня есть код на Ruby, который может сделать алгоритм более конкретным...   -  person lacco    schedule 17.02.2012


Ответы (1)


Вы можете попытаться реализовать вычисление в Javascript, которое срабатывает, если набор узлов назначений изменился. Если вы используете Orbeon Forms, вы можете использовать xxforms:script расширение. В вики Orbeon есть пример установки значения экземпляра на основе вычисление javascript.

Другим решением было бы полностью «вынести наружу» вычисление и создать небольшую веб-службу (XQuery?), которая бы возвращала результат вычисления. Вы можете использовать механизм xforms:submit, чтобы передать эту службу и получить доступ к ее результату.

person tohuwawohu    schedule 18.02.2012