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フォームとは異なり、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 をネイティブでサポートしている一般的ウェブブラウザは存在しない。しかし、各種ブラウザ用プラグインとクライアント側での拡張が存在する。クライアント側での実装の一覧を以下に示す。
以下は、純粋なクライアント側の実装であり、ブラウザに対する拡張ではない。
XForms は、サーバ側でHTMLフォームや他のウィジェット(通常Ajax を利用)に変換する形で即座に利用可能である。以下のような実装がある。
以下は、XHTML/XForms 文書から HTML と JavaScript のコードを生成するサーバ側で利用するコンパイラ型の実装である。
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 利用はまだ発展途上である。これまでに以下のような実装が登場している。