XForms

**XForms**（XMLフォーム言語） は、WebフォームなどのXMLデータのためのユーザインタフェースやデータ処理モデルを定義するXMLフォーマットの仕様である。HTML / XHTML のフォームの代替となるべくW3Cによって設計されたものだが、Webに限らず汎用的にデータ操作タスクのユーザインタフェースを記述する能力を有する。

策定が中止されたXHTML 2.0 と似ており、また XHTML 2.0 に XForms 自体が組み込まれる予定だった。現状の XHTML とは名前空間や構文が異なる。XForms は企業品質のWebフォームを比較的簡単に作れると言われている。

現在の XForms 1.1は2009年10月20日にW3C勧告となった。最初の XForms 1.0 がW3C勧告となったのは、2003年10月14日である。

XForms 1.0は2007年にJIS X 4178:2007としてJIS規格化もされている。

## HTMLフォームとの違い
HTMLフォームとは異なり、XForms は Model View Controller アプローチを採用している。この場合の「モデル」は、フォームデータおよびそのデータに関する制約を記述する1つ以上のXFormsモデルから成る。「ビュー」は、フォームにおけるコントロールは何か、どのようにグループ化されるか、結び付けられるデータは何かを記述する。フォームの見た目の記述には CSS を使うことができる。

あまり複雑なことをしない限り XForms 文書は単純なHTMLフォームと大差ないが、XForms には多数の最新機能がある。例えば、新たなデータを要求し、動作中にフォームを更新することができ、XMLHttpRequest/Ajax に似ているがスクリプトを必要としない。フォーム作者はユーザーデータを XML Schema のデータ型に照らして妥当性を検証でき、特定のデータを要求したり、入力コントロールを入力不可にしたり、状況によってフォームの一部を変更したり、データ間に何らかの関係を強制したり、任意個数のデータを入力可能にしたり、フォームデータから計算した値を出力したり、XML文書を使ってエントリを予め埋めたり、（サブミット時ではなく）リアルタイムにアクションに反応したり、表示に使っている機器（デスクトップか携帯機器かなど）に応じてコントロールのスタイルを修正したりできる。大抵の場合、JavaScript などのスクリプト言語を使う必要がない。

従来のフォームと同様、XForms は XML以外のサブミットプロトコル（multipart/form-data、application/x-www-form-urlencoded）を使うことができるが、XForms の新機能の1つとしてXML形式によるサーバへのデータ送信がある。XML文書をフォームの既定値データとして埋め込んでおくこともできる。XMLを扱うツールは多数存在するため、XMLを使ったサブミッションではその解析や編集が容易であり、従来のように場当たり的に構文解析が必要になるようなことはない。XForms 自身もXMLの方言であるため、XML文書をXSLTを使ってXForms文書に変換したり、逆にXForms文書からXML文書に変換可能である。XML変換言語を使えば、XFormsをスキーマ言語から生成したり、XForms を従来のHTMLフォームに変換したりできる。実際、今日のサーバ側のXformsは基本的にはそのようにして動作している。

## ソフトウェアサポート
本項目執筆時点では、XForms をネイティブでサポートしている一般的ウェブブラウザは存在しない。しかし、各種ブラウザ用プラグインとクライアント側での拡張が存在する。クライアント側での実装の一覧を以下に示す。

* Firefox XForms extension https://developer.mozilla.org/en-US/docs/Archive/Web/XForms - Mozilla Project の一部であり、Firefox および Mozilla で利用可能。一部未実装の仕様がある。
* IBM Lotus Forms
* formsPlayer - Internet Explorer 6 以上を拡張し、XForms 以外にも DOM、XPath などを実装。
* FormFaces - 純粋な JavaScript プロセッサ。XForms+HTML が直接ブラウザに送られ、JavaScript が XForms を HTML フォームに変換する。XHTML 1.0、ECMAScript-262 第三版、DOM Level 2 に対応したブラウザで使用可能（Internet Explorer, Mozilla, Firefox, Opera, Konqueror, Safari, NetFront）。
* Convex - IE6 用拡張。Java アプレットを使った実装で、オープンソースプロジェクト  Chiba の一部。

以下は、純粋なクライアント側の実装であり、ブラウザに対する拡張ではない。

* IBM Lotus Forms にはブラウザ拡張以外にスタンドアロンのクライアントも含まれる。
* OpenOffice.org versions 2.0 以降 XForms をサポート http://marketing.openoffice.org/ooocon2004/presentations/friday/vogelheim_XForms.pdf
* X-Smiles - オープンソースのJavaによるクライアント実装（XMLブラウザ）。XForms 以外にも XHTML、CSS、SVG などをサポート。
* DENG - XForms 対応の軽量XMLブラウザエンジン。CSS-3 と XForms をサポート。
* PicoForms - XForms 対応のブラウザエンジン。デモ版は XHTML, CSS, XML Events, XForms をサポートし、Java ME 搭載携帯機器で動作。
* DataMovil - 携帯機器用

XForms は、サーバ側でHTMLフォームや他のウィジェット（通常 Ajax を利用）に変換する形で即座に利用可能である。以下のような実装がある。
*  Chiba（オープンソース）
* Orbeon Forms （オープンソース）

以下は、XHTML/XForms 文書から HTML と JavaScript のコードを生成するサーバ側で利用するコンパイラ型の実装である。

