Как получить значение из sqf: user-entry? - PullRequest
0 голосов
/ 07 июня 2019

Я хочу получить два целых числа от пользователя, когда пользователь пытается применить быстрое исправление с помощью правил схематора и использовать значения в качестве переменных в операции замены.Но я получаю сообщение об ошибке «переменная не была объявлена»

У меня есть это правило схематора, которое находит первый пустой элемент выбора в шаге и предлагает пользователю применить быстрое исправление.Когда пользователь применяет быстрое исправление, появляется диалоговое окно и предлагает пользователю ввести два целых числа.Пользовательский ввод будет использоваться для вычисления диапазона элементов шага.

Правило схематрона

<sch:rule context="choice[1][not(normalize-space())]">
            <sch:assert test="choice[1][not(normalize-space())]" sqf:fix='editchoice'>great
            </sch:assert>

</sch:rule>

исправление

 <sqf:fix id="editchoice">
          <sqf:description>
              <sqf:title>Enter the last step number</sqf:title>
          </sqf:description>

          <sqf:user-entry name="step1" type="xs:integer" >
              <sqf:description>
                  <sqf:title>Enter the first step to be converted to choice</sqf:title>
              </sqf:description>
          </sqf:user-entry>

          <sqf:user-entry name="laststep" type="xs:integer">
              <sqf:description>
                  <sqf:title>Enter the last step to be converted</sqf:title>
              </sqf:description>

          </sqf:user-entry>

          <sqf:replace match="./ancestor::steps/step[position()>$step1 and not(position()>=$laststep)]" target='choice' node-type='keep'></sqf:replace>

      </sqf:fix>

Ожидаемый результат

$ step1 и $ laststep должны быть заменены значениями userinput.

фактический результат

Переменная step1 не была объявлена ​​(или ее объявление не находится в области видимости)

1 Ответ

0 голосов
/ 09 июня 2019

В настоящее время не существует реализации, которая поддерживает использование пользовательских записей в атрибуте match (я работаю над этим ...).

Тем временем вы должны сделать это:

<sqf:replace match="./ancestor::steps/step">
    <sch:let name="pos" value="count(preceding-sibling::step) + 1"/>
    <xsl:choose>
        <xsl:when test="$pos > number($step1) and not($pos >= number($laststep))">
            <choice/>
        </xsl:when>
        <xsl:otherwise>
            <sqf:copy-of select="."/>
        </xsl:otherwise>
    </xsl:choose>
</sqf:replace>

Примечание : вам нужен number(), потому что реализация Oxygen nativ еще не поддерживает type ввода пользователя.

...