Реализация Orbeon элемента itemset, не способного проходить элементы с пространствами имен? - PullRequest
0 голосов
/ 27 января 2011

Я пытаюсь запустить этот код:

<xforms:select1 xmlns:xbl="http://www.w3.org/ns/xbl"
                                            xmlns:fb="http://orbeon.org/oxf/xml/form-builder"
                                            xmlns:pipeline="java:org.orbeon.oxf.processor.pipeline.PipelineFunctionLibrary"
                                            appearance="xxforms:tree"
                                            bind="retrievalControl-bind"
                                            id="retrievalControl-control-laidOut">
<xforms:label ref="$form-resources/retrievalControl/label"/>
<xforms:help ref="$form-resources/retrievalControl/help"/>
<xforms:itemset nodeset="instance('fr-form-instance')/retrievalSection/retrievalControl/*/*/APP">
    <xforms:label ref="NAME"/>
    <xforms:value />
</xforms:itemset>

, где retrievalControl содержит этот документ:

<?xml version="1.0" encoding="utf-8"?><jax-rx:results xmlns:jax-rx="http://jax-rx.sourceforge.net"><jax-rx:result><APP count="1">
        <NAME>ABCD</NAME>
        <ID>12</ID>
    </APP>
</jax-rx:result></jax-rx:results>

Но это не работает (нет элементов, созданных для select1). Если я удаляю / * / * / APP, чтобы напечатать весь документ как метку элемента (изменив метку на ref = ".", Он извергает данные.

Не могу понять, почему он не может пройти через элементы, для которых jax-rx указан как ns ... любые обходные пути (запрос отлично работает в XMLSpy)?

Обновление на основе самого раннего ответа (27 января) ниже:

<xhtml:html xmlns:xhtml="http://www.w3.org/1999/xhtml"
        xmlns:xforms="http://www.w3.org/2002/xforms"
        xmlns:xxforms="http://orbeon.org/oxf/xml/xforms"
        xmlns:ev="http://www.w3.org/2001/xml-events"
        xmlns:xs="http://www.w3.org/2001/XMLSchema"
        xmlns:fr="http://orbeon.org/oxf/xml/form-runner">
<xhtml:head>
    <xforms:model>
        <xforms:instance>
            <instance>
                <weird/>
            </instance>
        </xforms:instance>
        <xforms:instance id="fr-form-instance">
            <form>
                <retrievalSection>
                    <retrievalControl>
                        <jax-rx:results xmlns:jax-rx="http://jax-rx.sourceforge.net">
                            <jax-rx:result>
                                <APP count="1">
                                    <NAME>ABCD</NAME>
                                    <ID>12</ID>
                                </APP>
                            </jax-rx:result>
                        </jax-rx:results>
                    </retrievalControl>
                </retrievalSection>
            </form>
        </xforms:instance>
        <xforms:bind id="fr-form-binds" nodeset="instance('fr-form-instance')">
            <xforms:bind id="retrievalSection-bind" nodeset="retrievalSection" name="retrievalSection">
                <xforms:bind id="retrievalControl-bind" nodeset="retrievalControl" name="retrievalControl"/>
            </xforms:bind>
        </xforms:bind>
        <xforms:submission resource="http://AURLWhereOurExampleDataFileIsAvailale"
                           method="get"
                           id="getData"
                           replace="text"
                           instance="fr-form-instance"
                           targetref="/instance/weird"
                           serialization="none">
            <xforms:message ev:event="xforms-submit-error" level="modal">A submission error occurred:<xforms:output value="event('error-type')"/>
            </xforms:message>
        </xforms:submission>
        <xforms:send ev:event="xforms-ready" submission="getData"/>
    </xforms:model>
</xhtml:head>
<xhtml:body>
    <xforms:select1 xmlns:xbl="http://www.w3.org/ns/xbl"
                    xmlns:fb="http://orbeon.org/oxf/xml/form-builder"
                    xmlns:pipeline="java:org.orbeon.oxf.processor.pipeline.PipelineFunctionLibrary"
                    appearance="xxforms:tree"
                    bind="retrievalControl-bind"
                    id="retrievalControl-control-laidOut">
        <xforms:itemset nodeset="instance('fr-form-instance')">
            <!--<xforms:itemset nodeset="instance('fr-form-instance')/retrievalSection/retrievalControl/*/*/APP">-->
            <!--<xforms:itemset nodeset="instance()/*/*/APP">-->
            <xforms:label ref="."/>
            <xforms:value/>
        </xforms:itemset>
    </xforms:select1>
</xhtml:body>

Я исследовал проблему дальше, основываясь на 1-м ответе ниже, и проблема, похоже, связана не со способностью анализировать элементы с пространствами имен, а, возможно, с тем, как была реализована отправка XForms (или с моим плохим пониманием, в этом случае я запрашиваю исправлено через ответ на этот вопрос). Проблема с отправкой XForms заключается в неправильной замене экземпляра при попытке заменить = «текст», но, вероятно, также влияет на замену = «экземпляр», кажется, замена происходит а) только на экземпляре по умолчанию и б) происходит неправильно по сравнению со спецификацией говорит, что есть (от http://www.w3.org/TR/xforms11/#submit-data-replacement):

Если атрибут замены содержит значение «текст» и ответ на отправку соответствует медиатипу XML (как определено спецификаторами типа контента в [RFC 3023]) или типу текстового мультимедиа (как определено спецификатором типа контента text / *), затем данные ответа кодируются в виде текста и заменяют содержимое целевого узла замены.

Хорошо, это можно доказать, заполнив все содержимое экземпляра в метке элемента в select1, обратите внимание, что приведенный выше идентификатор отправки getData пытается заменить targetref, который даже не существует в идентификаторе экземпляра, на который есть ссылка, но это работает (это не работает, если я правильно поставил targetref для идентификатора экземпляра, на который есть ссылка; другими словами, это работает, только если targetref указывает на действительный узел в экземпляре 'default' (который оказывается первым экземпляром) , а не идентификатор экземпляра, на который ссылаются. И даже когда он работает, он не заменяет контент в узле targetref (и я не знаю, где именно он (механизм замены представления Orbeon) размещает этот контент, все, что я знаю, это то, что он помещает этот контент где-то в экземпляр по умолчанию, но где - во вновь созданном текстовом узле?)

Вам нужно будет изменить ресурс отправки на URL-адрес, на котором доступен пример файла данных, извините, не могу сделать его более автономным.

Ответы [ 2 ]

0 голосов
/ 01 февраля 2011

XForms 1.1 говорит о targetref:

"Контекст оценки в рамках элемент представления используется для оценить выражение ".

Вы пишете в своем примере:

<xforms:submission resource="http://AURLWhereOurExampleDataFileIsAvailale"
                   method="get"
                   id="getData"
                   replace="text"
                   instance="fr-form-instance"
                   targetref="/instance/weird"
                   serialization="none">

Атрибут instance не изменяет контекст оценки в области (насколько я могу прочитать спецификацию), поэтому здесь targetref он не относится к атрибуту instance, а к области действия представления. оценочный контекст, который, поскольку вы не указали атрибут ref, является экземпляром по умолчанию (первым).

В основном, если вы используете targetref, не используйте instance как вещи, тогда запутайтесь.

Удалите атрибут instance и напишите targetref="instance('fr-form-instance')/weird".

Теперь, если вы сделаете это с обновленным примером выше, вы получите xforms-submit-error, так как узел не существует во втором экземпляре.

Посмотрим, поможет ли вам это дальше.

0 голосов
/ 28 января 2011

Я подозреваю, что <retrievalControl> на самом деле не содержит <jax-rx:results>, как вы ожидаете.Если я создаю автономный пример, который объединяет вставленные вами фрагменты, все работает как положено (см. Ниже).У вас был бы полный (и минимально возможный) пример, который воспроизводит это?

<xhtml:html xmlns:xhtml="http://www.w3.org/1999/xhtml"
            xmlns:xforms="http://www.w3.org/2002/xforms"
            xmlns:xxforms="http://orbeon.org/oxf/xml/xforms"
            xmlns:ev="http://www.w3.org/2001/xml-events"
            xmlns:xs="http://www.w3.org/2001/XMLSchema"
            xmlns:fr="http://orbeon.org/oxf/xml/form-runner">
    <xhtml:head>
        <xforms:model>
            <xforms:instance>
                <instance>
                    <select1/>
                    <jax-rx:results xmlns:jax-rx="http://jax-rx.sourceforge.net">
                        <jax-rx:result>
                            <APP count="1">
                                <NAME>ABCD</NAME>
                                <ID>12</ID>
                            </APP>
                        </jax-rx:result>
                    </jax-rx:results>
                </instance>
            </xforms:instance>
        </xforms:model>
    </xhtml:head>
    <xhtml:body>
        <xforms:select1 xmlns:xbl="http://www.w3.org/ns/xbl"
                        xmlns:fb="http://orbeon.org/oxf/xml/form-builder"
                        xmlns:pipeline="java:org.orbeon.oxf.processor.pipeline.PipelineFunctionLibrary"
                        appearance="xxforms:tree"
                        ref="select1"
                        id="retrievalControl-control-laidOut">
            <xforms:itemset nodeset="instance()/*/*/APP">
                <xforms:label ref="NAME"/>
                <xforms:value/>
            </xforms:itemset>
        </xforms:select1>
    </xhtml:body>
</xhtml:html>
...