標準仕様書(TS)   TS X 0077:2005

XMLフォーム言語(XForms)1.0

XForms 1.0



序文

この標準仕様書(TS)は,2003年10月にWorld Wide Web Consortium(W3C)から公表された XForms 1.0勧告を翻訳し,技術的内容を変更することなく作成した標準仕様書(TS)である。

1. 概要

1.1 背景

フォームはウェブの重要な位置を占めており,対話型ウェブアプリケーションを実現するための主要な手段として現在でも使用されている。ウェブアプリケーション及び電子商取引ソリューションによって,対話機能を豊富に備えるより優れたウェブフォームに対する需要が発生している。XForms 1.0はこれにこたえるものであり,XFormsプロセサを介した,利用者とその相手(通常は遠隔エージェント)とのオンライン対話のための,プラットフォームに依存しない新しいマーク付け言語を提供する。 XFormsはHTMLフォームの後継であり,HTMLフォームから得た教訓が生かされている。

XFormsの背景情報の詳細については,http://www.w3.org/MarkUp/Forms/を参照。

1.4 文書規約

この標準仕様書(TS)では,次の名前空間接頭辞及び対応する名前空間識別子を使用する。

xforms: XForms名前空間 (http://www.w3.org/2002/xforms) 3.1 XForms名前空間
html: XHTML名前空間 (http://www.w3.org/1999/xhtml) [XHTML 1.0]
xsd: XMLスキーマ名前空間 (http://www.w3.org/2001/XMLSchema) [XML Schema part 1]
xsi: インスタンス名前空間のためのXMLスキーマ (http://www.w3.org/2001/XMLSchema-instance) [XML Schema part 1]
ev: XMLイベント名前空間 (http://www.w3.org/2001/xml-events) [XML Events]
my: 任意の利用者定義の名前空間

これは,(規定ではなく)単なる規約に過ぎない。実際には,どんな名前空間接頭辞を使用してもよい。

この標準仕様書(TS)では,技術内容を表示するために,次の表記上の規約を使用する。

正式な用語は,ほとんどの用語について 13. 定義 の中に定義する。用語へのリンクは,必要に応じて,特に強調表記されている。

XForms内におけるさまざまな要素のXML表現は,XHTMLのモジュール化[XHTML Modularization]における抽象モジュールの構文を用いて表される。

例は,次のとおりに強調表記される。

例:項目例
 Example Item 

外部文書への参照は次のとおりに表記される:この標準仕様書(TS)の参照箇所へのリンクをもつ[参照の例]

参照の例
参照 - [参照の例]からリンクされている。

次の表記規約は,参考情報である注釈に使用される。

備考:
読者に対する親切な説明又は忠告。

2. XFormsへの導入

XFormsは数年に渡るHTMLフォームの経験を基にして設計されている。HTMLフォームは電子商取引革命の中心的な役割としてその価値を示し,改良の余地のある点を多く示した。

XFormsがXML形式であることを別にすれば,XFormsとHTMLフォームとの一つ目の相違点は,収集されるデータと個々の値を収集する制御のマーク付けとの分離である。この分離によって,何をどこに送付するのかを明確にできるため,XFormsはHTMLフォームと比較して扱いが容易である。また,フォームの本質的な部分が,それが使用されるページから取り出しやすくなったため,フォームの再使用も容易に行える。

主要な相違点の二つ目は,XFormsはXHTMLに組み込まれるように設計されてはいるが,XHTMLに限らず,その他の適切なマーク付け言語にも組込みが可能である点である。

XFormsでは,文書作成,再使用,国際化,アクセシビリティ,操作性及びデバイスからの独立に関して改良が行われた。

強い型付け

送付されるデータは強く型付けされたものであり,一般的なツールによって検査が可能なものとする。この機能によって,妥当性検証のためにデータをサーバとの間で往復させる必要が少なくなるため,フォームの入力を迅速化できる。

XML送付

これによって,送付されたデータをバックエンドのアプリケーションに整合するように変換する仕組みをサーバ側に独自に用意する必要がなくなる。 バックエンドのアプリケーションでは,受信したXML文書を直接,妥当性検証し,処理できる。

既存のスキーマの再使用

これによって,スキーマを二重に保持する必要がなくなる。背後にあるビジネスロジックの変更に起因して検証規則を更新する場合でも,XFormsアプリケーション内で妥当性検証制約を再記述する必要はない。

外部スキーマの援用

XFormsの文書作成者はバックエンドで用意された制約の基本セット以外にも制約を指定できる。 XFormsモデルの一部として制約を追加指定することで,ウェブアプリケーションの操作性は全体的に向上する。

国際化

インスタンスデータにXML 1.0を使用することで,送付されるデータを国際化対応にできる。

アクセシビリティの向上

XFormsでは,内容及び表示は分離されている。ラベルなどの関連するメタデータはすべて,利用者インタフェース制御によってカプセル化されるため,さまざまな表示様式を使用した場合にアプリケーションのアクセシビリティを向上させることができる。XForms利用者インタフェース制御は特定の表示様式に限定されず,デバイスに依存しない。

複数装置のサポート

利用者インタフェース制御は抽象的なものであるため,利用者インタフェースの記述は目的に基づいたものとなり,利用者との対話を別の装置向きなものにすることが可能になる。

スクリプトの削減

一般的な状況に対応できるXMLベースの宣言的なイベントハンドラを定義することで,XForms文書の大多数は静的に組み立てられる。その結果,イベントハンドラ用のスクリプトの必要性を削減している。

2.1 例

XFormsの場合,フォームは,そのフォームが何を行うのかについて記述するXFormsモデルと呼ばれる部分と,フォームがどのように表示されるのかを記述する別の部分とで構成される。

次のとおりに可視化される単純な電子商取引のフォームについて考えてみる。

screen shot of a graphic rendering

収集する値は,現金及びクレジットカードのいずれを使用するのかを表す値,クレジットカードの場合はさらに,クレジットカードの番号及び有効期限とする。

これはXFormsのmodel要素で表すことができ,XHTMLでは通常headセクションに含められる。

<xforms:model>
  <xforms:instance>
    <ecommerce xmlns="">
      <method/>
      <number/>
      <expiry/>
    </ecommerce>
  </xforms:instance>
  <xforms:submission action="http://example.com/submit" method="post"
                     id="submit" includenamespaceprefixes=""/>
</xforms:model>

この記述は単に,三つの情報を収集し(型については言及していないことに注意),それらを action属性内のURLを使用して送付することを示している。

XForms 1.0で定義しているフォーム制御は,はん用的に使用でき,デバイスに中立,プラットフォーム非依存なものとする。フォーム制御はXFormsの結合機構を介してXFormsモデルに結合される。この例では,制御においてref属性を使用している。 XHTMLでは,このマーク付けは通常,bodyセクション内に記述される(ここでは意図的にXForms名前空間接頭辞を省略している。)。

<select1 ref="method">
  <label>支払い方法の選択:</label>
  <item>
    <label>現金</label>
    <value>cash</value>
  </item>
  <item>
    <label>クレジットカード</label>
    <value>cc</value>
  </item>
</select1>
<input ref="number">
  <label>クレジットカード番号:</label>
</input>
<input ref="expiry">
  <label>有効期限:</label>
</input>
<submit submission="submit">
  <label>送付</label>
</submit>

ここでは,次の点に注意する。

  • 利用者インタフェースは,ラジオボタンを使用するようにハードコーディングされず,場合によって,音声ブラウザなどの異なるデバイスでは適切な方法で“一つを選択 (select1)”の概念を表現できる。

  • フォーム制御には必ずラベルが直接関連付けられており,そのラベルは子要素として記述される。これはアクセシビリティを強化するための鍵となる機能とする。

  • HTMLのように,form要素で囲む必要はない(単一文書内に複数のフォームを記述する方法の詳細については, 2.4 単一文書内の複数フォーム を参照)。

  • フォーム制御を指定するマーク付けは,HTMLフォームと比較して簡略化されている。

このようにしてフォーム制御をモデルに結合でき,任意のフォーム制御マーク付けをモデルとの結合に使用できるため,XFormsを他のホスト言語に組み込むのは容易である。

2.2 XMLインスタンスデータの供給

XFormsプロセサは収集されたデータをXMLとして直接送付できる。この例では,送付されるデータは次のとおりになる。

例:送付されるデータ
<ecommerce>
  <method>cc</method>
  <number>1235467789012345</number>
  <expiry>2001-08</expiry>
</ecommerce>

XFormsプロセサは,このインスタンスデータを介して,部分的に記入されたフォームの状態を常に把握する。 インスタンスデータには初期値が指定されることもあるが,この例のとおりに空のままの場合もある。要素instanceは実質,XML文書の骨格を保持するもので,この骨格は利用者がフォームに記入したときに更新される。これによって,文書作成者は,送付されるXMLデータの構造を十分に制御することができる。これには名前空間情報も含まれる。フォームが送付されるとき,このインスタンスデータはXML文書として順次直列化される。次に示すのは,前述の例に対する別の方法である。

例:モデル
<xforms:model>
  <xforms:instance>
    <payment method="cc" xmlns="http://commerce.example.com/payment">
      <number/>
      <expiry/>
    </payment>
  </xforms:instance>
  <xforms:submission action="http://example.com/submit" method="post"
                     includenamespaceprefixes="#default"/>
</xforms:model>

この場合,送付されるデータは次のようになる。

例:送付されるデータ
<payment method="cc" xmlns="http://commerce.example.com/payment">
  <number>1235467789012345</number>
  <expiry>2001-08</expiry>
</payment>

ここでは,次の点に注意する。

  • XMLインスタンスデータの構造には,属性の使用方法を含めて,柔軟性が十分にある。 XML名前空間が使用されていること,文書作成者が選択したラッパー要素にインスタンスデータが含まれていることに注意する。

  • number及びexpiryの二つの空要素は,XML構造内のプレースホルダとして機能し,利用者が指定したフォームデータが格納される。

  • フォーム制御に対する初期値(“cc”)はインスタンスデータで指定される。この例では,属性methodに対して指定されている。利用者がフォーム制御に表示されているデータを変更した場合,送付されるXML内では,この初期値は利用者の入力で置き換えられる。

このインスタンスデータをフォーム制御と関連付けるためには,フォーム制御上のref属性を,次の結合式を使用して,インスタンスデータ上の適切な部分を指すように変更する必要がある。

例:refを使用したフォーム制御のインスタンスノードへの結合
...
xmlns:my="http://commerce.example.com/payment"   ...
  <xforms:select1 ref="@method">...</xforms:select1>
  ...
  <xforms:input ref="my:number">...</xforms:input>
  ...
  <xforms:input ref="/my:payment/my:expiry">...</xforms:input>

結合式の基本はXPath [XPath 1.0]であり,次に示すとおりに属性を参照するのに“@”を使用する。ここでは説明する目的で,最初の二つの式でXPathの文脈ノードを使用している。この場合の文脈ノードは最上位要素のmy:paymentである。三つ目の式では,絶対パスを使用している。

2.3 値の制約

XFormsでは,フォームへの入力時に,データの妥当性を検証することができる。収集される値の型に関する情報が足りない場合には値はすべて文字列として返されるが,インスタンスデータ内の値には型を割り当てることができる。 この例では,numberには14~18けたの数だけを,expiryには月及び日の組合せとして有効なものだけを入力できるようにすることが望ましい。

さらに,number及びexpiryに対するクレジットカード情報のフォーム制御は,methodで“cc”が選択された場合にだけ意味をもつ。その場合には必須である。

文書作成者は,付加的なモデル項目特性を指定することで,フォーム内に多くの宣言的な妥当性検証情報を含めることができる。この検証情報はXMLスキーマだけでなく,relevantなどのXForms固有の追加情報からも取得される。XForms固有の特性はbind要素に指定される。一方,スキーマ制約は内部又は外部のXMLスキーマの素片として記述される。次に例を示す。

例:モデル項目特性を使用する宣言的な妥当性検証情報
...
xmlns:my="http://commerce.example.com/payment"...
  <xforms:model>
    ...
    <xforms:bind nodeset="/my:payment/my:number"
                 relevant="/my:payment/@method = 'cc'"
                 required="true()"
                 type="my:ccnumber"/>
    <xforms:bind nodeset="/my:payment/my:expiry"
                 relevant="/my:payment/@method = 'cc'"
                 required="true()"
                 type="xsd:gYearMonth"/>
    <xsd:schema ...>
      ...
      <xsd:simpleType name="ccnumber">
        <xsd:restriction base="xsd:string">
          <xsd:pattern value="\d{14,18}"/>
        </xsd:restriction>
      </xsd:simpleType>
      ...
    </xsd:schema>
  </xforms:model>
備考:
上の例で,relevant式には(“/”で始まる)XPathの絶対記法が使用されている。これは,計算される式の評価文脈ノードはbind ref結合式によって決定され( 7.4 評価文脈 を参照),例えば,最初のbind要素のrelevant属性の相対ノードパスはすべて/my:payment/my:numberが基準になるためである。

2.4 単一文書内の複数フォーム

XForms処理では,フォームを含んでいる(単一の)文書において個々のフォームの数についての制限はない。単一文書に複数のフォームを含める場合,各フォームに対して個別のmodel要素が必要であり,文書の他の場所から参照できるように,それぞれにid属性を付ける必要がある。

さらに,フォーム制御では,結合するインスタンスデータを含むmodel要素を指定することが望ましい。これは結合属性の一部であるmodel属性を使用して行う。model属性が結合要素上に指定されない場合,最も近い祖先の結合要素のmodel属性が使用され,それも指定されない場合は,文書順で最初のXFormsモデルが使用される。この方法は,“有効範囲を考慮した解決”と呼ばれ,XFormsで頻繁に使用される。

次の例では,上の電子商取引フォームに意見調査を加える。

例:pollモデルを加える
<xforms:model>
  <xforms:instance>
    ...payment instance data...
  </xforms:instance>
  <xforms:submission action="http://example.com/submit" method="post"/>
</xforms:model>
<xforms:model id="poll">
  <xforms:instance>
    <helpful/>
  </xforms:instance>
  <xforms:submission id="pollsubmit" .../>
</xforms:model>

次のマーク付けが文書のbodyセクションに追加される。

例:pollモデル用のフォーム制御
<xforms:select1 ref="/helpful" model="poll">
  <xforms:label>このページは役立ちましたか?</xforms:label>
  <xforms:item>
    <xforms:label>まったく役に立たなかった。</xforms:label>
    <xforms:value>0</xforms:value>
  </xforms:item>
  <xforms:item>
    <xforms:label>ほとんど役に立たなかった。</xforms:label>
    <xforms:value>1</xforms:value>
  </xforms:item>
  <xforms:item>
    <xforms:label>少しは役に立った。</xforms:label>
    <xforms:value>2</xforms:value>
  </xforms:item>
  <xforms:item>
    <xforms:label>非常に役に立った。</xforms:label>
    <xforms:value>3</xforms:value>
  </xforms:item>
</xforms:select1>
<xforms:submit submission="pollsubmit">
  <xforms:label>送付</xforms:label>
</xforms:submit>

ここでの主な相違は,インスタンスを特定するmodel="poll"の使用である。submitはIDによってsubmission要素を参照し,結合属性を必要としないことに注意する。

XFormsの例は 附属書G 完全なXFormsの例 にもある。

3. 文書構造

XForms 1.0はXML [XML 1.0]アプリケーションであり,他のXML語い(彙),特にXHTML [XHTML 1.0]の将来版の中で使われるように設計されている。XFormsはこのホスト言語を必要とする。ここでは,XFormsを他の文書型と共に使用することを可能にする,XFormsの構造について記述する。

3.2 XForms主要属性集合

3.2.2 リンク付け属性

リンク付け属性集合は,遠隔の資源へのリンクを含むXForms要素に適用される。

src

src属性には,自動的な取得を行うための,取得先URIを割り当てる。

備考:
リンク付け属性のURIはXMLスキーマデータ型xsd:anyURIとして定義されているので,[XML Schema part 2]に記述されている国際化に関する恩恵及び空白についての注意が同様に適用される。

リンクにおける相対URIの振る舞いは,[XML Base]による処理が強く推奨されてはいるが,ホスト言語に依存する。

備考:
XForms作業グループは,リンク構造の記述に関して,HTML作業グループの動向を追っている。

3.2.3 単一ノード結合属性

次の属性はフォーム制御又はアクションと,XPath式で指定されるインスタンスデータノードとの結合を定義する。

ref

XPathとして解釈される結合式bind属性が指定されている場合,この属性は意味をもたない。

model

XFormsモデルセレクタ。この結合要素に関連付けられるXFormsモデルのIDを指定する。この属性は,bind属性が指定されている場合,この結合要素に関して意味をもたない。XFormsモデルの文脈決定規則については, 7.4 評価文脈 を参照。

bind

bind要素への参照。

ref又はbindのいずれかを指定する必要がある。bindが指定された場合,ノードは参照先のbindによって決定される。

model属性に指定されたIDREFmodel要素上にはないIDを指している場合,又はbind属性に指定されたIDREFbind要素上にはないIDを指している場合,XFormsプロセサは例外( 4.5.1 xforms-binding-exceptionイベント )を発生させる。

先頭ノード規則:サイズが1を超えるノード集合が単一ノード結合属性に割り当てられている場合,ノード集合の中から文書順で先頭のノードが使われる。

3.2.4 ノード集合結合属性

次の属性はフォーム制御又はアクションと,XPath式で指定されるノード集合との結合を定義する。

nodeset

XPathとして解釈される結合式bind属性が指定されている場合,この属性は意味をもたない。

model

XFormsモデルセレクタ。この結合要素に関連付けられるXFormsモデルのIDを指定する。この属性は,bind属性が指定されている場合,この結合要素に対して意味をもたない。XFormsモデルの文脈決定規則については, 7.4 評価文脈 を参照。

bind

bind要素への参照。

nodeset又はbindのいずれかを指定する必要がある。bindが指定された場合,ノード集合は参照先のbindによって決定される。

model属性に指定されたIDREFがmodel要素上にはないidを指している場合,又はbind属性に指定されたIDREFがbind要素上にはないidを指している場合,XFormsプロセサは例外( 4.5.1 xforms-binding-exceptionイベント )を発生させる。

3.3 XForms主要モジュール

XForms主要モジュールはXFormsの主な構造化要素を定義するもので,XFormsを含んでいる文書に取り込まれることが意図されている。このモジュールに含まれる要素及び属性は次のとおりである。

要素 属性 最小内容モデル
model 共通, イベント, functions (QNameList), schema (xsd:anyURIのリスト) (instance|xsd:schema| submission|bind|アクション)*
instance 共通, リンク付け (任意)
submission 共通, ref (結合式), bind (xsd:IDREF), action (xsd:anyURI), method ("post"|"get"|"put"|"form-data-post"|"urlencoded-post"|qname-but-not-ncname), version (xsd:NMTOKEN), indent (xsd:boolean), mediatype (xsd:string), encoding (xsd:string), omit-xml-declaration (xsd:boolean), standalone (xsd:boolean), cdata-section-elements (QNameList), replace ("all"|"instance"|"none"|qname-but-not-ncname), separator (';' | '&'), includenamespaceprefixes (xsd:NMTOKENS) アクション*
bind 共通, モデル項目特性, nodeset (モデル結合式) (bind)*

上に示したとおりに,XFormsアクションモジュールで定義されている要素は, そのモジュールが取り込まれている場合,model及びsubmissionの内容モデル中でも許可される。

含んでいる文書中のこれらの構造化要素は通常は可視化されない。

XFormsプロセサは,認識できないすべての外来の名前空間属性を無視しなければならない。そして,認識できない外来の名前空間要素を 3.4 XForms MustUnderstandモジュール の規則に従って処理しなければならない。

外来の名前空間要素が存在するかどうかは,含んでいる文書プロファイルの定義に依存する。

3.3.1 model要素

この要素はフォーム定義を表し,XFormsモデルを定義する要素を格納する目的で使用される。XFormsを含んでいる文書内のmodel要素の数についての制限はない。

共通属性:共通, イベント

オブザーバの作成を容易にするために,XMLイベントの属性を使用することができる。この要素はXFormsアクションではなく,イベントベースの振る舞いは事前定義されていない。

特殊属性:

functions

省略可能。このXFormsモデルに必要なXPath拡張関数(QNamesで表される。)のスペース区切りのリスト。この属性の使用方法については 7.12 拡張関数 を参照。

schema

省略可能。このmodel要素の外にあるXMLスキーマ文書を指すxsd:anyURIのリスト。XFormsプロセサはこの属性にリストされたすべてのスキーマを処理しなければならない。個々のXFormsモデルには,名前空間宣言当たり一つのスキーマという制限があり,これには内部のスキーマ及びリンクされたスキーマも含まれる。

備考:
schemaリストは,XFormsを含んでいる文書内の他の場所にある要素を指す“#myschema”などのURI素片を含んでもよい。

modelの使用方法の単純な例を示す。ここでは,XForms名前空間は指定されていない。

例:モデル
<model id="Person" schema="MySchema.xsd">
  <instance src="http://example.com/cgi-bin/get-instance" />
  ...
</model>

3.3.2 instance要素

この省略可能な要素は,初期インスタンスデータを含むか参照する。

共通属性:共通

特殊属性:

リンク付け属性

省略可能。外部定義された初期インスタンスデータへのリンク。リンク走査に失敗した場合,例外( 4.5.2 xforms-link-exceptionイベント )として処理する。

この属性及び行内内容の両方が提供された場合, 4.2.1 xforms-model-constructイベント に規定しているとおり,リンクが優先する。

初期インスタンスデータがリンクによって指定された場合,インスタンスデータは,リンクされた資源のXPathデータモデルを作成することで形成される。

初期インスタンスデータが行内内容によって指定された場合,インスタンスデータは,最初に行内内容の分離コピー(外側の祖先から継承された名前空間を含む。)を作成し,その分離コピー上にXPathデータモデルを作成することで得られる。この分離コピーは,独立した別の文書として存在する場合に整形式XMLとなり得るものでなければならない。つまり,instanceの要素内容は単一の子要素に制限される。

行内内容でインスタンスが指定されたとき,XML誤りが原因で分離コピーを作成できなかった場合,処理はxforms-link-exceptionで停止することが望ましい。この誤りは,例えば,行内内容に二つの要素ノードがあり,それが,ドキュメント要素が二つ存在するXML文書の作成を意味している場合などに発生する。

備考:
XForms 1.1では,新しい例外イベントが規定される予定である。
備考:
XForms文書作成者は,名前空間ノードの直列化に関する制御を追加する必要がある場合,submission要素のincludenamespaceprefixes属性を使用することができる。
備考:
XPathデータモデルのデータは,処理命令,コメントノード及びすべてのホワイトスペースも含め,すべて処理中及び送付中に維持されなければならない。

3.3.3 submission要素

この要素は,送付の対象及び方法についての宣言的な指示を表す。送付処理の詳細については, 11. 送付 を参照。

共通属性:共通

特殊属性:

bind

省略可能。bind要素への参照。この属性が指定された場合, ref属性に指定されたどの結合参照よりも優先する。

ref

省略可能。インスタンスデータの部分送付を可能にするセレクタ結合式。選択されたノード及びそのすべての子孫が送付対象となる。 デフォルト値は“/”とする。

action

必須。インスタンスデータの送付先URI。リンクにおける相対URIの振る舞いは,[XML Base]による処理が強く推奨されてはいるが,ホスト言語に依存する。

method

必須。直列化されたインスタンスデータの送付に使われるプロトコルを示す。デフォルトの値はない。

version

省略可能。直列化されるXMLの版数を示す属性。

indent

省略可能。直列化するときに読みやすくするための空白ノードを挿入するべきかどうかを示す属性。

mediatype

省略可能。XMLインスタンスの直列化のためのメディア型を示す属性。文書作成者は,指定した型がapplication/xmlと互換性があることを確実にすることが望ましい。

encoding

省略可能。直列化のための符号化を示す属性。

omit-xml-declaration

省略可能。インスタンスデータの直列化の際にXML宣言を省略するかどうかを示す属性。

standalone

省略可能。直列化されるXMLにstandalone宣言を含めるかどうかを示す属性。

cdata-section-elements

省略可能。CDATAセクションを伴う形式で直列化する要素名を示す属性。

replace

省略可能。送付実行後に返された情報をどのように処理するかを示す属性。この属性が指定されなかった場合,“all”が仮定される。

separator

省略可能。URL符号化において,名前及び値の組のそれぞれを区切る文字を示す属性。省略時の値は';'とする。

includenamespaceprefixes

省略可能。名前空間の直列化に対する制御を指定する属性。指定しなかった場合は,インスタンスデータ内のすべての名前空間ノードが直列化の対象になる。指定する場合,明示的に使用されるものを除いた,直列化の対象とする名前空間接頭辞のリストを指定する。[Exc-C14N]にあるように, 特別な値#defaultは,デフォルトの名前空間を示す。

次の例は,submission要素のさまざまなオプションがapplication/xmlとしての直列化にどのように影響するかを示す。次のXFormsの素片を考える。

<xforms:model xmlns:xforms="http://www.w3.org/2002/xforms"
              xmlns:my="http://ns.example.org/2003">
  <xforms:instance>
    <qname xmlns="">my:sample</qname>
  </xforms:instance>
  <xforms:submission method="post" action="..."/>
</xforms:model>

includenamespaceprefixes属性が指定されていないため,すべての名前空間ノードが直列化される。結果として直列化されるインスタンスデータは次のとおりになる。

<qname xmlns:xforms="http://www.w3.org/2002/xforms"
       xmlns:my="http://ns.example.org/2003">my:sample</qname>

特に,XForms名前空間が直列化されていることに注意する。この例で,必要なmy接頭辞を維持しながら,不要なXForms名前空間を含めないようにするには,includenamespaceprefixes="my"をsubmission要素に追加しなければならない。この属性を指定する場合,文書作成者は,送付されたインスタンスデータによって非明示的に使用されるすべての名前空間接頭辞を指定しなければならない。

次の属性は,"yes"|"no"ではなくxsd:booleanを使用することを除いて,[XSLT 1.0]output要素の属性と(つづり,処理及びデフォルト値の点で)同一とする。

version
indent
encoding
omit-xml-declaration
cdata-section-elements

備考:
次のXSLT属性に相当するものは,XFormsには存在しない。

doctype-system
doctype-public

XFormsアクションモジュールで定義される要素は, そのモジュールが取り込まれる場合, submission内容モデルでも許可される。

3.3.4 bind要素

bind要素は,nodeset属性に指定されているモデル結合式によって,インスタンスデータからノード集合を選択する。bind要素の他の属性には,ノード集合の個々のノードに適用されるモデル項目特性が符号化されている。 bindxsd:ID型の属性が存在する場合, bindはその識別子を選択されたノード集合に関連付ける。

共通属性:共通, モデル項目特性

特殊属性:

nodeset

bindが作用するノードの集合を示すモデル結合式。モデル結合式は, 7.5.2 モデル結合式 に定義されている。

insertアクションによってノードが追加されたとき,新しく追加されたノードは結合式に一致するすべてのノード集合に含められる。 9.3.5 insert要素 insertアクションを参照。

評価文脈に対する結合の影響の詳細については, 7.4 評価文脈 を参照。

3.4 XForms MustUnderstandモジュール

extension要素又は,ホスト言語で定義された外来の名前空間の要素は,フォームによっては操作上重要な場合もある。このことを示すために,MustUnderstandモジュールは,すべての要素で使用できる一つの属性を定義する。

要素 属性 最小内容モデル
すべて xforms:mustUnderstand (xsd:boolean) -

要素がmustUnderstand="true"とマークされていて,XFormsプロセサにその要素の処理が実装されていない場合,利用者に誤りを報告し,終了しなければならない。

3.5 XForms拡張モジュール

ホスト言語にXFormsを含める方法は幾つかある。その一つは,整形式処理だけを使用し,妥当性検証を行わない方法とする。別の方法として,XHTML1.0のように,事前定義されている要素だけを許す厳密な妥当性検証を行う方法がある。一般的な他の方法として,幾つかの選択された場所に規制外の内容を配置する方法がある。この方法を選択するホスト言語では拡張モジュールを使用できる。

要素 属性 最小内容モデル
extension 共通 任意

3.5.1 extension要素

省略可能。extension要素は,XForms名前空間以外の名前空間に属するアプリケーション固有の拡張要素を格納する。この規定では,この要素についての処理は定義しない。

共通属性:共通

例えば, 次のとおりにRDFメタデータをフォーム制御に追加できる。

<input ref="dataset/user/email" id="email-input">
  <label>電子メールアドレスを入力してください</label>
  <extension>
    <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
      <rdf:Description rdf:about="#email-input">
        <my:addressBook>personal</my:addressBook>
      </rdf:Description>
    </rdf:RDF>
  </extension>
</input>

4. 処理モデル

ここではXFormsプロセサによって導かれるさまざまな状態及びそれらの各状態で起こり得る状態遷移を列挙することによってXForms処理モデルを宣言的に定義する。また,それらの状態のそれぞれで満足されなければならない前状態及び後状態を列挙する。XFormsプロセサは,最終結果がここで規定している内容に一致する限りは,どのような方法で実装されてもよい。

状態遷移は通常,XForms木の一部にイベントを振り分けることで開始される。XForms処理モデルは次の分類のイベントから構成される。

  • 初期化

  • 相互作用

  • 通知

  • 誤り状態

4.1 イベント概要

XFormsの処理はイベント,イベントハンドラ及びイベント応答の観点から定義される。XFormsは[DOM2 Events] [XML Events]で定義されるイベントシステムを使用するが,このイベントシステムでは,イベント捕獲,ターゲットへのイベントの到達及び最後のイベントバブル動作の各過程が定義されている。

4. 処理モデル を通じて,ターゲット要素として“フォーム制御”という語が使用された場合,それはinputsecrettextareaoutputuploadtriggerrangesubmitselectselect1及びgroupのすべてが対象であることを示す。


イベント名 取消し可能 バブル ターゲット要素
4.2 初期化イベント
xforms-model-construct いいえ はい model
xforms-model-construct-done いいえ はい model
xforms-ready いいえ はい model
xforms-model-destruct いいえ はい model
4.3 相互作用イベント
xforms-previous はい いいえ フォーム制御
xforms-next はい いいえ フォーム制御
xforms-focus はい いいえ フォーム制御
xforms-help はい はい フォーム制御
xforms-hint はい はい フォーム制御
xforms-rebuild はい はい model
xforms-refresh はい はい model
xforms-revalidate はい はい model
xforms-recalculate はい はい model
xforms-reset はい はい model
xforms-submit はい はい submission
4.4 通知イベント
DOMActivate はい はい フォーム制御
xforms-value-changed いいえ はい フォーム制御
xforms-select いいえ はい itemitemset又はcase
xforms-deselect いいえ はい itemitemset又はcase
xforms-scroll-first いいえ はい repeat
xforms-scroll-last いいえ はい repeat
xforms-insert いいえ はい instance
xforms-delete いいえ はい instance
xforms-valid いいえ はい フォーム制御
xforms-invalid いいえ はい フォーム制御
DOMFocusIn いいえ はい フォーム制御
DOMFocusOut いいえ はい フォーム制御
xforms-readonly いいえ はい フォーム制御
xforms-readwrite いいえ はい フォーム制御
xforms-required いいえ はい フォーム制御
xforms-optional いいえ はい フォーム制御
xforms-enabled いいえ はい フォーム制御
xforms-disabled いいえ はい フォーム制御
xforms-in-range いいえ はい フォーム制御
xforms-out-of-range いいえ はい フォーム制御
xforms-submit-done いいえ はい submission
xforms-submit-error いいえ はい submission
4.5 誤り表示
xforms-binding-exception いいえ はい 結合式を含むことができるすべての要素
xforms-link-exception いいえ はい model
xforms-link-error いいえ はい model
xforms-compute-exception いいえ はい model

4.2 初期化イベント

ここでは初期化過程のさまざまな段階を定義する。プロセサはXFormsモデルを含んでいる文書内のそれぞれのXFormsモデルにxforms-model-constructイベントを振り分けることによって初期化を開始する。XFormsプロセサに対する初期化要求がどのように行われるのかについては,実装に任せられる。

4.2.1 xforms-model-constructイベント

XFormsプロセサによって各XFormsモデルに振り分けられる。

ターゲット:model

バブル:はい

取消し可能:いいえ

文脈情報:なし

このイベントに対するデフォルトアクションは次のとおりになる(結果がこれと同じになるように実装する。)。

  1. すべてのXMLスキーマを読み込む。遠隔の文書にアクセス又は遠隔の文書を処理しているときに誤りが発生した場合,処理は例外( 4.5.2 xforms-link-exceptionイベント )を生成して終了する。

  2. 初期インスタンスデータ用に外部ソースが指定されている場合,それからXPathデータモデル( 7. XFormsにおけるXPath式 )を構築する。外部ソースが指定されず,内部の初期インスタンスデータが指定されている場合は,それを代わりに使用する。外部の初期インスタンスデータが整形式XMLでない又は取得できない場合,処理は例外( 4.5.2 xforms-link-exceptionイベント )を生成して終了する。いずれも指定されていない場合,この過程ではデータモデルを構築せず,利用者インタフェース構築( 4.2.2 xforms-model-construct-doneイベント )の過程で構築する。

  3. 該当する場合,P3P[P3P 1.0]を初期化する。

  4. インスタンスデータを構築する。インスタンスデータに挿入される文字列はすべて,Unicode正規化の対象となる。bind要素をすべて文書順に処理することで,すべてのモデル項目特性を初期化する。各bind要素に対して行う処理は次のとおり。

    1. bind要素のnodeset属性を評価し,ノード集合を選択する。

    2. ノード集合の各ノードに対して,bind要素内の残りの属性に従ってモデル項目特性を適用する。各属性( 6.1 モデル項目特性定義 で定義される特性に一致する名前をもつ)の文字列値を同じ名前のモデル項目特性の局所値として複写する。

    3. 同名のモデル項目特性がノードに既に含まれている場合,このXFormsを含んでいる文書のXForms処理は例外( 4.5.1 xforms-binding-exceptionイベント )を生成して終了する。

  5. このmodel要素に対して,xforms-rebuildxforms-recalculatexforms-revalidateを順番に実行する(利用者インタフェースがまだ初期化されていないため,xforms-refreshは実行しない。)。

すべてのXFormsモデルが初期化された後,xforms-model-construct-doneイベントが各model要素に振り分けられる。

4.2.2 xforms-model-construct-doneイベント

xforms-model-construct処理の完了後に振り分けられる。

ターゲット:model

バブル:はい

取消し可能:いいえ

文脈情報:なし

このイベントに対するデフォルトアクションは,XFormsモデルを含んでいる文書に含まれているXFormsモデルの数によらず1回だけ実行され,それぞれのフォーム制御について次の処理を行う(結果がこれと同じになるように実装する。)。

処理の進行には二通りあるが,いずれの方法で進行するのかは,最初のフォーム制御を処理したときに,model内のinstanceが存在していたかどうかに依存する。

(instanceに関する)最初のフォーム制御を処理したときに,フォーム制御から参照されるinstanceが存在していた場合:

  1. 結合式を評価し,それが指しているノードが存在することを確認する。ノードが存在しない場合,フォーム制御は,それが結合しているモデル項目のrelevantモデル項目特性の評価結果がfalseである場合と同様に振る舞うことが望ましい。

instanceに関する最初のフォーム制御を処理したときに,フォーム制御から参照されるinstanceが存在していなかった場合:

  1. instanceへの最初の参照では,次に示す規則に従って,デフォルトのinstanceを作成する。

    1. ルートinstanceData要素を作成する。

    2. 利用者インタフェース制御の結合式を使用して,インスタンスデータ要素ノードをnameとして作成する。nameがQNameとして妥当でない場合,処理は例外( 4.5.1 xforms-binding-exceptionイベント )を生成して終了する。

  2. (自動的に作成された)instanceへの2回目以降の参照では,次の処理を行う。

    1. 一致するインスタンスデータノードが見つかった場合,利用者インタフェース制御をその要素に関連付ける。

    2. 一致するインスタンスデータノードが見つからない場合,利用者インタフェース制御の結合式を使用して,インスタンスデータノードをnameとして作成する。nameがQNameとして妥当でない場合,処理は例外( 4.5.1 xforms-binding-exceptionイベント )を生成して終了する。

すべてのフォーム制御が初期化された後,xforms-readyイベントが各model要素に振り分けられる。

4.3 相互作用イベント

4.3.1 xforms-next及びxforms-previousイベント

利用者からの,次又は前のフォーム制御へのナビゲーション要求に対応して振り分けられる。

ターゲット:フォーム制御

バブル:いいえ

取消し可能:はい

文脈情報:なし

これらのイベントに対するデフォルトアクションは,“デフォルトのナビゲーション順序に従って移動する”とする。インタフェースとしてキーボードを考えた場合,“tab”キーに対してxforms-nextイベントが生成され,“shift”キー+“tab”キーに対してxforms-previousイベントが生成されることが考えられる。

ナビゲーションはXFormsを含んでいる文書全体をベースに決定され,ナビゲーション順序はホスト言語で定義される。考えられる方法として,navindex属性を使用し,個々のフォーム制御をナビゲーション単位とする例を示す。<group>,<repeat>及び<switch>構造もナビゲーション単位として機能するが,これらは単一のナビゲーションポイントを提供するのではなく,子のフォーム制御(及びその他の構造)のための局所ナビゲーションコンテキストを作成する。ナビゲーション順序は次のとおりにして決定される。

  1. 最初にナビゲーションの対象になるのは,navindexが指定され,その値に正の整数が割り当てられているフォーム制御とする。

    1. 最も外側のフォーム制御をnavindex値の昇順にナビゲートする。値は連続しなくてもよく,特別な値で始まる必要もない。同一のnavindex値をもつフォーム制御は文書順にナビゲートする。

    2. 祖先のフォーム制御(<group>,<repeat>及び<switch>)によって局所ナビゲーション順序が作成される。局所内のすべてのフォーム制御をその外側をナビゲートする前にnavindex値の昇順でナビゲートする。同一のnavindex値をもつフォーム制御は文書順にナビゲートする。

  2. 次に,navindexが指定されていないか,navindexの値として“0”が指定されているフォーム制御をナビゲートする。これらのフォーム制御は文書順にナビゲートする。

  3. 無効で非表示にされているフォーム制御,つまりrelevantではないフォーム制御には全体における相対的な順序は割り当てられるが,ナビゲート対象にはならない。

  4. 最後のフォーム制御の次(又は最初のフォーム制御の前)のナビゲーション順序については定義されない。XFormsプロセサは,最初又は最後の制御に循環して移動する,フォーム上にフォーカスを置かない及びそれ以外のことをしてもよい。

4.3.5 xforms-revalidateイベント

特定のXFormsモデルに対する再検証要求に対応して振り分けられる。

ターゲット:model

バブル:はい

取消し可能:はい

文脈情報:なし

このイベントに対するデフォルトアクションは次のとおりになる(結果がこれと同じになるように実装する。)。

このイベントに対するデフォルトハンドリングは次の条件を満たさなければならない。

局所的有効性とは,継承によってではなく,モデル項目特性から直接導かれる有効性を意味する。

  1. model中のすべてのinstance要素中のすべてのインスタンスデータノードを指定されたすべてのXMLスキーマ及び関連するXMLスキーマデータ型に照らして検査する。その際,次の規則を使用する。

    1. 要素のXMLスキーマ妥当性は,局所的に有効な属性ノード,要素ノード及びテキストノードによって判定する。PSVIによって示される誤りコードの一覧にcvc-attribute.3だけしか含まれていない場合,その要素は依然妥当であるとする。これは,属性が妥当でないことでその属性を所有する要素の妥当性が失われることはないことを意味する。

    2. 属性ノードのXMLスキーマ妥当性は,XMLスキーマで定義されている“Attribute Locally Valid”の規則で判定する。

    3. テキストノードのXMLスキーマ妥当性は,String Validによって定義される,モデル結合によって関連付けられる型定義についての,正規化されたノードの内容の局所的な妥当性として定義する。テキストノードに型が関連付けられていない場合,常に妥当とする。

  2. model中のすべてのinstance要素中のすべてのインスタンスデータノードを,required,constraintなど,値に対する制約を定義する結合されたすべてのモデル項目特性に照らし検査する ( 6. モデル項目特性 )。

  3. 対応するモデル項目特性の評価結果がこのイベント処理の開始時と一致しないフォーム制御に対して,適切な通知イベント( 4.4.6 xforms-validイベント 4.4.7 xforms-invalidイベント 4.4.10 xforms-readonlyイベント 4.4.11 xforms-readwriteイベント 4.4.12 xforms-requiredイベント 4.4.13 xforms-optionalイベント 4.4.14 xforms-enabledイベント 4.4.15 xforms-disabledイベント )を振り分ける。

備考:
xforms-readyイベントの振分け前にはフォーム制御はインスタンスデータに結合していないため,xforms-valid又は他の通知イベントは振り分けられない。

4.3.6 xforms-recalculateイベント

特定のXFormsモデルに関連付けられるすべての計算を再計算する要求に対応して振り分けられる。

ターゲット:model

バブル:はい

取消し可能:はい

文脈情報:なし

このイベントに対するデフォルトアクションは次のとおりになる。

すべてのインスタンスデータ項目の値を,それらに“calculate”制約が関連付けられている場合,その制約に一致させる。計算される式を含むことができるすべてのモデル項目特性を評価して,その値を決定する。

XPath式は一つ以上のインスタンスノードの,値又はモデル項目特性(例えば,requiredrelevant)のいずれかと結合する。XPath式と単一インスタンスノードの値又はモデル項目特性との組合せを,再計算の対象となる一つの計算単位,つまり代入式と考える。

モデル項目特性を再計算するときにXPath式が評価されるが,その評価文脈は, 7.4 評価文脈 で計算される式に対して定義されているとおりに,そのモデル項目特性を適用するモデル結合式によって決まる。XPath式で他のインスタンスノードを参照(reference)又は言及(refer to)してもよいが,その場合はそのインスタンスノードの値が参照される。参照される各インスタンスノードから見た場合,そのインスタンスノードを直接参照するそれらの代入式はそのインスタンスノードに依存するものとする。計算式における現在のノード値への参照は明白に無視される。すなわち,ある代入式内でその代入式が関連付けられているインスタンスノードを参照している場合,そのインスタンスノードはそれ自身に依存しない。あるインスタンスノードから代入式に至る依存の経路がある場合(他のインスタンスノードを経由する場合も含める。),代入式にとってそのインスタンスノード(値は計算されるものでも,そうでなくてもよい。)は計算に必要なものとする。代入式が自身を計算に必要とする場合,その代入式は循環依存の一部とする。

備考:
文書作成者は,その結果が十分に定義されていないため,calculate式で現在のノード値を参照することは避けることが望ましい。ただし,required又はreadonlyなどの他のモデル項目特性では,自己参照の存在が十分に定義されている。

再計算イベントの開始時には,例えば,利用者入力がインスタンスに伝ぱしたことによって値が変更されている一つ以上のインスタンスノードのリストLが存在する。

  1. XFormsプロセサは,L中のいずれの要素も計算に必要としない代入式については再計算を行わないほうがよい。

  2. XFormsプロセサは,L中の一つ以上の要素を計算に必要とする代入式について,再計算を1回だけ実行することが望ましい。

  3. XFormsプロセサは,代入式Cの再計算を,Cが必要とするすべてのインスタンスノードの代入式の再計算の後に行わなければならない(同様に,XFormsプロセサは,Cに関連付けられているインスタンスノードを計算に必要とするすべての代入式の再計算の前に,代入式Cを再計算しなければならない。)。

  4. 最後に,代入式が循環依存の一部であり,L中の要素を計算に必要とする場合,XFormsプロセサは例外( 4.5.4 xforms-compute-exceptionイベント )を報告しなければならない。

附属書D 再計算順序アルゴリズム では,適切な再計算動作を達成する方法の一つについて説明している。

4.4 通知イベント

4.4.19 xforms-submit-errorイベント

11. 送付 で定義されている送付処理の失敗の指示として振り分けられる。

ターゲット:submission

バブル:はい

取消し可能:いいえ

文脈情報:失敗した送付メソッドURI(xsd:anyURI)

このイベントは通知イベントであり,このイベントに対するデフォルトアクションは存在しない。

4.5 誤り表示

誤り表示はXFormsプロセサの非通常の状態の結果として発生する。これらの幾つかは処理を停止させる“致命的な(fatal)”誤りであり,接尾辞“exception”を伴う。他は単なる報告のためであり,接尾辞“error”を伴う。ここで定義するすべてのイベントについて,XFormsプロセサは,例えば,ファイルに誤りメッセージを記録するような,デフォルトハンドリングを実行してもよい。

4.6 イベント列

ここまででは個々のイベントに関連する処理について規定した。ここでは,一般的な幾つかの状況において発生しなければならない,関連するイベントの全体的な順序について規定する。次のリストでは,1回以上発生してもよいイベントを接頭辞[n]で示す。

4.6.1 input, secrettextarearange及びupload制御の場合

4.6.3 select又はselect1制御の場合

4.6.5 submit制御の場合

5. データ型

ここではXFormsモデルの定義で使用されるデータ型を定義する。

5.1 XMLスキーマ組込みデータ型

XFormsはxsd:durationxsd:ENTITYxsd:ENTITIES及びxsd:NOTATIONを除くすべてのXMLスキーマのデータ型をサポートする。値空間字句空間及びファセット制約の概念は[XML Schema part 2]に記述されている。XMLスキーマのデータ型の中には,別途作成されているより小さなXForms適合性プロファイルの一部として指定されているものがあり,これらはアスタリスク(*)で示されている。XFormsはこれらの基本型から制限によって派生したデータ型及びリストによって派生したデータ型を含む。XFormsプロセサは,XMLスキーマを取り込むことなく,ここで列挙されるデータ型を現在有効なものとして処理しなければならない。

組込みプリミティブ型:

dateTime *
time *
date *
gYearMonth *
gYear *
gMonthDay *
gDay *
gMonth *
string *
boolean *
base64Binary *
hexBinary
float
decimal *
double
anyURI *
QName

備考:
組込みデータ型xsd:durationのサポートは,抽象データ型としてだけとする。このデータ型の代替として,xforms:dayTimeDuration又はxforms:yearMonthDurationを使用することが望ましい。

組込み派生型:

normalizedString
token
language
Name
NCName
ID
IDREF
IDREFS
NMTOKEN
NMTOKENS
integer *
nonPositiveInteger *
negativeInteger *
long *
int *
short *
byte *
nonNegativeInteger *
unsignedLong *
unsignedInt *
unsignedShort *
unsignedByte *
positiveInteger *

6. モデル項目特性

ここでは,bind要素を使用してインスタンスデータノードに結合されることができる,情報集合への追加について定義する( 3.3.4 bind要素 を参照)。あるインスタンスデータノードに対するこれらの情報集合への追加の組合せをモデル項目と呼ぶ。これらの情報集合への追加をまとめて,モデル項目特性と呼び, 6.1 モデル項目特性定義 で定義する。それに対し,用語“スキーマ制約”はデータ型のファセットに指定されるXMLスキーマ制約を単に表す。

6.1 モデル項目特性定義

モデル項目特性は,さまざまな観点で区別することができる。

計算される式及び固定特性

継承規則:

モデル項目特性の幾つかでは継承規則が定義される。その場合,XFormsプロセサは二つの値を把握している必要がある。一つはbind要素の属性からの局所値であり,もう一つは,評価された局所値とインスタンスデータ中の先祖ノードからの評価値との組合せとする継承値とする。

備考:
附属書D 再計算順序アルゴリズム で定義されるサンプル再計算アルゴリズムは,モデル項目特性の局所値だけを対象とするとおりに定義されている。このサンプルは,結合された値が実装によってノードの子孫に伝ぱされるものと仮定している。

局所値の割当て:

局所値はXFormsモデル内のすべての結合要素を文書順に処理することによって割り当てられる。同一ノードに対し,あるモデル項目特性を2回設定しようとする試みは誤りとする。この処理の詳細については 4.2.1 xforms-model-constructイベント を参照。

次にすべてのモデル項目の一部として使用可能なモデル項目特性をリストする。それぞれについて,次の情報を示す。

説明
計算される式かどうか(はい又はいいえ)
使用できる値
デフォルト値
継承規則

例:XMLスキーマ型制約の付与
<instance>
  <my:person-name>
    <my:first-name />
    <my:last-name xsi:type="my:nonEmptyString" />
  </my:person-name>
</instance>
<bind type="my:nonEmptyString" nodeset="/my:person-name/my:first-name" />
ここでは,XMLスキーマ型を要素に関連付ける二つの方法が示されている。
例:readonly特性の付与
<instance>
  <my:person-name>
    <my:first-name>Roland</my:first-name>
    <my:last-name/>
  </my:person-name>
</instance>
<bind nodeset="/my:person-name/my:first-name" readonly="true()"/>
ここでは,要素にreadonly特性が関連付けられている。

6.1.3 required特性

説明:インスタンスデータが送付される前に値が必要とされるかどうかを示す。

計算される式かどうか:はい

使用できる値:boolean()を使用してXPathのboolean型に変換できるすべての式

デフォルト値:false()

継承規則:継承しない

フォームはある値を必須としてもよく,この要求事項は動的であってもよい。trueに評価された場合,このモデル項目特性は,空でないインスタンスデータノードがインスタンスデータの送付前に必要とされることを示す。空でないインスタンスデータノードの定義は次のとおり。

  1. 結合されるインスタンスデータノードが要素である場合,要素のxsi:nil属性がtrueに設定されていてはならない。

  2. 結合されるインスタンスデータノードの値は,長さが1以上であるXPath stringに変換可能でなければならない。

次に示すことを除き,requiredモデル項目特性は可視性,フォーカス又はナビゲーション順に関してXForms利用者インタフェースにヒントを提供しない。XFormsの文書作成者は,requiredデータを受け入れるフォーム制御を可視化することを強く求められる。XFormsプロセサはフォーム制御が必須であることを示唆してもよく,ナビゲーションの制限を含む,即時フィードバックを提供してもよい。 4. 処理モデル に,どのようにXFormsプロセサが必須値を強要するのかについての詳細な説明がある。

例:required特性の付与
<instance>
  <my:person-name>
    <my:first-name>Roland</my:first-name>
    <my:last-name />
  </my:person-name>
</instance>
<bind nodeset="/my:person-name/my:last-name" required="true()"/>
ここでは,値が提供されなければならないことを示すためにmy:last-name要素にrequired属性が関連付けられている。
備考:
XMLスキーマには,use="required|optional|prohibited"という同様の概念がある。これは次の二つの点でXFormsモデル項目特性と異なる。一つ目は,useが属性にだけ適用されるのに対し,XFormsのrequiredはあらゆるノードに適用されるという点である。二つ目は,useがすべての属性が指定されているかを問題にするのに対して(値の有無は無関係),requiredはノードの値が必須かどうかを送付前に評価する点とする。

6.1.4 relevant特性

説明:モデル項目が現在有効であるかどうか示す。この特性がfalseに評価されるインスタンスデータノードは送付時に直列化されない。

計算される式かどうか:はい

使用できる値:boolean()を使用してXPathのboolean型に変換できるすべての式

デフォルト値:true()

継承規則:falseと評価される先祖ノードが存在する場合,この値はfalseとして扱われる。それ以外の場合は,局所値が使用される。

備考:
これはすべての先祖ノード及び局所のrelevant特性の評価値の論理和(OR)をとることと等価とする。

フォームの多くには,他の状態に依存するデータ入力領域がある。例えば,フォームが,返答者が車を所有しているかどうかを尋ねる場合がある。その車について更に情報を尋ねるのは,車を所有しているという回答を受けた場合にだけ適切である。

relevantモデル項目特性は可視性,フォーカス及びナビゲーション順に関してXForms利用者インタフェースにヒントを提供する。 一般に,trueのときに関連するフォーム制御は表示され,falseのときには,関連するフォーム制御は非表示になり,フォーカスされず,ナビゲーション順から除外されることが望ましい。

例:relevant特性の付与
<instance>
  <my:order>
    <my:item>
      <my:amount />
      <my:discount>100</my:discount>
    </my:item>
  </my:order>
</instance>
<bind nodeset="my:item/my:discount" readonly="true()"
      relevant="../my:amount &gt; 1000"/>
ここでは,my:discount要素にrelevant特性を関連付け,注文数量が1000より大きい場合に割引が有効であることを示している。

次の表はrequiredrelevantとの間の利用者インタフェースの相互作用を示す。


  required="true()" required="false()"
relevant="true()" フォーム制御(及びすべての子)は可視又は利用者から利用可能でなければならない。XForms利用者インタフェースは値(の入力)が必須であることを示してもよい。 フォーム制御(及びすべての子)は可視又は利用者から利用可能でなければならない。XForms利用者インタフェースは値(の入力)が省略可能であることを示してもよい。
relevant="false()" フォーム制御(及びすべての子)は不可視又は利用者から利用不可能でなければならない。値の入力又はフォーカスを与えることは許可しないことが望ましい。XForms利用者インタフェースは,フォーム制御が有効(relevant)になった場合には値が必須であることを示してもよい。 フォーム制御(及びすべての子)は不可視又は利用者から利用不可能でなければならない。値の入力又はフォーカスを与えることは許可しないほうがよい。

6.1.5 calculate特性

説明:関連付けられるインスタンスデータノードの値を計算するために使用される式を提供する。

計算される式かどうか:はい

使用できる値:任意のXPath式

デフォルト値:なし

継承規則:継承しない

XFormsモデルは他の値から計算されるモデル項目を含んでもよい。例えば,各品目の数量及び単価の積の合計, 注文に支払われる税金の量などの計算値は,他のモデル項目の値を使用する計算される式として表現することができる。 4. 処理モデル で,計算がいつ,どのように実行されるのかについて詳細に説明している。

例:calculate特性の付与
<instance>
  <my:order>
    <my:item>
      <my:amount />
      <my:discount />
    </my:item>
  </my:order>
</instance>
<bind nodeset="my:item/my:discount" calculate="../my:amount * 0.1"
      relevant="../my:amount &gt; 1000"/>
ここでは,注文数量が1000より大きいとき10%の割引が適用対象となることを示すためにmy:discount要素にrelevant特性を関連付けている。

6.1.6 constraint特性

説明:関連付けられるインスタンスデータノードが妥当であると評価されるために満足する必要のある条件式を示す。

計算される式かどうか:はい

使用できる値:boolean()を使用してXPathのboolean型に変換できるすべての式

デフォルト値:true()

継承規則:継承しない

XPathがfalseと評価されるとき,関連付けられるモデル項目は妥当ではない。逆は必ずしも真ではない。 4. 処理モデル で,いつ,どのように制約が計算されるのか及び妥当性検証がいつ実行されるのかについて詳細に説明している。

例:constraint特性の付与
<instance>
  <my:range>
    <my:from />
    <my:to />
  </my:range>
</instance>
<bind nodeset="my:to" constraint=". &gt; ../my:from" />
ここでは,my:to要素に関連付けられるconstraint特性は,その値がmy:from要素の値より大きくなければならないことを示している。
備考:
インスタンスデータ中のノード数の最小値及び最大値は,constraint特性内でcount()関数を使用することで指定することができる。

6.1.7 p3ptype特性

説明:インスタンスデータノードにP3Pデータ要素を付与する。これは,特定の種類のデータがそこで収集されることを示す。

計算される式かどうか:いいえ

使用できる値:xsd:string

デフォルト値:なし

継承規則:継承しない

このモデル項目特性は,P3Pデータ型システム[P3P 1.0]に基づき,関連付けられるインスタンスデータノードによって収集されるデータの種類についての情報を保持する。この情報は,既知のデータを供給するなど,フォーム入力を楽にするための機能として使用されてもよい。

例:結合を使用する型制約の付与
<instance>
  <my:person-name>
    <my:first-name />
    <my:last-name />
  </my:person-name>
</instance>
<bind type="my:nonEmptyString" nodeset="my:first-name"
      p3ptype="user.name.given"/>
ここでは,bind要素を使用して,first-name要素にP3P及びXMLスキーマの両方の型情報を付与している。

6.2 スキーマ制約

5. データ型 では,XFormsがXMLスキーマデータ型システムを使用して,XFormsモデルによって収集されたデータ値の値空間を制約する仕組みについて説明した。このデータ型制約はXMLスキーマを通じて提供することができる。制約の別の方法として,ここではインスタンスデータに型制約を付与するさまざまな方法を列挙する。スキーマを特定する方法として,xsi:schemaLocation及びxsi:noNamespaceSchemaLocation属性は無視される。

6.2.1 原子データ型

XForms処理モデルは妥当性検証処理の一部としてXMLスキーマファセットを使用する。最も単純なレベルで,モデル項目及びファセットの集合を(XMLスキーマデータ型を通じて)関連付けることが必要である。これは,関連付けられるインスタンスデータノードに対して許容される値をデータ型の字句空間の表現として妥当なものに制限する効果をもつ。

モデル項目に関連付けられるファセットの集合は,次の項目を指定された順序で処理した結果として決定されなければならない。複数のデータ型制限を同じモデル項目に対して適用する場合,指定されたすべての制限の組合せが適用されなければならない。満足することが不可能である制限の組合せを指定することが可能であることに注意する。文書作成者にはこれを回避することが推奨される。

  1. インスタンスデータに関連付けられるXMLスキーマ

  2. インスタンスデータ内のXMLスキーマxsi:type属性

  3. XForms結合を使用してインスタンスデータノードと関連付けられるXFormsのtype制約

  4. 型制約が提供されない場合,インスタンスデータノードはtype="xsd:string"となる(文字列をデフォルトとする規則)。

次に示すデータ型の定義は,xsd:stringを基本とし,制約ファセットが追加されたものとする。

例:XMLスキーマを使用する型制約
<xsd:simpleType name="nonEmptyString">
  <xsd:restriction base="xsd:string">
    <xsd:minLength value="1"/>
  </xsd:restriction>
</xsd:simpleType>
この新しいデータ型は,ここで説明したいずれかの方法によって,一つ以上のモデル項目特性に関連付けられる。

例:型制約の付与
<my:first-name xsi:type="my:nonEmptyString"/>
これはfirst-name要素をmy:nonEmptyString型となるように定義する。

例:XForms結合を使用する型制約の付与
<instance>
  <my:first-name />
</instance>
<bind type="my:nonEmptyString" nodeset="/my:first-name"/>
ここでは,bind要素を使用してfirst-name要素に型情報を付与している。このように,XForms文書作成者は外部スキーマを変更することができない場合でも,外部スキーマを拡張できる。

7. XFormsにおけるXPath式

XFormsは,結合式でインスタンスデータノードを特定するため,制約を表現するため及び計算を指示するためにXPathを使用する。定義されていない関数の呼出しなど,構文的に妥当でないXPath式は例外( 4.5.4 xforms-compute-exceptionイベント )を発生させる。ただし,結合式については,別の例外( 4.5.1 xforms-binding-exceptionイベント )を生成する。

7.1 XPathデータ型

XPathデータ型は結合式及び計算される式でだけ使用される。XFormsは,booleanstringnumber及びnode-setの各XPathデータ型を使用する。XFormsの将来の版では,XMLスキーマデータ型に対応する,XPath 2.0の使用が期待される。

7.2 hasFeatureメソッド呼出しのための機能文字列

この版のXForms規定の場合,[DOM2 Core] DOMImplementationインタフェースのhasFeatureメソッド呼出しのための機能文字列は“org.w3c.xforms.dom”であり,版数文字列は“1.0”とする。

7.3 インスタンスデータ

model要素について,XFormsプロセサはXPathデータモデル[XPath 1.0]に適合するインスタンスデータと呼ばれる内部構造で状態を管理する。DOMを実装するXFormsプロセサは,次で定義するインタフェースを介したこのインスタンスデータへのDOMアクセスを提供しなければならない。

備考:
インスタンスデータは常に一つのルート要素をもち,したがって,DOM Documentに合致する。

このインタフェースのためのIDLは次のとおりになる。

#include "dom.idl"
pragma prefix "w3c.org"
module xforms {
  interface XFormsModelElement : dom::Element {
    dom::Document getInstanceDocument(in dom::DOMString instanceID)
      raises(dom::DOMException);
    void rebuild();
    void recalculate();
    void revalidate();
    void refresh();
  };
};

7.4 評価文脈

XForms内では,XPath式は具体的なXML文書の代わりに,抽象インスタンスデータを参照する(XPathの“パス”部分を使用する。)。この規定では,この参照を結合式と呼ぶ。すべてのXPath式は評価文脈を必要とする。XFormsの一部としてXPathを評価する際には,評価文脈の決定に次の規則が使用される。

  1. 最も外側の結合要素のための文脈ノードは,最上位要素ノード,つまり/*によって返される単一ノードとする。結合要素は結合式属性をもつことを明示的に許可された要素とする。結合要素が最も外側であるのは,XPath式ancestor::*によって返されるノード集合に結合要素ノードが含まれない場合とする。

  2. 最も外側でない結合要素のための文脈ノードは,一つ外側の要素の結合式の最初のノードとする。要素が一つ外側であるのは,それがXPath式ancestor::*によって返されるノード集合内の最初の結合要素ノードの場合とする。これは“有効範囲を考慮した解決”とも呼ばれる。

  3. 文脈ノードは常に文脈モデル内にあるが,その文脈モデルは次の内,該当する最初の項目によって決定される。

    1. model属性が結合要素上に存在している場合,その属性が文脈モデルを決定する。

    2. 結合要素の一つ外側に結合要素が存在する場合,一つ外側の結合要素の文脈モデルが使用される。

    3. 文書順で最初のモデルが使用される。

  4. (結合要素に現れる)計算される式のための文脈ノードは,現在処理されているノードとする。

  5. 単一ノード結合式の場合,文脈サイズ及び文脈位置は1とする。ノード集合結合式の場合,文脈サイズはノード集合のサイズであり,文脈位置はノード集合中で現在処理されているノードの文書順の位置とする。

  6. 変数は存在しない。

  7. 次に定義されるものに加えて実装が提供するすべての関数が,利用可能な関数ライブラリとする。フォームの処理に必要な拡張関数は, 7.12 拡張関数 で説明するとおりに,宣言することが望ましい。

  8. 式を定義する属性の有効範囲におけるすべての名前空間宣言がその式に適用される。

例:文脈ノードの結合式
<group ref="level2/level3">
  <select1 ref="@attr" ... >
    <label> ... </label>
  </select1>
</group>

この例で,grouplevel2/level3の結合式をもつ。上記の規則によって,この最も外側の要素ノードは/level1の文脈ノードをもつが,これはインスタンスデータの最上位要素ノードとする。次に,select1フォーム制御は親グループから文脈ノードを継承する。これに対応するインスタンスデータを直列化されたXMLとして表すと次のようになる。

例:サンプルXMLインスタンスデータ
<level1>
  <level2>
    <level3 attr="xyz"/>
  </level2>
</level1>

7.5 結合式

結合式は,モデル項目特性の一つ以上のインスタンスデータノードへの結合,フォーム制御のインスタンスデータへの結合及びアクションによる操作のためのノード又はノード集合の指定に使用されるXPathのPathExprとする。デフォルトで,すべての結合式は文脈モデル中の最初のインスタンスを参照する。この振る舞いはinstance()関数で変更できる。

7.5.1 動的依存性

あらゆるXPath式が結合式として受け入れられるわけではない。特に,動的依存性を生成するモデル結合式に関して制限がある。動的依存性は次のとおりに定義される。

(角括弧内の)XPathの述語は,間接的に表現される可能性のある論理テストとする。動的依存性は,テスト内のすべての項が“固定”である場合を除いて,すべての述語に存在する。固定とは,定数又は計算に必要な依存関係の再構築として明示的に定義される操作間に変更されない値を意味する。

備考:
動的依存性を決定する目的上,position()last()count()及びproperty()の各部分式は“固定”と考えられる。これは,これらの関数によって返される値を変更する可能性のあるすべてのイベントの後に依存性の再構築を実行することが規定されているためである。

もう一つの動的依存性は,関数のパラメタ及びそれに対応するxsd:ID型の属性の両方が固定でない場合の,id()関数の使用とする。同様に,instance()関数は,関数のパラメタが固定されないのであれば動的とする。

ある再計算と次の再計算で値が変わるXPath変数も動的依存性を生成する(ただし,XForms 1.0ではすべてのXPath式に対して空の変数文脈が定義されている。)。

拡張関数を定義する文書作成者はこれらの規則に従うことが推奨される。

7.5.2 モデル結合式

モデル結合式は,モデル項目特性を宣言するのに使用できる結合式であり,bind要素の属性で使用される。

通常,モデル結合式内の動的依存性は手動による依存性の再構築を必要とする。

7.6 XForms主要関数ライブラリ

XForms主要関数ライブラリは,[XPath 1.0]主要関数ライブラリ全体を含み,これにはノード集合,文字列,数値及び論理値に対する操作が含まれる。

次にXFormsで使用するその他の必要な関数を定義する。

7.8 数値関数

7.8.5 index()関数

number index(string)

関数indexは,repeatIDREFを示す文字列型の引数を採り,指定されているrepeatの1を基準とする現在の繰返しインデクスを返す。repeat及びそれに関連する繰返しインデクスの詳細については 9.3.1 repeat要素 を参照。指定された引数がrepeatを特定できるものでない場合,NaNを返す。

例:index
<xforms:trigger>
  <xforms:label>Add to Shopping Cart</xforms:label>
  <xforms:insert ev:event="DOMActivate" position="after"
                 nodeset="items/item" at="index('cartUI')"/>
</xforms:trigger>

7.10 日付及び時間関数

7.12 拡張関数

XForms文書では,ここに示した以外のXPath拡張関数を使用してもよい。多くの有用なコミュニティ拡張が[EXSLT]に定義されている。この拡張関数の名前はmodel要素のfunctions属性に宣言されなければならない。この宣言は,XFormsプロセサによって,利用可能な拡張関数に照合するのに使用される。XFormsプロセサはこの照合を文書の読込み時に実行する。XForms文書で宣言されている拡張関数をプロセサが実装していない場合,プロセサは例外( 4.5.4 xforms-compute-exceptionイベント )を生成して処理を停止する。

備考:
拡張関数を明示的に宣言すれば,XFormsプロセサによる未実装の拡張関数の検出は文書の読込み時に行われるため,この致命的な誤りが利用者との対話中に発生するのを避けることができる。文書作成者が拡張関数を宣言しなかった場合,利用者との対話中にXFormsプロセサが致命的な誤りで停止する可能性がある。

8. フォーム制御

8.1 XFormsのフォーム制御モジュール

フォーム制御はマーク付け要素を使用して宣言され,その振る舞いの詳細はマーク付け属性によって指定される。

要素 属性 最小内容モデル
input 共通, UI共通, 単一ノード結合, inputmode (xsd:string), incremental (xsd:boolean) label, (UI共通)*
secret 共通, UI共通, 単一ノード結合, inputmode (xsd:string), incremental (xsd:boolean) label, (UI共通)*
textarea 共通, UI共通, 単一ノード結合, inputmode (xsd:string), incremental (xsd:boolean) label, (UI共通)*
output 共通, 単一ノード結合 (省略可能), appearance ("full"|"compact"|"minimal"|xforms:QNameButNotNCNAME), value (XPathExpression) label?
upload 共通, UI共通, 単一ノード結合, mediatype (xsd:string), incremental (xsd:boolean) label, filename?, mediatype?, (UI共通)*
range 共通, UI共通, 単一ノード結合, start (xsd:string), end (xsd:string), step (xsd:string), incremental (xsd:boolean) label, (UI共通)*
trigger 共通, UI共通, 単一ノード結合 (省略可能) label, (UI共通)*
submit 共通, UI共通, 単一ノード結合 (省略可能), submission (xsd:IDREF) label, (UI共通)*
select 共通, UI共通, 単一ノード結合, selection ("open" | "closed"), incremental (xsd:boolean) label, (List UI共通)+, (UI共通)*
select1 共通, UI共通, 単一ノード結合, selection ("open" | "closed"), incremental (xsd:boolean) label, (List UI共通)+, (UI共通)*
choices 共通 label?, (List UI共通)+
item 共通 label, value, (UI共通)*
filename 共通, 単一ノード結合 EMPTY
mediatype 共通, 単一ノード結合 EMPTY
value 共通, 単一ノード結合 (省略可能) (PCDATA|ANY)*
label 共通, 単一ノード結合 (省略可能), リンク付け (PCDATA|(UI Inline))*
help 共通, 単一ノード結合 (省略可能), リンク付け (PCDATA|(UI Inline))*
hint 共通, 単一ノード結合 (省略可能), リンク付け (PCDATA|(UI Inline))*
alert 共通, 単一ノード結合 (省略可能), リンク付け (PCDATA|(UI Inline))*

参照: 9.3.3 itemset要素

備考:
インスタンスデータノードは,フォーム制御と結合しない限り,利用者に提示されることはない。したがって,HTMLのinput type="hidden"に相当するフォーム制御は必要ない。

次のUI共通属性グループは,利用者インタフェースに関連する多くのXForms要素に共通とする。

要素 属性
(多種) appearance ("full"|"compact"|"minimal"|QName-but-not-NCName)

appearance

表示形式を定義する省略可能な属性。指定されない場合,利用者エージェントは適切な視覚化を自由に選択してよい。

備考:
ホスト言語は,CSSのクラスセレクタによって照合される文字列の一覧を保持するclass属性及びxml:langなどの属性に対応することが望ましい。

さらにホスト言語は,フォーム制御及びそのホスト言語に含まれるその他の要素間のナビゲーション順序を指定する方法,及びキーボードによる,つまり直接的な特定要素へのナビゲーション手段を提供しなければならない。その方法の一つが,navindex及びaccesskeyと呼ばれる属性の組を使用することであり,これらの属性は次のとおりに定義される。

navindex

この省略可能な属性はナビゲーション順序を定義するために使用され,0~32767の負でない整数値をとる。文書作成者はこの属性を使用することで,フォーム制御をたどる順序を制御できるようになる。デフォルトのナビゲーション順序は 4. 処理モデルに定義されている。

accesskey

この省略可能な属性は,特定のフォーム制御に入力フォーカスを直接移動させるためのショートカットを定義する。この属性の値は,プラットフォーム固有の修飾キー(例えば“Alt”キー)と共に押されたときにこのフォーム制御にフォーカスを移動させることになる単一の文字とする。

利用者エージェントは,ある提示の中で使用可能なアクセスキーを識別する手段を提供しなければならない。これを実現する方法は,アプリケーションとの直接的な対話,利用者手引きの使用など,実装によって異なってよい。文書作成者によって要求されたアクセスキーが,プレーヤで使用できない場合がある(例えば,使用する装置に存在していない場合又は,プレーヤ自身によって使用される場合)。したがって,利用者エージェントは指定されたキーを利用可能にすることが望ましいが,アクセスキーを異なる対話の振る舞いにマップしてもよい。

さらに,このモジュールは次の内容集合を定義する。

内容集合 最小内容モデル
UI 共通 (help|hint|alert|アクション)*
List UI 共通 (choices|item|itemset)+
フォーム制御 (input|secret|textarea|output|upload|range|trigger|submit|select|select1)*
UI Inline (output)*

上に示すとおりに,XMLイベントモジュールによってアクション内容集合がUI共通内容集合に加えられる。ホスト言語は内部のマーク付けをインライン内容集合に加えることが望ましい。XForms拡張モジュールが存在する場合は,それもUI共通内容集合に含めることが望ましい。

8.1.1 すべてのフォーム制御に共通の実装必要条件

XForms利用者インタフェース制御は, 6. モデル項目特性 で定義される結合属性を使用して,背後にあるインスタンスデータに結合される。

フォーム制御は,ラベル, ヘルプ文, ナビゲーション, 及びキーボードのショートカットキーなどの各機能において統一的な手法を採用することによって,アクセシビリティを実現する。国際化の問題については,XHTMLと同じ設計指針に従うことで解決される。フォーム制御はすべて,聴覚メディア及び視覚メディアとして提示するのに適している。

フォーム制御は,具体的な実装を提供する能力を維持しながら,抽象度の高い意味をカプセル化する。例えば,フォーム制御selectは,利用者に集合から項目を選択させるものとする。これらのフォーム制御では,基底にある制御の機能的な側面と,提示又は振る舞いの側面とは区別される。この分離によって,特定のフォーム制御の基底にある目的を表現することが可能になる。この利用者との対話の基本概念の定義については[AUI97]を参照。

フォーム制御は,可視化されたとき,そのフォーム制御に結合している背後にあるデータの値を表示する。フォーム制御を介して利用者に提示されるデータは,結合しているインスタンスデータに直接対応しなければならないが,表示形式が字句値と一致している必要はない。例えば,利用者エージェントは,区切り文字も含め,日付,時刻,期間及び数値を表示するのに適切な規約を使用することが望ましい。

フォーム制御はすべて,実装についての次の要求事項を満たさなければならない。

  • simpleContentをインスタンスデータに書き込むフォーム制御は,XForms動作 10.1.9 setvalue要素 で定義されるのと全く同じに動作しなければならない。

  • simpleContentのインスタンスデータを読み込むフォーム制御はすべて,次のように動作しなければならない。

    • 要素ノード:テキスト子ノードが存在する場合,最初のテキスト子ノードの文字列の値を返す。そうでなければ“”(空の文字列)を返す。

    • 属性ノード: ノードの文字列の値を返す。

    • テキストノード : ノードの文字列の値を返す。

    • 名前空間,処理命令,コメント及びXPathのルートノード:振る舞いは未定義とする。

  • フォーム制御は,妥当な状態のときの可視化と妥当でない状態のときの可視化とを区別しなければならない。この振る舞いはスタイルシートから制御可能にすることが望ましい。

  • フォーム制御は,結合しているインスタンスデータにそのフォーム制御で可視化できない値が含まれている場合に,それを示さなければならない。この振る舞いはスタイルシートから制御可能にすることが望ましい。

  • フォーム制御は,要求に応じて,妥当性又は関連するモデル項目特性などのフォーム制御の現在の状態について説明を可視化しなければならない。この振る舞いはスタイルシートで制御可能にすることが望ましい。

  • 利用者指定の説明が利用不可能な場合,フォーム制御は上記のものにデフォルトの説明を提供しなければならない。

8. フォーム制御 では,次を指定することによってさまざまなフォーム制御を定義する。

説明
共通属性
特殊属性

データ結合制限
実装必要条件

8.1.2 input要素

説明:このフォーム制御は,自由形式でのデータ入力を可能にする。

共通属性:共通UI共通単一ノードUI結合

特殊属性:

入力モード

このフォーム制御は入力モードのヒントを受け入れる。 附属書E 入力モード を参照。

incremental

trueの場合,このフォーム制御はxforms-value-changedイベントを追加生成する。この属性のデフォルト値はfalse

例:

<input ref="order/shipTo/street" class="streetAddress">
  <label>市町村及び番地</label>
  <hint>市町村名及び番地を入力してください。</hint>
</input>

上の例では,class属性はフォーム制御の表示サイズを指定するためにスタイルシートで使用される。入力できる文字数に関する制約はこれらの表示上の特性から得られるのではなく,背後にあるXFormsモデル定義から得られる。

上の例のグラフィカルブラウザでの可視化の例を次に示す。

An average-looking text entry form control. The label, 'Street' has been aligned to the left

データ結合制限:任意のsimpleContent(xsd:base64Binaryxsd:hexBinary又はこれらから派生した任意のデータ型を除く。)に結合。

実装必要条件:結合されたデータ型に対応する字句値の入力を許可しなければならない。実装は,データ型の入力のための便利な手段を提供することが望ましく,数の表現などの現地化及び国際化の問題も考慮に入れることが望ましい。例えば,xsd:date型のインスタンスデータノードと結合しているinputでカレンダー制御を提供すること,同様に,boolean型と結合しているinput制御をチェックボックスとして可視化することが考えられる。

<input ref="order/shipDate">
<label>発送日</label>
<hint>この注文品の発送日を入力してください。</hint>
</input>

上の例のグラフィカルブラウザでの可視化の例を次に示す。

A text box for a date control, with a button to open into a calendar.

利用者は,テキスト編集ボックスに日付を入力するか,ボタンを押してカレンダーを開くことができる。

A clendar picker graphical widget.

8.1.3 secret要素

説明:このフォーム制御は,操作を監視する他の利用者によって入力内容が読み取られないようにしながらシステムに情報を入力する手段を利用者に提供する。一般にはパスワード入力のために使われる。

共通属性:共通UI共通単一ノード結合

特殊属性:

入力モード

このフォーム制御は入力モードのヒントを受け入れる。 附属書E 入力モード を参照。

incremental

trueの場合,このフォーム制御はxforms-value-changedイベントを追加生成する。この属性のデフォルト値はfalse

例:

例:パスワードの入力
<secret ref="/login/password">
  <label>パスワード</label>
  <hint>入力するパスワードは表示されません。</hint>
</secret>

上の例のグラフィカルブラウザでの可視化の例を次に示す。

A password entry form control, with '*' characters where the text would be expected and a hint box displaying hint text.

データ結合制限:inputと同じ。

実装必要条件:アクセシビリティを考慮しているものも含め,実装は,このフォーム制御に入力される値を隠さなければならない。考えられる一つの方法として,実際に入力された文字の代わりに“*”又は同様の文字を可視化する方法がある。これによって提供されるセキュリティのレベルは簡略的なものにすぎないことに注意する必要がある。機密性が非常に高い情報を扱うには,XFormsで論じる範囲を超えた,別のセキュリティ対策が必要になる。

8.1.4 textarea要素

説明:このフォーム制御は自由形式でのデータ入力を可能するもので,複数行からなる内容(例えば電子メールメッセージの本体)の入力に使用されることが意図されている。

共通属性:共通UI共通単一ノード結合

特殊属性:

入力モード

このフォーム制御は入力モードのヒントを受け入れる。 附属書E 入力モード を参照。

incremental

trueの場合,このフォーム制御はxforms-value-changedイベントを追加生成する。この属性のデフォルト値はfalse

例:

例:電子メールの本文
<textarea ref="message/body" class="messageBody">
<label>メッセージ本文</label>
<hint>メッセージをここに入力してください。</hint>
</textarea>

上の例では,class属性はフォーム制御の表示サイズを指定するためにスタイルシートで使用される。入力できる文字数に関する制約はこれらの表示上の特性から得られるのではなく,背後にあるXFormsモデル定義から得られる。

上の例のグラフィカルブラウザでの可視化の例を次に示す。

A larger-than-average text entry form control. The title, 'Message Body:' provides an additional hint that large amounts of text are allowed here.

データ結合制限:xsd:string又は派生した任意のsimpleContentに結合。

実装必要条件:複数行のテキストを含む,結合するデータ型に対応する字句値の入力を許可しなければならない。

8.1.5 output要素

説明:このフォーム制御はインスタンスデータの値を可視化するが,データの入力又は変更の手段を提供しない。これはインスタンスの値を表示するために使用され,レイアウトの目的でdisplay:inlineとして扱われる。要素outputは,結合式を使用することで,インスタンス中の特定の位置にある値を表示するのに使用することができる。また,評価対象のXPath式をrefではなくvalue属性に指定することで,XPath式の評価結果を表示するのに使用することができる。要素output中の属性ref及びvalueは相互に排他的であることに注意する必要がある。

共通属性:共通単一ノード結合 (省略可能)

特殊属性:

appearance

このフォーム制御はUI共通属性グループを使用しないが,上で定義したとおりに,appearance属性は含んでいる。

value

評価対象のXPath式。評価結果の文字列がフォーム制御によって可視化される。結合属性がノードを選択するために存在する場合,この属性は無効になる。評価文脈は,単一ノード結合の評価に適用されるものと同じとする。式が参照するいずれかのノードに変更があった場合,XPath式は常に再評価される。

例:

例:説明書き
請求額:
<output ref="order/totalPrice"/>
 円 - 請求理由は次のとおりです:

上の例のグラフィカルブラウザでの可視化の例を次に示す。

Average-looking text, reading 'I charged you 100.0 - and here is why:'

データ結合制限:任意のsimpleContentに結合。

実装必要条件:結合されたデータ型に対応する字句値の表示を許可しなければならない。実装は,データ型の視覚化のための便利な手段を提供し,数値の表現などの現地化及び国際化の問題を考慮することが望ましい。

8.1.6 upload要素

説明:このフォーム制御は,Webサイトに一般的に見られるローカルファイルシステムからファイルをアップロードする機能,及びマイクロフォン,ペン,ディジタルカメラを含むさまざまな入力装置からの入力の受入れを実現する。

共通属性:共通UI共通単一ノード結合

特殊属性:

mediatype

アップロードの対象となり得るデータのソースを決定するのにXFormsプロセサによって使用される,スペースによって区切られたメディア型の一覧。

incremental

trueの場合,このフォーム制御はxforms-value-changedイベントを追加生成する。この属性のデフォルト値はfalse

例:

例:イメージをアップロードする
<upload ref="mail/attachment" mediatype="image/*">
  <label>画像を選択:</label>
  <filename ref="@filename" />
  <mediatype ref="@mediatype" />
</upload>

上の例のグラフィカルブラウザでの可視化の例を次に示す。

A drop-down box; main display reads 'Select Image:' with a cute icon. The drop-down itself has three items: (icon)-From Scanner or Camera...; (icon)-Scribble...; Browse...

実装必要条件:

  • 活性化されたとき,子要素filenameが存在してファイル名が利用可能な場合,uploadはアップロードするデータのファイル名をインスタンス内の,子要素filename上の結合属性によって示されるノードに置く。

  • 活性化されたとき,子要素mediatypeが存在してメディア型が利用可能な場合,uploadはアップロードするデータのメディア型をインスタンス内の,子要素mediatype上の結合属性によって示されるノードに置く。

データ結合制限:xsd:anyURIxsd:base64Binary及びxsd:hexBinary,又はこれらから制限によって派生したデータ型だけにこのフォーム制御を結合できる。

実装必要条件:base64Binary又はhexBinaryデータ結合に関して

  • xsd:base64binaryxsd:hexBinary又はこれらから制限によって派生した型のインスタンスデータノードに結合されている場合,活性化されたときに,uploadは指定された符号化を使用してバイナリの内容をノードの内容として配置する。

実装必要条件:anyURIデータ結合に関して

  • xsd:anyURI型(又はこれから制限によって派生した型)のインスタンスデータノードに結合している場合,活性化されたとき,uploadはノードの内容としてURIを配置する。

    セキュリティ上の理由から,XFormsプロセサは,明示的な利用者の許可なしに,このフォーム制御に結合するURIが指す場所を参照してはならない。

    備考:
    実装者は, 11.4 multipart/relatedとしての直列化 及び 11.5 multipart/form-dataとしての直列化 に必要になるため,uploadでバイナリデータ,メディア型及びファイル名とそのURIとを結び付けなければならないことに注意する。
  • ファイルシステムを伴う実装は特定のファイルを選択するfile uploadをサポートすることが望ましい。また,デフォルトで表示されるファイル型には,mediatype属性に指定されたメディア型が反映されることが望ましい。例えばメディア型に“audio/*”型が指定された場合,デフォルトでファイルダイアログに表示されるのはaudioファイル型だけになるようにする。

実装必要条件:すべてのデータ結合に関して

  • 特定のペン・座標読取り装置を伴う実装では,ペン書きオプションをサポートし,ペン使用の入力をその場で行えるようにすることが望ましい(その他のポインティングデバイスを伴う実装ではこれをサポートしてもよい。)。

  • 特定のオーディオ録音機能を伴う実装では,オーディオ録音オプションをサポートし,オーディオクリップの録音をその場で行えるようにすることが望ましい。

  • ディジタルカメラ,スキャナインタフェース又はスクリーンキャプチャーを伴う実装では,イメージ取得オプションをサポートし,接続された装置からのイメージのアップロードをその場で行えるようにすることが望ましい。

  • ビデオ録画機能を伴う実装では,ビデオ録画オプションをサポートすることが望ましい。

  • 3D機能を伴う実装では,3Dインタフェースオプションを提供することが望ましい。

  • 実装では,独自の実装を提供してもよい(例えば,mediatypeがtext/rtfの場合に編集ウィンドウで独自のワードプロセサを起動するなど)。

  • ここで言及されなかった入力装置を実装でサポートすることも推奨される。

  • 特定のmediatypeのアップロードをサポートできない場合,実装はそのことを利用者に明らかにしなければならない。

filename子要素については 8.3.1 filename要素 mediatypeについては 8.3.2 mediatype要素 を参照。

8.1.7 range要素

説明:このフォーム制御は,連続する範囲からの値の選択を許可する。

共通属性:共通UI共通単一ノード結合

特殊属性

start

(背後にあるデータに適切な)範囲の開始点を示す省略可能なヒント。指定された場合,この値は背後のモデルによって指定された制約を更に限定する。

end

(背後にあるデータに適切な)範囲の終了点を示す省略可能なヒント。指定された場合,この値は背後のモデルによって指定された制約を更に限定する。

step

値の増分又は減分を示す省略可能な値。背後のデータの二つの値の差分を表すことができる型でなければならない。

incremental

trueの場合,このフォーム制御はxforms-value-changedイベントを追加生成する。この属性のデフォルト値はfalse

例:

例:範囲内の選択
<range ref="/stats/balance" start="-2.0" end="2.0" step="0.5">
  <label>バランス</label>
</range>

上の例のグラフィカルブラウザでの可視化の例を次に示す。

a slider control, from -2 to +2

データ結合制限:xsd:durationxsd:datexsd:timexsd:dateTimexsd:gYearMonthxsd:gYearxsd:gMonthDayxsd:gDayxsd:gMonthxsd:floatxsd:decimalxsd:doubleの各データ型及びこれらから制限によって派生したデータ型だけを結合。

実装必要条件:結合するデータ型に対応する値の入力を許可しなければならない。実装では,上限値, 下限値及びステップサイズが指定されていればそれらを利用者に知らせることが望ましい。インスタンスデータの値が上限又は下限を超えている場合,フォーム制御は範囲外状態を示さなければならない。グラフィカル環境では,このフォーム制御は“スライダ”又は“回転式制御”として可視化されてもよい。

この要素の各属性はメタデータをカプセル化するが,このメタデータは,XFormsモデルから得られる型情報と組み合わせることで,例えばスピーチなどの提示様式を使用するなど,アクセシビリティ支援を行う場合に意味のあるプロンプトを生成するのに十分なものとする。つまり,下に示す例では,聴覚に頼る利用者のためのエージェントが“2001年1月1日から2001年12月31日までの範囲にある日付を選んでください”のように発声することが考えられる。

背後にあるデータ型とstart及びendとが重なっている場合,最も限定的な範囲を使用することが望ましい。

例:

例:範囲から日付を選択する
<range ref="/order/shipDate" start="2001-01-01" end="2001-12-31">
  <label>出荷日</label>
</range>

8.1.8 trigger要素

説明:このフォーム制御はHTMLのbutton要素に類似するもので,利用者はこれを使用してある動作を起動することができる。このフォーム制御を他のフォーム制御を構築するために使用してもよい。

共通属性:共通UI共通単一ノード結合 (省略可能)

例:

例:簡単なtrigger
<trigger>
  <label>ここをクリック</label>
</trigger>

データ結合制限:任意のノードに結合できる。このフォーム制御は,結合するノードのモデル項目特性から影響を受けるが,フォームデータとの直接の相互作用はない。したがって,結合属性は必須ではない。

実装必要条件:利用者エージェントは,フォーム制御上にDOMActivateイベントを生成する手段を提供しなければならない。グラフィカルな実装では,ラベルの付いた押しボタンとしてこのフォーム制御を可視化することが考えられる。スタイルシートを使用して,このフォーム制御をイメージ,ハイパーリンク又は他の表示形式としてスタイル設定することができる。

8.1.9 submit要素

説明:このフォーム制御は,結合するインスタンスデータのすべて又は一部の送付を開始する。

共通属性:共通, UI共通, 単一ノード結合 (省略可能)

特殊属性:

submission

submission要素を指す必須の属性。

例:

例:送付
<submit submission="timecard">
  <label>タイムカードの送付</label>
</submit>

データ結合制限:任意のノードに結合できる。このフォーム制御は,結合するノードのモデル項目特性から影響を受けるが,フォームデータとの直接の相互作用はない。したがって,結合属性は必須ではない。

実装必要条件:イベントDOMActivateを受け取ると,このフォーム制御は必須の属性submissionによって指定されたsubmission要素にイベントxforms-submitを振り分ける。1度活性化されると,送付処理がxforms-submit-doneイベント又はxforms-submit-errorイベントで完了するまで,この制御はさらなる活性化に利用できてはならない。

8.1.10 select要素

説明:このフォーム制御は,利用者が選択肢の中から複数を選択することを可能にする。

共通属性:共通, UI共通, 単一ノード結合

特殊属性:

selection

リスト中に自由な入力を許可するかどうかを決定する省略可能な属性。デフォルトは“closed”。

incremental

trueの場合,このフォーム制御はxforms-value-changedイベントを追加生成する。このフォーム制御のデフォルトはtrue

例:

例:アイスクリームの味の選択
<select ref="my:flavors"> 
<label>味</label> 
  <choices>
    <item> 
      <label>バニラ</label> 
      <value>v</value>
    </item> 
    <item> 
      <label>ストロベリー</label> 
      <value>s</value>
    </item> 
    <item> 
    <label>チョコレート</label> 
      <value>c</value>
    </item> 
  </choices>
</select> 

上の例では,複数の味を選択することができる。

フォーム制御selectは,グラフィカルブラウザでは次のいずれかのように可視化されることが考えられる。

appearance="full" appearance="compact" appearance="minimal"
checkboxes, Vanilla, Strawberry, and Chocolate; Strawberry and Chocolate selected list-box; Vanilla, Strawberry, and Chocolate visible; Strawberry and Chocolate selected A popup menu with three choices, 'Strawberry', 'Vanilla', and 'Chocolate'. The last two are checked.

通常,フォーム制御の外観を厳密に決定するのにはスタイルシートが使用されるが,外観を指定する手段としてappearance属性を使用できる。属性の値は次のいずれかとする。

“full”:選択肢のすべてを常に可視化する。
“compact”:可視化する選択肢の数を固定する。必要に応じてスクロール機能を使用する。
“minimal”:可視化する選択肢の数を最小にする。一時的に選択肢を追加表示する機能をもつ。

データ結合制限:シーケンスを保持することができる任意のsimpleContentに結合できる。simpleContentへの結合の制限は,ここで規定しているとおりに,選択肢が利用者インタフェース制御の一部として記述される場合に存在する。動的に選択肢を作成するためのitemset要素( 9.3.3 itemset要素 を参照)を使用することで,利用可能にする選択肢をXFormsモデルから入手することができるが,その場合はsimpleContentへの結合の制限は緩和される。

備考:
XMLスキーマのlistデータ型の制限によって,格納値(value要素)中の空白は個々のデータ間の区切りとして常に解釈される。したがって,文書作成者は,simpleContentをリストする格納値に空白を含めるのを避けることが望ましい。
例:正しくない型宣言
<item>
  <value>United States of America</value>
  ...
</item> 

この項目が選択された場合,この項目が一つの選択肢として扱われるのではなく,“America”, “of”, “States”, 及び“United”の四つの選択肢が新たに追加される。

実装必要条件:選択肢のそれぞれについてラベルが存在してなければならず,何も選択されないことも含め,選択は幾つでも許可されなけらばならない。このフォーム制御は,選択された選択肢に対応する値をref属性によって示される場所にスペース区切りのリストとして格納する。格納される値は,value要素の内容として直接指定されるか,value要素上の結合属性によって間接的に指定される。

このフォーム制御に結合されるデータ型には,xsd:stringなどの非一覧表型の値空間,及び一覧表型と非一覧表型とのユニオン(追加可能な一覧表と呼ばれる。)を含めてもよいことに注意する。この場合,制御selectに属性selection="open"が存在してもよく,それに対して,フォーム制御は 8.1.2 input要素 に規定しているような自由形式での入力を許可することが望ましい。フォーム制御は,自由形式の入力を介して複数の値が入力されるのを許可してもよい。

“closed”の場合:指定された項目の格納値の一つ以上と初期インスタンス値が一致する場合,その項目が選択される。一致するものがない場合,最初に選択される項目はない。選択された値のいずれかが,選択肢のどの格納値とも一致しない場合,フォーム制御は範囲外状態を示さなければならない。

“open”の場合:一つ以上の項目によって指定される格納値と初期インスタンス値が一致する場合,それらの項目がすべて選択される。一つ以上の項目によって指定される格納値と初期インスタンス値が一致しない場合,それらの一致しない項目は,自由形式入力を介して入力されたのと同じように,選択された値になる。自由形式入力のテキストはinputフォーム制御 8.1.2 input要素 の場合と同様に扱われ,複数になることもある。complexTypesを伴う動的な選択を行う場合,“open”は無効となる。

実装のヒント:アクセシビリティ支援として,選択肢の最初から最後まで,利用者に一通り確認させることが考えられる。その場合,マーク付け内で選択肢をグループ化することで,選択肢が多数である場合のナビゲーションを改善することも検討する。

8.1.11 select1要素

説明:このフォーム制御は,利用者が複数の選択肢から一つだけ選択するのを可能にする。

共通属性:共通UI共通単一ノード結合

特殊属性:

selection

リスト中に自由な入力を許可するかどうかを決定する省略可能な属性。デフォルトは“closed”。

incremental

trueの場合,このフォーム制御はxforms-value-changedイベントを追加生成する。このフォーム制御のデフォルトはtrueとする。

例:

例:味を選択する
<select1 ref="my:flavor">
  <label>味</label>
  <item>
    <label>バニラ</label>
    <value>v</value>
  </item>
  <item>
    <label>ストロベリー</label>
    <value>s</value>
  </item>
  <item>
    <label>チョコレート</label>
    <value>c</value>
  </item>
</select1>

上の例で,選択肢から一つを選択すると,選択した項目に関連する値,つまりその項目のvalue要素で指定される値が,背後のインスタンスデータ内の場所icecream/flavorに設定される。

上の例のグラフィカルブラウザでの可視化の例を次に示す。

appearance="full" appearance="compact" appearance="minimal"
radio buttons, Vanilla, Strawberry, Chocolate; Strawberry is selected a list control, Vanilla, Strawberry, and Chocolate visible; Strawberry selected a collapsed pull-down list; Vanilla is selected

データ結合制限:任意のsimpleContentに結合できる。simpleContentへの結合の制限は,ここで規定しているとおりに,選択肢が利用者インタフェース制御の一部として記述される場合に存在する。動的に選択肢を作成するためのitemset要素( 9.3.3 itemset要素 を参照)を使用することで,利用可能にする選択肢をXFormsモデルから入手することができるが,その場合はsimpleContentへの結合の制限は緩和される。

実装必要条件:選択肢のそれぞれについてラベルが存在していなければならず,選択は常に一つだけ許可されなけらばならない。このフォーム制御は,選択された選択肢に対応する値をref属性によって示される場所に格納する。格納される値は,value要素の内容として直接指定されるか,value要素上の結合属性によって間接的に指定される。

このフォーム制御に結合されるデータ型には,xsd:stringなどの非一覧表型の値空間,及び一覧表型と非一覧表型とのユニオン(追加可能な一覧表と呼ばれる。)を含めてもよいことに注意する。この場合,制御select1に属性selection="open"が存在してもよく,それに対して,フォーム制御は 8.1.2 input要素 に規定しているような自由形式での入力を許可することが望ましい。

“closed”の場合:指定項目の格納値の一つと初期インスタンス値が一致する場合,その項目が選択される。一致するものがない場合,フォーム制御は範囲外状態を示さなければならない。

“open”の場合:項目の一つによって指定される格納値と初期インスタンス値が一致する場合,最初に一致した項目が選択される。一致しない場合,最初の字句値が選択された値になる。自由形式入力のテキストはinputフォーム制御 8.1.2 input要素 の場合と同様に扱われる。

利用者インタフェースは,このフォーム制御をプルダウンリスト,ラジオボタンのグループなどに可視化してもよい。appearance属性はどの表示が最も適切かについてのヒントを提供するが,CSSなどのスタイル情報を優先させることが望ましい。

8.3 その他の要素

次に詳述する子要素は,フォーム制御にメタデータを付加するのに使用できる。

フォーム制御のラベルをlabel要素内の行内内容として指定するようなメタデータの指定方法の代わりとして,これらの要素上で単純なリンク付け属性srcを使用することでメタデータを参照することができる。この機能を体系的に使用することは,XForms利用者インタフェースの国際化において有効である。手順を次に示す。

  • 利用者に読ませるメッセージをすべて別の資源XMLに分離記述する。

  • このXML資源束のURIを各label要素で使用する。

  • XForms実装で,クライアントからのaccept-languageヘッダを使用するなど,内容交渉を使用して適切なXML資源束を取得する。このようにすることで,メッセージが利用者のロケールに現地化された利用者インタフェースを提供できる。

8.3.1 filename要素

省略可能な要素filename上の結合属性は,活性化されたときに親要素uploadによって配置される,選択されたバイナリ資源のインスタンス内における配置場所を指定する。セキュリティ上の理由から,uploadは,ノードに存在する値に起因する処理を行ってはならない。

共通属性:共通単一ノード結合

次の例では,利用者はイメージを選択するように促される。活性化されたとき,uploadはイメージのバイナリデータ又はイメージのURIをmail/attachmentに配置する。いずれが配置されるかは,mail/attachmentに宣言された型による。ファイル名(例えば“me.jpg”)が属性ノードmail/attachment@filenameに配置され,mediatype(例えば“image/jpeg”)が属性ノードmail/attachment@mediatypeに配置される。

例:

<upload ref="mail/attachment" mediatype="image/*">
  <label>添付する画像を選択してください</label>
  <filename ref="@filename"/>
  <mediatype ref="@mediatype"/>
</upload>

8.3.3 label要素

この必須の要素は,それを含むフォーム制御に説明的な名前のラベルを付ける。さらに,label要素は,フォーム制御を見ることができない利用者に,フォーム制御間のナビゲーション中に簡単な説明を与えるのを可能にする。

共通属性:共通, 単一ノード結合(省略可能),リンク付け

特殊属性:

リンク付け属性

外部ラベルへのリンク。リンク走査に失敗した場合は,誤りとして扱われる( 4.5.3 xforms-link-errorイベント )。

指定されたラベルはインスタンスデータ内,遠隔ドキュメント又は内部テキストとして存在できる。要素内にラベルのソースが複数指定された場合,その優先順位は,単一ノード結合属性,リンク付け属性,内部テキストの順になる。

XFormsを含んでいるフォーム制御にフォーカスが移動したとき,ここにカプセル化されたメタデータは,アクセシビリティ支援によって発声されることが考えられる。

8.3.4 help要素

省略可能な要素helpは,フォーム制御にヘルプ情報を付加する便利な方法を提供する。これは<message level="modeless" ev:event="xforms-help" ev:propagate="stop">と等価である。

共通属性:共通, 単一ノード結合(省略可能),リンク付け

特殊属性:

リンク付け属性

外部ヘルプ情報へのリンク。リンク走査に失敗した場合は誤りとして扱われる( 4.5.3 xforms-link-errorイベント )。

指定されたメッセージは,インスタンスデータ,遠隔のドキュメント,又は内部のテキストとして存在することができる。要素内に複数のメッセージが指定された場合,その優先順位は,単一ノード結合属性,リンク付け属性,内部テキストの順になる。

この要素の例については, 10.1.12 message要素 を参照。

8.3.5 hint要素

省略可能な要素hintは,フォーム制御にヒント情報を付加する便利な方法を提供する。これは,<message level="ephemeral">で応答するxforms-hintイベントのハンドラと等価とする。

共通属性:共通単一ノード結合(省略可能),リンク付け

特殊属性:

リンク付け属性

外部ヒントへのリンク。リンク走査に失敗した場合は誤りとして扱われる( 4.5.3 xforms-link-errorイベント )。

指定されたメッセージは,インスタンスデータ,遠隔のドキュメント,又は内部のテキストとして存在することができる。要素内に複数のメッセージが指定された場合,その優先順位は,単一ノード結合属性,リンク付け属性,内部テキストの順になる。

この要素の例については, 10.1.12 message要素 を参照。

8.3.6 alert要素

省略可能なalert要素は,フォーム制御に警告又は誤り情報を付加する便利な方法を提供する。この要素の可視化の定義は実装に依存し,modal又はephemeralなど,表示されるメッセージに関するデフォルトのlevelは存在しない。

共通属性:共通単一ノード結合(省略可能),リンク付け

特殊属性:

リンク付け属性

外部警告へのリンク。リンク走査に失敗した場合は誤りとして扱われる( 4.5.3 xforms-link-errorイベント )。

指定されたメッセージは,インスタンスデータ,遠隔のドキュメント,又は内部のテキストとして存在することができる。要素内に複数のメッセージが指定された場合,その優先順位は,単一ノード結合属性,リンク付け属性,内部テキストの順になる。利用者への提示の例については, 附属書F XForms及びスタイル設定 を参照。

9. XForms利用者インタフェース

ここでは,フォーム制御を利用者インタフェースに組み入れるためのXFormsの機能について記述する。

9.1 XFormsグループモジュール

8. フォーム制御 で定義されているフォーム制御はすべて,XHTML処理などにおいて視覚的な配置目的でそれぞれ単独で扱わる。 9. XForms利用者インタフェース で定義するマーク付けを使用して複数のフォーム制御をまとめることで,利用者インタフェース制御間の関係が意味付けられる。この手法は関連するUIを小型の装置で扱うのに役立つ。例えば,利用者インタフェースを幾つかの画面上に分離させる必要がある場合,通常は,同じまとまり内にある制御を同一画面又はページに可視化する。このモジュールに含まれる要素及び属性を次に示す。

要素 属性 最小内容モデル
group 共通, UI共通, 単一ノード結合 (省略可能) label?, ((フォーム制御)|group|switch|repeat|UI共通)*

9.1.1 group要素

group要素はフォーム制御の階層を定義するためのコンテナとして使用される。groupを入れ子にして複雑な階層を作成することもできる。フォーム制御に適用されるモデル項目特性はgroupにも同様に適用され,それはgroupの個々のメンバに適用されるモデル項目特性よりも優先する。

共通属性:共通, UI共通, 単一ノード結合 (省略可能)

備考:
グループの結合式にモデル項目特性が適用されない場合,それはgroup内に置かれるフォーム制御で相対XPath式を使用するための便宜上のものと考えられる。

モデル項目特性が適用される場合,それらはgroup内のすべてのフォーム制御に適用される。 例えば,現在有効ではないインスタンスデータノードとグループとが結合される場合,子のフォーム制御はすべて,現在有効ではないものとして扱われる。

省略可能なlabel要素は,それがgroupの最初の子要素として現われる場合,特別な意味をもち,group全体のラベルとして機能する。

例:

例:関連制御のグループ化
<group ref="address">
  <label>発送先住所</label>
  <input ref="line_1">
    <label>住所1</label>
  </input>
  <input ref="line_2">
    <label>住所2</label>
  </input>
  <input ref="postcode">
    <label>郵便番号</label>
  </input>
</group>

groupに入力フォーカスを設定すると,そのgroup内のナビゲーション順で最初のフォーム制御にフォーカスが設定される。

9.2 XFormsスイッチモジュール

ここでは,利用者操作及びイベントによって変化する利用者インタフェースの作成を可能にするswitch構造を定義する。このモジュールに含まれる要素及び属性を次に示す。

要素 属性 最小内容モデル
switch 共通, UI共通, 単一ノード結合 (省略可能) case+
case 共通, selected (xsd:boolean) label?, ((フォーム制御)|group|switch|repeat)*
toggle 共通, case (xsd:IDREF) EMPTY

9.2.1 switch要素

この要素には一つ以上のcase要素が含まれ,ある時間に可視化されるのはそのうちのいずれか一つだけとする。

備考:
これは,XFormsモデルの現在の状態に基づくXForms relevant処理( 6.1.4 relevant特性 を参照)とは異なる。例えば,アンケート内の利用者の自動車に関連する部分は,“あなたは車を所有していますか?”という質問に利用者が肯定的な回答をした場合にだけ,現在有効なものにしてよい。

共通属性:共通, UI共通, 単一ノード結合 (省略可能)

例:

例:switch
<switch>
  <case id="in" selected="true">
    <input ref="yourname">
      <label>名前を教えてください</label>
      <toggle ev:event="DOMActivate" case="out"/>
    </input>
  </case>
  <case id="out" selected="false">
    <html:p>こんにちは,<output ref="yourname" />さん
      <trigger id="editButton">
        <label>編集</label>
        <toggle ev:event="DOMActivate" case="in"/>
      </trigger>
    </html:p>
  </case>
</switch>

この例では,最初のcaseに含まれる利用者インタフェース部分が最初に表示され,利用者に名前の入力を要求する。利用者が値を入力し,enterを押すことなどによって制御を活性化することで,読込み専用のoutputを可視化する別のcaseに切り替わり,更に,“編集”というラベルが付けられたtriggerを活性化することで元のcaseに戻る。

9.2.2 case要素

この要素は,条件付きで可視化されるマーク付けを囲む。selected属性は選択の初期状態を決定する。

共通属性:共通

特殊属性:

selected

省略可能。caseに対する選択の状態。デフォルト値は“false”とする。

switch内の複数のcaseselected="true"である場合,最初のcaseが選択されたままになり,その他はすべて選択が解除される。どれも選択されていない場合,最初のものが選択される。

9.3 XForms繰返しモジュール

XForms規定では,発注書内の複数品目などの繰返し構造の定義を許可している。XFormsモデルを定義する場合,このより上位の集合は基礎部品から組み立てられる。ここでは同様に,リスト及びコレクションなどのデータ構造に結合できる利用者インタフェース構造とするrepeatを定義する。このモジュールに含まれる要素及び属性を次に示す。

要素 属性 最小内容モデル
repeat 共通, UI共通, ノード集合結合, startindex (xsd:positiveInteger), number (xsd:nonNegativeInteger) ((フォーム制御)|group|repeat)*
itemset 共通, ノード集合結合 label, (value|copy), (UI共通)*
copy 共通, 単一ノード結合 (省略可能) EMPTY
insert 共通, イベント, ノード集合結合, at (XPathExpression), position ("before"|"after") EMPTY
delete 共通, イベント, ノード集合結合, at (XPathExpression) EMPTY
setindex 共通, イベント, repeat (xsd:IDREF), index (XPathExpression) EMPTY
(多種) [repeat-nodeset, repeat-bind, repeat-model] (ノード集合結合属性), repeat-startindex (xsd:positiveInteger), repeat-number (xsd:nonNegativeInteger) N/A

9.3.1 repeat要素

この要素は,ノード集合結合属性によって選択された同種の集りに対するUIマッピングを定義する。このノード集合は,共通の親ノードをもち,同一のローカル名及び名前空間名をもつ連続する子要素ノードで構成されなければならない。異種混在のノード集合に関するrepeat要素の振る舞いは定義されない。

例:

例:買い物かご
<repeat nodeset="/cart/items/item">
  <input ref="." ...>
    <label>...</label>
  </input>
  <html:br/>
</repeat>

共通属性:共通, UI共通, ノード集合結合

特殊属性:

startindex

省略可能。1から開始される繰返しインデクス。デフォルト値は1とする。

number

省略可能。集合に属する要素のうちの幾つを表示するかに関するXFormsプロセサへのヒント。

この要素は,カプセル化された利用者インタフェース制御を同種の集りの各要素に結合することによって,その集りに対して動作する。この要素の属性は,集りのメンバの幾つがその時々で利用者に提示されるかを指定する。この集りの操作には,XFormsアクション( 10. XFormsアクション を参照)insertdelete及びsetindexを使用できる。特殊な利用者インタフェース相互作用を考慮しない場合,繰返しを表示する別の方法は,その繰返しを“展開”することとする。返されるノード集合のitem要素の数が四つであると仮定すると,上の例は次と同様とする。

例:展開された繰返し
<!-- unrolled repeat -->
  <input ref="/cart/items/item[1]" .../><html:br/>
  <input ref="/cart/items/item[2]" .../><html:br/>
  <input ref="/cart/items/item[3]" .../><html:br/>
  <input ref="/cart/items/item[4]" .../><html:br/>

例:同種の集り
<model>
  <instance>
    <my:lines>
      <my:line name="a">
        <my:price>3.00</my:price>
      </my:line>
      <my:line name="b">
        <my:price>32.25</my:price>
      </my:line>
      <my:line name="c">
        <my:price>132.99</my:price>
      </my:line>
      </my:lines>
  </instance>
</model>
  ...
<repeat id="lineset" nodeset="/my:lines/my:line">
  <input ref="my:price">
    <label>品目</label>
  </input>
  <input ref="@name">
    <label>名称</label>
  </input>
</repeat>
        
<trigger>
  <label>新しい品目を現在の品目の後ろに追加</label>
  <action ev:event="DOMActivate">
    <insert nodeset="/my:lines/my:line" at="index('lineset')"
      position="after"/>
    <setvalue ref="/my:lines/my:line[index('lineset')]/@name"/>
    <setvalue ref="/my:lines/my:line[index('lineset')]/price">0.00</setvalue>
  </action>  
</trigger>
          
<trigger>
  <label>現在の品目を削除</label>
  <delete ev:event="activate" nodeset="/my:lines/my:line"
    at="index('lineset')"/>
</trigger>

9.3.2 属性を使用する繰返し構造の作成

要素repeatを使用することで,繰返し構造に値を設定するための利用者インタフェースを作成することができる。XHTMLなどのホスト言語でXFormsを使用する場合,tableなどの構造内に繰返し構造を作成することがしばしば必要になる。その場合,table内でrepeat要素を使用して表内に行を作成し,各行を同種の集りの個々のメンバに結合させることを考えがちであるが,html:tableでは現在(おそらく今後も)xforms:repeat要素を子ノードとして使用できないため,他の構文が必要になる。

例:表及び繰返し構造
<table>
  <repeat nodeset="...">
    <tr>
      <td>...</td>
      ...
    </tr>
  </repeat>
</table>

より一般的にいえば,ホスト言語の内容モデルが他モジュールを使用するための適切な拡張点を提供しない又は提供できない箇所で,繰返しの振る舞いをホスト言語に組み込む必要がある。これを実現するために,XForms 1.0はrepeat要素と機能的に等価な別の構文を定義している。この構文は次の属性を使用する。

repeat-model
repeat-bind
repeat-nodeset
repeat-startindex
repeat-number

上の属性は,これらから接頭辞repeat-を除いた名前をもつrepeatの属性と等価とする。ホスト言語の適切な箇所にこれらの属性を含めることで繰返し構造を使用できる。次にXHTMLでの使用例を示す。

例:表及び繰返し構造
<html:table xforms:repeat-nodeset="...">
  <html:tr>
    <html:td><xforms:output ref="..."/></html:td>
  </html:tr>
</html:table>
これについては,XForms繰返しモジュールを含む適切に構成されたXHTML Schemaに照らして妥当性を検証できる。繰り返されるのはrepeat-属性をもつ要素の子要素であることに注意する。

これは純粋に構文上の変形として考えることが望ましく,繰り返す処理の意味するものに変わりはない。純粋に構文上の変形として理解する目的では,要素repeatは,repeat要素の内容をラップする名前の付いていないgroupを含むものとして見ることができる。つまり,次のとおりに考える。

<repeat ...>
  ...
</repeat>
これは次と等価とする
<repeat ...>
  <group>...</group>
</repeat>
更にこれは次と等価とする
<group repeat-...>
  ...
</group>

また,XFormsアクションsetindexを使用する場合,idref型のrepeat属性は繰返しの属性をもつ任意の要素を指すことができる。同様に,repeat-属性を使用して作成された繰返し構造に対して関数indexを使用する場合,その要素のidを関数indexの引数として使用できる。

9.3.3 itemset要素

この要素を使用すれば,select制御及びselect1制御の選択肢を動的に作成することができ,その場合,利用可能な選択肢は実行時に決まる。利用可能な選択肢を保持するノード集合は属性nodesetによって指定される。repeatの場合と同様,このノード集合は同種の集りであることが望ましい。子要素であるlabel及びvalueは,ラベル及び格納値を間接的に指定する。itemsetの実行時の効果は,利用可能な選択を静的に記述するchoices要素を使用する場合と同じであることに注意する。

共通属性:共通, ノード集合結合

備考:
refreshイベントが振り分けられた場合は常にnodesetが再評価され,利用可能な選択肢のリストが更新される。

次の例は,アイスクリームの風味の動的なリストを指定するためのselect制御内のitemset要素を示している。

例:アイスクリーム風味の動的な選択
<model id="cone">
  <instance>
    <my:icecream>
      <my:order/>
    </my:icecream>
  </instance>
</model>
<model id="flavors">
  <instance>
    <my:flavors>
      <my:flavor type="v">
        <my:description>バニラ</my:description>
      </my:flavor>
      <my:flavor type="s">
        <my:description>ストロベリー</my:description>
      </my:flavor>
      <my:flavor type="c">
        <my:description>チョコレート</my:description>
      </my:flavor>
    </my:flavors>
  </instance>
</model>

<!-- user interaction markup -->

<select model="cone" ref="my:order">
  <label>味</label>
  <itemset model="flavors" nodeset="/my:flavors/my:flavor">
    <label ref="my:description"/>
    <copy ref="my:description"/>
  </itemset>
</select>

<!-- For all three items selected, this example produces instance data like
     <my:icecream>
       <my:order>
         <my:description>バニラ</my:description>
         <my:description>ストロベリー</my:description>
         <my:description>チョコレート</my:description>    
       </my:order>
     </my:icecream>
-->

9.3.4 copy要素

この要素は構造的な面で 8.2.3 value要素 に類似しているが,使用できるのがitemset内だけである点と,動作の対象が単純な値ではなくインスタンスデータの部分木である点とが異っている。

共通属性: 共通, 単一ノード結合 (省略可能)

<