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

XMLフォーム言語(XForms)1.0

XForms 1.0



序文

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

1. 概要

1.1 背景

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

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

1.4 文書規約

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

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

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

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

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

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

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

例:項目例
 Example Item 

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

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

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

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

2. XFormsへの導入

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

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

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

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

強い型付け

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

XML送付

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

既存のスキーマの再使用

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

外部スキーマの援用

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

国際化

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

アクセシビリティの向上

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

複数装置のサポート

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

スクリプトの削減

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

2.1 例

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

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

screen shot of a graphic rendering

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2.3 値の制約

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

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

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

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

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

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

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

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

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

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

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

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

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

3. 文書構造

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

3.2 XForms主要属性集合

3.2.2 リンク付け属性

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

src

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

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

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

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

3.2.3 単一ノード結合属性

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

ref

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

model

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

bind

bind要素への参照。

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

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

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

3.2.4 ノード集合結合属性

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

nodeset

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

model

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

bind

bind要素への参照。

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

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

3.3 XForms主要モジュール

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

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

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

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

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

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

3.3.1 model要素

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

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

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

特殊属性:

functions

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

schema

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

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

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

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

3.3.2 instance要素

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

共通属性:共通

特殊属性:

リンク付け属性

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

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

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

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

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

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

3.3.3 submission要素

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

共通属性:共通

特殊属性:

bind

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

ref

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

action

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

method

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

version

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

indent

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

mediatype

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

encoding

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

omit-xml-declaration

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

standalone

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

cdata-section-elements

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

replace

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

separator

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

includenamespaceprefixes

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

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

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

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

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

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

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

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

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

doctype-system
doctype-public

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

3.3.4 bind要素

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

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

特殊属性:

nodeset

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

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

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

3.4 XForms MustUnderstandモジュール

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

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

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

3.5 XForms拡張モジュール

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

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

3.5.1 extension要素

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

共通属性:共通

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

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

4. 処理モデル

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

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

  • 初期化

  • 相互作用

  • 通知

  • 誤り状態

4.1 イベント概要

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

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


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

4.2 初期化イベント

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

4.2.1 xforms-model-constructイベント

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

ターゲット:model

バブル:はい

取消し可能:いいえ

文脈情報:なし

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

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

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

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

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

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

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

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

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

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

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

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

ターゲット:model

バブル:はい

取消し可能:いいえ

文脈情報:なし

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

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

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

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

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

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

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

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

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

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

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

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

4.3 相互作用イベント

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

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

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

バブル:いいえ

取消し可能:はい

文脈情報:なし

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

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

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

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

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

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

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

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

4.3.5 xforms-revalidateイベント

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

ターゲット:model

バブル:はい

取消し可能:はい

文脈情報:なし

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

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

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

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

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

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

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

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

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

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

4.3.6 xforms-recalculateイベント

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

ターゲット:model

バブル:はい

取消し可能:はい

文脈情報:なし

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

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

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

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

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

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

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

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

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

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

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

4.4 通知イベント

4.4.19 xforms-submit-errorイベント

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

ターゲット:submission

バブル:はい

取消し可能:いいえ

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

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

4.5 誤り表示

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

4.6 イベント列

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

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

4.6.3 select又はselect1制御の場合

4.6.5 submit制御の場合

5. データ型

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

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

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

組込みプリミティブ型:

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

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

組込み派生型:

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

6. モデル項目特性

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

6.1 モデル項目特性定義

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

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

継承規則:

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

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

局所値の割当て:

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

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

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

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

6.1.3 required特性

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

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

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

デフォルト値:false()

継承規則:継承しない

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

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

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

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

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

6.1.4 relevant特性

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

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

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

デフォルト値:true()

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

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

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

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

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

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


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

6.1.5 calculate特性

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

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

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

デフォルト値:なし

継承規則:継承しない

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

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

6.1.6 constraint特性

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

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

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

デフォルト値:true()

継承規則:継承しない

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

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

6.1.7 p3ptype特性

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

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

使用できる値:xsd:string

デフォルト値:なし

継承規則:継承しない

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

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

6.2 スキーマ制約

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

6.2.1 原子データ型

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

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

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

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

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

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

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

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

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

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

7. XFormsにおけるXPath式

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

7.1 XPathデータ型

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

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

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

7.3 インスタンスデータ

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

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

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

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

7.4 評価文脈

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

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

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

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

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

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

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

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

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

  6. 変数は存在しない。

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

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

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

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

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

7.5 結合式

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

7.5.1 動的依存性

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

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

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

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

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

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

7.5.2 モデル結合式

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

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

7.6 XForms主要関数ライブラリ

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

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

7.8 数値関数

7.8.5 index()関数

number index(string)

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

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

7.10 日付及び時間関数

7.12 拡張関数

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

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

8. フォーム制御

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

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

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

参照: 9.3.3 itemset要素

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

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

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

appearance

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

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

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

navindex

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

accesskey

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

説明
共通属性
特殊属性

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

8.1.2 input要素

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

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

特殊属性:

入力モード

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

incremental

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

例:

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

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

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

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

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

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

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

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

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

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

A clendar picker graphical widget.

8.1.3 secret要素

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

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

特殊属性:

入力モード

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

incremental

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

例:

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

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

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

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

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

8.1.4 textarea要素

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

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

特殊属性:

入力モード

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

incremental

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

例:

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

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

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

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

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

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

8.1.5 output要素

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

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

特殊属性:

appearance

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

value

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

例:

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

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

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

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

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

8.1.6 upload要素

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

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

特殊属性:

mediatype

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

incremental

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

例:

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

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

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

実装必要条件:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

8.1.7 range要素

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

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

特殊属性

start

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

end

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

step

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

incremental

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

例:

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

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

a slider control, from -2 to +2

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

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

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

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

例:

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

8.1.8 trigger要素

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

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

例:

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

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

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

8.1.9 submit要素

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

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

特殊属性:

submission

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

例:

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

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

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

8.1.10 select要素

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

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

特殊属性:

selection

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

incremental

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

例:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

8.1.11 select1要素

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

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

特殊属性:

selection

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

incremental

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

例:

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

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

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

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

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

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

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

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

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

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

8.3 その他の要素

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

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

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

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

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

8.3.1 filename要素

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

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

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

例:

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

8.3.3 label要素

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

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

特殊属性:

リンク付け属性

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

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

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

8.3.4 help要素

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

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

特殊属性:

リンク付け属性

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

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

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

8.3.5 hint要素

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

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

特殊属性:

リンク付け属性

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

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

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

8.3.6 alert要素

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

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

特殊属性:

リンク付け属性

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

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

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

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

9.1 XFormsグループモジュール

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

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

9.1.1 group要素

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

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

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

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

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

例:

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

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

9.2 XFormsスイッチモジュール

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

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

9.2.1 switch要素

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

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

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

例:

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

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

9.2.2 case要素

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

共通属性:共通

特殊属性:

selected

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

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

9.3 XForms繰返しモジュール

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

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

9.3.1 repeat要素

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

例:

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

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

特殊属性:

startindex

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

number

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

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

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

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

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

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

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

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

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

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

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

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

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

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

9.3.3 itemset要素

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

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

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

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

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

<!-- user interaction markup -->

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

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

9.3.4 copy要素

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

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

itemが選択されたとき,次の規則が適用される。

  • リストフォーム制御内の結合属性によって指定されたターゲットノードは要素ノードでなければならない。そうでない場合は例外が発生する( 4.5.1 xforms-binding-exceptionイベント )。

  • itemに関連付けられている,copy上の結合属性によって指定された要素ノードがターゲットノードの子要素としてディープコピーされる。

  • 計算に必要な依存関係が完全に再構築される。

itemの選択が解除されたとき,次の規則が適用される。

  • リストフォーム制御内の結合属性によって指定されたターゲットノードは要素ノードでなければならない。そうでない場合は例外が発生する( 4.5.1 xforms-binding-exceptionイベント )。

  • itemに関連付けられている,copy上の結合属性によって指定された要素ノードが削除される。

  • 計算に必要な依存関係が完全に再構築される。

9.3.5 insert要素

このアクションは同種の集り(例えば買い物かご内の品目の集合)に新しい項目を挿入するために使用される。insertアクションの属性は,新しい項目の集りへの挿入に関する指定であり,その集りの中で新しいノードが現れる位置に関して指定する。新しいノードは,初期インスタンスデータによって指定された同種の集りの最後のメンバのクローンを作ることで作成される。この処理で,xsd:ID型のノードは,インスタンスデータ中で一意な値になるように修正される。

共通属性:共通, イベント, ノード集合結合

特殊属性:

at

必須。挿入位置を決定するために評価されるXPath式。

position

必須。“before”(前に挿入)又は“after”(後に挿入)のいずれかを選択する。

