2011-01-05 7 views
5

(eXistとXSLTFormを使用して)XMLデータベースへのXFormインターフェイスを設計する際に、オプションの要素の入力コントロールを含めたいと思います。 XMLデータレコードは既に存在し、一部にはオプションの要素が含まれていますが、他の要素は含まれていません。レコードを更新するには、既存のXMLレコードをモデルインスタンスとして使用しています。問題は、オプションの要素が存在しない、つまり論理的ですが、ユーザーがオプションの要素にデータを追加するときに問題が発生した場合にフォームコントロールが表示されないことです。オプションのXML要素のXFormコントロールを許可する

<a> 
    <b>content</b> 
</a> 

RNCスキーマを持つ:

をより明確にするために、ここでの例のデータレコード、data.xmlのだ

start = 
    element a { 
    element b { text }, 
    element notes { text }? 
    } 

のXFormsモデル:

<xf:model> 
    <xf:instance xmlns="" src="data.xml"/> 
    <xf:submission id="save" method="post" action="update.xq" /> 
</xf:model> 

そして、制御:

<xf:input ref="https://stackoverflow.com/a/notes"> 
    <xf:label>Notes (optional): </xf:label> 
</xf:input> 

「Notes」入力コントロールが表示されないという問題があります。

明らかな解決策は、ユーザーが必要に応じて要素を挿入できるようにトリガーボタンを追加することですが、入力コントロールを表示させて空にすることをお勧めします。

私の質問は、コントロールが常に表示されるように、あまり知られていない属性/バインド/複数インスタンス/ xpath式の微妙な組み合わせですか?

答えて

2

XFormsはこのオプションの要素の状況をうまく処理しません。ミカのブログのthis related discussionを参照してください。あまりにも満足できる回避策では、eXistからデータを取得した後にそれらのオプション要素に空の要素を追加し、データをeXistに保存する前にそれらを削除することです。

+1

この提案をお寄せいただきありがとうございます。私は、_new_要素を挿入して追加するのは簡単ではないことを発見しました。 – Cam

+1

はい、 'xforms:insert'はかなり複雑な構造です。特に、その要素で使用できるすべての属性が原因です。しかし、2-3の主な使用事例があり、それぞれが異なる属性を要求しています。そして、一度それらの事柄のハングを取得すると、より簡単になります。 'xforms:insert'のチュートリアルをhttp://wiki.orbeon.com/forms/how-to/repeat-insert-position – avernet

2

この状況はすでにW3Cフォームグループによって議論されています。http://www.w3.org/2010/07/07-forms-minutes.html 新しいMIPを使用すると、XSLTFormsでこれを実装できます。

-Alain

+0

で見つけることができます。アラン、XSLTFormsに感謝します!素晴らしいリソース。そして、これを解決する可能性のある将来の道へのポインタに感謝します。 – Cam

関連する問題