* IBM Lotus Forms WebForm Server 
* AJAXForms - XHTML/XForms を HTML と JavaScript に変換（オープンソース - 2006年11月以降活動休止状態）
* XSLTForms - XHTML/XForms を XHTML と JavaScript （Internet Explorer, Mozilla, Firefox, Opera）。
* eXtremeBuilder (Korean only)

## 実装技術の比較
FormFaces、AJAXForms、XSLTForms、Chiba、Orbeon Forms はAjax技術に基づいている。サーバ側およびクライアント側の処理は実装によって様々である。例えば、FormFaces はクライアント側を完全な XForms 処理とし、XForms 標準に基づく純粋な Ajax 処理によってデータモデルを更新する。その他は、サーバ側でJavaによるXFormsのAjaxマークアップへの変換を行ってから、ブラウザにコンテンツを配信する。どちらの技術も複数種のブラウザで動作する。それぞれの実装は、依存関係、スケーラビリティ、性能、ライセンス、完成度、ネットワークトラフィック、オフライン機能、ブラウザ間の互換性などに違いがある。

FormsPlayer のようなクライアント側プラグイン技術にもいくつかの利点がある。ブラウザに組み込まれるため、既存のサーバアーキテクチャで動作でき、応答性がよく、サーバのフェッチ回数が少なくて済む。例えば、ブラウザがサポートしていないコントロールを表示できるなどのユーザフレンドリな利点もあるが、JavaScript によるウィジェットでも同じことが可能であるため、固有の長所とは言えない。

サーバ側での実装とクライアントでのプラグイン実装のトレードオフは、どこでソフトウェアを保守するかにある。どちらにしても、クライアントに要求されたプラグインをインストールするか、サーバ側でXForms変換エンジンを実装する必要がある。理論的には両方の手法を混合することも可能であり、クライアント側にXForms機能が実装されているかを調べ、実装されていたらサーバ側はXFormsでコンテンツを送信し、そうでない場合はサーバ側で変換するということが考えられる。

FormFaces はサーバ側にもクライアント側にも新たなソフトウェアを加える必要がない。クライアント側には新たなプラグインをインストールする必要はないし、サーバ側はアーキテクチャを変更する必要がない。これは、FormFaces が完全に Ajax で書かれているためである。しかしこの場合、他の手法よりもクライアントに多くの JavaScript コードがダウンロードされ（クライアント側でキャッシュされる）、XML Schema の検証はまだサポートされていない。

どの XForms 実装でも、Web 2.0 API（Google Maps、Yahoo Traffic Alerts、Kiko Calendar、Skype Voice Service など）を組み込み可能である。

## 携帯機器用 XForms
### 利点
XForms は特に携帯機器で使われた場合に、以下のような利点がある。

* HTML 4 のフォームよりも XForms を使ったユーザインタフェースの方がサーバとのやり取りが少なくて済む。
* 携帯機器の機能は様々である。その結果、各種機器向けに各種ユーザインタフェースを生成する必要があり、モバイル業界ではそれが重要となっている。XForms はフォームを機器の機能とは独立に記述できるよう設計されており、各種機器対応の作業を減らすことができる。
* XForms は JavaScript を必要とする場面を削減でき、携帯機器では JavaScript の実装にばらつきがあって信頼できないことが多いため、一種の利点になりうる。また、セキュリティ上の懸念から JavaScript を実行不可としたシステムでも利用できる可能性がある。

### 実装
上述のような利点はあるが、携帯機器での XForms 利用はまだ発展途上である。これまでに以下のような実装が登場している。
* PicoForms Micro Edition Browser - MIDP 2.0 および CLDC 1.x に対応した携帯電話で動作。Palm や Pocket PC もサポート。
* DataMovil - XForms プロセッサを組み込んだ携帯用アプリケーションの開発プラットフォーム。各種携帯機器で動作する。Java ME ベース。
* IBM Forms for Mobile Devices
* Oracle Wireless Client - 2004年3月にプレビューリリース。ただし名前に反して、携帯機器上で動作するソフトウェアは含まれておらず、Internet Explorer のプラグインになっていた（そのためプレビューと称していたと思われる）。XForms をサポート。
* FormFaces Mobile Solution - NetFront Browser で動作する 100% JavaScript 実装。

## 関連項目
* W3C勧告
* 日本産業規格（情報処理）の一覧

## 参考文献
* 
*  （テキスト自体はGFDLで公開されている）

## 外部リンク
* W3C勧告 (W3C Recommendation)
** XForms 1.0
** XForms 1.0 (Second Edition)
** XForms 1.0 (Third Edition)
** XForms 1.1
** XForms 2.0 (Working Draft)
* W3C にある XForms 関連資料
** The Forms Working Group
** The XForms Users Community Group 
** XForms 1.0 Frequently Asked Questions
** XForms for HTML Authors by Steven Pemberton（チュートリアル）
** XForms Quick Reference
* XForms 関連フォーラムとニュースリリース
** Planet XForms
** XForms Central
* ツール
** XFV XForms Validator tool
** AJAXForms
** XSLTForms
** XHTML to XForms converter （XSLT スタイルシートを使って、XHTMLフォームを XForms 文書に変換する）
** Nuxeo's XForms engine Eclipse/SWTコンポーネント
* フォーム例
** Mozilla XForms Project - Sample Forms