3 文書構造

XForms 1.0は、XML[XML 1.0]アプリケーションであり、他のXML語彙、特にXHTML[XHTML 1.0]の未来の版で使うために設計されている。XFormsは、常にホスト言語を必要とする。この章は、XFormsを他の文書型と使うようにするための、XFormsの構造を議論する。

3.1 XForms名前空間

XForms名前空間は、http://www.w3.org/2002/xformsというURIを持つ。

XForms処理系は、この名前空間から要素及び属性を認識するために、XML名前空間の仕組み[XML Names]を使わなければならない。

3.2 XFormsコア属性集合

3.2.1 共通属性集合

共通属性集合は、XForms名前空間の全ての要素に適用できる。

anyAttribute

無関係な属性は、全てのXForms要素に許容される。

ホスト言語は、それぞれのXForms要素にxsd:ID型の属性を許可しなければならない。

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のうち1つは必須である。bindが用いられると、ノードは参照されたbindによって決定される。

model要素上にないIDを参照するmodel IDREF値、又はbind要素上にないIDを参照するbind IDREF値にXForms処理系が遭遇すると、例外(4.5.1 xforms-binding-exceptionイベント)となる。

初出ノード規則: 単一ノード束縛属性が、1より大きいサイズのノード集合を選択すると、ノード集合の最初のノードが、文書の順序に基づいて、用いられる。

3.2.4 Node集合束縛属性

次の属性は、フォームコントロール又はアクションと、XPath表現で定義されたノード集合との束縛を定義する。

nodeset

XPathとして解釈される束縛表現。この属性は、bind属性が存在する場合は意味を持たない。

model

XFormsモデル選択子。束縛要素と関連付けられるXFormsモデルのIDを指定する。この属性は、bind属性が存在する場合、現在の束縛要素に対して意味を持たない。文脈XFormsモデルの決定規則は、7.4 評価文脈にある。

bind

bind要素への参照。

nodeset又はbindのうち1つは必須である。bindが用いられると、ノード集合は参照されたbindによって決定される。

model要素上にないidを参照するmodel IDREF値、又はbind要素上にないidを参照するbind IDREF値にXForms処理系が遭遇すると、例外(4.5.1 xforms-binding-exceptionイベント)となる。

3.2.5 Model項目特性属性

この集合は、6.1 モデル項目特性定義で定義される、モデル項目特性の名前とちょうど一致する属性名で、それぞれのモデル項目特性に対して一つの属性を含む。

3.3 XFormsコアモジュール

XFormsコアモジュールは、包含文書の中に入ることが意図される、XFormsの主要な構造要素を定義する。このモジュールに含まれる要素を呼び属性を、次に示す。

要素 属性 最小内容モデル
model 共通, イベント, functions (QNameList), schema (list of xsd:anyURI) (instance|xsd:schema| submission|bind|アクション)*
instance 共通, リンク (任意)
submission 共通, ref (binding-expression), 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), instance (xsd:IDREF), separator (';' | '&'), includenamespaceprefixes (xsd:NMTOKENS) アクション*
bind 共通, Model Item Properties, nodeset (model-binding-expression) (bind)*

XFormsアクションモジュールで定義される要素も、モジュールが含まれる場合、上に示されるように、model及びsubmissionの内容モデルで許容される。

包含文書の中で、この構造要素は標準的にはレンダリングされない。

XForms処理系は、認識できない無関係な名前空間の属性を無視しなければならず、3.4 XForms必須理解モジュールの規則に従って認識できない無関係な名前空間の要素を処理しなければならない。

無関係な名前空間の要素の存在は、包含文書プロファイルの定義に従うことに注意すること。

3.3.1 The model要素

この要素は、フォームの定義を表し、XFormsモデルを定義する要素を包含するのに使われる。包含文書内で存在できるmodel要素の数に制限はない。

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

XMLイベントの属性が、この要素に対して、オブザーバを作成するのを容易にするために許容されている。この要素は、XFormsアクションではなく、あらかじめ定義されていないイベントベースの振る舞いを持つ。

特殊属性:

functions

オプションの、XFormsモデルで必要とされる、XPath拡張関数の空白で区切られたリスト(QNamesで表現されている)。この要素の利用の手引きは、7.12 拡張関数にある。

schema

オプションの、このmodel要素の外のXMLスキーマ文書とリンクする、xsd:anyURIのリスト。XForms処理系は、この属性で列挙された全てのスキーマを処理しなければならない。それぞれのXFormsモデルの中では、インラインの、及びリンクされたスキーマを含め、名前空間宣言ごとに一つのスキーマという制限がある。

注:

