この標準仕様書(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プロセサが終了することを通知する目的で,プロセサによって振り分けられる。プロセサの終了は利用者の動作,load
XForms動作,又はフォーム送付の結果として発生する。
ターゲット: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-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>
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
内だけである点と,動作の対象が単純な値ではなくインスタンスデータの部分木である点とが異っている。
item
が選択されたとき,次の規則が適用される。
リストフォーム制御内の結合属性によって指定されたターゲットノードは要素ノードでなければならない。そうでない場合は例外が発生する( 4.5.1 xforms-binding-exceptionイベント )。
item
に関連付けられている,copy
上の結合属性によって指定された要素ノードがターゲットノードの子要素としてディープコピーされる。
計算に必要な依存関係が完全に再構築される。
item
の選択が解除されたとき,次の規則が適用される。
リストフォーム制御内の結合属性によって指定されたターゲットノードは要素ノードでなければならない。そうでない場合は例外が発生する( 4.5.1 xforms-binding-exceptionイベント )。
item
に関連付けられている,copy
上の結合属性によって指定された要素ノードが削除される。
計算に必要な依存関係が完全に再構築される。
このアクションは同種の集り(例えば買い物かご内の品目の集合)に新しい項目を挿入するために使用される。insert
アクションの属性は,新しい項目の集りへの挿入に関する指定であり,その集りの中で新しいノードが現れる位置に関して指定する。新しいノードは,初期インスタンスデータによって指定された同種の集りの最後のメンバのクローンを作ることで作成される。この処理で,xsd:ID
型のノードは,インスタンスデータ中で一意な値になるように修正される。
特殊属性:
at
必須。挿入位置を決定するために評価されるXPath式。
position
必須。“before”(前に挿入)又は“after”(後に挿入)のいずれかを選択する。
insert
処理の規則は次のとおりとする。
結合属性nodeset
を評価することによって,更新対象の同種の集りを決定する。
原型として使用する集りのメンバを決定するために,対応する初期インスタンスデータのノード集合に位置付ける。挿入するノードを生成するために,この集りの最後のメンバのクローンを作成する。最後に,この新しく作成したノードを,インスタンスデータの,position
属性及びat
属性によって指定された位置に挿入する。
at
属性の評価結果によって,挿入のインデクス,つまりノード集合に対するインデクスを表す数値が決まる。at属性は,ノード集合結合の文書順で最初のノードを文脈ノード,ノード集合結合のサイズを文脈サイズとし,文脈位置を1として評価される。position
属性によって,新しいノードをそのインデクスの前又は後のいずれに挿入するのかが決まる。
インデクスの決定規則は次のとおりとする。
属性at
に指定されたXPath表現の戻り値は,XPath関数round()
の規則に従って処理される。例えば,リテラル“1.5
”は“2
”になり,リテラル“string
”はNaN
になる。
結果がNaN
である場合,insertはノード集合の最後への追加になる。
結果として得られたインデクスは,それがノード集合の妥当な範囲にない場合,1
又はノード集合のサイズのいずれか近い値に置き換えられる。
ノードを追加した同種の集りに結合しているすべての繰返しに対するインデクスを,新たに追加したノードを指すように更新する。内側の入れ子として存在する繰返しのためのインデックスを1に再初期化する。
挿入処理が正常に終了した場合,イベントxforms-insert
を振り分ける。
このアクションの結果,新たに作成されたデータノードがXFormsインスタンスデータに挿入される。このノードは,処理モデルの初期化( 4.2 初期化イベント を参照)で定義されるとおりに作成される。例えば,これが繰返し構造と共に使用された場合,背後にある集り内の新しい項目に値を設定するのに必要な利用者インタフェースのインスタンスが作成される。
action
要素内に含まれる場合の遅延更新の振る舞いは特殊なものになる( 10.1.1 action要素 )。insert
を繰り返す構造と共に使用する例については, 9.3.1 repeat要素 を参照。insert
と共にXForms
setvalue
アクションを使用することで,新しく挿入されたノードに対する初期値を指定できることに注意する。
このアクションはインスタンスデータからノードを削除する。
特殊属性:
at
必須。削除位置を決定するために評価されるXPath式。
delete
処理の規則は次のとおりとする。
結合属性nodeset
を評価することによって,更新対象の同種の集りを決定する。集りが空の場合,deleteアクションは無効とする。
n
番目の要素ノードをインスタンスデータから削除する。n
は, 9.3.5 insert要素
で定義されるノード集合インデクスの評価から返される数値とする。n
番目のノードが存在しない場合,この操作は無効とする。
削除処理後のインデクスが指すノードは,次の場合を除いて,削除処理前と同じであることが望ましい。
集り内に残っていた最後の項目が削除された場合,インデクス位置は0になる。
削除されたノードをインデクスが指していた場合で,そのノードが集り内の最後の項目であった場合,インデクスは削除後の集り内で最後のノードを新たに指す。内側の繰返しのインデックスは再初期化される。
削除されたノードをインデクスが指していた場合で,そのノードが集り内の最後の項目ではなかった場合,インデクス位置は変更されない。内側の繰返しのインデクスは再初期化される。
繰返しの再初期化とは,それが空の場合にインデクスを0に変更し,それ以外の場合は1に変更することを意味する。
deleteが正常終了した場合,イベントxforms-delete
を振り分ける。
このアクションの結果,インスタンスデータ内のノードは削除される。
action
要素内に含まれる場合の遅延更新の振る舞いは特殊なものになる( 10.1.1 action要素 )。delete
を繰返し構造と共に使用する例については, 9.3.1 repeat要素 を参照。
このアクションは,ある項目を繰返し内で現在指し示されるものとして設定する( 9.3.1 repeat要素 )。
特殊属性:
repeat
必須。繰返し要素を示す。
index
必須。繰返し内の1を基準とする相対位置として評価されるXPath式。
指定されたインデクスが0以下である場合,xforms-scroll-first
イベントが振り分けられ,インデクスは1に設定される。指定されたインデクスが繰返しの最後の項目のインデックスよりも大きい場合,xforms-scroll-last
イベントが振り分けられ,インデクスは最後の項目のインデクスに設定される。インデクスがNaNと評価される場合,このアクションは無効とする。内側の入れ子の繰返しのためのインデクスは1に再初期化される。このアクションの結果,実装内の計算に必要な依存関係を管理するためのデータ構造は再構築又は更新される。
9.3.8 繰返し処理
repeat
要素の本体内に含まれるマーク付けは,背後にある集りの各メンバに対して利用者インタフェースを生成することを指定する。利用者インタフェースの初期化中( 4.2.2 xforms-model-construct-doneイベント
を参照),repeat
に対して次のステップが実行される。
このrepeat
の操作対象である同種の集りに位置付けるために,nodeset
属性を評価する。
ソース文書内にあるinstance
要素内の対応するノードに位置付ける。これらのノードは初期値を提供し,(繰り返す)集りのメンバを作成するための原型インスタンスとして機能する。
この繰返し構造のためのindexをstartindex
の値に初期化する。startindex
が1より小さい場合は1とし,初期のノード集合のサイズより大きい場合はノード集合のサイズとする。
repeat
要素内に指定された利用者インタフェースのテンプレートをこの原型インスタンスに結合する。原型のインスタンスと利用者インタフェース制御のための結合制限との間で型の不整合がある場合,誤りを送信し,処理を停止する。
repeat
で指定された利用者インタフェースを,repeat
要素上の属性で指定された集りのメンバの必要数だけ生成する。
繰返し構造のための処理モデルでは,インスタンスデータ中の現在の項目を指すインデクスが使用される。この繰返しインデクスは,XForms
index
関数 7.8.5 index() 関数 を介してアクセスされ,XForms
setindex
アクション 9.3.7 setindex要素
を介して操作される。このインデクスはinsert
及びdelete
操作のための参照ポイントとして使用される。repeat
要素内に含まれるXFormsフォーム制御では,値の格納先である集り内の項目のインデクスが明示的に指定されないことに注意する。これは意図されたものであり,これによって文書作成及び処理モデルの両方ともが単純なものに保たれる。
繰返しに付けられた結合式は,個々のノードではなく,値の格納先である集りのノード集合を返す。repeat
要素の本体内で,結合は,インデクスによって決定されるノードの文脈ノードで評価される。繰返し処理はXPath式を使用してrepeat
要素の操作対象の集りを決定する。初期インスタンスデータは同種の集りの原型メンバを供給する。この原型メンバは,UIの初期化( 4.2.2 xforms-model-construct-doneイベント
を参照)中に同種の集りのメンバを作成するのに使用される。また,insert
アクションによる集りの新しいメンバの作成時にも使用される。同種の集りを作成するために,初期インスタンスデータには,集りの少なくとも一つのメンバを指定しなければならない。この要求事項は,スキーマに加えてインスタンスデータを必要とするのに類似しており,その理由も同じとする。
repeat
内のフォーム制御は,集りの個々の項目に値を格納するのに適切なものである必要がある。この単純ではあるが強力な機能によって,XFormsモデルに集りの入れ子が指定されている場合に,対応する利用者インタフェースでrepeat
要素を入れ子にすることができる。
9.3.9 繰返しの入れ子
repeat要素入れ子にして,構造化データを編集するためのより強力な利用者インタフェースを作成することができる。 G.2 XFormsを使用した階層型ブックマークの編集 は,複数の節内のブックマークから成る階層データを編集するのに繰返しの入れ子を使用するフォームの例とする。この例の一部として現われる次のinsert
文について考える。
<xforms:insert nodeset="/bookmarks/section[index('repeatSections')]/bookmark" at="index('repeatBookmarks')" position="after"/>
この例で,上のinsert
ステートメントは,現在選択されている節に新しいブックマークのエントリを加えるために使用されている。
内部の(入れ子にされた)繰返しは,この選択された節内のブックマークを操作する。この内側の繰返しのインデクス(インデクスはXForms
index
関数によって返される。)は,1
から開始される。したがって,新しい空のブックマークの節が作成され,現在のもの(current)になった後,最初のブックマークの挿入操作では,新しく作成されたブックマークがリストの先頭に追加される。
9.3.10 利用者インタフェースの相互作用
要素repeat
を使用すれば,利用者の対話を同種の集りに結合することができる。可視化される項目の数は集り内の有効な総数より少ない可能性もある。その場合,同時に表示される繰返し項目は,その一部分だけになる。例えば,GUIにスクロールテーブルが表示されることが考えられる。繰返しインデクスによって示される現在の項目は,例えば,表示領域外にスクロールされるのではなく,常に利用者から利用可能になることが望ましい。
10. XFormsアクション
に列挙されたXFormsアクションをイベントリスナ内で使用して,エントリをスクロール,挿入及び削除することによって,値の格納先である同種の集りを操作してもよい。
要素repeat
によってカプセル化されたマーク付けは,利用者に提示される利用者対話のためのテンプレートの役割を果たすことに注意する。その結果,生成された利用者インタフェースの一部分を,静的に記述したidref
属性を使用して参照することは不可能である。したがって,XForms
1.0ではrepeat
要素内のswitch
構造の振る舞いを定義しない。XFormsの将来の版で,実装の経験及び利用者からのフィードバックに基づいてrepeat
内のswitch
の振る舞いが定義される可能性もある。
ここでは,イベントに応じて起動することができる,XMLイベントに基づいた[XML Events]アクションの共通的なセットを定義する。
この規定で定義されたフォーム制御はすべて,XFormsアプリケーションの一貫した記述及びルック&フィールを支援する,共通的な振る舞いの集合をもつ。この一貫性は,さまざまなフォーム制御に共通的な振る舞いを付加することから得られる。XMLイベントによって提供されたイベント結合機構と共に,これらのハンドラは,XForms利用者インタフェースの中の適切な箇所でイベント処理を指定するための柔軟な手段をフォーム作成者に提供する。XFormsアクションは抽象度の高い意味を捕らえる宣言的なXMLイベントハンドラとする。結果として,それらは,スクリプトだけに頼っていた以前のウェブ技術と比較して,XFormsベースのアプリケーションのアクセシビリティを大きく向上させる。
このモジュールに含まれる要素及び属性は次のとおり。
要素 | 属性 | 最小内容モデル |
---|---|---|
action | 共通,イベント | (アクション)+ |
dispatch | 共通,イベント,name (xsd:NMTOKEN),target (xsd:IDREF),bubbles (xsd:boolean), cancelable (xsd:boolean) | EMPTY |
rebuild | 共通,イベント,model (xsd:IDREF) | EMPTY |
recalculate | 共通,イベント,model (xsd:IDREF) | EMPTY |
revalidate | 共通, イベント,model (xsd:IDREF) | EMPTY |
refresh | 共通,イベント,model (xsd:IDREF) | EMPTY |
setfocus | 共通,イベント,control (xsd:IDREF) | EMPTY |
load | 共通,イベント,単一ノード結合 (省略可能), resource (xsd:anyURI), show ("new" | "replace") | EMPTY |
setvalue | 共通,イベント,単一ノード結合, value (XPathExpression) | PCDATA |
send | 共通,イベント,submission (xsd:IDREF) | EMPTY |
reset | 共通,イベント,model (xsd:IDREF) | EMPTY |
message | 共通,イベント,単一ノード結合 (省略可能), リンク付け, level ("ephemeral" | "modeless" | "modal") | (PCDATA|UI Inline)* |
9.2.3 toggle要素 , 9.3.5 insert要素 , 9.3.6 delete要素 及び 9.3.7 setindex要素 も参照。
このモジュールは,次の要素を含む“アクション”内容集合も定義する(これらの内,toggle
はXFormsスイッチモジュールから,insert
,delete
,setindex
はXForms繰返しモジュールからのものとする。)。
(action|dispatch|rebuild|refresh|recalculate|revalidate|setfocus| load|setvalue|send|reset|message|toggle|insert|delete|setindex)*
さらに,このモジュールは属性グループ“XMLイベント”を定義する。これは,規定([XML Events])に定義されたグローバル属性のすべてを含む。
次の例は,イベントをどのように使用できるかを示している。
<xforms:trigger> <xforms:label>リセット</xforms:label> <xforms:reset ev:event="DOMActivate" model="thismodel"/> </xforms:trigger>
この例は,HTMLリセット制御の振る舞いを再現する。この規定では,この制御を独立したフォーム制御として定義しない。
ここでは,組込みの各XFormsアクションの次についてを示す。
名前
共通属性
特殊属性
振る舞いの説明
10. XFormsアクション で定義されるすべての要素で,XMLイベント名前空間のグローバル属性が明示的に許可され,[XML Events]の2.3 User Agent Conformanceで定義された処理が適用される。
action
アクションは,複数のアクションをグループ化するのに使用する。
action
要素を使用して複数のアクションをグループ化する場合,含まれるアクションではなくaction
要素上にイベントを指定するように注意する。
<trigger> <label>ここをクリック</label> <action ev:event="DOMActivate"> <reset model="thismodel"/> <setvalue ref="."/> </action> </trigger>
上の例で,ev:event="DOMActivate"
がaction
要素上に現れることに注意する必要がある。含まれるアクションのいずれか又は両方にev:event="DOMActivate"
を配置しても無効とする。これは上の例が,[XML
Events]属性であるobserver
及びhandler
のデフォルトに依存しているためとする。
XMLイベントの規定に定義されるとおりに,observer属性及びhandler属性の両方が省略された場合は,親がovserverになる。したがって,ev:event="DOMActivateD"
をaction
の子要素に置いた場合,action
要素が個々のイベントのobserverになる。その結果,イベントはaction
要素ではなくtrigger
要素に到着するため,これらのアクションは起動されない。
遅延更新:
XFormsアクションの中には,action
要素の子孫要素として指定された場合に,インスタンスデータに対して遅れて適用される効果をもつものが多くある。
実装では,遅延更新を実現するのにどのような方法を採用してもよいが,結果は定められたとおりにならなければならない。つまり,一連のアクションによってインスタンスデータが変更された後,最も外側のアクションハンドラの処理が終了するまで,計算に必要な依存関係の再構築,再計算,妥当性の再検証及びフォーム制御のリフレッシュは行われてはならない。最も外側にある各アクションハンドラは,それらのアクションハンドラの終了時にrebuild
,recalculate
,revalidate
及びrefresh
のアクションが必要であるかどうかを示す,初期値がfalse
である論理値フラグをもつと考えることができる。
rebuild,recalculate,revalidate,refreshを直接呼び出すアクションは,その動作を直ちに実行し,対応するフラグをクリアする。この範ちゅうに属するXFormsアクションは次のとおり。
rebuild
recalculate
revalidate
refresh
インスタンスデータの木構造を変更するXFormsアクションは,四つのフラグをすべてtrue
にセットする。この範ちゅうに属するXFormsアクションは次のとおり。
insert
delete
インスタンスノードの値だけを変更するXFormsアクションは,recalculate
,revalidate
及びrefresh
の各フラグをtrue
にセットし,rebuild
フラグについては変更しない。この範ちゅうに属するXFormsアクションは次のとおり。
setvalue
最後に,reset
アクションは動作を直ちに実行し,すべてのフラグをクリアする。
このアクションはXFormsイベントをtarget
属性に指定された要素に振り分ける。振り分けられるイベントとして次の2種類がある。
事前定義されたXFormsイベント(つまりxforms-event-name)。この場合は,bubbles
及びcancelable
属性は無視され,
4. 処理モデル で定義された標準の意味が適用される。
XFormsの文書作成者によって作成される,XFormsでの解釈が事前定義されていないイベント。デフォルトでXFormsプロセサによって処理されることはない。
特殊属性:
必須。振り分けるイベントの名称。
必須。イベントのターゲットを示す。
省略可能。このイベントが,[DOM2 Events]で定義されているようなバブル動作を伴うかどうかを示す論理値。デフォルト値はカスタムイベントの定義による。事前定義されたイベントに対しては,この属性は無効とする。
省略可能。このイベントが,[DOM2 Events]で定義されているような取消し可能なものであるかどうかを示す論理値。デフォルト値はカスタムイベントの定義による。事前定義されたイベントに対しては,この属性は無効とする。
このアクションは,通常のイベントフローに従わずに直接,xforms-rebuild
処理を起動する。このアクションによって,XFormsプロセサは,インスタンスデータノード内の計算に必要な依存関係を把握するのに使用される内部データ構造を再構築する( 4.3.7 xforms-rebuildイベント を参照)。
特殊属性:
省略可能。 3.2.3 単一ノード結合属性 で定義されているXFormsモデルセレクタ。
action
要素内に含まれる場合の遅延更新の振る舞いは特殊なものになる( 10.1.1 action要素 )。 このアクションは,通常のイベントフローに従わずに直接,xforms-recalculate
処理を起動する。その結果,値が再計算される必要のあるインスタンスデータノードは,処理モデルで定義されているとおりに更新される( 4.3.6 xforms-recalculateイベント を参照)。
特殊属性:
省略可能。 3.2.3 単一ノード結合属性 で定義されているXFormsモデルセレクタ。
action
要素内に含まれる場合の遅延更新の振る舞いは特殊なものになる( 10.1.1 action要素 )。 このアクションは,通常のイベントフローに従わずに直接,xforms-revalidate
処理を起動する。この結果,インスタンスデータは処理モデルに定義されているように妥当性が再検証される( 4.3.5 xforms-revalidateイベント を参照)。
特殊属性:
省略可能。 3.2.3 単一ノード結合属性 で定義されているXFormsモデルセレクタ。
action
要素内に含まれる場合の遅延更新の振る舞いは特殊なものになる( 10.1.1 action要素 )。 このアクションは,通常のイベントフローに従わずに直接,xforms-refresh
処理を起動する。この結果,XForms利用者インタフェースはリフレッシュされ,利用者インタフェース制御の表示は背後にあるインスタンスデータの状態を反映するように更新される( 4.3.4 xforms-refreshイベント を参照)。
特殊属性:
省略可能。 3.2.3 単一ノード結合属性 で定義されているXFormsモデルセレクタ。
action
要素内に含まれる場合の遅延更新の振る舞いは特殊なものになる( 10.1.1 action要素 )。 このアクションは,control
属性で指定されたフォーム制御にxforms-focus
イベント( 4.3.2 xforms-focusイベント )を振り分ける。このイベントは,accesskey
などのXFormsアクセシビリティ機能を実現するために,内部的に呼び出されることに注意する必要がある。
特殊属性:
必須。フォーム制御を示す。
繰返し構造にフォーカスを設定する場合は,その繰返しのインデクスが指す繰返し項目にフォーカスを設定する。
このアクションは,指定されたリンクを走査する。
特殊属性:
ロードする外部資源へのリンク。このリンクは,この要素と指定された遠隔資源との間の[XLink
1.0]リンクとして定義されるものとする。リンク動作の制御はXMLイベントによって定義されるため,XLinkのactuate
値は定義されない。XLinkのshow
値は,show
属性に依存する。リンク走査に失敗した場合は誤りとして処理される( 4.5.3 xforms-link-errorイベント )。
省略可能。リンクの振る舞いを示す。この属性が指定されない場合,デフォルト値として“replace”が仮定される。
インスタンスデータ内のURIを示す単一ノード結合属性又はリンク付け属性のいずれかが必要とする。両方指定された場合,このアクションは無効になる。
show
属性に指定できる各値は,次に示すとおりに,リンク走査によって到達した文書(又は文書の一部)の処理を指定するものとする。
文書は,新しい表示文脈,例えば,新しいウィンドウにロードされる。元のウィンドウではフォーム処理が引き続き行われる。
文書は現在のウィンドウ内にロードされる。フォーム処理は,利用者が新しい文書への移動を手動で要求した場合と全く同じように中断する。
このアクションは,指定されたインスタンスノードの値を明示的に設定する。
特殊属性:
省略可能。XPath式。このXPath式の評価結果が選択されたインスタンスデータノードに格納される。単一ノード結合の結果が,このXPath式の評価文脈になる。
setvalue
要素の内容は,設定されるリテラル値を示す。この指定方法は,value
属性を使用して計算された値を指定する方法の代替として使用できる。これらの方法を比較する二つの例を次に示す。
<setvalue bind="put-here" value="a/b/c"/>
a/b/c
に存在する文字列値が,id="put-here"
のバインド要素によって選択された単一ノードに置かれる。
<setvalue bind="put-here">literal string</setvalue>
id="put-here"
のバインド要素によって選択された単一ノードに置かれる。value
属性もテキスト内容も指定されない場合,選択されたノードの値は空文字列(“”)に設定される。両方指定された場合,value
属性が使用される。
文字列はすべて,次のとおりに,インスタンスデータに挿入される。
要素ノードの場合:要素に子テキストノードが存在する場合,最初のテキストノードが新しい値に対応するものに置き換えられる。子テキストノードが存在しない場合,子テキストノードが作成されて新しい値に対応付けられ,最初の子ノードとして追加される。
属性ノードの場合:属性の文字列値が新しい値に対応する文字列に置き換えられる。
テキストノードの場合:テキストノードが新しい値に対応するものに置き換えられる。
名前空間,処理命令,コメント及びXPathのルートノードの場合:振る舞いは未定義。
action
要素内に含まれる場合の遅延更新の振る舞いは特殊なものになる( 10.1.1 action要素 )。 このアクションは,xforms-submit
イベントを振り分けることによって送付処理を開始する。xforms-submit
イベントの処理は処理モデルで定義されている( 4.3.9 xforms-submitイベント を参照)。
特殊属性:
必須。submission
要素を示す。
<dispatch target="mysubmitinfo" name="xforms-submit"/>
このアクションは,指定されたmodel
にxforms-reset
イベントを振り分けることによって,リセット処理を開始する。xforms-reset
イベントの処理は処理モデルで定義されている( 4.3.8 xforms-resetイベント を参照)。
特殊属性:
省略可能。 3.2.3 単一ノード結合属性 で定義されているXFormsモデルセレクタ。
action
要素内に含まれる場合の遅延更新の振る舞いは特殊なものになる( 10.1.1 action要素 )。 このアクションは,利用者に表示されるメッセージをカプセル化する。
特殊属性:
外部メッセージへのリンク。リンク走査に失敗した場合は誤りとして処理される( 4.5.3 xforms-link-errorイベント )。
必須。("ephemeral"|"modeless"|"modal"|QName-but-not-NCName)のいずれかであるメッセージレベル識別子。この規定では,QName値のための振る舞いを定義しない。
メッセージとして指定できるのは,インスタンスデータ内,遠隔文書内,又は内部テキストとして存在するものとする。この要素内に複数のメッセージソースが指定されている場合,優先順位は,単一ノード結合属性,リンク付け属性,内部テキストの順になる。
グラフィカルブラウザにおけるmodalメッセージの可視化の例を次に示す。
<model> <message level="modal" ev:event="xforms-ready">これは演習ではありません!</message> ... </model>
modelessメッセージはhelp
メッセージを表示するために基礎になる。グラフィカルブラウザにおけるhelpメッセージの可視化の例を次に示す。
<secret ref="/login/password"> <label>Password</label> <help>パスワードをお忘れですか? クレジットカードをお手元に用意して,1-900-555-1212 に電話してください。</help> </secret>
ephemeralメッセージはhint
メッセージを表示するために基礎になる。グラフィカルブラウザにおけるhintメッセージの可視化の例を次に示す。
<input ref="po/address/street1"> <label>市町村及び番地</label> <hint>市町村名及び番地を入力してください。</hint> </input>
insert
, delete
及びsetindex
アクション 10. XFormsアクション で詳述したアクションハンドラに加えて,XFormsには, 9.3.5 insert要素 , 9.3.6 delete要素 及び 9.3.7 setindex要素 の三つのアクションがXForms繰返しモジュールの一部として定義されている。
XFormsは,インスタンスデータを収集し,それを外部表現に直列化して,プロトコルを使用して送付するように設計されている。XFormsには,直列化及び送付に関する幾つかのオプションが定義されている。次に送付に関するインスタンスデータの処理及び直列化と送付とに関する各オプションの振る舞いを定義する。
送付は,xforms-submit
イベントに対するデフォルトアクションで開始される。
ターゲット:submission
バブル:はい
取消し可能:はい
文脈情報:なし
どんな状況でも,ある一つのXForms送付に関して複数の送付プロセスが同時に進行することは許可されない。xforms-submit
のデフォルト動作の最初から,xforms-submit-done
又はxforms-submit-error
のためのデフォルト動作の完了まで,後続のxforms-submit
イベントに対するデフォルトアクションは何もしないこととする。
この状況以外では,このイベントに対するデフォルトアクションは次のとおりになる(結果がこれと同じになるように実装する。)。
インスタンスデータのノードをsubmission
要素上の属性に基づいて選択する。指定されたノード及びそれを祖先とするすべてのノードが,以降の送付処理手順の対象となる。 6.1.4 relevant特性 で定義されている,現在有効でないと判断されるノードはすべて対象外とする。
選択されたすべてのインスタンスデータの妥当性を再検証する。その際, 4.3.5 xforms-revalidateイベント の規則に従う。妥当でないインスタンスデータが一つでも存在した場合,送付処理はxforms-submit-error
イベントを振り分けた後に停止する。
選択されたインスタンスデータを 11.2 送付オプション の規則に従って直列化する。
直列化されたインスタンスデータを 11.2 送付オプション の規則によって決定されるプロトコルを使用して送付する。
送付から返された応答を次のとおりに処理する。
本体を含む成功応答が返され,要素submission
上のreplace
属性の値に“all
”が指定されている場合,xforms-submit-done
イベントを振り分け,XFormsを含んでいる文書全体を返された本体に置き換えて送付処理を完了する。
XMLメディア型([RFC
3023]の内容型指定子で定義)の本体を含む成功応答が返され,要素submission
上のreplace
属性の値に“instance
”が指定されている場合,応答をXMLとして解析し,送付したインスタンスに対応する内部インスタンスデータをすべてその結果で置き換える。送付処理は,通常のイベントフローに従わずに直接,rebuild
,recalculate
,revalidate
及びrefresh
の処理を実行した後,完了する。その後,送付処理はxforms-submit-done
を振り分けて完了する。
非XMLメディア型([RFC
3023]のどの指定子にも一致しない内容型)の本体を含む成功応答が返され,要素submission
のreplace
属性の値に“instance
”が指定されている場合,文書の置換えは行わず,xforms-submit-error
を振り分けた後に送付処理を完了する。
本体を含む成功応答が返され,要素submission
のreplace
属性の値に“none
”が指定されている場合,xforms-submit-done
を振り分けた後に送付処理を完了する。
本体を含まない成功応答が返された場合,xforms-submit-done
を振り分けた後に送付処理を完了する。
属性replace
に指定できる他の値に対する振る舞いについては,この規定では定義しない。
誤り応答が返された場合,文書の置換えは行わず,xforms-submit-error
を振り分けた後に送付処理を完了する。
XFormsモデルに指定されるsubmission
要素には,直列化及び送付に影響する次の属性がある。ここではこれらの属性に指定できる値に対する振る舞いを要約し,後続の 11.3 application/xmlとしての直列化 , 11.4 multipart/relatedとしての直列化 , 11.5 multipart/form-dataとしての直列化 , 11.6 application/x-www-form-urlencodedとしての直列化 , 11.7 post,multipart-post,form-data-post及びurlencoded-post送付メソッド , 11.8 put送付メソッド 及び 11.9 get送付メソッド で直列化及び送付のための振る舞いを定義する(直列化に影響するその他のsubmission
の属性については, 3.3.3 submission要素 を参照)。
action
(xsd:anyURI)
method
(xsd:string,次に列挙)
action
のURIスキームついて,XFormsはHTTP/1.1[RFC 2616]への結合を規定している。
次の表が示すとおりに,method
属性が直列化フォーマットを決定し,action
属性に指定されたURIスキームが送付プロトコルを決定する。
URI スキーム | method |
直列化 | 送付 |
---|---|---|---|
http https mailto | “post” | application/xml |
HTTP POST又はそれと等価 |
http https file | “get” | application/x-www-form-urlencoded |
HTTP GET又はそれと等価 |
http https file | “put” | application/xml |
HTTP PUT又はそれと等価 |
http https mailto | “multipart-post” | multipart/related |
HTTP POST又はそれと等価 |
http https mailto | “form-data-post” | multipart/form-data |
HTTP POST又はそれと等価 |
http https mailto | “urlencoded-post” (廃止予定) | application/x-www-form-urlencoded |
HTTP POST又はそれと等価 |
(任意) | 接頭辞の付加されていないその他のQNAME | 対象外 | 対象外 |
(任意) | 接頭辞が付加された任意のQNAME | 定義は実装に依存 | 定義は実装に依存 |
submission
上で許可されるが,振る舞いはXForms
1.0では定義されない。この形式では,一般的なXML処理ツールで容易に処理できるXMLとしてインスタンスデータを表すことができる。さらに,この形式ではバイナリの内容の送付が可能とする。
直列化の手順は次のとおりとする。
submission
要素の属性として指定された値を使用して,[XSLT 1.0]の 16. Output 及び 16.1 XML Output Method に定義されたXML outputメソッドの規則に従ってXML文書を生成する。
名前空間ノードの処理:デフォルトの振る舞いでは,有効な各名前空間に対して少なくとも一つの名前空間宣言がXMLに直列化されるように,XML outputメソッドの規則に従ってすべての名前空間ノードが直列化される。その他の継承された名前空間は直列化されたXMLのルート要素で宣言される。ただし,要素submission
上の属性includenamespaceprefixes
が存在する場合,名前空間に対応する接頭辞がそのincludenamespaceprefixes
属性に指定されているものを除いて,インスタンスデータ内で非明示的に使用されるすべての名前空間宣言([Exc-C14N]に定義:“not visibly utilized”)及びそれが空の場合にデフォルトの名前空間はルート要素の直列化から除外される。特殊値#default
はデフォルトの名前空間を表す。
mediatype:デフォルトでは,直列化されるXMLインスタンスのmediatypeはapplication/xml
であるが,submission
要素のmediatype
属性を使用して,それと互換性のある型に変更することができる。文書作成者は,application/xml
と互換性のある型を確実に指定することが望ましい。
この形式を使用する目的は,xsd:base64Binary
又はxsd:hexBinary
としてデータを含めることが望ましくない,多量のバイナリデータを扱う環境でXFormsを使用できるようにすることとする。
この形式では,XMLインスタンスデータは, 11.3 application/xmlとしての直列化 に規定している規則を使用して,[RFC 2387]
multipart/related
メッセージの一部として直列化される。upload
制御( 8.1.6 upload要素
を参照)によって値が設定されたxsd:anyURI
インスタンスノードが指すバイナリの内容は,[RFC 2387] multipart/related
メッセージの別の部分に直列化される。
この形式は,[RFC 2387]のmultipart/related
MIMEデータストリームに関する規則に従う。この直列化のための要求事項を次に示す。
multipart/related
メッセージヘッダに関する要求事項:
直列化されるXMLインスタンスのmediatypeのtype
パラメタを含んでいなければならない。
最初の本体部(ルート)のContent-IDを指すstart
パラメタを含んでいなければならない。
最初の本体部(ルート)に関する要求事項:
submission
mediatype
属性によって指定された型のContent-Type
パラメタを含んでいなければならない。
内容は 11.3 application/xmlとしての直列化 の規則によって直列化される。
後続部分に関する要求事項:
upload
によってxsd:anyURI
のデータ型の値が設定された各ノードに対して次を含む。
認識している場合は添付の型を表すContent-Type
ヘッダ。認識できない場合はapplication/octet-stream
。
Content-Transfer-Encoding
ヘッダ。
関連するインスタンスデータノード内のURIと値が一致するContent-ID
ヘッダ。
Content-Transfer-Encoding
ヘッダに従って直列化された,URIに関連付けられるバイナリの内容。
Content-Type: multipart/related; boundary=f93dcbA3; type=application/xml; start="<980119.X53GGT@example.com>" Content-Length: xxx --f93dcbA3 Content-Type: application/xml; charset=UTF-8 Content-ID: <980119.X53GGT@example.com> <?xml version="1.0"?> <uploadDocument> <title>My Proposal</title> <author>E. X. Ample</author> <summary>A proposal for a new project.</summary> <notes image="cid:980119.X17AXM@example.com">(see handwritten region)</notes> <keywords>project proposal funding</keywords> <readonly>false</readonly> <filename>image.png</filename> <content>cid:980119.X25MNC@example.com</content> </uploadDocument> --f93dcbA3 Content-Type: image/png Content-Transfer-Encoding: binary Content-ID: <980119.X25MNC@example.com> ...Binary data here... --f93dcbA3 Content-Type: image/png Content-Transfer-Encoding: binary Content-ID: <980119.X17AXM@example.com> ...Binary data here... --f93dcbA3--
この形式は,旧来との互換性を提供し,[RFC 2388] サーバと共にXFormsクライアントを使用することを可能にする。このメソッドはバイナリの内容の維持に適している。文脈パス情報,属性値,名前空間及び名前空間接頭辞は保存されない。結果として,異なる要素が同じ名前で直列化される可能性がある。
Content-Disposition:
form-data
form-data
name
及びfilename
パラメタ内で符号化しない。この直列化メソッドは旧来のアプリケーションのためだけにサポートされるので,新しいアプリケーションではapplication/xml
又はmultipart/related
を使用するのが望ましい。この形式は[RFC
2388]のmultipart/form-data
MIMEデータストリームに関する規則に従う。この直列化のための要求事項を次に示す。
各要素ノードを文書順にたどる。
正確に一つの子テキストノードをもつ各要素を,含める対象として選択する。
含める対象として選択した要素ノードを,要素の局所名であるname
パラメタを伴って,[RFC 2387]に定義されているContent-Disposition: form-data
MIME部分として符号化する。
upload
によって値が設定されたどのようなデータ型の要素ノードも指定された内容として直列化する。利用できる場合にはContent-Disposition
のfilename
パラメタを伴う。
Content-Type
はtext/plain
でなければならないが,これはxsd:base64Binary
,xsd:hexBinary
及びそれらの派生型以外の場合であり,これらの場合には,ヘッダは,認識している場合は添付のmediatypeを,そうでない場合はapplication/octet-stream
を表す。文字セットが適用可能である場合,Content-Type
にcharset
パラメタがあってもよい。
例:
Content-Type: multipart/form-data; boundary=AaB03x Content-Length: xxx --AaB03x Content-Disposition: form-data; name="document"; filename="b.txt" Content-Type: text/plain; charset=iso-8859-1 This is a file. It has two lines. --AaB03x Content-Disposition: form-data; name="title" A File --AaB03x Content-Disposition: form-data; name="summary" This is my file file test --AaB03x--
この直列化形式は,フォームで資源を指定するURIを生成するのに必要なデータを収集し,HTTP GET操作でその資源にアクセスすることを可能にするように設計されている。
この形式はその[XHTML
1.0]フォーム内容型application/x-www-form-urlencoded
の拡張であり,非ASCII文字及び予約された文字の符号化に関して特定の規則がある。
この形式はバイナリの内容の維持に適していない。したがって,バイナリの内容を含めることができるフォームには他の直列化メソッドを使用することが推奨される。
直列化の手順は次のとおりとする。
各要素ノードを文書順にたどる。一つの子テキストノードをもつ各要素を,含める対象として選択する。属性情報は保存対象ではないことに注意する。
含める対象として選択された要素ノードをEltName=value
の形式で符号化する。ここで,=
はリテラル文字,EltName
は要素局所名,value
はテキストノードの内容をそれぞれ表す。符号化された名前及び値の組合せの間の区切り文字として,submission
要素のseparator
属性に指定された{sep}
をEltName=value{sep}EltName=value{sep}EltName=value
のとおりに使用する。文脈パス情報,名前空間及び名前空間接頭辞は保存対象ではないことに注意する。結果として,異なる要素が同じ名前で直列化される可能性がある。
EltName
及びvalue
の符号化では,スペース文字を+
に置換し,非ASCII文字及び予約文字([RFC
2396]によって定義された後にIETFの後続文書によって修正された)をその文字のUTF-8表現の複数オクテットに置換することでエスケープし,更にこれらの各オクテットを%HH
に置換する。ここで,HH
は各オクテットの大文字での16進数表記で,%
はリテラル文字とする。改行は“CR
LF”の組み(つまり%0D%0A
)で表す。
この符号化をすべて,文書順を維持して連結する。
例:
GivenName=Ren%C3%A9
<PersonName title="Mr"> <GivenName>René</GivenName> </PersonName>
これらの送付メソッドは,HTTP POST又はそれと等価なもの(例えばメールメッセージ)を表す。直列化されたフォームデータはメッセージ本体として配信される。
この送付メソッドは,HTTP PUT又はそれと等価なもの(例えば局所ファイルへの書込み)を表す。直列化されたフォームデータはメッセージ本体として配信される。
この送付メソッドは,HTTP GET又はそれと等価なものを表す。直列化されたフォームデータは,送付処理中に要求されるURIの一部として配信される。
このメソッドは,サーバ上での状態の変更又は他のアクションの起動が意図されたフォームの送付には適していない。HTTP GETの推奨される用途については[RFC 2616]を参照。
URIの生成は次のとおりになる。
action
属性に指定された送付URIを検査する。URIに?
(疑問符)文字が含まれていない場合は付加する。既に疑問符文字が含まれている場合は,separator
属性に指定された区切り文字を付加する。
直列化されたフォームデータをURIに付加する。
要求と共にメッセージ本体が送信されることはない。
XForms規定は,実装の対象として,超小型ハンドヘルドデバイスから高性能サーバまで,あらゆる規模のハードウェアプラットフォームを想定している。そのため,少ない資源で処理できるXFormsの適合性プロファイルを記述する文書が別に作成されている。
この適合性レベルは,標準デスクトップブラウザ上又は,サーバ側構成要素を伴う分散XFormsプロセサに見られるような,より強力なフォーム処理に適している。完全XFormsは,( 7.9.1 property()関数
で定義されている)property
メソッドが“conformance-level
”パラメタ文字列と共に呼び出されたときに“full
”を返すように実装しなければならない。
すべてのXFormsプロセサは,下に補足されている条件を除いて,次の規定に適合しなければならない。
[XPath 1.0] すべての機能を実装する。
すべてのXFormsプロセサは,主要モジュール,MustUnderstandモジュール,フォーム制御モジュール,グループモジュール,スイッチモジュール,繰返しモジュール及びアクションモジュールを完全にサポートしなければならない。
すべてのXFormsプロセサは,XForms処理モデル及び
4. 処理モデル
にリストされているすべてのイベント,xsd:anyURIを処理するためのhttp
スキーム,並びに
11. 送付 に定義されているすべての直列化メソッドもサポートしなければならない。
ホスト言語は,その他の適合性に関する要求事項を導入してもよい。
完全XFormsプロセサは,この規定で定義された必須機能をすべて実装しなければならない。
すべてのXFormsを含んでいる文書は,下に補足された条件を除いて,次の規定に適合しなければならない。
XForms要素は一般的に,それを含んでいる文書内の複数の場所に挿入される。挿入された各素片のルート要素はmodel
,フォーム制御,group
,repeat
又はswitch
のどれかでなければならない。挿入されたそれぞれのXForms素片は,XFormsのスキーマ(
附属書A XFormsのためのスキーマ )に照らして妥当でなければならない。
ホスト言語は,その他の適合性に関する要求事項を導入してもよい。
完全XForms適合文書はすべて,この規定の必須部分のすべてに適合しなければならない。
XForms生成器はXForms適合文書を生成しなければならない。
“結合”は,位置指定子として結合式を使用することによってインスタンスデータノードをフォーム制御又はモデル項目制約に関連付ける。
結合に使用される[XPath 1.0]のPathExpr。
モデル項目特性を宣言する結合に使用される[XPath 1.0]のPathExpr。
フォーム制御とインスタンスとの結合,又はアクションによる操作のためのノード若しくはノード集合の指定に使用される[XPath 1.0]のPathExpr。
relevant,calculateなどのモデル項目特性によって使用される[XPath 1.0]式。XFormsに動的な性格を与える。
XMLスキーマ[XML Schema part 2]より: 次の三つから構成される。a) 値空間と呼ばれる区別できる値の集合,b) 字句空間と呼ばれる字句表現の集合,c) 値空間,個々の値又は字句項目の特性を示すファセットの集合。
XMLスキーマ [XML Schema part 2]より: 値空間の側面の一つの定義。各ファセットは,独立した評価軸又は評価次元に沿って値空間を特徴付けるものと考えることができる。
UI単一ノード結合属性のUIでサイズが1よりも大きいノード集合が選択された場合に,ノード集合における最初のノードが使用される。
インスタンスデータの[XPath 1.0]ノード。
XMLスキーマ[XML Schema part 2]より: データ型に対して妥当なリテラルの集合。
XMLスキーマ[XML Schema part 2]より: あるデータ型に対する値の集合。あるデータ型の値空間の各値は,その字句空間内の一つ以上のリテラルによって表される。
XFormsによって指定される,不可視であるXMLフォームの定義。XFormsモデルは,XFormsの個々のモデル項目及び制約,並びにその他の実行時の側面を定義する。
(参考)便宜上“可視化”としているが,視覚的な提示だけでなく,音声などでの提示も含む。
XFormsのための標準のXMLスキーマは http://www.w3.org/MarkUp/Forms/2002/XForms-Schema.xsdにある。
XMLイベントのためのXMLスキーマはXFormsのためのXMLスキーマによって参照され,http://www.w3.org/TR/2003/REC-xml-events-20031014/#a_schema_attribsにある。
P3Pプライバシ方針は,URIが関連付けられている,HTTPを使用して伝送されるすべてのフォームに関連付けることができる。将来,他のプロトコルを使用して伝送される内容とP3P方針とを関連付けるための機構が指定される可能性がある。
P3Pでは,方針を個々のURI又はURIの組に関連付けることができる。各URIに別の方針を関連付けることによって,サイトは,あるHTTP要求によってどのようなデータが収集されるか,そのデータがどのように使用されるかについての非常に詳細な方針を宣言できる。しかし,多くのURI又はウェブ全体を対象とする単一の方針を宣言することで,多くのサイトでサイト管理が大幅に簡易化される。
P3P規定では,P3P方針参照ファイルを参照する方法が幾つか指定されている(それは更に,P3P方針をURI及びクッキーに関連付ける。)。XFormsでは,それらが埋め込まれているウェブサイトに適切な任意の方法を使用して,P3Pを有効にできる。フォームに関する幾つかの特別な問題はP3P規定で扱われている。[P3P 1.0]
さまざまなP3P方針を,フォーム経由で送付されるデータに関連付けられる,XFormsを含んでいる文書に埋め込まれたフォームの表示に適用してもよい。フォーム表示がフォームの送付先のサーバとは異なるサーバから提供される場合,別のP3P方針参照ファイル及び方針が必要となる。フォームの送付では多くのデータが伝送されるが,フォームの表示では通常,クリックストリームデータ([P3P1.0] 5.6.4 Dynamic Dataで定義される。)だけが伝送される。
XFormsプロセサは,最終結果が同じになりさえすれば,このアルゴリズムのどのステップについても自由に省略又は最適化してよい(奨励される。)。XForms再計算順序アルゴリズムでは,モデル項目及びモデル項目特性を有向グラフの頂点と考える。頂点を結ぶ辺は,各頂点の計算に必要な依存関係を表す。
recalculate
アクションに対するデフォルトの処理を次に示す。recalculate
アクションは 10.1.4 recalculate要素 で定義されている。
依存関係の有向マスタグラフを作成する。詳細は D.1 依存関係の有向マスタグラフの作成に関する詳細 に示す。
一貫した振る舞いを提供するために,実装では,再計算を必要とするノードから到達可能な頂点及び辺だけからなる依存関係の関連サブグラフを計算するようにすることで,処理する頂点の数を減らさなければならない。これについての詳細は, D.2 依存関係の関連サブグラフの作成に関する詳細 に示す。最初の再計算(フォームのロードなど)では,依存関係の関連サブグラフは依存関係の有向マスタグラフと同じになることに注意する。
一列化(topological sort)を依存関係の関連サブグラフの各頂点に対して実行し,各頂点を評価の順序に並び替える。つまり,各頂点の評価を,その頂点が計算に必要とする頂点の評価後,かつ,その頂点を計算に必要とするすべての頂点の評価前にだけ行うようにする。一列化のアルゴリズムについては,[Algorithms]を参照。
recalculate
処理を完了する。
依存関係の有向マスタグラフは各頂点に対し一つのレコードをもつ配列と考えられる。各レコードには次のフィールドがある。
InstanceNode:関連するインスタンスデータノードへの参照
type:頂点によって表されるインスタンスノードの側面(テキスト内容,又はreadOnly若しくはrequiredなどのモデル項目特性)
depList:この頂点を参照する頂点のリスト
in-degree:この頂点が計算に必要とする頂点の数
visited:頂点がサブグラフ内に複数表れることがないようにするためのフラグ
index:依存関係の有向マスタグラフ内の頂点とサブグラフとの関連
各頂点のdepList
は,あるインスタンスノードの参照先XMLノードになるように割り当てられるが,これは,そのノード内の計算される式を解析することによって得られる(calculate,relevant,readonly,required特性など)。結合式制約に違反する式はすべて,例外( 4.5.4 xforms-compute-exceptionイベント
)を発生させ,recalculate
プロセスを終了させる結果となる。
頂点v
のdepList
は,v
を参照する計算される式をもつ頂点のリスト(v
は除く)になるように割り当てられる。頂点v
は,循環参照例外を発生させることなく自己参照が行われるのを容認するように,それ自身のdepList
から除かれる。
calculate
属性内に現れる計算される式は,一つ以上のインスタンスノードに関するテキスト内容(値)を制御する。頂点は,各インスタンスノードに対して一つ存在し,そのノードの文脈における式を表す。同様に,readOnly
,required
などのモデル項目特性のための計算式が一つ以上のインスタンスノードに適用される。そして,そのような適用される各ノードの文脈における式を表すために頂点が作成される。参照するXMLノードを決定するために,それぞれの頂点の計算式を検査しなければならない。結合式制約に違反する式はすべて,例外( 4.5.4 xforms-compute-exceptionイベント
)を発生させ,recalculate
プロセスを終了させる結果となる。部分式がv
のインスタンスノードを示し,v
がインスタンスノードのテキスト内容(値)を表す場合,計算式は頂点v
を参照している。XFormsのこの版では,readOnly
及びrequired
などのモデル項目特性は式から参照することはできない。
フォームをロードするときなど,計算をすべて実行しなければならない場合は,依存関係の関連サブグラフは単に依存関係の有向マスタグラフの複製でしかない。最後の再計算処理以後に変更されたインスタンスデータノードのリストと共に再計算アルゴリズムが呼び出された場合,依存関係の関連サブグラフは,計算に必要な依存関係を表す有向グラフ内で,その変更リスト内の各頂点から到達可能な頂点と辺の経路を探索することで得られる。パス探索の方法は深さ優先探索(depth first search)であってよい。適切な擬似コードを次に示す。
Lc
から依存関係の関連サブグラフS
を作成する。v
,w
などの変数は依存関係の有向マスタグラフ内の頂点を表す。それらの名前にS
を付加した変数は依存関係の関連サブグラフS
内の頂点を表す。// Use depth-first search to explore master digraph subtrees rooted at // each changed vertex. A 'visited' flag is used to stop exploration // at the boundaries of previously explored subtrees (because subtrees // can overlap in directed graphs). for each vertex r in Lc if r is not visited { Push the pair (NIL, r) onto a stack while the stack is not empty { (v, w) = pop dependency pair from stack if w is not visited { Set the visited flag of w to true Create a vertex wS in S to represent w Set the index of w equal to the array location of wS Set the index of wS equal to the array location of w Set the InstanceNode of wS equal to the InstanceNode of w Set the type of wS equal to the type of w For each dependency node x of w Push the pair (w, x) onto the stack } else Obtain wS from index of w if v is not NIL { Obtain vS from index of v Add dependency node for wS to vS Increment inDegree of wS } } } // Now clear the visited flags set in the loop above for each vertex vS in S { Obtain v from index of vS Assign false to the visited flag of v }
依存関係の関連サブグラフ内の頂点及び依存関係ノードの数は事前には判明していないが,ArrayDoubling([DDJ-ArrayDoubling]を参照)などの方法を使用することで,サブグラフの構築時間をSの大きさに比例させるようにすることができる。
頂点の処理ステップを次に示す。この処理の結果,フォームは再計算される。
inDegree属性が0である頂点を評価のために選択し,依存関係の関連サブグラフから削除する。inDegree属性が0である頂点が複数存在する場合の順序については定義されない。依存関係の関連サブグラフに頂点が含まれているが,そのどれもinDegree属性が0でない場合は,フォームの計算構造に循環があるため,例外( 4.5.4 xforms-compute-exceptionイベント )を発行して処理を終了しなければならない。
頂点が計算される項目に対応している場合,計算される式を次のとおりに評価する。
calculate
:このモデル項目特性の値が変わった場合,対応するインスタンスデータを更新し,ダーティフラグを設定する。
relevant
, readOnly
,
required
, constraint
:
これらの計算される特性のいずれか又はすべてが変わった場合,新しい設定を関連するフォーム制御に直ちに反映させる。
削除された頂点のdepList
内の頂点のそれぞれで,inDegree属性の値を一つ減少させる。
依存関係の関連サブグラフに頂点が残っている場合はステップ1から繰り返す。頂点が残っていない場合は正常に終了したことになる。
例として,a,b,v,w,x及びyの六つの変数を考える。ここで,a及びbは利用者入力制御からの結合によって設定されるインスタンスノードのテキスト内容を表すものとする。v及びwは,第3のインスタンスノードcの計算値及び妥当性評価特性を表す頂点とする。これらの頂点は,calculate
属性及びconstraint
属性をもつbind
要素B
,並びにc
を示すnodeset
属性から得られる。cの値をa及びbの乗算の結果とし,100を超えていない場合にだけ値を妥当とする。同様に,x及びyを,第4のインスタンスノードdの計算値及び妥当性評価特性を表す頂点とする。dの値をa及びbの合計とし,値が20を超えていない場合にだけdを妥当とする。この例の依存有向グラフを次に示す。
頂点a
及びb
にはv
及びx
につながる辺があるが,これは,これらの頂点が表現するc
及びd
の計算式が,乗算値及び合計値をそれぞれ求めるためにa
及びb
を参照するためとする。同様に,v
及びx
にはそれぞれw
及びy
につながる辺があるが,これは,w
及びy
がc
及びd
のconstraint
式を表し,境界値と比較するためにc
及びd
の値を参照するためとする。
a
及びb
の初期値が10であり,利用者がa
を11に変更した場合,最初にv
(c
の値)の再計算を行い,次に,w
(c
の値の妥当性検査特性)を再計算する必要がある。同様に,y
(d
の値の妥当性検査特性)の再計算を行う前に,x
(d
の値)を再計算しなければならない。いずれの場合も,新しい乗算値と合計がa
の変更に基づいて計算されるまで,値の妥当性はfalse
に変化しない。しかし,v
とx
との間には相互依存性が存在しないため,乗算値及び合計はいずれを先に計算しても問題はない。
関連サブグラフにはb
は含まれず,inDegree属性が0の頂点はa
だけになる。頂点a
が最初に処理される。この頂点は計算される頂点ではないため,a
に対する再計算は行われないが,これが除外されることでv
及びx
のinDegree属性が0になる。頂点v
が2番目に処理される。その値は121に変更され,この除外によって頂点w
のinDegree属性が0になる。頂点x
が次に処理され,値は21に変更される。x
が除外されると,隣りのy
のinDegree属性が0になる。このプロセスの4番目及び5番目の繰返しによって,w
及びy
の妥当性が再計算され,結果は両方ともfalseになる。
inputmode
属性は,関連するフォーム制御で期待されるテキスト入力に適切な入力モードを選択するためのヒントを利用者エージェントに提供する。入力モードは,キーボード構成,入力メソッドエディタ(フロントエンドプロセサとも呼ばれる。),又は使用する装置での入力に影響する他のどのような設定であってよい。
inputmodeを使用することによって,文書作成者は利用者のフォーム入力を簡単にするヒントをエージェントに与えることができる。文書作成者は,可能な場合は常にinputmode属性を提供し,使用される値が広範囲な装置に対応することを確実にすることが望ましい。
inputmode
属性の値の構文inputmode属性の値は,空白によって区切られたトークンのリストとする。トークンは,アルファベットの並び又は絶対URIのいずれかとする。前者及び後者は,絶対URIには':'が含まれることに留意することで区別できる。トークンは大文字及び小文字を区別する。アルファベットだけから成るトークンはすべて, E.3 トークンのリスト (又はこの規定の後継)で定義される。
この規定はトークンとして使用されるものとしてどのようなURIも定義しないが,他が拡張性のためにそのようなURIを定義するのは差し支えない。このことは,ここで提供されるトークンでは対応できない入力モードのデバイスで必要になる可能性がある。URIは,そのURIをトークンとして使用したときに関連付けられる入力モードについての人間が読み取れる説明への参照であることが望ましい。その説明文は,このトークンによって示される入力モードを説明するものであることが望ましく,このトークンが他のトークンを修飾するかどうか,このトークンが他のトークンによって修飾されるかどうか,又はその修飾がどのように行われるかを示すことが望ましい。
利用者エージェントは,inputmode属性をもつ空のフォーム制御への入力時に,inputmode属性の値によって示された入力モードを選択することが望ましい。利用者エージェントがテキストを既に含むフォーム制御への入力時にinputmode属性を使用して入力モードを設定するのは望ましくない。テキストを既に含むフォーム制御への入力時における適切な入力モードの設定については,利用者エージェントはプラットフォーム固有の規約に従うことが望ましい。
利用者エージェントは,利用者によって通常的に使用されるためにインストールされている,利用者エージェントを稼動させる(オペレーティング)システム,又は利用者エージェントがアクセスできるデバイスによってサポートされるすべての入力モードを利用可能にすることが望ましい。これは通常,ここで定義されているトークンで説明できる入力モードのほんの一部分にすぎない。
利用者エージェントがどのように,それらが提供できる入力モードとinputmode属性の値とを照合するのかを定義するのに次に示す単純なアルゴリズムが使用される。利用者エージェントはこのアルゴリズムをそのまま実装する必要はないが,このアルゴリズムを使用したのと同様に振る舞う必要がある。アルゴリズムはトークンの可能なすべての組合せに対して“明白な”又は“望ましい”結果を生成するようには設計されていないが,頻繁に使用されるトークンの組合せに対して適切な振る舞いを生成し,すべての場合に対して予測可能な振る舞いを生成する。
最初に,利用可能な各入力モードをトークンの一つ以上のリストによって表す。入力モードはトークンの複数のリストに対応してもよい。例えば,ギリシア人の利用者向けにセットアップされたシステムでは,“greek upperCase”及び“user upperCase”の両方が同じ入力モードに対応する。二つのリストが同一であることはない。
2番目に,inputmode
属性を先頭から最後まで走査する。inputmode
属性の各トークンtに対して,利用可能な入力モードを表すトークンのリストの残りにtを含むトークンのリストが一つでも存在する場合,tを含まない利用可能な入力モードを表すトークンのリストをすべて削除する。tを含むトークンのリストが残っていない場合,tを無視する。
3番目に,トークンのリストが一つ以上残っていて,それらがすべて同一の入力モードに対応している場合,その入力モードを選択する。リストが残っていない(最初から一つも存在していなかったことを意味する。)又は残りのリストが複数の入力モードに対応している場合,どの入力モードも選択しない。
例:利用可能な入力モードを表すトークンのリストのリストが{"cyrillic upperCase", "cyrillic lowerCase", "cyrillic", "latin", "user upperCase", "user lowerCase"}である場合,各inputmode
の値によって選択される入力モードの値は次に示すとおりになる。つまり,“cyrillic title”によって“cyrillic”が選択され,“cyrillic lowerCase”によって“cyrillic lowerCase”が選択され,“lowerCase cyrillic”によって“cyrillic lowerCase”が選択され,“latin upperCase”によって“latin”が選択される。しかし,“upperCase latin”によっては,“cyrillic upperCase”及び“user upperCase”が同一の入力モードに対応している場合は“cyrillic upperCase”又は“user upperCase”が選択され,“cyrillic upperCase”及び“user upperCase”が同一の入力モードに対応していない場合は何も選択されない,
この規定で定義されているトークンは,用字トークン及び修飾子の二つの範ちゅうに分けられる。inputmode属性内では,用字トークンは常に修飾子の前に示されることが望ましい。
用字トークンは,入力モードの対応対象である文字セットの一般的な表記とする。多くの場合,用字トークンは[Unicode Scripts]に直接対応する。幾つかのトークンは,Javaクラス java.lang.Character.UnicodeBlock([Java Unicode Blocks])のブロック名又はUnicodeブロック名に対応する。しかし,このことは,入力モードが用字内又はブロック内のすべての文字について入力を許可しなければならないことを意味せず,入力モードがその特定の用字からの文字だけに制限されることも意味しない。例えば,“latin”キーボードは,ラテン語用字のすべての文字に対応しているわけではなく,ラテン語用字に割り当てられていない句読点を含んでいる。これらの用字名が取られたUnicode規定の版数は3.2とする。
入力モードのトークン | コメント |
---|---|
arabic | Unicode用字名 |
armenian | Unicode用字名 |
bengali | Unicode用字名 |
bopomofo | Unicode用字名 |
braille | ブライユ点字パターン入力に使われる(ブライユ点字入力デバイスを指すものではない。) |
buhid | Unicode用字名 |
canadianAboriginal | Unicode用字名 |
cherokee | Unicode用字名 |
cyrillic | Unicode用字名 |
deseret | Unicode用字名 |
devanagari | Unicode用字名 |
ethiopic | Unicode用字名 |
georgian | Unicode用字名 |
greek | Unicode用字名 |
gothic | Unicode用字名 |
gujarati | Unicode用字名 |
gurmukhi | Unicode用字名 |
han | Unicode用字名 |
hangul | Unicode用字名 |
hanja | 朝鮮語で使われる“han”のサブセット |
hanunoo | Unicode用字名 |
hebrew | Unicode用字名 |
hiragana | Unicode用字名(平仮名からの変換によって生成される他の日本語用字を含んでもよい。) |
ipa | 国際音標文字 |
kanji | 日本語で使われる“han”のサブセット |
kannada | Unicode用字名 |
katakana | Unicode用字名(半角ではなく全角) |
khmer | Unicode用字名 |
lao | Unicode用字名 |
latin | UUnicode用字名 |
malayalam | Unicode用字名 |
math | 数学記号及び関連する文字 |
mongolian | Unicode用字名 |
myanmar | Unicode用字名 |
ogham | Unicode用字名 |
oldItalic | Unicode用字名 |
oriya | Unicode用字名 |
runic | Unicode用字名 |
simplifiedHanzi | 中国語の簡体字で使われる“han”のサブセット |
sinhala | Unicode用字名 |
syriac | Unicode用字名 |
tagalog | Unicode用字名 |
tagbanwa | Unicode用字名 |
tamil | Unicode用字名 |
telugu | Unicode用字名 |
thaana | Unicode用字名 |
thai | Unicode用字名 |
tibetan | Unicode用字名 |
traditionalHanzi | 中国語の繁体字で使われる“han”のサブセット |
user | 利用者の母国語での(名前又はテキストなどの)入力を意味する特別な値。 |
yi | Unicode用字名 |
フォーム制御への入力が期待される文字の種類をより詳細に指定する目的で,修飾子トークンを適用対象の用字に追加することができる。従来のパソコンキーボードは,ほとんどの修飾子トークンを必要としない(実際,upperCaseのためのCaps Lockは例外として,ソフトウェアが勝手に大文字と小文字を変更したら,そのようなデバイス上の利用者は非常に混乱する。)。しかし,修飾子トークンは小型の装置の入力モード設定に非常に役立つ場合がある。
入力モードのトークン | コメント |
---|---|
lowerCase | 小文字(大文字及び小文字の存在する用字用) |
upperCase | 大文字(大文字及び小文字の存在する用字用) |
titleCase | タイトル(大文字及び小文字の存在する用字用):大文字で始まる単語 |
startUpper | 一つの大文字で始まり小文字が続く入力 |
digits | ある用字の数字(例えばinputmode='thai digits') |
symbols | 記号,句読点(特定の用字に対して適切) |
predictOn | テキスト予測が有効(本文入力など) |
predictOff | テキスト予測が無効(パスワード入力など) |
halfWidth | 半角対応フォーム(カタカナなど。廃止予定) |
利用者エージェントは,入力モードを設定するのにXMLスキーマパターンファセット内の情報を使用してもよい。パターンファセットはインスタンスデータノードの字句値に対する厳しい制限であり,データ項目のさまざまな部分にさまざまな制限を指定できることに注意する。inputmode
属性は,利用者がフォーム制御に入力を開始する可能性の高い文字の種類に関する緩やかなヒントとする。inputmode
属性は,次の理由によって,パターンファセットに加えて指定される。
パターン内に指定された使用可能な文字セットが非常に広範で,妥当な入力モードセッティングを推定できないことがある。そのような状況でも,ある種類の文字が利用者によって頻繁に入力される可能性が高い場合,inputmode
を使用することで,利用者の便宜のために入力モードを設定することができる。
パターンで許可された文字セットとinputmode
属性の値による文字セットとが密接に対応しているために,入力モード設定をパターンから派生させることが可能な場合がある。しかし,そのような派生は利用者エージェント上で多くのデータ及び計算を必要とする。
小型の装置では,パターンの検査がサーバに残されることもあるが,サポートするこれらの入力モードに容易に切り替えることができる。小型の装置では,利用者のためにデータ入力をより簡単にできることは特に重要である。
日本の住所入力のためのフォームの例であり,テーブルフォームの形式で示される。これはこの規定の後の版で実際の構文に置き換えられる。
キャプション: | inputmode |
---|---|
姓 | hiragana |
姓(カタカナ) | katakana |
名 | hiragana |
名(カタカナ) | katakana |
郵便番号 | latin digits |
住所 | hiragana |
住所(カタカナ) | katakana |
電子メール | latin lowerCase |
電話番号 | latin digits |
コメント | user predictOn |
ここでは,XFormsの内容のスタイル設定を行うのに必要な新規又は現行のCSS機能について広く概要を提供する。これらの機能の仕様は,CSS作業グループからの将来の勧告で完全に明らかにされる。
文書ツリーの外にある情報又は他のセレクタを使用しても表現できない情報に基づいてスタイル設定を行う場合の要素の選択にはCSS擬似クラスが使用される。
名前 | 定義されている場所 | XFormsとの関係 |
---|---|---|
:enabled & :disabled |
[CSS3] | (それぞれ)真又は偽に評価されるrelevant モデル項目特性をもつノードに結合しているフォーム制御を選択する。 |
:required & :optional |
TBD | (それぞれ)真又は偽に評価されるrequired モデル項目特性をもつノードに結合しているフォーム制御を選択する。 |
:valid & :invalid |
TBD | XForms1.0によって定義されるとおりに,(それぞれ)現在妥当又は妥当でないノードに結合しているフォーム制御を選択する。 |
:read-only & :read-write |
TBD | (それぞれ)真又は偽に評価されるreadonly モデル項目特性をもつノードに結合しているフォーム制御を選択する。 |
:out-of-range & :in-range |
TBD | フォーム制御が(それぞれ)可視化できない又は可視化できる値を含むノードに結合しているフォーム制御を選択する。 |
このリストはすべてを網羅するものではなく,他の擬似クラスが定義されてもよい。
擬似要素は文書言語によって指定されているものを超えた文書ツリーに関する抽象化である。擬似要素はDOMに現れない。これらはスタイル設定の目的にだけ使用される。
名前 | 定義されている場所 | XFormsとの関係 |
---|---|---|
::value |
TBD | ラベルを除いたフォーム制御の“活性化されている”領域を表す。これはHTMLのinput 又は他のフォーム制御要素に対応するものとする。この擬似要素はフォーム制御要素の子であり,必須のlabel 要素の直後に現れる。 |
::repeat-item |
TBD | 繰り返している並びからの一つの項目を表す。その位置は,一つの繰返し項目内のすべての要素の親としてのものとする。各repeat-item は特定のインスタンスデータノードに関係付けられていて,関連付けられているスタイル特性が子要素に伝えられると同時に,そのノードに関するモデル項目特性(例えば'relevant ')の影響を受ける。 |
::repeat-index |
TBD | 繰り返している並びの現在の項目を表す。その位置は,インデクス繰返し項目内のすべての要素の親(そして::repeat-item 擬似要素の子)としてのものとする。したがって,この擬似要素に適用されるスタイル宣言はすべて親のスタイル宣言を上書きする。 |
このリストはすべてを網羅するものではなく,他の擬似要素が定義されてもよい。
次の例は,フォーム制御及び繰返し構造に対する基本的なスタイル設定を示している。
@namespace xforms url(http://www.w3.org/2002/xforms); /* 妥当でないすべてのフォーム制御に対して背景を赤で表示する */ *:invalid { background-color:red; } /* 必須とするすべてのフォーム制御の後にアスタリスクを赤で表示する */ *:required::after { content: "*"; color:red; } /* 現在有効でないフォーム制御は視覚化しない */ *:disabled { visibility: hidden; } /* 次の宣言によって,フォーム制御とそのラベルを二列の表のとおりに整列させる。 */ xforms|group { display: table; } xforms|input { display: table-row; } xforms|input > xforms|label { display: table-cell; } xforms|input::value { border: thin black solid; display: table-cell; } /* 該当する場合に,警告メッセージを表示する */ *:valid > xforms|alert { display: none; } *:invalid > xforms|alert { display: inline; } /* 繰返し項目を境界線(破線)と共に表示する */ *::repeat-item { border: dashed; } /* 現在の繰返し項目を背後を青くすることで強調表示する */ *::repeat-index { background-color: teal; }
ここでは完全なXFormsの例を紹介する。これら及びその他の例はhttp://www.w3.org/MarkUp/Forms/2002/Examples/で管理されている。
スキーマファイル payschema.xsd
:
初期インスタンスファイル bookmarks.xml
:
次の例は,[SVG 1.1]とXFormsとの統合について一つの可能な例を示している。 XFormsとSVGとの統合についての完全なルールは,この規定が公開された時点では十分に明確にされていない事に注目する。 XForms規定,SVG規定又はその他のW3C規定の今後の版でXFormsとSVGとの統合についてのより完全なルールが定義される可能性があるが,それは次の例と互換性がないことも考えられる。
次の例では,一般的にforeignObject
と共に使用される,SVGのswitch
及びrequiredExtensions
機能が使用されていないことに注意する。
この文書は現在のXForms 作業グループ関係者の参加によって作成された。
以前の作業グループ関係者。
XForms作業グループは作業において,外部専門家の参加から恩恵を受けた。
この文書はXMLspec DTD(既に文書化)で符号化されている。 XMLソースはxmlspec.xsl スタイルシートを利用して変換されている。 付録のXMLスキーマ部分は,xmlverbatim XSLTスタイルシート(許可のもとで使用)を利用してHTMLに翻訳された。 編集に使用した主要なツールは,SoftQuad XMetaL及びEMACS(psgmlオプション及びXAE)とする。 XMLは,XMLLint(GNOME libxmlパッケージの一部)を利用して妥当性が検証され, XSLTProc(GNOME libxslパッケージの一部)を利用して変換された。 マルチファイルHTML版は,Xalanプロセサを利用して生成された。 HTML版の生成には,Saxonエンジンも使われた。 編集者は,共同制作のためにW3C CVSリポジトリ及びW3C IRCサーバを利用した。