insert処理の規則は次のとおりとする。

  1. 結合属性nodesetを評価することによって,更新対象の同種の集りを決定する。

  2. 原型として使用する集りのメンバを決定するために,対応する初期インスタンスデータのノード集合に位置付ける。挿入するノードを生成するために,この集りの最後のメンバのクローンを作成する。最後に,この新しく作成したノードを,インスタンスデータの,position属性及びat属性によって指定された位置に挿入する。

    at属性の評価結果によって,挿入のインデクス,つまりノード集合に対するインデクスを表す数値が決まる。at属性は,ノード集合結合の文書順で最初のノードを文脈ノード,ノード集合結合のサイズを文脈サイズとし,文脈位置を1として評価される。position属性によって,新しいノードをそのインデクスの又はのいずれに挿入するのかが決まる。

    インデクスの決定規則は次のとおりとする。

    1. 属性atに指定されたXPath表現の戻り値は,XPath関数round()の規則に従って処理される。例えば,リテラル“1.5”は“2”になり,リテラル“string”はNaNになる。

    2. 結果がNaNである場合,insertはノード集合の最後への追加になる。

    3. 結果として得られたインデクスは,それがノード集合の妥当な範囲にない場合,1又はノード集合のサイズのいずれか近い値に置き換えられる。

  3. ノードを追加した同種の集りに結合しているすべての繰返しに対するインデクスを,新たに追加したノードを指すように更新する。内側の入れ子として存在する繰返しのためのインデックスを1に再初期化する。

  4. 挿入処理が正常に終了した場合,イベントxforms-insertを振り分ける。

このアクションの結果,新たに作成されたデータノードがXFormsインスタンスデータに挿入される。このノードは,処理モデルの初期化( 4.2 初期化イベント を参照)で定義されるとおりに作成される。例えば,これが繰返し構造と共に使用された場合,背後にある集り内の新しい項目に値を設定するのに必要な利用者インタフェースのインスタンスが作成される。

備考:
このアクションがaction要素内に含まれる場合の遅延更新の振る舞いは特殊なものになる( 10.1.1 action要素 )。

insertを繰り返す構造と共に使用する例については, 9.3.1 repeat要素 を参照。insertと共にXForms setvalueアクションを使用することで,新しく挿入されたノードに対する初期値を指定できることに注意する。

9.3.6 delete要素

このアクションはインスタンスデータからノードを削除する。

共通属性:共通, イベント, ノード集合結合

特殊属性:

at

必須。削除位置を決定するために評価されるXPath式。

delete処理の規則は次のとおりとする。

  1. 結合属性nodesetを評価することによって,更新対象の同種の集りを決定する。集りが空の場合,deleteアクションは無効とする。

  2. n番目の要素ノードをインスタンスデータから削除する。nは, 9.3.5 insert要素 で定義されるノード集合インデクスの評価から返される数値とする。n番目のノードが存在しない場合,この操作は無効とする。

  3. 削除処理後のインデクスが指すノードは,次の場合を除いて,削除処理前と同じであることが望ましい。

    • 集り内に残っていた最後の項目が削除された場合,インデクス位置は0になる。

    • 削除されたノードをインデクスが指していた場合で,そのノードが集り内の最後の項目であった場合,インデクスは削除後の集り内で最後のノードを新たに指す。内側の繰返しのインデックスは再初期化される。

    • 削除されたノードをインデクスが指していた場合で,そのノードが集り内の最後の項目ではなかった場合,インデクス位置は変更されない。内側の繰返しのインデクスは再初期化される。

    繰返しの再初期化とは,それが空の場合にインデクスを0に変更し,それ以外の場合は1に変更することを意味する。

  4. deleteが正常終了した場合,イベントxforms-deleteを振り分ける。

このアクションの結果,インスタンスデータ内のノードは削除される。

備考:
このアクションがaction要素内に含まれる場合の遅延更新の振る舞いは特殊なものになる( 10.1.1 action要素 )。

deleteを繰返し構造と共に使用する例については, 9.3.1 repeat要素 を参照。

9.3.7 setindex要素