schemaのリストは、例えば"#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データモデルを作成することによって得られる。instance要素の内容は単一の子要素に制限されることに注意すること。

もし、XMLエラーによりインラインのインスタンスデータの分離された複製の作成に失敗すると、処理はxforms-link-exceptionで停止すべきである。これは、たとえば、インライン内容が二つの要素ノードを持っていると、二つの文書要素のあるXML要素を生成させようとして、起こりうる。

注:

XForms 1.1では、新しい例外ができるだろう。

注:

XPathデータモデルに関係がある全てのデータは、処理命令、コメントノード及び全ての空白を含め、処理や投稿の間、保存されなければならない。

注:

名前空間ノードの直列化に追加の制御が必要なXForms制作者は、submission要素にincludenamespaceprefixes属性を使うことができる。

3.3.3 submission要素

この要素は、何を、どのように投稿するかに関する宣言型の指示を表す。投稿処理の詳細は、11 投稿で説明されている。

共通属性: 共通

特殊属性:

bind

オプションの、bind要素への参照。存在すると、この属性の束縛参照は、ref属性からのいかなる束縛参照よりも優先的に使用される。

ref

オプションの、インスタンスデータの一部の投稿を可能にする選択子の束縛表現。デフォルト値は"/"である。

action

必須の、投稿するインスタンスデータの目標URI。リンクにおける相対URIの振る舞いは、ホスト言語によって決定されるが、[XML Base]処理が強く推奨される。

method

必須の、直列化されるインスタンスデータを伝送するのに使われるプロトコルを指定する属性。デフォルト値はない。

version

オプションの、直列化されるXMLのversionを指定する属性。

indent

オプションの、直列化で可読性のために余分な空白を付加するかどうかを指定する属性。

mediatype

オプションの、XMLインスタンスの直列化のための媒体型を指定する属性。制作者は、指定される型がapplication/xmlと互換性のあることを保証すべきである。

encoding

オプションの、直列化の符号化方式を指定する属性。

omit-xml-declaration

オプションの、直列化されたインスタンスデータのXML宣言を省くかどうかを指定する属性。

standalone

オプションの、直列化されたXMLにおいてスタンドアロン宣言を含むかどうかを指定する属性。

cdata-section-elements

オプションの、CDATAセクションで直列化されるべき要素名を指定する属性。

replace

オプションの、返される情報が投稿後にどのように適用されるべきか指定する属性。この属性がなければ、"all"と見なされる。

instance

オプションの、replace属性値が"instance"である場合に置換するインスタンスを指定する属性。属性がなければ、デフォルトは投稿データを包含しているインスタンスである。この属性が投稿と同じモデルの中でインスタンスを指し示していなければ、xforms-binding-exception(4.5.1 xforms-binding-exceptionイベント)が起こる。

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名前空間が直列化されていることに注意すること。例が、不必要なXForms名前空間を含まないようにし、必要なmy接頭辞を保つためには、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

7.5.2 モデル束縛表現で定義されるように、このbindが作用するノード集合を選択するモデル束縛表現

追加のノードがinsertアクションを通して加えられると、新たに加えられたノードは、束縛表現にマッチするどのノード集合にも含まれる。9.3.5 insert要素insertアクションを参照のこと。

束縛が評価文脈にどう影響するかについての詳細は、7.4 評価文脈を参照。

3.4 XForms必須理解モジュール

extensionホスト言語で定義される無関係の名前空間の要素のような、ある特定の要素が、特定のフォームの操作に重要であることがある。

要素 属性 最小内容モデル
任意 xforms:mustUnderstand (xsd:boolean) n/a

要素がmustUnderstand="true"とマーク付けされ、XForms処理系が要素を処理するのに利用可能な実装を持っていなければ、終了してエラーを利用者に報告しなけれならない。

3.5 XForms拡張モジュール

ホスト言語がXFormsを含むのに、多数の異なる方法がある。一つのアプローチは、妥当性を無視し、整形式の処理だけを用いるものである。別のアプローチは、例えばXHTML 1.0のように、あらかじめ定義された要素だけが許容されるという、厳密な妥当性を用いるものである。また別のよくあるアプローチは、規制されない内容をいくつかの選択された場所で許容するというものである。このオプションを選ぶホスト言語は、拡張モジュールを使うことができる。

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

3.5.1 extension要素

オプションのextension要素は、アプリケーション固有の拡張要素を包含するものである。この仕様書では、この要素の処理は定義しない。

共通属性: 共通

例えば、次のように、RDFメタデータを個々のフォームコントロールに添付できる。

<input ref="dataset/user/email" id="email-input">
  <label>Enter your email address</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>