SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

OpenOfficeでのXForms入門

OpenOfficeのXMLフォームの使い方・デザイン方法

  • X ポスト
  • このエントリーをはてなブックマークに追加

ダウンロード サンプルソース (8.7 KB)

サンプルフォームのXFormsコード

 OpenOfficeでは、ユーザーがXFormドキュメントを保存すると、XForm内のデータが外部XMLとして保存されます。フォーム要素はBinding 1に基づいて、どのフォームをどこに出力するかを追跡します。下記の例には、送信アクションのWindows固有のファイルURIが含まれています。これはLinuxシステムならfile:///home/user/xforms/example3.xmlとなります。

<xforms:model id="Model 1">
  <xforms:instance id="Instance 1">
    <instanceData>
      <AddressPostal>Hello World</AddressPostal>
    </instanceData>
  </xforms:instance>
  <xforms:bind id="Binding 1"
    nodeset="AddressPostal"/>
  <xforms:submission id="submitthis"
    action="file:///c:/xforms/example3.xml"
    method="put" indent="false"
    omit-xml-declaration="false"
    standalone="false"
    replace="none"/>
  <xsd:schema/>
</xforms:model>

 表1に、XFormsの送信オプションを示します。

表1 XFormsの送信オプション
プロトコル/URIスキーム送信オプション
HTTPform-data-post
urlencoded-post
multipart-port
Post
Put
Get
HTTPSform-data-post
urlencoded-post
multipart-port
Post
Put
Get
FTPPut
MailToform-data-post
Post
FilePut

 本稿の例では、HTTPサーバを構成しなくてもサンプルXMLを受信できるように、ファイルURIスキームを使用してパスを定義しています。しかし、筆者の経験からすると、ファイルURIスキームはOpenOfficeの実際の運用環境には適しません。なぜなら、ファイルURIスキームでは絶対パスが必要ですし、ファイルが編集用にロックされているときに整然としたエラー処理を行えないからです。

 前掲のXFormバインディングを使用するフォーム要素は、リスト1のようになります。リスト1の重要な部分は、form:text要素のform:id属性とxforms:bind属性です。前者はテキストフィールドが格納するフォーム入力の型を判断するために使用する識別子です。後者は、StreetNameというIDを持つxforms:bindに基づいて、このフォーム要素をXFormsインスタンス内のXML要素にバインドすることを宣言します。

リスト1 XFormバインディングを使用するフォーム要素のXMLコード
<form:form form:name="Standard"
  form:apply-filter="true"
  form:command-type="table"
  form:control-implementation="ooo:com.sun.star.form.component.Form"
  office:target-frame="" xlink:href="">
  <form:properties>
    ... form properties relevant to whole form removed
        for sake of clarity.
  </form:properties>
  <form:button form:name="PushButton"
    form:control-implementation=
      "ooo:com.sun.star.form.component.CommandButton"
    form:id="control1"
    form:label="Button"
    form:button-type="submit"
    office:target-frame=""
    xlink:href=""
    form:image-data=""
    form:xforms-submission="submitthis"
    form:delay-for-repeat="PT0.50S"
    form:image-position="center">
    <form:properties>
    <form:property form:property-name="DefaultControl"
      office:value-type="string"
      office:string-value="com.sun.star.form.control.CommandButton"/>
    </form:properties>
  </form:button>
  <form:text form:name="TextBox"
    form:control-implementation=
      "ooo:com.sun.star.form.component.TextField"
    form:id="control2"
    form:convert-empty-to-null="true"
    xforms:bind="Binding 1">
    <form:properties>
      <form:property
        form:property-name="DefaultControl"
        office:value-type="string"
        office:string-value="com.sun.star.form.control.TextField"/>
    </form:properties>
  </form:text>
</form:form>

 最後に、このコードはフォームフィールドの表示を定義したプレゼンテーションマークアップを使用して入力フィールドを描画します。実際のフォーム要素はdrawという名前空間を使用して表現されます。

<text:p text:style-name="Standard">
  <draw:control text:anchor-type="paragraph"
    draw:z-index="0" draw:style-name="gr1"
    draw:text-style-name="P2"
    svg:width="2.943cm"
    svg:height="1.165cm"
    svg:x="12.217cm"
    svg:y="4.258cm"
    draw:control="control1"/>
  <draw:control
    text:anchor-type="paragraph"
    draw:z-index="1"
    draw:style-name="gr2"
    draw:text-style-name="P3"
    svg:width="6.584cm"
    svg:height="0.763cm"
    svg:x="4.597cm"
    svg:y="1.951cm"
    draw:control="control2"/>
</text:p>

 コントロールはdraw:control属性の中で使用されているid参照によってフォーム入力にバインドされます。OpenOfficeはx座標とy座標による絶対位置を使用してコントロールを描画します。OpenOfficeがドキュメントフローの中にフィールドを自動的に配置してくれると思ってはいけません。明示的な座標が必要です。

 さまざまなフォーム要素の関係を理解するには、描画される要素のことをいったん忘れ、フォームコントロールを通じたXForms要素との結び付きに注目するとよいでしょう(図8)。

図8 コントロールとフォーム要素とXFormsモデルの関係
図8 コントロールとフォーム要素とXFormsモデルの関係

 図8で左から右に見ていくと、描画されるコントロールはdraw:control属性によってフォーム内の抽象コントロールにバインドされます。例えば、最初のコントロールのdraw:control属性の値はcontrol1です。このcontrol1はフォーム上のボタンのform:idであることに注目してください。

 この関係情報を用いれば、エンドユーザーとしてデザイナを操作しなくても、マークアップを直接書くだけでOpenOffice XFormを作成できます。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Bryan Rasmussen(Bryan Rasmussen)

デンマーク政府のデータ標準化プロジェクト「OIOXML」に参加し、コアXMLとWebテクノロジの概要ならびにUBLのデンマークサブセットを担当。現在はFESD Softwareのデンマーク政府公認ディストリビュータの1つであるSoftware Innovationに勤務。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/2802 2008/08/04 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング