コントロールの追加
次にフォームに送信ボタンを追加します。コントロールパネルで[Button]コントロールを選択し、フォーム上にボタンとなる長方形を描き、好みのサイズに調整します。ボタンの配置は、デフォルトではドキュメントの左上隅になります。この配置を変えたければ、ボタンを右クリックし、コンテキストメニューから[Position and Size]を選択し、アンカーを[As Character]から他の値に変更します。
本稿では[Position and Size]の詳細には踏み込みませんが、[As Character]についてのみ簡単に説明しておきます。[As Character]はフォームコントロールを通常のドキュメントフローの一部にする設定です。ドキュメントに他のコンテンツがない場合は、フィールドのアンカー設定を[As Character]とすると、フィールドがドキュメントの外側マージンに沿って左端に配置されます。
右側のXFormsモデルパネルの[Submissions]タブをクリックします。パネル内の左端にある[Add Submission]アイコンをクリックします。それにより、図6のような[Edit Submission]フォームがポップアップします。
![図6 [Edit Submission]フォームではアクション、メソッド、送信名を指定できる 図6 [Edit Submission]フォームではアクション、メソッド、送信名を指定できる](http://cz-cdn.shoeisha.jp/static/images/article/2802/38178_figure06.jpg)
好みの名前を追加し、ファイルアクションとして「file:///」を設定し、ファイル出力を保存したいファイルシステム内の場所を入力します。Windowsなら、例えば「file:///c:/xforms/Example2.xml」を選択します。次にメソッドとしてPutを選択し、[Replace]フィールドで[Document]を選択して、フォーム送信によって既存のドキュメントが上書きされるようにします。
ファイルの送信先とボタンが定義できたので、後はこの2つをバインドするだけです。ボタンを右クリックし、コンテキストメニューから[Control]を選択して、バインドを設定します。
次に、テキストボックスを追加して、ユーザーが要素を編集できるようにします。フォームコントロールからテキストボックスアイコンを選択し、フォーム上でドラッグして、コントロールを好みのサイズに調整します。
テキストボックスを右クリックし、[Control]を選択します。図7の内容に合わせてプロパティを編集します。

[Binding expression]フィールドはXPath式です。XFormsでXPathを使用するときは、デフォルトで、生成される出力インスタンスのドキュメント要素(この例ではOpenOfficeで使用されるデフォルトのinstanceData要素)がルートになります。従って、図7の[Binding expression]フィールドの値は、実際には/instanceData/AddressPostalというXPathを意味します。この規約は糖衣構文的であり、どんな利点があるのか筆者には理解できません。
ここまでの作業を終えたら、デザインモードをオフにし、テキストフィールドに「Hello World」と入力し、送信ボタンを押してみてください。ファイルパスで参照しているフォルダが存在する場合は、次のXMLを含む新しいファイルが表示されるはずです。
<?xml version="1.0"?> <instanceData> <AddressPostal> Hello World </AddressPostal> </instanceData>
このファイルフォーマットはまだ最終的なターゲットXMLとは一致していませんが、XFormをどのように編集すればXMLドキュメントを作成できるかという例になっています。
OpenOfficeでのXForms構文
OpenOfficeでのXFormsは一般的なMVCアーキテクチャに類似しています。XFormモデルはモデル、フォームフィールドはビュー、OpenOfficeフォームはコントロールにそれぞれ対応します。注意してほしいのは、OpenOfficeフォーム名前空間はフォームとそのプロパティを抽象的に表現するという点です。XForms仕様の実際のフォーム入力部分は実装されていません。これはXFormsのXHTMLモデルとは異なります(XHTMLモデルにはコントローラに明確に対応するものがないからです)。
ここまでに作成したサンプルフォームのコードを見るには、このOpenOfficeドキュメントをunzipツールで展開し、Content.xmlというドキュメントを抽出してください。
このドキュメントはいくつかのセクションに区分されています。具体的には、すべてのドキュメントスタイルを含むスタイルセクション、データとXMLスキーマと送信情報を含むXFormセクション、実際のフォームフィールドとXMLとの間のバインディングを含むフォームコントロールセクション、そして描画されるコントロール自体が含まれるセクションです。
以降では、このドキュメントのXFormとバインディングに関する部分のコードを見ていきます。