このアクションは,ある項目を繰返し内で現在指し示されるものとして設定する( 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に対して次のステップが実行される。

  1. このrepeatの操作対象である同種の集りに位置付けるために,nodeset属性を評価する。

  2. ソース文書内にあるinstance要素内の対応するノードに位置付ける。これらのノードは初期値を提供し,(繰り返す)集りのメンバを作成するための原型インスタンスとして機能する。

  3. この繰返し構造のためのindexstartindexの値に初期化する。startindexが1より小さい場合は1とし,初期のノード集合のサイズより大きい場合はノード集合のサイズとする。

  4. repeat要素内に指定された利用者インタフェースのテンプレートをこの原型インスタンスに結合する。原型のインスタンスと利用者インタフェース制御のための結合制限との間で型の不整合がある場合,誤りを送信し,処理を停止する。

  5. 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の振る舞いが定義される可能性もある。

10. XFormsアクション

ここでは,イベントに応じて起動することができる,XMLイベントに基づいた[XML Events]アクションの共通的なセットを定義する。

備考:
XForms自身は,スクリプトに基づいたイベント処理の方法を定義しない。そのような機能の定義は,ホスト言語の責任とする。

10.1 XFormsアクションモジュール

この規定で定義されたフォーム制御はすべて,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スイッチモジュールから,insertdeletesetindexは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で定義された処理が適用される。

10.1.1 action要素

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要素の子孫要素として指定された場合に,インスタンスデータに対して遅れて適用される効果をもつものが多くある。

実装では,遅延更新を実現するのにどのような方法を採用してもよいが,結果は定められたとおりにならなければならない。つまり,一連のアクションによってインスタンスデータが変更された後,最も外側のアクションハンドラの処理が終了するまで,計算に必要な依存関係の再構築,再計算,妥当性の再検証及びフォーム制御のリフレッシュは行われてはならない。最も外側にある各アクションハンドラは,それらのアクションハンドラの終了時にrebuildrecalculaterevalidate及びrefreshのアクションが必要であるかどうかを示す,初期値がfalseである論理値フラグをもつと考えることができる。

rebuild,recalculate,revalidate,refreshを直接呼び出すアクションは,その動作を直ちに実行し,対応するフラグをクリアする。この範ちゅうに属するXFormsアクションは次のとおり。

rebuild
recalculate
revalidate
refresh

インスタンスデータの木構造を変更するXFormsアクションは,四つのフラグをすべてtrueにセットする。この範ちゅうに属するXFormsアクションは次のとおり。

insert
delete

インスタンスノードの値だけを変更するXFormsアクションは,recalculaterevalidate及びrefreshの各フラグをtrueにセットし,rebuildフラグについては変更しない。この範ちゅうに属するXFormsアクションは次のとおり。

setvalue

最後に,resetアクションは動作を直ちに実行し,すべてのフラグをクリアする。

10.1.2 dispatch要素

このアクションはXFormsイベントをtarget属性に指定された要素に振り分ける。振り分けられるイベントとして次の2種類がある。

  1. 事前定義されたXFormsイベント(つまりxforms-event-name)。この場合は,bubbles及びcancelable属性は無視され, 4. 処理モデル で定義された標準の意味が適用される。

  2. XFormsの文書作成者によって作成される,XFormsでの解釈が事前定義されていないイベント。デフォルトでXFormsプロセサによって処理されることはない。

共通属性:共通イベント

特殊属性:

name

必須。振り分けるイベントの名称。

target

必須。イベントのターゲットを示す。

bubbles

省略可能。このイベントが,[DOM2 Events]で定義されているようなバブル動作を伴うかどうかを示す論理値。デフォルト値はカスタムイベントの定義による。事前定義されたイベントに対しては,この属性は無効とする。

cancelable

省略可能。このイベントが,[DOM2 Events]で定義されているような取消し可能なものであるかどうかを示す論理値。デフォルト値はカスタムイベントの定義による。事前定義されたイベントに対しては,この属性は無効とする。

10.1.5 revalidate要素

このアクションは,通常のイベントフローに従わずに直接,xforms-revalidate処理を起動する。この結果,インスタンスデータは処理モデルに定義されているように妥当性が再検証される( 4.3.5 xforms-revalidateイベント を参照)。

共通属性:共通イベント

特殊属性:

model

省略可能。 3.2.3 単一ノード結合属性 で定義されているXFormsモデルセレクタ。

備考:
このアクションがaction要素内に含まれる場合の遅延更新の振る舞いは特殊なものになる( 10.1.1 action要素 )。

10.1.7 setfocus要素

このアクションは,control属性で指定されたフォーム制御にxforms-focusイベント( 4.3.2 xforms-focusイベント )を振り分ける。このイベントは,accesskeyなどのXFormsアクセシビリティ機能を実現するために,内部的に呼び出されることに注意する必要がある。

共通属性:共通イベント

特殊属性:

control

必須。フォーム制御を示す。

繰返し構造にフォーカスを設定する場合は,その繰返しのインデクスが指す繰返し項目にフォーカスを設定する。

10.1.8 load要素

このアクションは,指定されたリンクを走査する。

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

特殊属性:

resource

ロードする外部資源へのリンク。このリンクは,この要素と指定された遠隔資源との間の[XLink 1.0]リンクとして定義されるものとする。リンク動作の制御はXMLイベントによって定義されるため,XLinkのactuate値は定義されない。XLinkのshow値は,show属性に依存する。リンク走査に失敗した場合は誤りとして処理される( 4.5.3 xforms-link-errorイベント )。

show

省略可能。リンクの振る舞いを示す。この属性が指定されない場合,デフォルト値として“replace”が仮定される。

インスタンスデータ内のURIを示す単一ノード結合属性又はリンク付け属性のいずれかが必要とする。両方指定された場合,このアクションは無効になる。

show属性に指定できる各値は,次に示すとおりに,リンク走査によって到達した文書(又は文書の一部)の処理を指定するものとする。

new

文書は,新しい表示文脈,例えば,新しいウィンドウにロードされる。元のウィンドウではフォーム処理が引き続き行われる。

replace

文書は現在のウィンドウ内にロードされる。フォーム処理は,利用者が新しい文書への移動を手動で要求した場合と全く同じように中断する。

10.1.9 setvalue要素

このアクションは,指定されたインスタンスノードの値を明示的に設定する。

共通属性:共通イベント単一ノード結合

特殊属性:

value

省略可能。XPath式。このXPath式の評価結果が選択されたインスタンスデータノードに格納される。単一ノード結合の結果が,このXPath式の評価文脈になる。

setvalue要素の内容は,設定されるリテラル値を示す。この指定方法は,value属性を使用して計算された値を指定する方法の代替として使用できる。これらの方法を比較する二つの例を次に示す。

例:式を使用するsetvalue
<setvalue bind="put-here" value="a/b/c"/>
インスタンスデータのa/b/cに存在する文字列値が,id="put-here"のバインド要素によって選択された単一ノードに置かれる。

例: リテラルを使用するsetvalue
<setvalue bind="put-here">literal string</setvalue>
値“literal string”が,id="put-here"のバインド要素によって選択された単一ノードに置かれる。
value属性もテキスト内容も指定されない場合,選択されたノードの値は空文字列(“”)に設定される。両方指定された場合,value属性が使用される。

文字列はすべて,次のとおりに,インスタンスデータに挿入される。

  • 要素ノードの場合:要素に子テキストノードが存在する場合,最初のテキストノードが新しい値に対応するものに置き換えられる。子テキストノードが存在しない場合,子テキストノードが作成されて新しい値に対応付けられ,最初の子ノードとして追加される。

  • 属性ノードの場合:属性の文字列値が新しい値に対応する文字列に置き換えられる。

  • テキストノードの場合:テキストノードが新しい値に対応するものに置き換えられる。

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

備考:
このアクションがaction要素内に含まれる場合の遅延更新の振る舞いは特殊なものになる( 10.1.1 action要素 )。

10.1.10 send要素

このアクションは,xforms-submitイベントを振り分けることによって送付処理を開始する。xforms-submitイベントの処理は処理モデルで定義されている( 4.3.9 xforms-submitイベント を参照)。

共通属性:共通イベント

特殊属性:

submission

必須。submission要素を示す。

備考:
このXFormアクションによって,次のことを簡単に表すことができる。

<dispatch target="mysubmitinfo" name="xforms-submit"/>

10.1.11 reset要素

このアクションは,指定されたmodelxforms-resetイベントを振り分けることによって,リセット処理を開始する。xforms-resetイベントの処理は処理モデルで定義されている( 4.3.8 xforms-resetイベント を参照)。

共通属性:共通イベント

特殊属性:

model

省略可能。 3.2.3 単一ノード結合属性 で定義されているXFormsモデルセレクタ。

備考:
このアクションがaction要素内に含まれる場合の遅延更新の振る舞いは特殊なものになる( 10.1.1 action要素 )。

10.1.12 message要素

このアクションは,利用者に表示されるメッセージをカプセル化する。

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

特殊属性:

リンク付け属性

外部メッセージへのリンク。リンク走査に失敗した場合は誤りとして処理される( 4.5.3 xforms-link-errorイベント )。

level

必須。("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>

マウスポインタが表示され,その下に"市町村名及び番地を入力してください"という内容のツールチップが表示される一般的なテキスト入力フォーム制御

10.1.13 insert, delete及びsetindexアクション

10. XFormsアクション で詳述したアクションハンドラに加えて,XFormsには, 9.3.5 insert要素 , 9.3.6 delete要素 及び 9.3.7 setindex要素 の三つのアクションがXForms繰返しモジュールの一部として定義されている。

11. 送付

XFormsは,インスタンスデータを収集し,それを外部表現に直列化して,プロトコルを使用して送付するように設計されている。XFormsには,直列化及び送付に関する幾つかのオプションが定義されている。次に送付に関するインスタンスデータの処理及び直列化と送付とに関する各オプションの振る舞いを定義する。

11.1 xforms-submitイベント

送付は,xforms-submitイベントに対するデフォルトアクションで開始される。

ターゲット:submission

バブル:はい

取消し可能:はい

文脈情報:なし

どんな状況でも,ある一つのXForms送付に関して複数の送付プロセスが同時に進行することは許可されない。xforms-submitのデフォルト動作の最初から,xforms-submit-done又はxforms-submit-errorのためのデフォルト動作の完了まで,後続のxforms-submitイベントに対するデフォルトアクションは何もしないこととする。

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

  1. インスタンスデータのノードをsubmission要素上の属性に基づいて選択する。指定されたノード及びそれを祖先とするすべてのノードが,以降の送付処理手順の対象となる。 6.1.4 relevant特性 で定義されている,現在有効でないと判断されるノードはすべて対象外とする。

  2. 選択されたすべてのインスタンスデータの妥当性を再検証する。その際, 4.3.5 xforms-revalidateイベント の規則に従う。妥当でないインスタンスデータが一つでも存在した場合,送付処理はxforms-submit-errorイベントを振り分けた後に停止する。

  3. 選択されたインスタンスデータを 11.2 送付オプション の規則に従って直列化する。

  4. 直列化されたインスタンスデータを 11.2 送付オプション の規則によって決定されるプロトコルを使用して送付する。

  5. 送付から返された応答を次のとおりに処理する。

    • 本体を含む成功応答が返され,要素submission上のreplace属性の値に“all”が指定されている場合,xforms-submit-doneイベントを振り分け,XFormsを含んでいる文書全体を返された本体に置き換えて送付処理を完了する。

    • XMLメディア型([RFC 3023]の内容型指定子で定義)の本体を含む成功応答が返され,要素submission上のreplace属性の値に“instance”が指定されている場合,応答をXMLとして解析し,送付したインスタンスに対応する内部インスタンスデータをすべてその結果で置き換える。送付処理は,通常のイベントフローに従わずに直接,rebuildrecalculaterevalidate及びrefreshの処理を実行した後,完了する。その後,送付処理はxforms-submit-doneを振り分けて完了する。

    • 非XMLメディア型([RFC 3023]のどの指定子にも一致しない内容型)の本体を含む成功応答が返され,要素submissionreplace属性の値に“instance”が指定されている場合,文書の置換えは行わず,xforms-submit-errorを振り分けた後に送付処理を完了する。

    • 本体を含む成功応答が返され,要素submissionreplace属性の値に“none”が指定されている場合,xforms-submit-doneを振り分けた後に送付処理を完了する。

    • 本体を含まない成功応答が返された場合,xforms-submit-doneを振り分けた後に送付処理を完了する。

    • 属性replaceに指定できる他の値に対する振る舞いについては,この規定では定義しない。

    • 誤り応答が返された場合,文書の置換えは行わず,xforms-submit-errorを振り分けた後に送付処理を完了する。

actionのURIスキームついて,XFormsはHTTP/1.1[RFC 2616]への結合を規定している。

備考:
その他の結合,特にURIスキーム“mailto:”への結合はサポートしてもよく,スキーム“https:”及び“file:”への結合はサポートすることが望ましい。これらのスキームへの結合は,XFormsの規定では定義されない。これらのスキームへの結合を提供する実装では,プライバシ及びセキュリティの問題に特別の注意を払うことが望ましい。“http:”及び“https:”スキームの中では,フォーム作成者は,GETメソッドを使用する状況に関するW3C Technical Architecture Groupの見解[TAG Finding 7]に従うことが推奨される。

次の表が示すとおりに,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では定義されない。

11.3 application/xmlとしての直列化

この形式では,一般的なXML処理ツールで容易に処理できるXMLとしてインスタンスデータを表すことができる。さらに,この形式ではバイナリの内容の送付が可能とする。

直列化の手順は次のとおりとする。

  1. submission要素の属性として指定された値を使用して,[XSLT 1.0]の 16. Output 及び 16.1 XML Output Method に定義されたXML outputメソッドの規則に従ってXML文書を生成する。

    1. 名前空間ノードの処理:デフォルトの振る舞いでは,有効な各名前空間に対して少なくとも一つの名前空間宣言がXMLに直列化されるように,XML outputメソッドの規則に従ってすべての名前空間ノードが直列化される。その他の継承された名前空間は直列化されたXMLのルート要素で宣言される。ただし,要素submission上の属性includenamespaceprefixesが存在する場合,名前空間に対応する接頭辞がそのincludenamespaceprefixes属性に指定されているものを除いて,インスタンスデータ内で非明示的に使用されるすべての名前空間宣言([Exc-C14N]に定義:“not visibly utilized”)及びそれが空の場合にデフォルトの名前空間はルート要素の直列化から除外される。特殊値#defaultはデフォルトの名前空間を表す。

    2. mediatype:デフォルトでは,直列化されるXMLインスタンスのmediatypeはapplication/xmlであるが,submission要素のmediatype属性を使用して,それと互換性のある型に変更することができる。文書作成者は,application/xmlと互換性のある型を確実に指定することが望ましい。

11.4 multipart/relatedとしての直列化

この形式を使用する目的は,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に関連付けられるバイナリの内容。

例:multipart/related
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--

11.5 multipart/form-dataとしての直列化

この形式は,旧来との互換性を提供し,[RFC 2388] サーバと共にXFormsクライアントを使用することを可能にする。このメソッドはバイナリの内容の維持に適している。文脈パス情報,属性値,名前空間及び名前空間接頭辞は保存されない。結果として,異なる要素が同じ名前で直列化される可能性がある。

備考:
既存のHTML利用者エージェントは特殊文字(二重引用符など)及び非ASCII文字を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-Dispositionfilenameパラメタを伴う。

  • Content-Typetext/plainでなければならないが,これはxsd:base64Binaryxsd:hexBinary及びそれらの派生型以外の場合であり,これらの場合には,ヘッダは,認識している場合は添付のmediatypeを,そうでない場合はapplication/octet-streamを表す。文字セットが適用可能である場合,Content-Typecharsetパラメタがあってもよい。

例:

例:multipart/form-data
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--

11.6 application/x-www-form-urlencodedとしての直列化

この直列化形式は,フォームで資源を指定するURIを生成するのに必要なデータを収集し,HTTP GET操作でその資源にアクセスすることを可能にするように設計されている。

この形式はその[XHTML 1.0]フォーム内容型application/x-www-form-urlencodedの拡張であり,非ASCII文字及び予約された文字の符号化に関して特定の規則がある。

この形式はバイナリの内容の維持に適していない。したがって,バイナリの内容を含めることができるフォームには他の直列化メソッドを使用することが推奨される。

直列化の手順は次のとおりとする。

  1. 各要素ノードを文書順にたどる。一つの子テキストノードをもつ各要素を,含める対象として選択する。属性情報は保存対象ではないことに注意する。

  2. 含める対象として選択された要素ノードを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)で表す。

  3. この符号化をすべて,文書順を維持して連結する。

例:

例:application/x-www-form-urlencoded
      GivenName=Ren%C3%A9
      
この形式は単純な名前及び値の組から成る。
      <PersonName title="Mr">
        <GivenName>René</GivenName>
      </PersonName>
      
これは上の例のインスタンスデータとする。一部のデータしか保存されないことに注意する。文書作成者は,より高いデータ保全性を必要とする場合,異なる直列化フォーマットを選択することが望ましい。

11.9 get送付メソッド

この送付メソッドは,HTTP GET又はそれと等価なものを表す。直列化されたフォームデータは,送付処理中に要求されるURIの一部として配信される。

このメソッドは,サーバ上での状態の変更又は他のアクションの起動が意図されたフォームの送付には適していない。HTTP GETの推奨される用途については[RFC 2616]を参照。

URIの生成は次のとおりになる。

  • action属性に指定された送付URIを検査する。URIに? (疑問符)文字が含まれていない場合は付加する。既に疑問符文字が含まれている場合は,separator属性に指定された区切り文字を付加する。

  • 直列化されたフォームデータをURIに付加する。

要求と共にメッセージ本体が送信されることはない。

12. 適合性

12.2 適合性定義

12.2.1 XForms適合プロセサ

すべてのXFormsプロセサは,下に補足されている条件を除いて,次の規定に適合しなければならない。

すべてのXFormsプロセサは,主要モジュール,MustUnderstandモジュール,フォーム制御モジュール,グループモジュール,スイッチモジュール,繰返しモジュール及びアクションモジュールを完全にサポートしなければならない。

すべてのXFormsプロセサは,XForms処理モデル及び 4. 処理モデル にリストされているすべてのイベント,xsd:anyURIを処理するためのhttpスキーム,並びに 11. 送付 に定義されているすべての直列化メソッドもサポートしなければならない。

ホスト言語は,その他の適合性に関する要求事項を導入してもよい。

完全XFormsプロセサは,この規定で定義された必須機能をすべて実装しなければならない。

12.2.2 XForms適合文書

すべてのXFormsを含んでいる文書は,下に補足された条件を除いて,次の規定に適合しなければならない。

XForms要素は一般的に,それを含んでいる文書内の複数の場所に挿入される。挿入された各素片のルート要素はmodel,フォーム制御,grouprepeat又はswitchのどれかでなければならない。挿入されたそれぞれのXForms素片は,XFormsのスキーマ( 附属書A XFormsのためのスキーマ )に照らして妥当でなければならない。

ホスト言語は,その他の適合性に関する要求事項を導入してもよい。

完全XForms適合文書はすべて,この規定の必須部分のすべてに適合しなければならない。

13. 定義

結合

“結合”は,位置指定子として結合式を使用することによってインスタンスデータノードをフォーム制御又はモデル項目制約に関連付ける。

結合式

結合に使用される[XPath 1.0]のPathExpr。

モデル結合式

モデル項目特性を宣言する結合に使用される[XPath 1.0]のPathExpr。

UI又はアクション結合式

フォーム制御とインスタンスとの結合,又はアクションによる操作のためのノード若しくはノード集合の指定に使用される[XPath 1.0]のPathExpr。

計算される式

relevant,calculateなどのモデル項目特性によって使用される[XPath 1.0]式。XFormsに動的な性格を与える。

含んでいる文書

一つ以上の<model>要素を含む,XHTML文書などの特定文書。

データ型

XMLスキーマ[XML Schema part 2]より: 次の三つから構成される。a) 値空間と呼ばれる区別できる値の集合,b) 字句空間と呼ばれる字句表現の集合,c) 値空間,個々の値又は字句項目の特性を示すファセットの集合。

