0

私はこのコードを実行しようとしています:

<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>

ここで、retrieveControl には次のドキュメントが含まれています。

<?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="." に変更すると、データが吐き出されます。

ns として指定された jax-rx を持つ要素をトラバースできない理由がわかりません...回避策 (クエリは XMLSpy で正常に動作します)?

以下の最も早い回答 (1 月 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>

以下の最初の回答に基づいて問題をさらに調査しましたが、問題は名前空間を使用して要素を解析する機能ではなく、おそらく XForms Submission の実装方法にあるようです (または、私の理解が不十分な場合は、この質問への回答)。XForms Submission の問題は、replace="text" で試みた場合のインスタンス置換の失敗ですが、おそらく replace="instance" にも影響します。置換は、a) デフォルト インスタンスでのみ発生し、b) 仕様と比較して正しく発生しないようです。これは(http://www.w3.org/TR/xforms11/#submit-data-replacementから):

replace 属性に値 "text" が含まれ、送信応答が XML メディア タイプ ([RFC 3023] のコンテンツ タイプ指定子で定義されている) またはテキスト メディア タイプ (text/* のコンテンツ タイプ指定子で定義されている) に準拠している場合)、その後、応答データはテキストとしてエンコードされ、置換対象ノードのコンテンツを置換します。

わかりました。これは、インスタンスのコンテンツ全体を select1 の item-label に入力することで証明できます。上記の送信 ID getData は、参照されているインスタンス ID にも存在しない targetref を置き換えようとしていますが、機能することに注意してください。 (参照されているインスタンス ID の targetref を正しく配置すると機能しません。つまり、targetref が「デフォルト」インスタンス (たまたま最初のインスタンス) の有効なノードを指している場合にのみ機能します。インスタンス ID が参照されます. そしてそれが機能する場合でも、それは targetref ノードのコンテンツを置き換えません (そして、それ (Orbeon の送信置換メカニズム) がそのコンテンツをどこに配置するかは正確にはわかりません.デフォルトのインスタンスですが、どこで - 新しく作成されたテキスト ノードですか?)

サンプル データ ファイルが利用可能な URL に送信リソースを変更する必要があります。

4

2 に答える 2

0

あなたが期待しているように、それ<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>
于 2011-01-27T23:33:10.760 に答える
0

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、ノードが 2 番目のインスタンスに存在しないため、 が得られます。

これがあなたをさらに進めるかどうか見てみましょう.

于 2011-02-01T03:07:44.987 に答える