この標準仕様書(TS)は,2003年10月にWorld Wide Web Consortium(W3C)から公表された XForms 1.0勧告を翻訳し,技術的内容を変更することなく作成した標準仕様書(TS)である。
XFormsは,ウェブ用の次世代のフォーム(Forms)を表現するXML応用とする。従来のXHTMLフォームを三つの部分,XFormsモデル,インスタンスデータ及び利用者インタフェースに分けることによって,それは,内容から表示を分離し,再利用を可能にし,強い型付けを与える。その結果,サーバへの(アクセスの)往復の回数を減らすと共に,装置非依存性を提供し, スクリプト化の必要性を減らす。
XFormsは,独立した文書型ではなく,XHTML, SVGなどの他のマーク付け言語に統合されることを意図している。
フォームはウェブの重要な位置を占めており,対話型ウェブアプリケーションを実現するための主要な手段として現在でも使用されている。ウェブアプリケーション及び電子商取引ソリューションによって,対話機能を豊富に備えるより優れたウェブフォームに対する需要が発生している。XForms 1.0はこれにこたえるものであり,XFormsプロセサを介した,利用者とその相手(通常は遠隔エージェント)とのオンライン対話のための,プラットフォームに依存しない新しいマーク付け言語を提供する。 XFormsはHTMLフォームの後継であり,HTMLフォームから得た教訓が生かされている。
XFormsの背景情報の詳細については,http://www.w3.org/MarkUp/Forms/を参照。
この規定はさまざまな読者を想定して記述されているが,特に,XFormsの文書作成者及び実装者を対象としている。 この規定によって,効果的,魅力的,かつ多くの利用者からアクセス可能な文書を記述するのに必要な情報を,実装の詳細には過度に触れることなく XFormsの文書作成者に提供できるものと考える。ただし,実装者がXForms適合プロセサを作成するのに必要となる情報はすべて記述されている。規定ではまず,XFormsに関する一般的な情報を記述し,次にXFormsの各構成要素の技術的な詳細について記述する。
この規定は,さまざまな配布媒体を想定して記述されている。これらの間に矛盾がある場合,http://www.w3.org/TR/2003/REC-xforms-20031014/をこの文書の承認された版とする。
この規定は,RFC 2119に従って,用語遣い,“してもよい(may)”,“しなければならない(must)”及び“することが望ましい(should)”を採用する。
この規定は,次のように構成される。
XFormsへの導入。XFormsの設計原則の概説及びXFormsについての簡潔な手引きを含む。
XFormsの参照マニュアル。この参照マニュアルの大部分は,XFormsの規定から成る。ここでは,XFormsを定義し,XFormsプロセサを規定に適合させるために各構成要素をどのように解釈しなければならないかについて定義する。
附属書は,XMLスキーマで記述されるXFormsの規定,参照情報及び他の有用な情報を含む。
この標準仕様書(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)の参照箇所へのリンクをもつ[参照の例]
次の表記規約は,参考情報である注釈に使用される。
XFormsは数年に渡るHTMLフォームの経験を基にして設計されている。HTMLフォームは電子商取引革命の中心的な役割としてその価値を示し,改良の余地のある点を多く示した。
XFormsがXML形式であることを別にすれば,XFormsとHTMLフォームとの一つ目の相違点は,収集されるデータと個々の値を収集する制御のマーク付けとの分離である。この分離によって,何をどこに送付するのかを明確にできるため,XFormsはHTMLフォームと比較して扱いが容易である。また,フォームの本質的な部分が,それが使用されるページから取り出しやすくなったため,フォームの再使用も容易に行える。
主要な相違点の二つ目は,XFormsはXHTMLに組み込まれるように設計されてはいるが,XHTMLに限らず,その他の適切なマーク付け言語にも組込みが可能である点である。
XFormsでは,文書作成,再使用,国際化,アクセシビリティ,操作性及びデバイスからの独立に関して改良が行われた。
送付されるデータは強く型付けされたものであり,一般的なツールによって検査が可能なものとする。この機能によって,妥当性検証のためにデータをサーバとの間で往復させる必要が少なくなるため,フォームの入力を迅速化できる。
これによって,送付されたデータをバックエンドのアプリケーションに整合するように変換する仕組みをサーバ側に独自に用意する必要がなくなる。 バックエンドのアプリケーションでは,受信したXML文書を直接,妥当性検証し,処理できる。
これによって,スキーマを二重に保持する必要がなくなる。背後にあるビジネスロジックの変更に起因して検証規則を更新する場合でも,XFormsアプリケーション内で妥当性検証制約を再記述する必要はない。
XFormsの文書作成者はバックエンドで用意された制約の基本セット以外にも制約を指定できる。 XFormsモデルの一部として制約を追加指定することで,ウェブアプリケーションの操作性は全体的に向上する。
インスタンスデータにXML 1.0を使用することで,送付されるデータを国際化対応にできる。
XFormsでは,内容及び表示は分離されている。ラベルなどの関連するメタデータはすべて,利用者インタフェース制御によってカプセル化されるため,さまざまな表示様式を使用した場合にアプリケーションのアクセシビリティを向上させることができる。XForms利用者インタフェース制御は特定の表示様式に限定されず,デバイスに依存しない。
利用者インタフェース制御は抽象的なものであるため,利用者インタフェースの記述は目的に基づいたものとなり,利用者との対話を別の装置向きなものにすることが可能になる。
一般的な状況に対応できるXMLベースの宣言的なイベントハンドラを定義することで,XForms文書の大多数は静的に組み立てられる。その結果,イベントハンドラ用のスクリプトの必要性を削減している。
XFormsの場合,フォームは,そのフォームが何を行うのかについて記述するXFormsモデルと呼ばれる部分と,フォームがどのように表示されるのかを記述する別の部分とで構成される。
次のとおりに可視化される単純な電子商取引のフォームについて考えてみる。
収集する値は,現金及びクレジットカードのいずれを使用するのかを表す値,クレジットカードの場合はさらに,クレジットカードの番号及び有効期限とする。
これは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を他のホスト言語に組み込むのは容易である。
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である。三つ目の式では,絶対パスを使用している。
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>
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の例 にもある。
XForms 1.0はXML [XML 1.0]アプリケーションであり,他のXML語い(彙),特にXHTML [XHTML 1.0]の将来版の中で使われるように設計されている。XFormsはこのホスト言語を必要とする。ここでは,XFormsを他の文書型と共に使用することを可能にする,XFormsの構造について記述する。
XForms名前空間のURIはhttp://www.w3.org/2002/xformsである。
XFormsプロセサは,この名前空間の要素及び属性を認識できるように,XML名前空間メカニズム[XML Names]を使用しなければならない。
共通属性集合はXForms名前空間のすべての要素に適用される。
すべてのXForms要素で外来の属性を使用できる。
ホスト言語は,XFormsの各要素でxsd:ID型の属性を許可しなければならない。
リンク付け属性集合は,遠隔の資源へのリンクを含むXForms要素に適用される。
src属性には,自動的な取得を行うための,取得先URIを割り当てる。
xsd:anyURIとして定義されているので,[XML Schema part 2]に記述されている国際化に関する恩恵及び空白についての注意が同様に適用される。
リンクにおける相対URIの振る舞いは,[XML Base]による処理が強く推奨されてはいるが,ホスト言語に依存する。
次の属性はフォーム制御又はアクションと,XPath式で指定されるインスタンスデータノードとの結合を定義する。
XPathとして解釈される結合式。bind属性が指定されている場合,この属性は意味をもたない。
XFormsモデルセレクタ。この結合要素に関連付けられるXFormsモデルのIDを指定する。この属性は,bind属性が指定されている場合,この結合要素に関して意味をもたない。XFormsモデルの文脈決定規則については, 7.4 評価文脈 を参照。
bind要素への参照。
ref又はbindのいずれかを指定する必要がある。bindが指定された場合,ノードは参照先のbindによって決定される。
model属性に指定されたIDREFがmodel要素上にはないIDを指している場合,又はbind属性に指定されたIDREFがbind要素上にはないIDを指している場合,XFormsプロセサは例外( 4.5.1 xforms-binding-exceptionイベント )を発生させる。
先頭ノード規則:サイズが1を超えるノード集合が単一ノード結合属性に割り当てられている場合,ノード集合の中から文書順で先頭のノードが使われる。
次の属性はフォーム制御又はアクションと,XPath式で指定されるノード集合との結合を定義する。
XPathとして解釈される結合式。bind属性が指定されている場合,この属性は意味をもたない。
XFormsモデルセレクタ。この結合要素に関連付けられるXFormsモデルのIDを指定する。この属性は,bind属性が指定されている場合,この結合要素に対して意味をもたない。XFormsモデルの文脈決定規則については, 7.4 評価文脈 を参照。
bind要素への参照。
nodeset又はbindのいずれかを指定する必要がある。bindが指定された場合,ノード集合は参照先のbindによって決定される。
model属性に指定されたIDREFがmodel要素上にはないidを指している場合,又はbind属性に指定されたIDREFがbind要素上にはないidを指している場合,XFormsプロセサは例外( 4.5.1 xforms-binding-exceptionイベント )を発生させる。
この集合はモデル項目特性のそれぞれに対応して属性を一つ含む。この属性の名前は, 6.1 モデル項目特性定義 で定義されているモデル項目特性の名前に正確に一致する。
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モジュール の規則に従って処理しなければならない。
外来の名前空間要素が存在するかどうかは,含んでいる文書プロファイルの定義に依存する。
この要素はフォーム定義を表し,XFormsモデルを定義する要素を格納する目的で使用される。XFormsを含んでいる文書内のmodel要素の数についての制限はない。
オブザーバの作成を容易にするために,XMLイベントの属性を使用することができる。この要素はXFormsアクションではなく,イベントベースの振る舞いは事前定義されていない。
特殊属性:
省略可能。このXFormsモデルに必要なXPath拡張関数(QNamesで表される。)のスペース区切りのリスト。この属性の使用方法については 7.12 拡張関数 を参照。
省略可能。この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>
この省略可能な要素は,初期インスタンスデータを含むか参照する。
共通属性:共通
特殊属性:
省略可能。外部定義された初期インスタンスデータへのリンク。リンク走査に失敗した場合,例外( 4.5.2 xforms-link-exceptionイベント )として処理する。
この属性及び行内内容の両方が提供された場合, 4.2.1 xforms-model-constructイベント に規定しているとおり,リンクが優先する。
初期インスタンスデータがリンクによって指定された場合,インスタンスデータは,リンクされた資源のXPathデータモデルを作成することで形成される。
初期インスタンスデータが行内内容によって指定された場合,インスタンスデータは,最初に行内内容の分離コピー(外側の祖先から継承された名前空間を含む。)を作成し,その分離コピー上にXPathデータモデルを作成することで得られる。この分離コピーは,独立した別の文書として存在する場合に整形式XMLとなり得るものでなければならない。つまり,instanceの要素内容は単一の子要素に制限される。
行内内容でインスタンスが指定されたとき,XML誤りが原因で分離コピーを作成できなかった場合,処理はxforms-link-exceptionで停止することが望ましい。この誤りは,例えば,行内内容に二つの要素ノードがあり,それが,ドキュメント要素が二つ存在するXML文書の作成を意味している場合などに発生する。
submission要素のincludenamespaceprefixes属性を使用することができる。この要素は,送付の対象及び方法についての宣言的な指示を表す。送付処理の詳細については, 11. 送付 を参照。
共通属性:共通
特殊属性:
省略可能。bind要素への参照。この属性が指定された場合,
ref属性に指定されたどの結合参照よりも優先する。
省略可能。インスタンスデータの部分送付を可能にするセレクタ結合式。選択されたノード及びそのすべての子孫が送付対象となる。 デフォルト値は“/”とする。
必須。インスタンスデータの送付先URI。リンクにおける相対URIの振る舞いは,[XML Base]による処理が強く推奨されてはいるが,ホスト言語に依存する。
必須。直列化されたインスタンスデータの送付に使われるプロトコルを示す。デフォルトの値はない。
省略可能。直列化されるXMLの版数を示す属性。
省略可能。直列化するときに読みやすくするための空白ノードを挿入するべきかどうかを示す属性。
省略可能。XMLインスタンスの直列化のためのメディア型を示す属性。文書作成者は,指定した型がapplication/xmlと互換性があることを確実にすることが望ましい。
省略可能。直列化のための符号化を示す属性。
省略可能。インスタンスデータの直列化の際にXML宣言を省略するかどうかを示す属性。
省略可能。直列化されるXMLにstandalone宣言を含めるかどうかを示す属性。
省略可能。CDATAセクションを伴う形式で直列化する要素名を示す属性。
省略可能。送付実行後に返された情報をどのように処理するかを示す属性。この属性が指定されなかった場合,“all”が仮定される。
省略可能。URL符号化において,名前及び値の組のそれぞれを区切る文字を示す属性。省略時の値は';'とする。
省略可能。名前空間の直列化に対する制御を指定する属性。指定しなかった場合は,インスタンスデータ内のすべての名前空間ノードが直列化の対象になる。指定する場合,明示的に使用されるものを除いた,直列化の対象とする名前空間接頭辞のリストを指定する。[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
doctype-system
doctype-public
XFormsアクションモジュールで定義される要素は, そのモジュールが取り込まれる場合,
submission内容モデルでも許可される。
bind要素は,nodeset属性に指定されているモデル結合式によって,インスタンスデータからノード集合を選択する。bind要素の他の属性には,ノード集合の個々のノードに適用されるモデル項目特性が符号化されている。
bindにxsd:ID型の属性が存在する場合,
bindはその識別子を選択されたノード集合に関連付ける。
特殊属性:
bindが作用するノードの集合を示すモデル結合式。モデル結合式は, 7.5.2 モデル結合式 に定義されている。
insertアクションによってノードが追加されたとき,新しく追加されたノードは結合式に一致するすべてのノード集合に含められる。 9.3.5 insert要素 のinsertアクションを参照。
評価文脈に対する結合の影響の詳細については, 7.4 評価文脈 を参照。
extension要素又は,ホスト言語で定義された外来の名前空間の要素は,フォームによっては操作上重要な場合もある。このことを示すために,MustUnderstandモジュールは,すべての要素で使用できる一つの属性を定義する。
| 要素 | 属性 | 最小内容モデル |
|---|---|---|
| すべて | xforms:mustUnderstand (xsd:boolean) | - |
要素がmustUnderstand="true"とマークされていて,XFormsプロセサにその要素の処理が実装されていない場合,利用者に誤りを報告し,終了しなければならない。
ホスト言語にXFormsを含める方法は幾つかある。その一つは,整形式処理だけを使用し,妥当性検証を行わない方法とする。別の方法として,XHTML1.0のように,事前定義されている要素だけを許す厳密な妥当性検証を行う方法がある。一般的な他の方法として,幾つかの選択された場所に規制外の内容を配置する方法がある。この方法を選択するホスト言語では拡張モジュールを使用できる。
| 要素 | 属性 | 最小内容モデル |
|---|---|---|
| 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>
ここではXFormsプロセサによって導かれるさまざまな状態及びそれらの各状態で起こり得る状態遷移を列挙することによってXForms処理モデルを宣言的に定義する。また,それらの状態のそれぞれで満足されなければならない前状態及び後状態を列挙する。XFormsプロセサは,最終結果がここで規定している内容に一致する限りは,どのような方法で実装されてもよい。
状態遷移は通常,XForms木の一部にイベントを振り分けることで開始される。XForms処理モデルは次の分類のイベントから構成される。
初期化
相互作用
通知
誤り状態
XFormsの処理はイベント,イベントハンドラ及びイベント応答の観点から定義される。XFormsは[DOM2 Events] [XML Events]で定義されるイベントシステムを使用するが,このイベントシステムでは,イベント捕獲,ターゲットへのイベントの到達及び最後のイベントバブル動作の各過程が定義されている。
4. 処理モデル を通じて,ターゲット要素として“フォーム制御”という語が使用された場合,それはinput,secret,textarea,output,upload,trigger,range,submit,select,select1及び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 | いいえ | はい | item,itemset又はcase |
| xforms-deselect | いいえ | はい | item,itemset又は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 |
ここでは初期化過程のさまざまな段階を定義する。プロセサはXFormsモデルを含んでいる文書内のそれぞれのXFormsモデルにxforms-model-constructイベントを振り分けることによって初期化を開始する。XFormsプロセサに対する初期化要求がどのように行われるのかについては,実装に任せられる。
XFormsプロセサによって各XFormsモデルに振り分けられる。
ターゲット:model
バブル:はい
取消し可能:いいえ
文脈情報:なし
このイベントに対するデフォルトアクションは次のとおりになる(結果がこれと同じになるように実装する。)。
すべてのXMLスキーマを読み込む。遠隔の文書にアクセス又は遠隔の文書を処理しているときに誤りが発生した場合,処理は例外( 4.5.2 xforms-link-exceptionイベント )を生成して終了する。
初期インスタンスデータ用に外部ソースが指定されている場合,それからXPathデータモデル( 7. XFormsにおけるXPath式 )を構築する。外部ソースが指定されず,内部の初期インスタンスデータが指定されている場合は,それを代わりに使用する。外部の初期インスタンスデータが整形式XMLでない又は取得できない場合,処理は例外( 4.5.2 xforms-link-exceptionイベント )を生成して終了する。いずれも指定されていない場合,この過程ではデータモデルを構築せず,利用者インタフェース構築( 4.2.2 xforms-model-construct-doneイベント )の過程で構築する。
該当する場合,P3P[P3P 1.0]を初期化する。
インスタンスデータを構築する。インスタンスデータに挿入される文字列はすべて,Unicode正規化の対象となる。bind要素をすべて文書順に処理することで,すべてのモデル項目特性を初期化する。各bind要素に対して行う処理は次のとおり。
bind要素のnodeset属性を評価し,ノード集合を選択する。
ノード集合の各ノードに対して,bind要素内の残りの属性に従ってモデル項目特性を適用する。各属性( 6.1 モデル項目特性定義
で定義される特性に一致する名前をもつ)の文字列値を同じ名前のモデル項目特性の局所値として複写する。
同名のモデル項目特性がノードに既に含まれている場合,このXFormsを含んでいる文書のXForms処理は例外( 4.5.1 xforms-binding-exceptionイベント )を生成して終了する。
このmodel要素に対して,xforms-rebuild,xforms-recalculate,xforms-revalidateを順番に実行する(利用者インタフェースがまだ初期化されていないため,xforms-refreshは実行しない。)。
すべてのXFormsモデルが初期化された後,xforms-model-construct-doneイベントが各model要素に振り分けられる。
xforms-model-construct処理の完了後に振り分けられる。
ターゲット:model
バブル:はい
取消し可能:いいえ
文脈情報:なし
このイベントに対するデフォルトアクションは,XFormsモデルを含んでいる文書に含まれているXFormsモデルの数によらず1回だけ実行され,それぞれのフォーム制御について次の処理を行う(結果がこれと同じになるように実装する。)。
処理の進行には二通りあるが,いずれの方法で進行するのかは,最初のフォーム制御を処理したときに,model内のinstanceが存在していたかどうかに依存する。
(instanceに関する)最初のフォーム制御を処理したときに,フォーム制御から参照されるinstanceが存在していた場合:
結合式を評価し,それが指しているノードが存在することを確認する。ノードが存在しない場合,フォーム制御は,それが結合しているモデル項目のrelevantモデル項目特性の評価結果がfalseである場合と同様に振る舞うことが望ましい。
instanceに関する最初のフォーム制御を処理したときに,フォーム制御から参照されるinstanceが存在していなかった場合:
instanceへの最初の参照では,次に示す規則に従って,デフォルトのinstanceを作成する。
ルートinstanceData要素を作成する。
利用者インタフェース制御の結合式を使用して,インスタンスデータ要素ノードをnameとして作成する。nameがQNameとして妥当でない場合,処理は例外( 4.5.1 xforms-binding-exceptionイベント
)を生成して終了する。
(自動的に作成された)instanceへの2回目以降の参照では,次の処理を行う。
一致するインスタンスデータノードが見つかった場合,利用者インタフェース制御をその要素に関連付ける。
一致するインスタンスデータノードが見つからない場合,利用者インタフェース制御の結合式を使用して,インスタンスデータノードをnameとして作成する。nameがQNameとして妥当でない場合,処理は例外( 4.5.1 xforms-binding-exceptionイベント
)を生成して終了する。
すべてのフォーム制御が初期化された後,xforms-readyイベントが各model要素に振り分けられる。
xforms-model-construct-done処理の一部として振り分けられる。
ターゲット:model
バブル:はい
取消し可能:いいえ
文脈情報:なし
このイベントは通知イベントであり,このイベントに対するデフォルトアクションは存在しない。
XFormsプロセサが終了することを通知する目的で,プロセサによって振り分けられる。プロセサの終了は利用者の動作,loadXForms動作,又はフォーム送付の結果として発生する。
ターゲット:model
バブル:いいえ
取消し可能:いいえ
文脈情報:なし
このイベントは通知イベントであり,このイベントに対するデフォルトアクションは存在しない。
利用者からの,次又は前のフォーム制御へのナビゲーション要求に対応して振り分けられる。
ターゲット:フォーム制御
バブル:いいえ
取消し可能:はい
文脈情報:なし
これらのイベントに対するデフォルトアクションは,“デフォルトのナビゲーション順序に従って移動する”とする。インタフェースとしてキーボードを考えた場合,“tab”キーに対してxforms-nextイベントが生成され,“shift”キー+“tab”キーに対してxforms-previousイベントが生成されることが考えられる。
ナビゲーションはXFormsを含んでいる文書全体をベースに決定され,ナビゲーション順序はホスト言語で定義される。考えられる方法として,navindex属性を使用し,個々のフォーム制御をナビゲーション単位とする例を示す。<group>,<repeat>及び<switch>構造もナビゲーション単位として機能するが,これらは単一のナビゲーションポイントを提供するのではなく,子のフォーム制御(及びその他の構造)のための局所ナビゲーションコンテキストを作成する。ナビゲーション順序は次のとおりにして決定される。
最初にナビゲーションの対象になるのは,navindexが指定され,その値に正の整数が割り当てられているフォーム制御とする。
最も外側のフォーム制御をnavindex値の昇順にナビゲートする。値は連続しなくてもよく,特別な値で始まる必要もない。同一のnavindex値をもつフォーム制御は文書順にナビゲートする。
祖先のフォーム制御(<group>,<repeat>及び<switch>)によって局所ナビゲーション順序が作成される。局所内のすべてのフォーム制御をその外側をナビゲートする前にnavindex値の昇順でナビゲートする。同一のnavindex値をもつフォーム制御は文書順にナビゲートする。
次に,navindexが指定されていないか,navindexの値として“0”が指定されているフォーム制御をナビゲートする。これらのフォーム制御は文書順にナビゲートする。
無効で非表示にされているフォーム制御,つまりrelevantではないフォーム制御には全体における相対的な順序は割り当てられるが,ナビゲート対象にはならない。
最後のフォーム制御の次(又は最初のフォーム制御の前)のナビゲーション順序については定義されない。XFormsプロセサは,最初又は最後の制御に循環して移動する,フォーム上にフォーカスを置かない及びそれ以外のことをしてもよい。
フォーム制御にフォーカスが置かれた場合に振り分けられる。
ターゲット:フォーム制御
バブル:いいえ
取消し可能:はい
文脈情報:なし
これのイベントに対するデフォルトアクションは次のとおりになる。
フォーム制御がフォーカスを受け入れることができる場合,フォーカスをターゲットのフォーム制御に置く。繰返し構造へのフォーカス設定では,繰返しインデクスによって示される繰返し項目にフォーカスを設定する。
ヘルプ又はヒント情報に関する利用者要求に対応して振り分けられる。
ターゲット:フォーム制御
バブル:はい
取消し可能:はい
文脈情報:なし
これらのイベントに対するデフォルトアクションは“help要素又はhint要素がフォーム制御に指定されている場合はそれを使用して利用者に表示するメッセージを構成する”とする。これらの要素が指定されていない場合は,利用者エージェントはデフォルトヘルプ又はヒントメッセージを提供してもよいが,必須ではない。
特定のXFormsモデルに関連付けられているすべてのフォーム制御を更新するリクエストに対応して振り分けられる。
ターゲット:model
バブル:はい
取消し可能:はい
文脈情報:なし
このイベントに対するデフォルトアクションは“利用者インタフェースはモデルの次に示す状態を反映する”とする。これは,すべてのフォーム制御に,それに結合されているインスタンスデータの次の値が反映されることを意味する。
現在の値
妥当性
required,readonly又はrelevantであるかどうか
特定のXFormsモデルに対する再検証要求に対応して振り分けられる。
ターゲット:model
バブル:はい
取消し可能:はい
文脈情報:なし
このイベントに対するデフォルトアクションは次のとおりになる(結果がこれと同じになるように実装する。)。
このイベントに対するデフォルトハンドリングは次の条件を満たさなければならない。
局所的有効性とは,継承によってではなく,モデル項目特性から直接導かれる有効性を意味する。
model中のすべてのinstance要素中のすべてのインスタンスデータノードを指定されたすべてのXMLスキーマ及び関連するXMLスキーマデータ型に照らして検査する。その際,次の規則を使用する。
要素のXMLスキーマ妥当性は,局所的に有効な属性ノード,要素ノード及びテキストノードによって判定する。PSVIによって示される誤りコードの一覧にcvc-attribute.3だけしか含まれていない場合,その要素は依然妥当であるとする。これは,属性が妥当でないことでその属性を所有する要素の妥当性が失われることはないことを意味する。
属性ノードのXMLスキーマ妥当性は,XMLスキーマで定義されている“Attribute Locally Valid”の規則で判定する。
テキストノードのXMLスキーマ妥当性は,String Validによって定義される,モデル結合によって関連付けられる型定義についての,正規化されたノードの内容の局所的な妥当性として定義する。テキストノードに型が関連付けられていない場合,常に妥当とする。
model中のすべてのinstance要素中のすべてのインスタンスデータノードを,required,constraintなど,値に対する制約を定義する結合されたすべてのモデル項目特性に照らし検査する
( 6. モデル項目特性 )。
対応するモデル項目特性の評価結果がこのイベント処理の開始時と一致しないフォーム制御に対して,適切な通知イベント( 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又は他の通知イベントは振り分けられない。特定のXFormsモデルに関連付けられるすべての計算を再計算する要求に対応して振り分けられる。
ターゲット:model
バブル:はい
取消し可能:はい
文脈情報:なし
このイベントに対するデフォルトアクションは次のとおりになる。
すべてのインスタンスデータ項目の値を,それらに“calculate”制約が関連付けられている場合,その制約に一致させる。計算される式を含むことができるすべてのモデル項目特性を評価して,その値を決定する。
XPath式は一つ以上のインスタンスノードの,値又はモデル項目特性(例えば,required,relevant)のいずれかと結合する。XPath式と単一インスタンスノードの値又はモデル項目特性との組合せを,再計算の対象となる一つの計算単位,つまり代入式と考える。
モデル項目特性を再計算するときにXPath式が評価されるが,その評価文脈は, 7.4 評価文脈 で計算される式に対して定義されているとおりに,そのモデル項目特性を適用するモデル結合式によって決まる。XPath式で他のインスタンスノードを参照(reference)又は言及(refer to)してもよいが,その場合はそのインスタンスノードの値が参照される。参照される各インスタンスノードから見た場合,そのインスタンスノードを直接参照するそれらの代入式はそのインスタンスノードに依存するものとする。計算式における現在のノード値への参照は明白に無視される。すなわち,ある代入式内でその代入式が関連付けられているインスタンスノードを参照している場合,そのインスタンスノードはそれ自身に依存しない。あるインスタンスノードから代入式に至る依存の経路がある場合(他のインスタンスノードを経由する場合も含める。),代入式にとってそのインスタンスノード(値は計算されるものでも,そうでなくてもよい。)は計算に必要なものとする。代入式が自身を計算に必要とする場合,その代入式は循環依存の一部とする。
calculate式で現在のノード値を参照することは避けることが望ましい。ただし,required又はreadonlyなどの他のモデル項目特性では,自己参照の存在が十分に定義されている。再計算イベントの開始時には,例えば,利用者入力がインスタンスに伝ぱしたことによって値が変更されている一つ以上のインスタンスノードのリストLが存在する。
XFormsプロセサは,L中のいずれの要素も計算に必要としない代入式については再計算を行わないほうがよい。
XFormsプロセサは,L中の一つ以上の要素を計算に必要とする代入式について,再計算を1回だけ実行することが望ましい。
XFormsプロセサは,代入式Cの再計算を,Cが必要とするすべてのインスタンスノードの代入式の再計算の後に行わなければならない(同様に,XFormsプロセサは,Cに関連付けられているインスタンスノードを計算に必要とするすべての代入式の再計算の前に,代入式Cを再計算しなければならない。)。
最後に,代入式が循環依存の一部であり,L中の要素を計算に必要とする場合,XFormsプロセサは例外( 4.5.4 xforms-compute-exceptionイベント )を報告しなければならない。
附属書D 再計算順序アルゴリズム では,適切な再計算動作を達成する方法の一つについて説明している。
あるXFormsモデル内で計算に必要な依存関係をたどる内部データ構造を再構築するための要求に対応して振り分けられる。
ターゲット:model
バブル:はい
取消し可能:はい
文脈情報:なし
このイベントに対するデフォルトアクションは次のとおりになる。
このイベントに対するデフォルトアクションは,計算に必要な依存関係についてのデータ構造を再構築し,次回xforms-recalculateイベントがモデルに対して振り分けられたときに完全な再計算を行うために必要な,計算式が関連付けられているインスタンスノードへの参照をすべて,変更リストLに含めることとする。
モデルを再設定するための利用者要求に対応して振り分けられる。
ターゲット:model
バブル:はい
取消し可能:はい
文脈情報:なし
このイベントに対するデフォルトアクションは次のとおりになる。
xforms-readyイベントを実行した直後の値及び木構造にインスタンスデータを再設定する。その後,xforms-rebuild,xforms-recalculate,xforms-revalidate及びxforms-refreshの各イベントを順番にmodel要素に対して振り分ける。
ボタン又は“enter”キーの押下など,フォーム制御に対する“デフォルトアクションリクエスト”に対応して振り分けられる。
ターゲット:フォーム制御
バブル:はい
取消し可能:はい
文脈情報:なし
このイベントは通知イベントであり,このイベントに対するデフォルトアクションは存在しない。
フォーム制御に結合されているインスタンスデータノードに対する決定済みの変更に対応して振り分けられる。利用者がフォーム制御から離れるときなどが考えられる。
ターゲット:フォーム制御
バブル:はい
取消し可能:いいえ
文脈情報:なし
このイベントは通知イベントであり,このイベントに対するデフォルトアクションは存在しない。
select,select1又はswitch中のアイテムの選択又は選択解除に対応して振り分けられる。
ターゲット:item,itemset又はcase
バブル:はい
取消し可能:いいえ
文脈情報:なし
このイベントは通知イベントであり,このイベントに対するデフォルトアクションは存在しない。
setindex動作がrepeatの範囲外のインデクスの設定を試みたときに振り分けられる。
ターゲット:repeat
バブル:はい
取消し可能:いいえ
文脈情報:なし
このイベントは通知イベントであり,このイベントに対するデフォルトアクションは存在しない。
イベントハンドラがinsert又はdeleteのXForms動作を呼び出し,繰返し項目を正常に追加又は削除したときに振り分けられる。
ターゲット:instance
バブル:はい
取消し可能:いいえ
文脈情報:挿入又は削除に使用されたPath式(xsd:string)。
このイベントは通知イベントであり,このイベントに対するデフォルトアクションは存在しない。
インスタンスデータノードが妥当となったときに振り分けられる。
ターゲット:フォーム制御
バブル:はい
取消し可能:いいえ
文脈情報:なし
このイベントは通知イベントであり,このイベントに対するデフォルトアクションは存在しない。
このイベントは,結合されているインスタンスデータノードの値が変化したときに加えて,constraintモデル項目特性がtrueと評価されたことで結合されているインスタンスデータノードが間接的に妥当となったときに振り分けられる。
インスタンスデータノードが非妥当となったときに振り分けられる。
ターゲット:フォーム制御
バブル:はい
取消し可能:いいえ
文脈情報:なし
このイベントは通知イベントであり,このイベントに対するデフォルトアクションは存在しない。
このイベントは,結合されているインスタンスデータノードの値が変化したときに加えて,constraintモデル項目特性がfalseと評価されたことで結合されているインスタンスデータノードが間接的に非妥当となったときに振り分けられる。
フォーム制御にフォーカスが当たったときに振り分けられる。
ターゲット:フォーム制御
バブル:はい
取消し可能:いいえ
文脈情報:なし
このイベントは通知イベントであり,このイベントに対するデフォルトアクションは存在しない。
フォーム制御がフォーカスを失ったときに振り分けられる。
ターゲット:フォーム制御
バブル:はい
取消し可能:いいえ
文脈情報:なし
このイベントは通知イベントであり,このイベントに対するデフォルトアクションは存在しない。
インスタンスデータノードが読込み専用になったときに振り分けられる。
ターゲット:フォーム制御
バブル:はい
取消し可能:いいえ
文脈情報:なし
このイベントは通知イベントであり,このイベントに対するデフォルトアクションは存在しない。
このイベントは,結合されているインスタンスデータノードの値が変化したときに加えて,readonlyモデル項目特性がtrueと評価されたことで結合されているインスタンスデータノードが間接的に読込み専用となったときに振り分けられる。
インスタンスデータノードが読書き可能となったときに振り分けられる。
ターゲット:フォーム制御
バブル:はい
取消し可能:いいえ
文脈情報:なし
このイベントは通知イベントであり,このイベントに対するデフォルトアクションは存在しない。
このイベントは,結合されているインスタンスデータノードの値が変化したときに加えて,readonlyモデル項目特性がfalseと評価されたことで結合されているインスタンスデータノードが間接的に読書き可能となったときに振り分けられる。
インスタンスデータノードが必須となったときに振り分けられる。
ターゲット:フォーム制御
バブル:はい
取消し可能:いいえ
文脈情報:なし
このイベントは通知イベントであり,このイベントに対するデフォルトアクションは存在しない。
このイベントは,結合されているインスタンスデータノードの値が変化したときに加えて,requiredモデル項目特性がtrueと評価されたことで結合されているインスタンスデータノードが間接的に必須となったときに振り分けられる。
インスタンスデータノードが任意指定になったときに振り分けられる。
ターゲット:フォーム制御
バブル:はい
取消し可能:いいえ
文脈情報:なし
このイベントは通知イベントであり,このイベントに対するデフォルトアクションは存在しない。
このイベントは,結合されているインスタンスデータノードの値が変化したときに加えて,requiredモデル項目特性がfalseと評価されたことで結合されているインスタンスデータノードが間接的に任意指定となったときに振り分けられる。
インスタンスデータノードが有効となったときに振り分けられる。
ターゲット:フォーム制御
バブル:はい
取消し可能:いいえ
文脈情報:なし
このイベントは通知イベントであり,このイベントに対するデフォルトアクションは存在しない。
このイベントは,結合されているインスタンスデータノードの値が変化したときに加えて,relevantモデル項目特性がtrueと評価されたことで結合されているインスタンスデータノードが間接的に有効となったときに振り分けられる。
インスタンスデータノードが無効となったときに振り分けられる。
ターゲット:フォーム制御
バブル:はい
取消し可能:いいえ
文脈情報:なし
このイベントは通知イベントであり,このイベントに対するデフォルトアクションは存在しない。
このイベントは,結合されているインスタンスデータノードの値が変化したときに加えて,relevantモデル項目特性がfalseと評価されたことで結合されているインスタンスデータノードが間接的に無効となったときに振り分けられる。
インスタンスデータノードの値がフォーム制御によって表示できる値に変更されたときに振り分けられる。
ターゲット:フォーム制御
バブル:はい
取消し可能:いいえ
文脈情報:なし
このイベントは通知イベントであり,このイベントに対するデフォルトアクションは存在しない。
このイベントは,フォーム制御に指定された制約条件から表示が不可能であったインスタンスデータノードの値が,フォーム制御で表示することができるように変更されたときに振り分けられる。
インスタンスデータノードの値がフォーム制御によって表示できないように変更されたときに振り分けられる。
ターゲット:フォーム制御
バブル:はい
取消し可能:いいえ
文脈情報:なし
このイベントは通知イベントであり,このイベントに対するデフォルトアクションは存在しない。
このイベントは,フォーム制御に指定された制約条件から,インスタンスデータノードの値を表示することができないときに振り分けられる。
返された文書の処理も含めて送付処理が完了したときに振り分けられる。
ターゲット:submission
バブル:はい
取消し可能:いいえ
文脈情報:なし
このイベントは通知イベントであり,このイベントに対するデフォルトアクションは存在しない。
11. 送付 で定義されている送付処理の失敗の指示として振り分けられる。
ターゲット:submission
バブル:はい
取消し可能:いいえ
文脈情報:失敗した送付メソッドURI(xsd:anyURI)
このイベントは通知イベントであり,このイベントに対するデフォルトアクションは存在しない。
誤り表示はXFormsプロセサの非通常の状態の結果として発生する。これらの幾つかは処理を停止させる“致命的な(fatal)”誤りであり,接尾辞“exception”を伴う。他は単なる報告のためであり,接尾辞“error”を伴う。ここで定義するすべてのイベントについて,XFormsプロセサは,例えば,ファイルに誤りメッセージを記録するような,デフォルトハンドリングを実行してもよい。
不正な結合式,つまりmodel要素のIDを正しく参照しないmodel属性,bind要素のIDを正しく参照しないbind属性及びsubmission要素のIDを正しく参照しないsubmission属性の通知として振り分けられる。
ターゲット:結合式を含むことができるすべての要素
バブル:はい
取消し可能:いいえ
文脈情報:なし
このイベントに対するデフォルトアクションは“致命的な誤りとして処理する”である。
リンク付け属性のリンク走査の失敗の通知として振り分けられる。
ターゲット:model
バブル:はい
取消し可能:いいえ
文脈情報:読込みに失敗したURI(xsd:anyURI)
このイベントに対するデフォルトアクションは“致命的な誤りとして処理する”である。
フォーム処理上重要ではない状況で,リンク付け属性のリンク走査の失敗の通知として振り分けられる。
ターゲット:model
バブル:はい
取消し可能:いいえ
文脈情報:読込みに失敗したURI(xsd:anyURI)
このイベントは通知イベントであり,このイベントに対するデフォルトアクションは存在しない。
XPathの評価中に生じた誤りの通知として振り分けられる。
ターゲット:model
バブル:はい
取消し可能:いいえ
文脈情報:実装固有の誤り文字列。
このイベントに対するデフォルトアクションは“致命的な誤りとして処理する”である。
ここまででは個々のイベントに関連する処理について規定した。ここでは,一般的な幾つかの状況において発生しなければならない,関連するイベントの全体的な順序について規定する。次のリストでは,1回以上発生してもよいイベントを接頭辞[n]で示す。
input,
secret,textarea,range及びupload制御の場合フォーム制御が対話的に変更され,incremental="true"が設定されているとき, 4.6.7 シーケンス:フォーカスの変更を伴う値の変更 で規定しているイベント列を実装に依存する間隔で起動してもよい。
フォーム制御が対話的に変更され,incremental="true"が設定されていないとき,イベント振分けの必要はない。したがって,順序は定義されない。
フォーカスがフォーム制御から変更され,値が変更されているとき,イベント列は 4.6.7 シーケンス:フォーカスの変更を伴う値の変更 で規定しているとおりになる。
output制御の場合イベント列は定義されない。
select又はselect1制御の場合選択が対話的に変更され,incremental="true"が設定されているとき,イベント列は 4.6.6 シーケンス:値の変更を伴わない選択 に規定しているとおりになり,この直後に 4.6.7 シーケンス:フォーカスの変更を伴う値の変更 に規定している列が続いてもよい。
フォーム制御が対話的に変更され,incremental="true"が設定されていないとき,イベント順序は 4.6.6 シーケンス:値の変更を伴わない選択 に規定しているとおりになる。
フォーカスがフォーム制御から変更され,値が変更されているとき,イベント列は 4.6.7 シーケンス:フォーカスの変更を伴う値の変更 で規定しているとおりになる。
trigger制御の場合フォーム制御の活性化によって, 4.6.8 シーケンス:トリガの活性化 で定義されるイベント列が発生する。
submit制御の場合フォーム制御の活性化によって, 4.6.8 シーケンス:トリガの活性化 で定義されるイベント列が発生し,直後に 4.6.9 シーケンス:送付 で定義されるイベント列が発生する。
xforms-deselect
xforms-select
xforms-recalculate
xforms-revalidate
[n] xforms-valid/xforms-invalid; xforms-enabled/xforms-disabled; xforms-optional/xforms-required; xforms-readonly/xforms-readwrite
xforms-value-changed
DOMFocusOut
DOMFocusIn
xforms-refresh
結合式の再評価は上記のステップ3の前で発生しなければならない。
DOMActivate
xforms-submit
xforms-submit-done又はxforms-submit-error
ここではXFormsモデルの定義で使用されるデータ型を定義する。
XFormsはxsd:duration,xsd:ENTITY,xsd: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 *
XForms用のスキーマでは,XFormsにおけるmodelの定義を容易にするための次のデータ型が派生定義されている。
このデータ型はxforms:listItemsデータ型の基礎として機能する。listItemの値空間には,空白を除く,xsd:stringとして妥当な一つ以上の文字を使用できる。
XFormsには単純型のリスト項目を生成するフォーム制御が含まれる。これはリストによって派生する(derived-by-list)データ型を定義することによって容易になる。listItemsの値空間は,listItemからのリスト派生によって定義される。
XFormsには日,時,分,1秒未満の秒の期間を表すことができる全順序期間データ型がある。このデータ型の値空間は1秒未満の秒の集合とする。このデータ型はxsd:durationから派生している。
XFormsには月及び年の期間を表すことができる全順序期間データ型がある。このデータ型の値空間は整数の月の値とする。このデータ型はxsd:durationから派生している。
ここでは,bind要素を使用してインスタンスデータノードに結合されることができる,情報集合への追加について定義する( 3.3.4 bind要素 を参照)。あるインスタンスデータノードに対するこれらの情報集合への追加の組合せをモデル項目と呼ぶ。これらの情報集合への追加をまとめて,モデル項目特性と呼び, 6.1 モデル項目特性定義 で定義する。それに対し,用語“スキーマ制約”はデータ型のファセットに指定されるXMLスキーマ制約を単に表す。
モデル項目特性は,さまざまな観点で区別することができる。
計算される式及び固定特性
固定特性はXFormsプロセサが1度だけ評価する静的な値とする。この特性はリテラルで構成され,XPathとして評価されない。
計算される式はXFormsプロセサに値を提供するXPath式とする。この値はXForms処理モデルで規定されるとおりに,特定のタイミングで再計算される( 4. 処理モデル を参照)。これらの式によって動的な特性が符号化されるが,この動的な特性は多くの場合,データ項目間の依存性などの制約とする。計算される式は,それが適用されるインスタンスデータノードの値を検査すること以外にも使用される。XPath式はインスタンスデータを走査する手段を提供する。より複雑な計算が外部スクリプトの呼出しとして符号化されてもよい。
継承規則:
モデル項目特性の幾つかでは継承規則が定義される。その場合,XFormsプロセサは二つの値を把握している必要がある。一つはbind要素の属性からの局所値であり,もう一つは,評価された局所値とインスタンスデータ中の先祖ノードからの評価値との組合せとする継承値とする。
局所値の割当て:
局所値はXFormsモデル内のすべての結合要素を文書順に処理することによって割り当てられる。同一ノードに対し,あるモデル項目特性を2回設定しようとする試みは誤りとする。この処理の詳細については 4.2.1 xforms-model-constructイベント を参照。
次にすべてのモデル項目の一部として使用可能なモデル項目特性をリストする。それぞれについて,次の情報を示す。
説明
計算される式かどうか(はい又はいいえ)
使用できる値
デフォルト値
継承規則
説明:スキーマデータ型を関連付ける。
計算される式かどうか:いいえ
使用できる値:データ型定義を表すxsd:QName
デフォルト値:xsd:string
継承規則:継承しない
このモデル項目特性の効果は,インスタンスデータ上にxsi:type属性を記述するのと同じとする。ただし,xsi:typeと異なり,typeは要素及び属性の両方に付与することができる。
<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" />
説明:値を変更できるかどうかを示す。
計算される式かどうか:はい
使用できる値:boolean()を使用してXPathのboolean型に変換できるすべての式
デフォルト値:false(),calculate特性が指定された場合はtrue()
継承規則:trueと評価される先祖ノードが存在する場合,この値はtrueとして扱われる。それ以外の場合は,局所値が使用される。
readonly特性の評価値の論理和(OR)をとることと等価とする。trueに評価された場合,このモデル項目特性は,結合されるインスタンスデータノードに対するどのような変更もXFormsプロセサは許可しないほうがよいことを示す。
値変更の制限に加えて,readonlyモデル項目特性は,XForms利用者インタフェースにヒントを与える。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特性が関連付けられている。説明:インスタンスデータが送付される前に値が必要とされるかどうかを示す。
計算される式かどうか:はい
使用できる値:boolean()を使用してXPathのboolean型に変換できるすべての式
デフォルト値:false()
継承規則:継承しない
フォームはある値を必須としてもよく,この要求事項は動的であってもよい。trueに評価された場合,このモデル項目特性は,空でないインスタンスデータノードがインスタンスデータの送付前に必要とされることを示す。空でないインスタンスデータノードの定義は次のとおり。
結合されるインスタンスデータノードが要素である場合,要素のxsi:nil属性がtrueに設定されていてはならない。
結合されるインスタンスデータノードの値は,長さが1以上であるXPath stringに変換可能でなければならない。
次に示すことを除き,requiredモデル項目特性は可視性,フォーカス又はナビゲーション順に関してXForms利用者インタフェースにヒントを提供しない。XFormsの文書作成者は,requiredデータを受け入れるフォーム制御を可視化することを強く求められる。XFormsプロセサはフォーム制御が必須であることを示唆してもよく,ナビゲーションの制限を含む,即時フィードバックを提供してもよい。
4. 処理モデル に,どのようにXFormsプロセサが必須値を強要するのかについての詳細な説明がある。
<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属性が関連付けられている。use="required|optional|prohibited"という同様の概念がある。これは次の二つの点でXFormsモデル項目特性と異なる。一つ目は,useが属性にだけ適用されるのに対し,XFormsのrequiredはあらゆるノードに適用されるという点である。二つ目は,useがすべての属性が指定されているかを問題にするのに対して(値の有無は無関係),requiredはノードの値が必須かどうかを送付前に評価する点とする。説明:モデル項目が現在有効であるかどうか示す。この特性がfalseに評価されるインスタンスデータノードは送付時に直列化されない。
計算される式かどうか:はい
使用できる値:boolean()を使用してXPathのboolean型に変換できるすべての式
デフォルト値:true()
継承規則:falseと評価される先祖ノードが存在する場合,この値はfalseとして扱われる。それ以外の場合は,局所値が使用される。
relevant特性の評価値の論理和(OR)をとることと等価とする。フォームの多くには,他の状態に依存するデータ入力領域がある。例えば,フォームが,返答者が車を所有しているかどうかを尋ねる場合がある。その車について更に情報を尋ねるのは,車を所有しているという回答を受けた場合にだけ適切である。
relevantモデル項目特性は可視性,フォーカス及びナビゲーション順に関してXForms利用者インタフェースにヒントを提供する。
一般に,trueのときに関連するフォーム制御は表示され,falseのときには,関連するフォーム制御は非表示になり,フォーカスされず,ナビゲーション順から除外されることが望ましい。
<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 > 1000"/>
my:discount要素にrelevant特性を関連付け,注文数量が1000より大きい場合に割引が有効であることを示している。次の表はrequiredとrelevantとの間の利用者インタフェースの相互作用を示す。
required="true()" |
required="false()" | |
relevant="true()" |
フォーム制御(及びすべての子)は可視又は利用者から利用可能でなければならない。XForms利用者インタフェースは値(の入力)が必須であることを示してもよい。 | フォーム制御(及びすべての子)は可視又は利用者から利用可能でなければならない。XForms利用者インタフェースは値(の入力)が省略可能であることを示してもよい。 |
relevant="false()" |
フォーム制御(及びすべての子)は不可視又は利用者から利用不可能でなければならない。値の入力又はフォーカスを与えることは許可しないことが望ましい。XForms利用者インタフェースは,フォーム制御が有効(relevant)になった場合には値が必須であることを示してもよい。 | フォーム制御(及びすべての子)は不可視又は利用者から利用不可能でなければならない。値の入力又はフォーカスを与えることは許可しないほうがよい。 |
説明:関連付けられるインスタンスデータノードの値を計算するために使用される式を提供する。
計算される式かどうか:はい
使用できる値:任意のXPath式
デフォルト値:なし
継承規則:継承しない
XFormsモデルは他の値から計算されるモデル項目を含んでもよい。例えば,各品目の数量及び単価の積の合計, 注文に支払われる税金の量などの計算値は,他のモデル項目の値を使用する計算される式として表現することができる。 4. 処理モデル で,計算がいつ,どのように実行されるのかについて詳細に説明している。
<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 > 1000"/>
my:discount要素にrelevant特性を関連付けている。説明:関連付けられるインスタンスデータノードが妥当であると評価されるために満足する必要のある条件式を示す。
計算される式かどうか:はい
使用できる値:boolean()を使用してXPathのboolean型に変換できるすべての式
デフォルト値:true()
継承規則:継承しない
XPathがfalseと評価されるとき,関連付けられるモデル項目は妥当ではない。逆は必ずしも真ではない。
4. 処理モデル で,いつ,どのように制約が計算されるのか及び妥当性検証がいつ実行されるのかについて詳細に説明している。
<instance>
<my:range>
<my:from />
<my:to />
</my:range>
</instance>
<bind nodeset="my:to" constraint=". > ../my:from" />
my:to要素に関連付けられるconstraint特性は,その値がmy:from要素の値より大きくなければならないことを示している。constraint特性内でcount()関数を使用することで指定することができる。説明:インスタンスデータノードに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スキーマの両方の型情報を付与している。5. データ型
では,XFormsがXMLスキーマデータ型システムを使用して,XFormsモデルによって収集されたデータ値の値空間を制約する仕組みについて説明した。このデータ型制約はXMLスキーマを通じて提供することができる。制約の別の方法として,ここではインスタンスデータに型制約を付与するさまざまな方法を列挙する。スキーマを特定する方法として,xsi:schemaLocation及びxsi:noNamespaceSchemaLocation属性は無視される。
XForms処理モデルは妥当性検証処理の一部としてXMLスキーマファセットを使用する。最も単純なレベルで,モデル項目及びファセットの集合を(XMLスキーマデータ型を通じて)関連付けることが必要である。これは,関連付けられるインスタンスデータノードに対して許容される値をデータ型の字句空間の表現として妥当なものに制限する効果をもつ。
モデル項目に関連付けられるファセットの集合は,次の項目を指定された順序で処理した結果として決定されなければならない。複数のデータ型制限を同じモデル項目に対して適用する場合,指定されたすべての制限の組合せが適用されなければならない。満足することが不可能である制限の組合せを指定することが可能であることに注意する。文書作成者にはこれを回避することが推奨される。
インスタンスデータに関連付けられるXMLスキーマ
インスタンスデータ内のXMLスキーマxsi:type属性
XForms結合を使用してインスタンスデータノードと関連付けられるXFormsのtype制約
型制約が提供されない場合,インスタンスデータノードはtype="xsd:string"となる(文字列をデフォルトとする規則)。
次に示すデータ型の定義は,xsd:stringを基本とし,制約ファセットが追加されたものとする。
<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型となるように定義する。<instance> <my:first-name /> </instance> <bind type="my:nonEmptyString" nodeset="/my:first-name"/>
bind要素を使用してfirst-name要素に型情報を付与している。このように,XForms文書作成者は外部スキーマを変更することができない場合でも,外部スキーマを拡張できる。XFormsは,結合式でインスタンスデータノードを特定するため,制約を表現するため及び計算を指示するためにXPathを使用する。定義されていない関数の呼出しなど,構文的に妥当でないXPath式は例外( 4.5.4 xforms-compute-exceptionイベント )を発生させる。ただし,結合式については,別の例外( 4.5.1 xforms-binding-exceptionイベント )を生成する。
XPathデータ型は結合式及び計算される式でだけ使用される。XFormsは,boolean,string,number及びnode-setの各XPathデータ型を使用する。XFormsの将来の版では,XMLスキーマデータ型に対応する,XPath
2.0の使用が期待される。
この版のXForms規定の場合,[DOM2 Core]
DOMImplementationインタフェースのhasFeatureメソッド呼出しのための機能文字列は“org.w3c.xforms.dom”であり,版数文字列は“1.0”とする。
各model要素について,XFormsプロセサはXPathデータモデル[XPath 1.0]に適合するインスタンスデータと呼ばれる内部構造で状態を管理する。DOMを実装するXFormsプロセサは,次で定義するインタフェースを介したこのインスタンスデータへのDOMアクセスを提供しなければならない。
このインタフェースのための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();
};
};
このメソッドは,instance-idパラメタと一致するIDを含むinstance要素に関連付けられたインスタンスデータに合致するDOM
Documentを返す。一致するインスタンスデータがない場合,DOMExceptionを発行する。
このメソッドは,このXFormsモデル内にある,計算に必要な依存関係をたどるために使用されるすべての内部データ構造を再構築するようにXFormsプロセサに指示する。このメソッドはパラメタをもたず,例外を発生させない。
このメソッドは,このXFormsモデルの完全な再計算を行うようにXFormsプロセサに指示する。このメソッドはパラメタをもたず,例外を発生させない。
recalculate()のスクリプト呼出しは再計算アクションハンドラの実行と必ずしも等価ではない。スクリプトの場合,recalculate()の実行前にインスタンスデータを変更していることが想定されているが,そのDOM変更はキャッシュされない。したがって,完全な再計算を行い,適切な変更がXFormsモデル全体にわたって行われることを保障する必要がある。このメソッドは,このXFormsモデルの完全な妥当性再検証を行うようにXFormsプロセサに指示する。このメソッドはパラメタをもたず,例外を発生させない。
このメソッドは,このXFormsモデル内のインスタンスノードに結合されているフォーム制御の完全なリフレッシュを行うようにXFormsプロセサに指示する。このメソッドはパラメタをもたず,例外を発生させない。
XForms内では,XPath式は具体的なXML文書の代わりに,抽象インスタンスデータを参照する(XPathの“パス”部分を使用する。)。この規定では,この参照を結合式と呼ぶ。すべてのXPath式は評価文脈を必要とする。XFormsの一部としてXPathを評価する際には,評価文脈の決定に次の規則が使用される。
最も外側の結合要素のための文脈ノードは,最上位要素ノード,つまり/*によって返される単一ノードとする。結合要素は結合式属性をもつことを明示的に許可された要素とする。結合要素が最も外側であるのは,XPath式ancestor::*によって返されるノード集合に結合要素ノードが含まれない場合とする。
最も外側でない結合要素のための文脈ノードは,一つ外側の要素の結合式の最初のノードとする。要素が一つ外側であるのは,それがXPath式ancestor::*によって返されるノード集合内の最初の結合要素ノードの場合とする。これは“有効範囲を考慮した解決”とも呼ばれる。
文脈ノードは常に文脈モデル内にあるが,その文脈モデルは次の内,該当する最初の項目によって決定される。
model属性が結合要素上に存在している場合,その属性が文脈モデルを決定する。
結合要素の一つ外側に結合要素が存在する場合,一つ外側の結合要素の文脈モデルが使用される。
文書順で最初のモデルが使用される。
(結合要素に現れる)計算される式のための文脈ノードは,現在処理されているノードとする。
単一ノード結合式の場合,文脈サイズ及び文脈位置は1とする。ノード集合結合式の場合,文脈サイズはノード集合のサイズであり,文脈位置はノード集合中で現在処理されているノードの文書順の位置とする。
変数は存在しない。
次に定義されるものに加えて実装が提供するすべての関数が,利用可能な関数ライブラリとする。フォームの処理に必要な拡張関数は, 7.12 拡張関数 で説明するとおりに,宣言することが望ましい。
式を定義する属性の有効範囲におけるすべての名前空間宣言がその式に適用される。
<group ref="level2/level3">
<select1 ref="@attr" ... >
<label> ... </label>
</select1>
</group>
この例で,groupはlevel2/level3の結合式をもつ。上記の規則によって,この最も外側の要素ノードは/level1の文脈ノードをもつが,これはインスタンスデータの最上位要素ノードとする。次に,select1フォーム制御は親グループから文脈ノードを継承する。これに対応するインスタンスデータを直列化されたXMLとして表すと次のようになる。
<level1>
<level2>
<level3 attr="xyz"/>
</level2>
</level1>
結合式は,モデル項目特性の一つ以上のインスタンスデータノードへの結合,フォーム制御のインスタンスデータへの結合及びアクションによる操作のためのノード又はノード集合の指定に使用されるXPathのPathExprとする。デフォルトで,すべての結合式は文脈モデル中の最初のインスタンスを参照する。この振る舞いはinstance()関数で変更できる。
あらゆるXPath式が結合式として受け入れられるわけではない。特に,動的依存性を生成するモデル結合式に関して制限がある。動的依存性は次のとおりに定義される。
(角括弧内の)XPathの述語は,間接的に表現される可能性のある論理テストとする。動的依存性は,テスト内のすべての項が“固定”である場合を除いて,すべての述語に存在する。固定とは,定数又は計算に必要な依存関係の再構築として明示的に定義される操作間に変更されない値を意味する。
position(),last(),count()及びproperty()の各部分式は“固定”と考えられる。これは,これらの関数によって返される値を変更する可能性のあるすべてのイベントの後に依存性の再構築を実行することが規定されているためである。もう一つの動的依存性は,関数のパラメタ及びそれに対応するxsd:ID型の属性の両方が固定でない場合の,id()関数の使用とする。同様に,instance()関数は,関数のパラメタが固定されないのであれば動的とする。
ある再計算と次の再計算で値が変わるXPath変数も動的依存性を生成する(ただし,XForms 1.0ではすべてのXPath式に対して空の変数文脈が定義されている。)。
拡張関数を定義する文書作成者はこれらの規則に従うことが推奨される。
モデル結合式は,モデル項目特性を宣言するのに使用できる結合式であり,bind要素の属性で使用される。
通常,モデル結合式内の動的依存性は手動による依存性の再構築を必要とする。
結合参照は,ここで記述するとおりに,フォーム制御をその背後にあるインスタンスデータに結合するために使用される。属性名ref及びnodesetは,それぞれ単一ノードとノード集合とを区別する。 3.2.3 単一ノード結合属性 及び 3.2.4 ノード集合結合属性 を参照。
UI結合式内では,動的依存性は適合プロファイルに基づいて許可される。
XFormsの結合メカニズムは,他のXML語い(彙)がここに示す任意の方法を使用して利用者インタフェース制御をXFormsモデルに結合することを可能にしている。例として,XForms結合属性bindは,XHTML
1.x利用者インタフェース制御内で次のとおりに使用される。 3.2.3 単一ノード結合属性 及び 3.2.4 ノード集合結合属性 を参照。
<html:input type="text" name="..." xforms:bind="fn"/>
XFormsモデルを一つだけもつ,次の文書を考える。
<xforms:model id="orders">
<xforms:instance xmlns="">
<orderForm>
<shipTo>
<firstName>John</firstName>
</shipTo>
</orderForm>
</xforms:instance>
<xforms:bind nodeset="/orderForm/shipTo/firstName" id="fn" />
</xforms:model>
次の例は,上に示したモデル内に定義されたfirstName要素インスタンスにxforms:input利用者インタフェースを結合する三つの方法を示している。
ref属性を使用するUI結合<xforms:input ref="/orderForm/shipTo/firstName">...
bind属性を使用するUI結合<xforms:input bind="fn">...
<xforms:input model="orders" ref="/orderForm/shipTo/firstName">...
XForms主要関数ライブラリは,[XPath 1.0]主要関数ライブラリ全体を含み,これにはノード集合,文字列,数値及び論理値に対する操作が含まれる。
次にXFormsで使用するその他の必要な関数を定義する。
boolean boolean-from-string(string)
関数boolean-from-stringは,必須の引数stringが“true”又は“1”の場合にtrueを返し,引数stringが“false”又は“0”の場合にfalseを返す。これはXPath式でスキーマのxsd:booleanデータ型を参照するとき便利である。大文字及び小文字を区別しない比較の結果,引数文字列が上記のどの文字列にも一致しない場合,戻り値はfalseになる。
string if(boolean, string, string)
関数ifは最初の引数を論理値として評価し,その結果がtrueのときに2番目の引数を,そうでないとき(falseのとき)に3番目の引数を返す。
number avg(node-set)
関数avgは,引数のnode-setのそれぞれのノードの文字列値を数値に変換し,それらの算術平均を返す。合計がsum()を用いて計算され,count()によって得られた値で,divを使用して除算が行われる。引数に空のノード集合が指定されたか,いずれかのノードがNaNと評価された場合,戻り値はNaNになる。
number min(node-set)
関数minは,引数node-setのそれぞれのノードの文字列値を数値に変換し,それらの最小値を返す。“最小”は < 演算子によって決定される。引数に空のノード集合が指定されたか,いずれかのノードがNaNと評価された場合,戻り値はNaNになる。
number max(node-set)
関数maxは,引数node-setのそれぞれのノードの文字列値を数値に変換し,その最大値を返す。“最大”は < 演算子によって決定される。引数に空のノード集合が指定されたか,いずれかのノードがNaNと評価された場合,戻り値はNaNになる。
number count-non-empty(node-set)
関数count-non-emptyは,引数node-set内の空でないノードの数を返す。ノードは,ゼロより長い文字列に変換できる場合に,空でないと考えられる。
number index(string)
関数indexは,repeatのIDREFを示す文字列型の引数を採り,指定されているrepeatの1を基準とする現在の繰返しインデクスを返す。repeat及びそれに関連する繰返しインデクスの詳細については 9.3.1 repeat要素
を参照。指定された引数がrepeatを特定できるものでない場合,NaNを返す。
<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>
property()関数 string property(string)
関数propertyは,文字列引数で指定されたXForms特性を返す。
次の特性を参照できる(変更は不可。)。
versionは,XForms
1.0の場合,文字列“1.0”のとおりに定義される。
conformance-level文字列は 12. 適合性 で定義される。
<xforms:instance>
...
<xforms:bind nodeset="message"
calculate="concat( 'created with XForms ', property('version'))"/>
...
</xforms:instance>
xsd:time,xsd:gYearMonth,xsd:gYear,xsd:gMonthDay,xsd:gDay及びxsd:gMonthの各XMLスキーマのデータ型に対する操作をXForms式内で行うための関数は用意されていない。これらのデータ型に必要な操作を行うために,拡張関数( 7.12 拡張関数 )を使用してもよい。string now()
now関数は,現在のシステム日付及び時間を文字列値として,正準化XMLスキーマxsd:dateTime形式で返す。時間帯情報を利用できる場合は,その情報が含められる(UTCに正規化される)。時間帯情報を利用できない場合は,実装のデフォルトが使用される。
now()”の計算をインスタンスデータノードに付加しても,XFormsモデルの再計算を連続的に行い続けることにはならない。number days-from-date(string)
この関数は次の規則に従って日付の通し日を返す。
文字列引数が適切な字句xsd:date又はxsd:dateTimeを表す場合,戻り値は指定されたdate又はdateTime(UTCに正規化)と1970-01-01との差で表される日数になる。時間,分及び秒部分は正規化後に無視される。それ以外の入力引数が指定された場合の戻り値はNaNになる。
例:
days-from-date("2002-01-01")は11688を返すdays-from-date("1969-12-31")は-1を返す
number seconds-from-dateTime(string)
この関数は次の規則に従って秒数の値を返す。秒数は小数になる場合もある。
文字列引数が適切な字句xsd:dateTimeを表す場合,戻り値は指定されたdateTime(UTCに正規化)と1970-01-01T00:00:00Zとの差で表される秒数になる。時間帯が指定されない場合は,UTCが仮定される。
number seconds(string)
この関数は次の規則に従って秒数の値を返す。秒数は小数になる場合もある。
文字列変数が適切な字句xsd:durationを表す場合,戻り値は“(秒部分に指定された数値)+(60×分部分に指定された数値)+(60×60×時間部分に指定された数値)+(60×60×24×日部分に指定された数値)”になる。結果の正負号は期間の正負号に一致する。年及び月部分が存在する場合は無視される。その他の入力引数が指定された場合の戻り値はNaNになる。
例:
seconds("P1Y2M")は0を返すseconds("P3DT10H30M1.5S")は297001.5を返すseconds("3")はNaNを返す
xsd:durationを基本に定義されているが,xsd:durationから派生したデータ型,特にxforms:dayTimeDurationでだけ使用されることが意図されている。number months(string)
この関数は次の規則に従って通し月を返す。
文字列引数が適切な字句xsd:durationを表す場合,戻り値は“(月部分に指定された数値)+(12×年部分に指定された数値)”になる。結果の正負号は期間の正負号に一致する。日,時間,分及び秒部分が存在する場合は無視される。その他の入力引数が指定された場合の戻り値は,NaNになる。
例:
months("P1Y2M")は14を返すmonths("-P19M")は-19を返す
xsd:durationを基本に定義されているが,xsd:durationから派生したデータ型,特にxforms:yearMonthDurationでだけ使用されることが意図されている。node-set instance(string)
一つのXFormsモデルが複数のインスタンスを含む場合がある。この関数を使用すれば,文脈ノードを含むインスタンスデータ以外の,同一XFormsモデル内の他のインスタンスデータにアクセスすることができる。
引数はstring関数が呼ばれたかのように文字列に変換される。この文字列はIDREFとして扱われ,含んでいる文書内のinstance要素に照らして,その一致が検査される。一致するインスタンスが存在し,そのインスタンスデータが現在の文脈ノードと同じXFormsモデルに関連付けられている場合,この関数はそのインスタンスデータのルート要素ノード(文書要素ノードとも呼ばれる。)だけを含むノード集合を返す。それ以外の場合は,空のノード集合を返す。
例:
次のXMLに一致するインスタンスデータを考える。
<xforms:instance xmlns="" id="orderform">
<orderForm>
<shipTo>
<firstName>John</firstName>
</shipTo>
</orderForm>
</xforms:instance>
次の式はfirstNameノードを選択する。instance関数が一つの要素ノードを返し,その結果,パスの最も左側に指定された位置を置き換えている。
ref="instance('orderform')/shipTo/firstName"
XForms文書では,ここに示した以外のXPath拡張関数を使用してもよい。多くの有用なコミュニティ拡張が[EXSLT]に定義されている。この拡張関数の名前はmodel要素のfunctions属性に宣言されなければならない。この宣言は,XFormsプロセサによって,利用可能な拡張関数に照合するのに使用される。XFormsプロセサはこの照合を文書の読込み時に実行する。XForms文書で宣言されている拡張関数をプロセサが実装していない場合,プロセサは例外( 4.5.4 xforms-compute-exceptionイベント )を生成して処理を停止する。
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要素
input
type="hidden"に相当するフォーム制御は必要ない。次のUI共通属性グループは,利用者インタフェースに関連する多くのXForms要素に共通とする。
| 要素 | 属性 |
|---|---|
| (多種) | appearance ("full"|"compact"|"minimal"|QName-but-not-NCName) |
appearance
表示形式を定義する省略可能な属性。指定されない場合,利用者エージェントは適切な視覚化を自由に選択してよい。
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要素
説明:このフォーム制御は,自由形式でのデータ入力を可能にする。
特殊属性:
入力モード
このフォーム制御は入力モードのヒントを受け入れる。 附属書E 入力モード を参照。
incremental
trueの場合,このフォーム制御はxforms-value-changedイベントを追加生成する。この属性のデフォルト値はfalse。
例:
<input ref="order/shipTo/street" class="streetAddress"> <label>市町村及び番地</label> <hint>市町村名及び番地を入力してください。</hint> </input>
上の例では,class属性はフォーム制御の表示サイズを指定するためにスタイルシートで使用される。入力できる文字数に関する制約はこれらの表示上の特性から得られるのではなく,背後にあるXFormsモデル定義から得られる。
上の例のグラフィカルブラウザでの可視化の例を次に示す。
データ結合制限:任意のsimpleContent(xsd:base64Binary,xsd:hexBinary又はこれらから派生した任意のデータ型を除く。)に結合。
実装必要条件:結合されたデータ型に対応する字句値の入力を許可しなければならない。実装は,データ型の入力のための便利な手段を提供することが望ましく,数の表現などの現地化及び国際化の問題も考慮に入れることが望ましい。例えば,xsd:date型のインスタンスデータノードと結合しているinputでカレンダー制御を提供すること,同様に,boolean型と結合しているinput制御をチェックボックスとして可視化することが考えられる。
<input ref="order/shipDate"> <label>発送日</label> <hint>この注文品の発送日を入力してください。</hint> </input>
上の例のグラフィカルブラウザでの可視化の例を次に示す。
利用者は,テキスト編集ボックスに日付を入力するか,ボタンを押してカレンダーを開くことができる。
8.1.3 secret要素
説明:このフォーム制御は,操作を監視する他の利用者によって入力内容が読み取られないようにしながらシステムに情報を入力する手段を利用者に提供する。一般にはパスワード入力のために使われる。
特殊属性:
入力モード
このフォーム制御は入力モードのヒントを受け入れる。 附属書E 入力モード を参照。
incremental
trueの場合,このフォーム制御はxforms-value-changedイベントを追加生成する。この属性のデフォルト値はfalse。
例:
<secret ref="/login/password"> <label>パスワード</label> <hint>入力するパスワードは表示されません。</hint> </secret>
上の例のグラフィカルブラウザでの可視化の例を次に示す。
データ結合制限:inputと同じ。
実装必要条件:アクセシビリティを考慮しているものも含め,実装は,このフォーム制御に入力される値を隠さなければならない。考えられる一つの方法として,実際に入力された文字の代わりに“*”又は同様の文字を可視化する方法がある。これによって提供されるセキュリティのレベルは簡略的なものにすぎないことに注意する必要がある。機密性が非常に高い情報を扱うには,XFormsで論じる範囲を超えた,別のセキュリティ対策が必要になる。
8.1.4 textarea要素
説明:このフォーム制御は自由形式でのデータ入力を可能するもので,複数行からなる内容(例えば電子メールメッセージの本体)の入力に使用されることが意図されている。
特殊属性:
入力モード
このフォーム制御は入力モードのヒントを受け入れる。 附属書E 入力モード を参照。
incremental
trueの場合,このフォーム制御はxforms-value-changedイベントを追加生成する。この属性のデフォルト値はfalse。
例:
<textarea ref="message/body" class="messageBody"> <label>メッセージ本文</label> <hint>メッセージをここに入力してください。</hint> </textarea>
上の例では,class属性はフォーム制御の表示サイズを指定するためにスタイルシートで使用される。入力できる文字数に関する制約はこれらの表示上の特性から得られるのではなく,背後にあるXFormsモデル定義から得られる。
上の例のグラフィカルブラウザでの可視化の例を次に示す。
データ結合制限: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"/> 円 - 請求理由は次のとおりです:
上の例のグラフィカルブラウザでの可視化の例を次に示す。
データ結合制限:任意のsimpleContentに結合。
実装必要条件:結合されたデータ型に対応する字句値の表示を許可しなければならない。実装は,データ型の視覚化のための便利な手段を提供し,数値の表現などの現地化及び国際化の問題を考慮することが望ましい。
8.1.6 upload要素
説明:このフォーム制御は,Webサイトに一般的に見られるローカルファイルシステムからファイルをアップロードする機能,及びマイクロフォン,ペン,ディジタルカメラを含むさまざまな入力装置からの入力の受入れを実現する。
特殊属性:
mediatype
アップロードの対象となり得るデータのソースを決定するのにXFormsプロセサによって使用される,スペースによって区切られたメディア型の一覧。
incremental
trueの場合,このフォーム制御はxforms-value-changedイベントを追加生成する。この属性のデフォルト値はfalse。
例:
<upload ref="mail/attachment" mediatype="image/*"> <label>画像を選択:</label> <filename ref="@filename" /> <mediatype ref="@mediatype" /> </upload>
上の例のグラフィカルブラウザでの可視化の例を次に示す。
実装必要条件:
活性化されたとき,子要素filenameが存在してファイル名が利用可能な場合,uploadはアップロードするデータのファイル名をインスタンス内の,子要素filename上の結合属性によって示されるノードに置く。
活性化されたとき,子要素mediatypeが存在してメディア型が利用可能な場合,uploadはアップロードするデータのメディア型をインスタンス内の,子要素mediatype上の結合属性によって示されるノードに置く。
データ結合制限:xsd:anyURI,xsd:base64Binary及びxsd:hexBinary,又はこれらから制限によって派生したデータ型だけにこのフォーム制御を結合できる。
実装必要条件:base64Binary又はhexBinaryデータ結合に関して
xsd:base64binary,xsd:hexBinary又はこれらから制限によって派生した型のインスタンスデータノードに結合されている場合,活性化されたときに,uploadは指定された符号化を使用してバイナリの内容をノードの内容として配置する。
実装必要条件:anyURIデータ結合に関して
xsd:anyURI型(又はこれから制限によって派生した型)のインスタンスデータノードに結合している場合,活性化されたとき,uploadはノードの内容としてURIを配置する。
セキュリティ上の理由から,XFormsプロセサは,明示的な利用者の許可なしに,このフォーム制御に結合するURIが指す場所を参照してはならない。
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要素
説明:このフォーム制御は,連続する範囲からの値の選択を許可する。
特殊属性
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>
上の例のグラフィカルブラウザでの可視化の例を次に示す。
データ結合制限:xsd:duration,xsd:date,xsd:time,xsd:dateTime,xsd:gYearMonth,xsd:gYear,xsd:gMonthDay,xsd:gDay,xsd:gMonth,xsd:float,xsd:decimal,xsd: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要素に類似するもので,利用者はこれを使用してある動作を起動することができる。このフォーム制御を他のフォーム制御を構築するために使用してもよい。
例:
<trigger> <label>ここをクリック</label> </trigger>
データ結合制限:任意のノードに結合できる。このフォーム制御は,結合するノードのモデル項目特性から影響を受けるが,フォームデータとの直接の相互作用はない。したがって,結合属性は必須ではない。
実装必要条件:利用者エージェントは,フォーム制御上にDOMActivateイベントを生成する手段を提供しなければならない。グラフィカルな実装では,ラベルの付いた押しボタンとしてこのフォーム制御を可視化することが考えられる。スタイルシートを使用して,このフォーム制御をイメージ,ハイパーリンク又は他の表示形式としてスタイル設定することができる。
8.1.9 submit要素
説明:このフォーム制御は,結合するインスタンスデータのすべて又は一部の送付を開始する。
特殊属性:
submission
submission要素を指す必須の属性。
例:
<submit submission="timecard"> <label>タイムカードの送付</label> </submit>
データ結合制限:任意のノードに結合できる。このフォーム制御は,結合するノードのモデル項目特性から影響を受けるが,フォームデータとの直接の相互作用はない。したがって,結合属性は必須ではない。
実装必要条件:イベントDOMActivateを受け取ると,このフォーム制御は必須の属性submissionによって指定されたsubmission要素にイベントxforms-submitを振り分ける。1度活性化されると,送付処理がxforms-submit-doneイベント又はxforms-submit-errorイベントで完了するまで,この制御はさらなる活性化に利用できてはならない。
8.1.10 select要素
説明:このフォーム制御は,利用者が選択肢の中から複数を選択することを可能にする。
特殊属性:
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" |
|---|---|---|
|
|
|
通常,フォーム制御の外観を厳密に決定するのにはスタイルシートが使用されるが,外観を指定する手段としてappearance属性を使用できる。属性の値は次のいずれかとする。
“full”:選択肢のすべてを常に可視化する。
“compact”:可視化する選択肢の数を固定する。必要に応じてスクロール機能を使用する。
“minimal”:可視化する選択肢の数を最小にする。一時的に選択肢を追加表示する機能をもつ。
データ結合制限:シーケンスを保持することができる任意のsimpleContentに結合できる。simpleContentへの結合の制限は,ここで規定しているとおりに,選択肢が利用者インタフェース制御の一部として記述される場合に存在する。動的に選択肢を作成するためのitemset要素( 9.3.3 itemset要素
を参照)を使用することで,利用可能にする選択肢をXFormsモデルから入手することができるが,その場合はsimpleContentへの結合の制限は緩和される。
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要素
説明:このフォーム制御は,利用者が複数の選択肢から一つだけ選択するのを可能にする。
特殊属性:
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" |
|---|---|---|
|
|
|
データ結合制限:任意の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.2 選択制御のための共通マーク付け
8.2.2 item要素
この要素は,リスト中の項目を表すために,格納値及びラベルを指定する。この要素は,select1要素及びselect要素内に存在する。又は,choices要素内でグループ化される。
共通属性:共通
8.2.3 value要素
この要素は,itemが選択された場合に使用される格納値を提供する。
データ結合制限:結合する選択制御のデータ型に従うすべての字句値が有効でなければならない。
行内内容及びref属性が両方とも指定された場合,ref属性が使用される。
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.2 mediatype要素
省略可能な要素mediatype上の結合属性は,該当する場合に,活性化されたときに親要素uploadによって配置される,選択されたバイナリ資源のメディア型のインスタンス内における配置場所を指定する。
8.3.3 label要素
この必須の要素は,それを含むフォーム制御に説明的な名前のラベルを付ける。さらに,label要素は,フォーム制御を見ることができない利用者に,フォーム制御間のナビゲーション中に簡単な説明を与えるのを可能にする。
特殊属性:
リンク付け属性
外部ラベルへのリンク。リンク走査に失敗した場合は,誤りとして扱われる( 4.5.3 xforms-link-errorイベント )。
指定されたラベルはインスタンスデータ内,遠隔ドキュメント又は内部テキストとして存在できる。要素内にラベルのソースが複数指定された場合,その優先順位は,単一ノード結合属性,リンク付け属性,内部テキストの順になる。
XFormsを含んでいるフォーム制御にフォーカスが移動したとき,ここにカプセル化されたメタデータは,アクセシビリティ支援によって発声されることが考えられる。
省略可能な要素helpは,フォーム制御にヘルプ情報を付加する便利な方法を提供する。これは<message level="modeless" ev:event="xforms-help" ev:propagate="stop">と等価である。
特殊属性:
リンク付け属性
外部ヘルプ情報へのリンク。リンク走査に失敗した場合は誤りとして扱われる( 4.5.3 xforms-link-errorイベント )。
指定されたメッセージは,インスタンスデータ,遠隔のドキュメント,又は内部のテキストとして存在することができる。要素内に複数のメッセージが指定された場合,その優先順位は,単一ノード結合属性,リンク付け属性,内部テキストの順になる。
この要素の例については, 10.1.12 message要素 を参照。
省略可能な要素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の個々のメンバに適用されるモデル項目特性よりも優先する。
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内のナビゲーション順で最初のフォーム制御にフォーカスが設定される。
ここでは,利用者操作及びイベントによって変化する利用者インタフェースの作成を可能にするswitch構造を定義する。このモジュールに含まれる要素及び属性を次に示す。
| 要素 | 属性 | 最小内容モデル |
|---|---|---|
| switch | 共通, UI共通, 単一ノード結合 (省略可能) | case+ |
| case | 共通, selected (xsd:boolean) | label?, ((フォーム制御)|group|switch|repeat)* |
| toggle | 共通, case (xsd:IDREF) | EMPTY |
この要素には一つ以上のcase要素が含まれ,ある時間に可視化されるのはそのうちのいずれか一つだけとする。
relevant処理( 6.1.4 relevant特性
を参照)とは異なる。例えば,アンケート内の利用者の自動車に関連する部分は,“あなたは車を所有していますか?”という質問に利用者が肯定的な回答をした場合にだけ,現在有効なものにしてよい。例:
<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に戻る。
この要素は,条件付きで可視化されるマーク付けを囲む。selected属性は選択の初期状態を決定する。
共通属性:共通
特殊属性:
selected
省略可能。caseに対する選択の状態。デフォルト値は“false”とする。
switch内の複数のcaseがselected="true"である場合,最初のcaseが選択されたままになり,その他はすべて選択が解除される。どれも選択されていない場合,最初のものが選択される。
このXFormsアクションは,switch内の選択肢の排他的なリストから,caseを一つ選択する。
このアクションは,指定されたcaseを含むswitchの新しい状態を反映するように,影響を受けるすべてのcase上の選択の状態(属性値ではない)を調整する。
現在選択されているcaseにxforms-deselectイベントを振り分ける。
選択するcaseにxform-selectイベントを振り分ける。
特殊属性:
case
必須。case要素を示す。
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 |
この要素は,ノード集合結合属性によって選択された同種の集りに対するUIマッピングを定義する。このノード集合は,共通の親ノードをもち,同一のローカル名及び名前空間名をもつ連続する子要素ノードで構成されなければならない。異種混在のノード集合に関するrepeat要素の振る舞いは定義されない。
例:
<repeat nodeset="/cart/items/item">
<input ref="." ...>
<label>...</label>
</input>
<html:br/>
</repeat>
特殊属性:
startindex
省略可能。1から開始される繰返しインデクス。デフォルト値は1とする。
number
省略可能。集合に属する要素のうちの幾つを表示するかに関するXFormsプロセサへのヒント。
この要素は,カプセル化された利用者インタフェース制御を同種の集りの各要素に結合することによって,その集りに対して動作する。この要素の属性は,集りのメンバの幾つがその時々で利用者に提示されるかを指定する。この集りの操作には,XFormsアクション( 10. XFormsアクション を参照)insert,delete及び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>
要素repeatを使用することで,繰返し構造に値を設定するための利用者インタフェースを作成することができる。XHTMLなどのホスト言語でXFormsを使用する場合,tableなどの構造内に繰返し構造を作成することがしばしば必要になる。その場合,table内でrepeat要素を使用して表内に行を作成し,各行を同種の集りの個々のメンバに結合させることを考えがちであるが,html:tableでは現在(おそらく今後も)xforms:repeat要素を子ノードとして使用できないため,他の構文が必要になる。
<table>
<repeat nodeset="...">
<tr>
<td>...</td>
...
</tr>
</repeat>
</table>
より一般的にいえば,ホスト言語の内容モデルが他モジュールを使用するための適切な拡張点を提供しない又は提供できない箇所で,繰返しの振る舞いをホスト言語に組み込む必要がある。これを実現するために,XForms
1.0はrepeat要素と機能的に等価な別の構文を定義している。この構文は次の属性を使用する。
repeat-modelrepeat-bindrepeat-nodesetrepeat-startindexrepeat-number
上の属性は,これらから接頭辞repeat-を除いた名前をもつrepeatの属性と等価とする。ホスト言語の適切な箇所にこれらの属性を含めることで繰返し構造を使用できる。次にXHTMLでの使用例を示す。
<html:table xforms:repeat-nodeset="...">
<html:tr>
<html:td><xforms:output ref="..."/></html:td>
</html:tr>
</html:table>
repeat-属性をもつ要素の子要素であることに注意する。これは純粋に構文上の変形として考えることが望ましく,繰り返す処理の意味するものに変わりはない。純粋に構文上の変形として理解する目的では,要素repeatは,repeat要素の内容をラップする名前の付いていないgroupを含むものとして見ることができる。つまり,次のとおりに考える。
<repeat ...> ... </repeat>
<repeat ...> <group>...</group> </repeat>
<group repeat-...> ... </group>
また,XFormsアクションsetindexを使用する場合,idref型のrepeat属性は繰返しの属性をもつ任意の要素を指すことができる。同様に,repeat-属性を使用して作成された繰返し構造に対して関数indexを使用する場合,その要素のidを関数indexの引数として使用できる。
この要素を使用すれば,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>
-->
この要素は構造的な面で 8.2.3 value要素
に類似しているが,使用できるのがitemset内だけである点と,動作の対象が単純な値ではなくインスタンスデータの部分木である点とが異っている。