ファセット

XMLスキーマ [XML Schema part 2]より: 値空間の側面の一つの定義。各ファセットは,独立した評価軸又は評価次元に沿って値空間を特徴付けるものと考えることができる。

最初のノード規則

UI単一ノード結合属性のUIでサイズが1よりも大きいノード集合が選択された場合に,ノード集合における最初のノードが使用される。

フォーム制御

利用者との対話地点として機能するXForms利用者インタフェース制御。

ホスト言語

XFormsの組込み先となるXHTMLなどのXML語い(彙)。

インスタンスデータ

あるフォームに関連付けられるすべてのインスタンスデータノードの値及び状態の内部的な木表現。

インスタンスデータノード

インスタンスデータの[XPath 1.0]ノード。

字句空間

XMLスキーマ[XML Schema part 2]より: データ型に対して妥当なリテラルの集合。

モデル項目

インスタンスデータノード及びそれに関連付けられている制約。

モデル項目特性

インスタンスデータノードへのXForms固有の注釈。

スキーマ制約

XMLスキーマデータ型に基づく,フォームデータに適用される制限。

値空間

XMLスキーマ[XML Schema part 2]より: あるデータ型に対する値の集合。あるデータ型の値空間の各値は,その字句空間内の一つ以上のリテラルによって表される。

XFormsモデル

XFormsによって指定される,不可視であるXMLフォームの定義。XFormsモデルは,XFormsの個々のモデル項目及び制約,並びにその他の実行時の側面を定義する。

XFormsプロセサ

XForms規定を実装し,XForms規定に準拠するソフトウェアアプリケーション又はプログラム。

可視化

(参考)便宜上“可視化”としているが,視覚的な提示だけでなく,音声などでの提示も含む。

附属書B 文献

B.1 引用規格

