XForms - динамически назначать ресурс экземпляра - PullRequest
0 голосов
/ 04 июня 2019

У меня есть коллекция XML-файлов, каждый из которых описывает одно гибридное животное с его родителями.

На странице raport.html я отображаю таблицу со всеми животными, у каждого из которых есть отдельная ссылка на сайт xForms.

В моем файле xForms у меня есть

<?xml-stylesheet type="text/xsl" href="http://localhost:8080/exist/rest/db/apps/xsltforms/xsltforms.xsl"?><?xsltforms-options debug="no"?>
<html xmlns="http://www.w3.org/1999/xhtml" 
xmlns:ev="http://www.w3.org/2001/xml-events" 
xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:xf="http://www.w3.org/2002/xforms"
xmlns:z="zwierzeta" xmlns:a="anatomia">
    <head>
        <title>XForms</title>
        <xf:model>
            <xf:instance resource="data/liger.xml"/>
            <xf:submission id="update" resource="data/liger/xml" replace="none" method="put"/>
        </xf:model>
    </head>
    <body>
        <xf:input ref="/z:animals/z:animal/z:name">
            <xf:label>Name:</xf:label>
            <xf:hint>Nazwa</xf:hint>
        </xf:input>

           (...)

         <xf:submit submission="update">
            <xf:label>Save changes</xf:label>
         </xf:submit>

        <xf:trigger>
            <xf:label>Add parent</xf:label>
            <xf:action ev:event="DOMActivate">
                <xf:insert ref="//z:hybrid/z:animal[last()]" position="after" at="last()"/>
                <xf:setfocus control="nameInput"/>
            </xf:action>
        </xf:trigger>

        <xf:trigger>
            <xf:label>Delete parent</xf:label>
            <xf:delete ref="//z:hybrid/z:animal" at="index('parent')" ev:event="DOMActivate"/>
        </xf:trigger>

        <a href="raport.html">HomePage</a>

    </body>
</html>

Что работает хорошо, пока я пишу имя файла и не пытаюсь его изменить.

Как я могу передать различные xml-файлы в файл xForms, чтобы модель обновлялась с правильными данными для каждого животного?

Я пытался использовать функцию xQuery

declare function app:editFile($node as node(), $model as map(*)) {
    let $name := request:get-parameter('animal', '')
    let $a := (collection("/db/apps/projekt/data")/animals/animal[name=$name or hybrid//name=$name])[1]
    let $file := "data/" || $a/name/text() || ".xml"
    return 
        <xf:model>
            <xf:instance resource="{$file}"/>
            <xf:submission id="update" resource="{$file}" replace="none" method="put"/>
        </xf:model>
};

и пытается отобразить результат в файле xForms, используя элемент с class="app:editFile", но он не работает.

Я тоже пробовал

<xf:model>
<xf:instance resource="concat('data/',get-request-parameter('animal'),'.xml')"/>
<xf:submission id="update" resource="concat('data/',get-request-parameter('animal'),'.xml')" replace="none" method="put"/>
</xf:model>

но этот тоже не работает.

...