Exc-C14N
Exclusive XML Canonicalization Version 1.0 , J. Boyer, D. Eastlake 3rd, J. Reagle, 2002.(W3C勧告,http://www.w3.org/TR/2002/REC-xml-exc-c14n-20020718/を参照)
RFC 2119
RFC 2119: Key words for use in RFCs to Indicate Requirement Levels , S. Bradner, 1997.(http://www.ietf.org/rfc/rfc2119.txtを参照)
RFC 2387
RFC 2387: The MIME Multipart/Related Content-type , E. Levinson, 1998.(http://www.ietf.org/rfc/rfc2387.txtを参照)
RFC 2388
RFC 2388: Returning Values from Forms: multipart/form-data , L. Masinter, 1998.(http://www.ietf.org/rfc/rfc2388.txtを参照)
RFC 2396
TS X 0097:2004 統一資源識別子(URI) 共通構文
備考   
RFC 2396: Uniform Resource Identifiers (URI): Generic Syntax , T. Berners-Lee, R. Fielding, L. Masinter, 1998.(http://www.ietf.org/rfc/rfc2396.txtを参照)が,この規定に一致している。
RFC 2616
TS X 0085:2004 ハイパテキスト転送プロトコル HTTP/1.1
備考   
RFC 2616: Hypertext Transfer Protocol -- HTTP/1.1 , R. Fielding, J. Gettys, J. Mogul, H. Frystyk, L. Masinter, P. Leach, T. Berners-Lee,1999.(http://www.ietf.org/rfc/rfc2616.txtを参照)が,この規定に一致している。
RFC 3023
RFC 3023: XML Media Types , 村田真, S. St. Laurent, D. Kohn, 2001.(http://www.ietf.org/rfc/rfc3023.txtを参照)
XHTML Modularization
Modularization of XHTML , M. Altheim, et al., 2001.(W3C勧告,http://www.w3.org/TR/xhtml-modularization/を参照)
XForms Req
XForms Requirements , Micah Dubinko, Dave Raggett, Sebastian Schnitzenbaumer, Malte Wedel, 2001.(W3C作業案,http://www.w3.org/TR/xhtml-forms-reqを参照)
XML Base
XML Base , Jonathan Marsh, 2001.(W3C勧告,http://www.w3.org/TR/xmlbase/を参照)
XML Events
XML Events - An events syntax for XML , Steven Pemberton, T. V. Raman, Shane P. McCarron, 2002.(W3C勧告案,http://www.w3.org/TR/xml-events/を参照)
XML 1.0
JIS X 4159:2005 拡張可能なマーク付け言語 (XML) 1.0 (Third Edition)
備考   
Extensible Markup Language (XML) 1.0 (Second Edition) , Tim Bray, Jean Paoli, C. M. Sperberg-McQueen, Eve Maler, 2000.(W3C勧告,http://www.w3.org/TR/REC-xmlを参照)が,この規格に一致している。
XML Names
Namespaces in XML , Tim Bray, Dave Hollander, Andrew Layman, 1999.(W3C勧告,http://www.w3.org/TR/REC-xml-namesを参照)
XPath 1.0
TR X 0089:2003 XMLパス言語 (XPath) 1.0
備考   
XML Path Language (XPath) Version 1.0 , James Clark, Steve DeRose, 1999.(W3C勧告,http://www.w3.org/TR/xpathを参照)が,この規定に一致している。
XML Schema part 1
TR X 0063:2002 XMLスキーマ 第1部 構造
備考   
XML Schema Part 1: Structures , Henry S. Thompson, David Beech, Murray Maloney, Noah Mendelsohn, 2001.(W3C勧告,http://www.w3.org/TR/xmlschema-1/を参照)が,この規定に一致している。
XML Schema part 2
TR X 0064:2002 XMLスキーマ 第2部 データ型
備考   
XML Schema Part 2: Datatypes , Paul V. Biron, Ashok Malhotra, 2001.(W3C勧告,http://www.w3.org/TR/xmlschema-2/を参照)が,この規定に一致している。
XSLT 1.0
XSL Transformations (XSLT) Version 1.0 , James Clark, 1999.(W3C勧告,http://www.w3.org/TR/xsltを参照)

B.2 参考文献

Algorithms
The Art of Computer Programming: Volume 1 Fundamental Algorithms, D. E. Knuth, Addison-Wesley, Reading, MA. 1968. Third edition, 1997. ISBN:0-2018-9683-4.
AUI97
Auditory User Interfaces--Toward The Speaking Computer, T. V. Raman, Kluwer Academic Publishers, 1997. ISBN:0-7923-9984-6.
CSS2
Cascading Style Sheets, level 2 (CSS2) Specification , Bert Bos, Håkon Wium Lie, Chris Lilley, Ian Jacobs, 1998. (W3C勧告,http://www.w3.org/TR/REC-CSS2を参照)
DDJ-ArrayDoubling
Resizable Arrays, Heaps and Hash Tables, John Boyer, Doctor Dobb's Journal, CMP Media LLC, January 1998 Issue.
DOM2 Core
TR X 0065:2002 文書オブジェクトモデル(DOM)水準2 コア規定
備考   
Document Object Model (DOM) Level 2 Core Specification , Tom Pixley, 2000.(W3C勧告,http://www.w3.org/TR/DOM-Level-2-core/を参照)がこの規定に一致している。
DOM2 Events
TR X 0060:2003 文書オブジェクトモデル(DOM)水準2 イベント規定
備考   
Document Object Model (DOM) Level 2 Events Specification , Tom Pixley, 2000.(W3C勧告,http://www.w3.org/TR/DOM-Level-2-Events/を参照)がこの規定に一致している。
EXSLT
EXSLT Web site .(http://www.exslt.orgを参照)
Java Unicode Blocks
Java 2 Platform, Standard Edition, v 1.4.0 API Specification; Class Character.UnicodeBlock , Sun Microsystems, Inc, 2002.(http://java.sun.com/j2se/1.4/docs/api/java/lang/Character.UnicodeBlock.htmlを参照)
P3P 1.0
The Platform for Privacy Preferences 1.0 (P3P1.0) Specification , Lorrie Cranor, Marc Langheinrich, Massimo Marchiori, Martin Presler-Marshall, Joseph Reagle, 2001.(W3Cの最終作業案,http://www.w3.org/TR/P3P/を参照)
SVG 1.1
TR X 0095:2003 変倍ベクタ図形(SVG) 1.0
備考   
SVG 1.1 , Jon Ferraiolo, 藤沢淳, Dean Jackson, 2003.(W3C勧告,http://www.w3.org/TR/SVG11/を参照)が,この規定に一致している。
TAG Finding 7
TAG Finding: URIs, Addressability, and the use of HTTP GET , Dan Connolly, 2002.(http://www.w3.org/2001/tag/doc/get7を参照)
UAAG 1.0
User Agent Accessibility Guidelines 1.0 , Ian Jacobs, Jon Gunderson, Eric Hansen, 2002.(作業案,http://www.w3.org/TR/UAAG10/を参照)
Unicode Scripts
Script Names , Mark Davis, 2001. (Unicode Technical Report #24,http://www.unicode.org/unicode/reports/tr24/を参照)
XForms Basic
XForms Basic Profile , Micah Dubinko, T. V. Raman, 2003. (W3C勧告候補,http://www.w3.org/TR/xforms-basic/を参照)
XHTML 1.0
XHTML 1.0: The Extensible HyperText Markup Language - A Reformulation of HTML 4 in XML 1.0 , Steven Pemberton, et al., 2000.(W3C勧告,http://www.w3.org/TR/xhtml1を参照)
XLink 1.0
TR X 0076:2003 XMLリンク付け言語 (XLink) 1.0
備考   
XML Linking Language (XLink) Version 1.0 , Steve DeRose, Eve Maler, David Orchard, 2001.(W3C勧告,http://www.w3.org/TR/xlinkを参照)が,この規定に一致している。
XML Schema part 0
XML Schema Part 0: Primer , David C. Fallside, 2001.(W3C勧告,http://www.w3.org/TR/xmlschema-0/を参照)

附属書C プライバシの問題

C.1 XFormsでのP3Pの使用

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で定義される。)だけが伝送される。

附属書D 再計算順序アルゴリズム

XFormsプロセサは,最終結果が同じになりさえすれば,このアルゴリズムのどのステップについても自由に省略又は最適化してよい(奨励される。)。XForms再計算順序アルゴリズムでは,モデル項目及びモデル項目特性を有向グラフの頂点と考える。頂点を結ぶ辺は,各頂点の計算に必要な依存関係を表す。

recalculateアクションに対するデフォルトの処理を次に示す。recalculateアクションは 10.1.4 recalculate要素 で定義されている。

  1. 依存関係の有向マスタグラフを作成する。詳細は D.1 依存関係の有向マスタグラフの作成に関する詳細 に示す。

  2. 一貫した振る舞いを提供するために,実装では,再計算を必要とするノードから到達可能な頂点及び辺だけからなる依存関係の関連サブグラフを計算するようにすることで,処理する頂点の数を減らさなければならない。これについての詳細は, D.2 依存関係の関連サブグラフの作成に関する詳細 に示す。最初の再計算(フォームのロードなど)では,依存関係の関連サブグラフは依存関係の有向マスタグラフと同じになることに注意する。

  3. 一列化(topological sort)を依存関係の関連サブグラフの各頂点に対して実行し,各頂点を評価の順序に並び替える。つまり,各頂点の評価を,その頂点が計算に必要とする頂点の評価後,かつ,その頂点を計算に必要とするすべての頂点の評価前にだけ行うようにする。一列化のアルゴリズムについては,[Algorithms]を参照。

  4. recalculate処理を完了する。

D.1 依存関係の有向マスタグラフの作成に関する詳細

依存関係の有向マスタグラフは各頂点に対し一つのレコードをもつ配列と考えられる。各レコードには次のフィールドがある。

InstanceNode:関連するインスタンスデータノードへの参照
type:頂点によって表されるインスタンスノードの側面(テキスト内容,又はreadOnly若しくはrequiredなどのモデル項目特性)
depList:この頂点を参照する頂点のリスト
in-degree:この頂点が計算に必要とする頂点の数
visited:頂点がサブグラフ内に複数表れることがないようにするためのフラグ
index:依存関係の有向マスタグラフ内の頂点とサブグラフとの関連

各頂点のdepListは,あるインスタンスノードの参照先XMLノードになるように割り当てられるが,これは,そのノード内の計算される式を解析することによって得られる(calculate,relevant,readonly,required特性など)。結合式制約に違反する式はすべて,例外( 4.5.4 xforms-compute-exceptionイベント )を発生させ,recalculateプロセスを終了させる結果となる。

頂点vdepListは,vを参照する計算される式をもつ頂点のリスト(vは除く)になるように割り当てられる。頂点vは,循環参照例外を発生させることなく自己参照が行われるのを容認するように,それ自身のdepListから除かれる。

calculate属性内に現れる計算される式は,一つ以上のインスタンスノードに関するテキスト内容(値)を制御する。頂点は,各インスタンスノードに対して一つ存在し,そのノードの文脈における式を表す。同様に,readOnlyrequiredなどのモデル項目特性のための計算式が一つ以上のインスタンスノードに適用される。そして,そのような適用される各ノードの文脈における式を表すために頂点が作成される。参照するXMLノードを決定するために,それぞれの頂点の計算式を検査しなければならない。結合式制約に違反する式はすべて,例外( 4.5.4 xforms-compute-exceptionイベント )を発生させ,recalculateプロセスを終了させる結果となる。部分式がvのインスタンスノードを示し,vがインスタンスノードのテキスト内容(値)を表す場合,計算式は頂点vを参照している。XFormsのこの版では,readOnly及びrequiredなどのモデル項目特性は式から参照することはできない。

D.2 依存関係の関連サブグラフの作成に関する詳細

フォームをロードするときなど,計算をすべて実行しなければならない場合は,依存関係の関連サブグラフは単に依存関係の有向マスタグラフの複製でしかない。最後の再計算処理以後に変更されたインスタンスデータノードのリストと共に再計算アルゴリズムが呼び出された場合,依存関係の関連サブグラフは,計算に必要な依存関係を表す有向グラフ内で,その変更リスト内の各頂点から到達可能な頂点と辺の経路を探索することで得られる。パス探索の方法は深さ優先探索(depth first search)であってよい。適切な擬似コードを次に示す。

例:依存関係の関連サブグラフを作成するためのサンプルアルゴリズム
このアルゴリズムは変更されたインスタンスデータノードのリストLcから依存関係の関連サブグラフSを作成する。vw などの変数は依存関係の有向マスタグラフ内の頂点を表す。それらの名前に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の大きさに比例させるようにすることができる。

D.3 個々の頂点の計算に関する詳細

頂点の処理ステップを次に示す。この処理の結果,フォームは再計算される。

  1. inDegree属性が0である頂点を評価のために選択し,依存関係の関連サブグラフから削除する。inDegree属性が0である頂点が複数存在する場合の順序については定義されない。依存関係の関連サブグラフに頂点が含まれているが,そのどれもinDegree属性が0でない場合は,フォームの計算構造に循環があるため,例外( 4.5.4 xforms-compute-exceptionイベント )を発行して処理を終了しなければならない。

  2. 頂点が計算される項目に対応している場合,計算される式を次のとおりに評価する。

    1. calculate:このモデル項目特性の値が変わった場合,対応するインスタンスデータを更新し,ダーティフラグを設定する。

    2. relevant, readOnly, required, constraint: これらの計算される特性のいずれか又はすべてが変わった場合,新しい設定を関連するフォーム制御に直ちに反映させる。

  3. 削除された頂点のdepList内の頂点のそれぞれで,inDegree属性の値を一つ減少させる。

  4. 依存関係の関連サブグラフに頂点が残っている場合はステップ1から繰り返す。頂点が残っていない場合は正常に終了したことになる。

D.4 計算処理の例

例として,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を妥当とする。この例の依存有向グラフを次に示す。

Dependency graph

頂点a及びbにはv及びxにつながる辺があるが,これは,これらの頂点が表現するc及びdの計算式が,乗算値及び合計値をそれぞれ求めるためにa及びbを参照するためとする。同様に,v及びxにはそれぞれw及びyにつながる辺があるが,これは,w及びyc及びdconstraint式を表し,境界値と比較するためにc及びdの値を参照するためとする。

a及びbの初期値が10であり,利用者がaを11に変更した場合,最初にvcの値)の再計算を行い,次に,wcの値の妥当性検査特性)を再計算する必要がある。同様に,ydの値の妥当性検査特性)の再計算を行う前に,xdの値)を再計算しなければならない。いずれの場合も,新しい乗算値と合計がaの変更に基づいて計算されるまで,値の妥当性はfalseに変化しない。しかし,vxとの間には相互依存性が存在しないため,乗算値及び合計はいずれを先に計算しても問題はない。

関連サブグラフには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になる。

附属書E 入力モード

inputmode属性は,関連するフォーム制御で期待されるテキスト入力に適切な入力モードを選択するためのヒントを利用者エージェントに提供する。入力モードは,キーボード構成,入力メソッドエディタ(フロントエンドプロセサとも呼ばれる。),又は使用する装置での入力に影響する他のどのような設定であってよい。

inputmodeを使用することによって,文書作成者は利用者のフォーム入力を簡単にするヒントをエージェントに与えることができる。文書作成者は,可能な場合は常にinputmode属性を提供し,使用される値が広範囲な装置に対応することを確実にすることが望ましい。

E.1 inputmode属性の値の構文

inputmode属性の値は,空白によって区切られたトークンのリストとする。トークンは,アルファベットの並び又は絶対URIのいずれかとする。前者及び後者は,絶対URIには':'が含まれることに留意することで区別できる。トークンは大文字及び小文字を区別する。アルファベットだけから成るトークンはすべて, E.3 トークンのリスト (又はこの規定の後継)で定義される。

この規定はトークンとして使用されるものとしてどのようなURIも定義しないが,他が拡張性のためにそのようなURIを定義するのは差し支えない。このことは,ここで提供されるトークンでは対応できない入力モードのデバイスで必要になる可能性がある。URIは,そのURIをトークンとして使用したときに関連付けられる入力モードについての人間が読み取れる説明への参照であることが望ましい。その説明文は,このトークンによって示される入力モードを説明するものであることが望ましく,このトークンが他のトークンを修飾するかどうか,このトークンが他のトークンによって修飾されるかどうか,又はその修飾がどのように行われるかを示すことが望ましい。

E.2 利用者エージェントの振る舞い

利用者エージェントは,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”が同一の入力モードに対応していない場合は何も選択されない,

E.3 トークンのリスト

この規定で定義されているトークンは,用字トークン及び修飾子の二つの範ちゅうに分けられる。inputmode属性内では,用字トークンは常に修飾子の前に示されることが望ましい。

E.3.1 用字トークン

用字トークンは,入力モードの対応対象である文字セットの一般的な表記とする。多くの場合,用字トークンは[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用字名

E.4 XMLスキーマパターンファセットとの関係

利用者エージェントは,入力モードを設定するのにXMLスキーマパターンファセット内の情報を使用してもよい。パターンファセットはインスタンスデータノードの字句値に対する厳しい制限であり,データ項目のさまざまな部分にさまざまな制限を指定できることに注意する。inputmode属性は,利用者がフォーム制御に入力を開始する可能性の高い文字の種類に関する緩やかなヒントとする。inputmode属性は,次の理由によって,パターンファセットに加えて指定される。

  1. パターン内に指定された使用可能な文字セットが非常に広範で,妥当な入力モードセッティングを推定できないことがある。そのような状況でも,ある種類の文字が利用者によって頻繁に入力される可能性が高い場合,inputmodeを使用することで,利用者の便宜のために入力モードを設定することができる。

  2. パターンで許可された文字セットとinputmode属性の値による文字セットとが密接に対応しているために,入力モード設定をパターンから派生させることが可能な場合がある。しかし,そのような派生は利用者エージェント上で多くのデータ及び計算を必要とする。

  3. 小型の装置では,パターンの検査がサーバに残されることもあるが,サポートするこれらの入力モードに容易に切り替えることができる。小型の装置では,利用者のためにデータ入力をより簡単にできることは特に重要である。

附属書F(参考)XForms及びスタイル設定

ここでは,XFormsの内容のスタイル設定を行うのに必要な新規又は現行のCSS機能について広く概要を提供する。これらの機能の仕様は,CSS作業グループからの将来の勧告で完全に明らかにされる。

F.2 擬似要素

擬似要素は文書言語によって指定されているものを超えた文書ツリーに関する抽象化である。擬似要素はDOMに現れない。これらはスタイル設定の目的にだけ使用される。

名前 定義されている場所 XFormsとの関係
::value TBD ラベルを除いたフォーム制御の“活性化されている”領域を表す。これはHTMLのinput又は他のフォーム制御要素に対応するものとする。この擬似要素はフォーム制御要素の子であり,必須のlabel要素の直後に現れる。
::repeat-item TBD 繰り返している並びからの一つの項目を表す。その位置は,一つの繰返し項目内のすべての要素の親としてのものとする。各repeat-itemは特定のインスタンスデータノードに関係付けられていて,関連付けられているスタイル特性が子要素に伝えられると同時に,そのノードに関するモデル項目特性(例えば'relevant')の影響を受ける。
::repeat-index TBD 繰り返している並びの現在の項目を表す。その位置は,インデクス繰返し項目内のすべての要素の親(そして::repeat-item擬似要素の子)としてのものとする。したがって,この擬似要素に適用されるスタイル宣言はすべて親のスタイル宣言を上書きする。

このリストはすべてを網羅するものではなく,他の擬似要素が定義されてもよい。

附属書G(参考)完全なXFormsの例

ここでは完全なXFormsの例を紹介する。これら及びその他の例はhttp://www.w3.org/MarkUp/Forms/2002/Examples/で管理されている。

G.1 XHTMLでのXForms

<!--$Id: #xforms-examples,v 1.240 2003/10/03 14:35:42 tvraman Exp $-->
<html xmlns:my="http://commerce.example.com/payment"
        xmlns:ev="http://www.w3.org/2001/xml-events"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        xmlns:xforms="http://www.w3.org/2002/xforms"
        xmlns="http://www.w3.org/2002/06/xhtml2">
  
<head>
    
<title xml:lang="fr">XForms en XHTML</title>

    
<xforms:model schema="payschema.xsd">
      
<xforms:instance>
        
<my:payment as="credit">
          
<my:cc />
          
<my:exp />
        
</my:payment>
      
</xforms:instance>
      
<xforms:submission action="http://www.example.com/buy.rb" method="post" id="s00" />
      
<xforms:bind nodeset="my:cc" relevant="../@as='credit'" required="true()" />
      
<xforms:bind nodeset="my:exp" relevant="../@as='credit'" required="true()" />
    
</xforms:model>
  
</head>
  
<body>
    ...
    
<group xmlns="http://www.w3.org/2002/xforms">
      
<trigger>
        
<label>Français</label>
        
<toggle case="fr" ev:event="DOMActivate" />
      
</trigger>
      
<trigger>
        
<label>English</label>
        
<toggle case="en" ev:event="DOMActivate" />
      
</trigger>
    
</group>
    
    
<switch xmlns="http://www.w3.org/2002/xforms">
      
<case id="fr">
        
<select1 ref="@as">
          
<label xml:lang="fr">Choisissez un mode de paiement</label>
          
<choices>
            
<item>
              
<label xml:lang="fr">Comptant</label>
              
<value>cash</value>
              
<message level="modeless" ev:event="xforms-select" xml:lang="fr">
                         Ne pas envoyer d'argent comptant par la poste.
</message>
            
</item>
            
<item>
              
<label xml:lang="fr">Carte bancaire</label>
              
<value>credit</value>
            
</item>
          
</choices>
        
</select1>

        
<input ref="my:cc">
          
<label xml:lang="fr">Numéro de carte bancaire</label>
          
<alert xml:lang="fr">Saississez un numéro de carte bancaire en cours
           (séparez par un espace ou un trait d'union chaque groupe de chiffres)
</alert>
        
</input>

        
<input ref="my:exp">
          
<label xml:lang="fr">Date d'échéance</label>
        
</input>

        
<submit submission="s00">
          
<label xml:lang="fr">Achetez</label>
        
</submit>
      
</case>
      
<case id="en">
        
<select1 ref="@as">
          
<label xml:lang="en">Select Payment Method</label>
          
<choices>
            
<item>
              
<label xml:lang="en">Cash</label>
              
<value>cash</value>
              
<message level="modeless" ev:event="xforms-select" xml:lang="en">
              Please do not mail cash.
</message>
            
</item>
            
<item>
              
<label xml:lang="en">Credit</label>
              
<value>credit</value>
            
</item>
          
</choices>
        
</select1>

        
<input ref="my:cc">
          
<label xml:lang="en">Credit Card Number</label>
          
<alert xml:lang="en">Please specify a valid credit card number
            (use spaces or hyphens between digit groups)
</alert>
        
</input>

        
<input ref="my:exp">
          
<label xml:lang="en">Expiration Date</label>
        
</input>

        
<submit submission="s00">
          
<label xml:lang="en">Buy</label>
        
</submit>
      
</case>
    
</switch>
    ...
  
</body>
</html>

スキーマファイル payschema.xsd:

<!-- payschema.xsd -->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
         xmlns:my="http://commerce.example.com/payment"
         targetNamespace="http://commerce.example.com/payment"
         elementFormDefault="qualified">

  
<xsd:element name="payment">
    
<xsd:complexType >
      
<xsd:sequence minOccurs="0" maxOccurs="unbounded">
        
<xsd:choice>    
          
<xsd:element ref="my:cc" />
          
<xsd:element ref="my:exp" />
        
</xsd:choice>
      
</xsd:sequence>
      
<xsd:attribute name="as" type="my:paymentAs" />
    
</xsd:complexType>
  
</xsd:element>
  
<xsd:element name="cc" type="my:cc" />
  
<xsd:element name="exp" type="xsd:gYearMonth" />

  
<xsd:simpleType name="cc">
    
<xsd:restriction base="xsd:string">
      
<xsd:minLength value="12"/>
      
<xsd:maxLength value="19"/>
      
<xsd:pattern value="[0-9]+"/>
    
</xsd:restriction>
  
</xsd:simpleType>

  
<xsd:simpleType name="paymentAs">
    
<xsd:restriction base="xsd:string">
      
<xsd:enumeration value="cash" />
      
<xsd:enumeration value="credit" />
    
</xsd:restriction>
  
</xsd:simpleType>
</xsd:schema>

G.2 XFormsを使用した階層型ブックマークの編集

<html xmlns:ev="http://www.w3.org/2001/xml-events"
         xmlns:my="http://commerce.example.com/payment"
         xmlns:xsd="http://www.w3.org/2001/XMLSchema"
         xmlns:xforms="http://www.w3.org/2002/xforms"
         xmlns="http://www.w3.org/2002/06/xhtml2"
         xml:lang="en">
  
<head>
    
<style type="text/css">
      xforms|input.editField {
       font-weight:bold; font-size:20px; width:500px
      }
      xforms|label.sectionLabel {
        font-weight:bold; color:white; background-color:blue
      }
      xforms|submit {
        font-family: Arial; font-size: 20px; font-style: bold; color: red
      }
    
</style>
    
<title>Editing Hierarchical Bookmarks In X-Smiles </title>
    
<xforms:model id="bookmarks">
      
<xforms:instance src="bookmarks.xml" />
      
<xforms:submission id="s01" method="post" action="http://examples.com/" />
    
</xforms:model>
  
</head>
  
<body>
    
<xforms:repeat nodeset="section" id="repeatSections">
      
<xforms:input ref="@name" class="editField">
        
<xforms:label class="sectionLabel">Section</xforms:label>
      
</xforms:input>
<!-- BOOKMARK REPEAT START -->
      
<xforms:repeat nodeset="bookmark" id="repeatBookmarks">
        
<xforms:input ref="@name">
          
<xforms:label>Bookmark name</xforms:label>
        
</xforms:input>
        
<xforms:input ref="@href">
          
<xforms:label>URL</xforms:label>
        
</xforms:input>
      
</xforms:repeat>
    
</xforms:repeat>
    
<p>
<!-- INSERT BOOKMARK BUTTON -->
      
<xforms:trigger id="insertbutton">
        
<xforms:label>Insert bookmark</xforms:label>
        
<xforms:insert nodeset="section[index('repeatSections')]/bookmark"
            at="index('repeatBookmarks')" position="after" ev:event="DOMActivate" />
      
</xforms:trigger>
<!-- DELETE BOOKMARK BUTTON -->
      
<xforms:trigger id="delete">
        
<xforms:label>Delete bookmark</xforms:label>
        
<xforms:delete nodeset="section[index('repeatSections')]/bookmark"
             at="index('repeatBookmarks')" ev:event="DOMActivate" />
      
</xforms:trigger>
    
</p>
    
<p>
<!-- INSERT SECTION BUTTON -->
      
<xforms:trigger id="insertsectionbutton">
        
<xforms:label>Insert section</xforms:label>
        
<xforms:insert nodeset="section" at="index('repeatSections')"
            position="after" ev:event="DOMActivate" />
      
</xforms:trigger>
<!-- DELETE SECTION BUTTON -->
      
<xforms:trigger id="deletesectionbutton">
        
<xforms:label>Delete section</xforms:label>
        
<xforms:delete nodeset="section" at="index('repeatSections')"
            ev:event="DOMActivate" />
      
</xforms:trigger>
    
</p>
<!-- SUBMIT BUTTON -->
    
<xforms:submit submission="s01">
      
<xforms:label>Save</xforms:label>
      
<xforms:hint>Click to submit</xforms:hint>
    
</xforms:submit>
  
</body>
</html>

初期インスタンスファイル bookmarks.xml:

<!--This is the bookmarks.xml file -->
<bookmarks>
  
<section name="main">
    
<bookmark href="http://www.example.com/xforms.xml" name="Main page" />
  
</section>
  
<section name="demos">
    
<bookmark href="http://www.example.com/demo/images.fo" name="images" />
    
<bookmark href="http://www.example.com/demo/xf-ecma.xml" name="ecma" />
    
<bookmark href="http://www.example.com/demo/sip.fo" name="sip" />
  
</section>
  
<section name="XForms">
    
<bookmark href="file:///C/source/xmlevents.xml" name="XML events" />
    
<bookmark href="file:///C/source/model3.xml" name="model3" />
    
<bookmark href="file:///C/source/repeat.fo" name="repeat" />
  
</section>
</bookmarks>

G.3 XForms及びSVGを使用した調査

次の例は,[SVG 1.1]とXFormsとの統合について一つの可能な例を示している。 XFormsとSVGとの統合についての完全なルールは,この規定が公開された時点では十分に明確にされていない事に注目する。 XForms規定,SVG規定又はその他のW3C規定の今後の版でXFormsとSVGとの統合についてのより完全なルールが定義される可能性があるが,それは次の例と互換性がないことも考えられる。

次の例では,一般的にforeignObjectと共に使用される,SVGのswitch及びrequiredExtensions機能が使用されていないことに注意する。

<!-- <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" 
     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 
-->
<svg xmlns:s="http://example.com/survey"
            xmlns:ev="http://www.w3.org/2001/xml-events"
            xmlns:xforms="http://www.w3.org/2002/xforms"
            xmlns:xlink="http://www.w3.org/1999/xlink"
            xmlns="http://www.w3.org/2000/svg"
            width="700px" height="600px" viewBox="0 0 700 600">
  
<defs>
    
<polygon id="bullet" points="-30,-30, -10,-10, -20,10" fill="#007138" />
    
<xforms:model id="form1" schema="surveyschema.xsd">
      
<xforms:instance id="instance1">
        
<s:survey xmlns="http://example.com/survey">
          
<s:drink>none</s:drink>
          
<s:espressoPrefs>
            
<s:numberPerWeek>0</s:numberPerWeek>
            
<s:sugar>0</s:sugar>
            
<s:lemon>Always</s:lemon>
          
</s:espressoPrefs>
        
</s:survey>
      
</xforms:instance>
      
<xforms:submission id="submit1" method="post"
            action="http://www.example.org/surveyhandler" />
    
</xforms:model>
  
</defs>
  
<title>Espresso survey</title>
  
<desc>Sample SVG and XForms - espresso customer survey</desc>
  
<g>
    
<text x="50" y="70" font-size="40"
          font-family="Arial Black, sans-serif"
          font-weight="900">Customer Survey: Espresso</text>
    
<g font-family="Arial, Helvetica, sans-serif" font-size="18">
      
<foreignObject x="80" y="150" width="250" height="40">
        
<xforms:select1 appearance="minimal" model="form1" ref="s:drink">
          
<xforms:label>
            
<g transform="translate(80, 140)">
              
<use xlink:href="#bullet" />
              
<text>Your usual coffee drink is:</text>
            
</g>
          
</xforms:label>
          
<xforms:item>
            
<xforms:label>Rich, dark espresso</xforms:label>
            
<xforms:value>espresso</xforms:value>
          
</xforms:item>
          
<xforms:item>
            
<xforms:label>Creamy cappuccino</xforms:label>
            
<xforms:value>cappuccino</xforms:value>
          
</xforms:item>
          
<xforms:item>
            
<xforms:label>Long, milky latt�</xforms:label>
            
<xforms:value>latt�</xforms:value>
          
</xforms:item>
          
<xforms:item>
            
<xforms:label>Don't like coffee!</xforms:label>
            
<xforms:value>none</xforms:value>
          
</xforms:item>
        
</xforms:select1>
      
</foreignObject>
      
<foreignObject x="80" y="240" width="250" height="40">
        
<xforms:range model="form1" start="0" end="30"
            step="5" ref="s:espressoPrefs/s:numberPerWeek">
          
<xforms:label>
            
<g transform="translate(80, 230)">
              
<use xlink:href="#bullet" />
              
<text>Shots of espresso per week:</text>
            
</g>
          
</xforms:label>
        
</xforms:range>
      
</foreignObject>
      
<foreignObject x="80" y="350" width="250" height="40">
        
<xforms:select model="form1" ref="s:espressoPrefs/s:sugar">
          
<xforms:label>
            
<g transform="translate(80, 340)">
              
<use xlink:href="#bullet" />
              
<text>Sugar?</text>
            
</g>
          
</xforms:label>
          
<xforms:item>
            
<xforms:label>Yes</xforms:label>
            
<xforms:value>X</xforms:value>
          
</xforms:item>
        
</xforms:select>
      
</foreignObject>
      
<foreignObject x="80" y="420" width="250" height="90">
        
<xforms:select1 appearance="full" model="form1"
            ref="s:espressoPrefs/s:lemon">
          
<xforms:label>
            
<g transform="translate(80, 410)">
              
<use xlink:href="#bullet" />
              
<text>Lemon?</text>
            
</g>
          
</xforms:label>
          
<xforms:item>
            
<xforms:label>Required for the full experience</xforms:label>
            
<xforms:value>Always</xforms:value>
          
</xforms:item>
          
<xforms:item>
            
<xforms:label>Whatever</xforms:label>
            
<xforms:value>Indifferent</xforms:value>
          
</xforms:item>
          
<xforms:item>
            
<xforms:label>Keep that citrus to yourself</xforms:label>
            
<xforms:value>Never</xforms:value>
          
</xforms:item>
        
</xforms:select1>
      
</foreignObject>
    
</g>
    
<use xlink:href="#bullet" x="101" y="64" transform="scale(7,3)" />
    
<foreignObject y="150" x="500" height="60" width="100">
      
<xforms:submit model="form1">
        
<xforms:label>Send survey</xforms:label>
      
</xforms:submit>
    
</foreignObject>
    
<!--- keep the graphics data out of this example listing -->
    
<image xlink:href="espresso.svg" x="400"
             y="230" width="280" height="270" />
  
</g>
</svg>

附属書I(参考)貢献者

この文書は現在のXForms 作業グループ関係者の参加によって作成された。

  • Steven Pemberton, W3C/CWI (Co-chair)
  • Sebastian Schnitzenbaumer, SAP/Mozquito (Co-chair)
  • Rob McDougall, Adobe
  • Micah Dubinko, Cardiff (Editor)
  • Mikko Honkala, Helsinki University Of Technology
  • Roland Merrick, IBM (Editor)
  • T. V. Raman, IBM (Editor)
  • David Landwehr, Novell
  • Kenneth Sklander, Novell
  • John Boyer, PureEdge Solutions Inc.
  • Thierry Michel, W3C (W3C Team Contact)
  • Leigh Klotz, Xerox (Editor)
  • Mark Birbeck, x-port.net Ltd. (Invited Expert)
  • Subramanian Peruvemba, Oracle Corp.
  • Mark Seaborne, Origo Services Limited
  • Daniel Vogelheim, Sun Microsystems

以前の作業グループ関係者。

  • Peter Stark, Ericsson
  • Vincent Godefroy, EDF R&D
  • Davanum Srinivas, Computer Associates
  • Doug Dominiak, Openwave
  • Frank Boumphrey, HTML Writer's Guild
  • Linda Bucsay Welsh, Intel
  • Gavin McKenzie, JetForm Corporation
  • John McCarthy, Lawrence Berkeley National Laboratory
  • Frank Olken, Lawrence Berkeley National Laboratory
  • Ray Waldin, Lexica, LLC
  • Tantek Çelik, Microsoft
  • Josef Dietl, Mozquito Technologies
  • Dave Hyatt, Netscape/AOL
  • Eric Pollmann, Netscape/AOL
  • Kazunari Kubota, NTT DoCoMo, Inc.
  • Kaori Nakai, NTT DoCoMo, Inc.
  • Tom Butcher, OpenDesign
  • Ted Wugofski, Openwave
  • Jeremy Chone, Oracle
  • K. P. Lee, Philips
  • Panagiotis Reveliotis, Philips
  • Roli Wendorf, Philips
  • David Cleary, Progress Software
  • Mike Mansell, PureEdge Solutions Inc
  • Michael Fergusson, SoftQuad
  • Zoe Lacroix, SurroMed, Inc.
  • Dave Navarro, WebGeek Inc.
  • Masayasu Ishikawa, W3C (Team Contact until September 2001)
  • Dave Raggett, W3C/Openwave (Team Contact until December 2000)
  • Larry Masinter, Xerox

XForms作業グループは作業において,外部専門家の参加から恩恵を受けた。

  • Tom Schnetlage, University of Berkeley
  • Dan Gillman, Federal Bureau of Labor Statistics
  • Eliot Christian, U.S. Geological Survey
備考:
編集者謝辞:この文書の以前のバージョンは,Dave Raggett(2000年12月まで), Linda Bucsay Welsh(2001年4月まで)及びJosef Dietl(2001年10月まで)の支援の下に編集された。Martin Dürstは入力モードに関して編集を行った。
備考:
追加謝辞:編集者一同は,結合に関する初期の議論への建設的な批評及びそれらの現在の内容への貢献について,Kai Scheppe,Malte Wedel及びGötz Bock に感謝する。私たちは,XFormsイベント及びアクションハンドラのプロセスモデル,並びに再計算順序アルゴリズムの記述に関して,John Boyerに感謝する。最後に,私たちは,規定のドラフト版の注意深い査読,並びに建設的な提案及び批評を行ってくれたwww-forms@w3.org公開メーリングリストのメンバに感謝する。
備考:
追加謝辞:作業グループは,XFormsで使用するXMLスキーマサブセットの識別に関する貢献について,XMLスキーマとXFormsの連携作業委員会のメンバ,Daniel Austin(委員長),David Cleary,Micah Dubinko,Martin Dürst,David Ezell,Leigh Klotz,Noah Mendelsohn,Roland Merrick及びPeter Starkに感謝する。

附属書J(参考)原規定の作成メモ

この文書は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サーバを利用した。