目次 | 前へ | 次へ | 下へ |
小目次 |
---|
6 モデル項目特性 6.1 モデル項目特性定義 6.1.1 type特性 6.1.2 readonly特性 6.1.3 required特性 6.1.4 relevant特性 6.1.5 calculate特性 6.1.6 constraint特性 6.1.7 p3ptype特性 6.2 スキーマ制約 6.2.1 小さなデータ型 |
この章では、bind
要素を使って、インスタンスデータのノードに束縛することができる、情報集合の寄与を定義する(3.3.4 bind要素参照)。インスタンスデータのノードへのこれらの寄与の組み合わせは、 モデル項目と呼ばれる。これらの寄与をひっくるめてモデル項目特性と呼び、次に続く項で定義する。一方、 スキーマ制約という用語は、与えられたデータ型のファセットによるXMLスキーマの制約のみを指す。
モデル項目特性は、様々な軸に沿って区別される。
計算表現と固定特性:
固定特性はXForms処理系が一度だけ評価する静的な値である。そのような特性はリテラルから成り、XPathの評価に従う。
計算表現は、XForms処理系に値を提供するXPath表現である。この値は、XForms処理モデルで指定されるように、特定の時に再計算される(4 処理モデル参照)。これらの表現は、様々なデータ項目の依存関係といった、動的な特性を、しばしば制約を、符号化したものである。計算表現は、適用されたインスタンスデータノードの値を検査することだけに制限されてはいない。XPath表現により、インスタンスデータを行き来する手段が提供されており、より複雑な計算は、外部スクリプトの呼び出しとして符号化されうる。
継承規則:
いくつかのモデル項目特性は、継承規則を定義する。これにより、、XForms処理系は、1) bind
要素の属性から適用された局所値、及び2) インスタンスデータの祖先ノードで評価された値と、評価された局所値の組み合わせで決定される, 継承値という2つの別々の値の経過を記録する必要がある。
注:
D 再計算列アルゴリズムで定義される再計算アルゴリズムの例は、モデル項目特性の局所値のみを操作するように定義されている。これは、実装がノードの祖先の組み合わせ値を伝播させていることを仮定している。
局所値の割り当て:
局所値は、XFormsモデルの全bind要素を文書順序で処理することによって割り当てられる。同じノードに二度モデル項目特性を設定しようとすると、エラーとなる。この処理の詳細は4.2.1 xforms-model-constructイベントで与えられている。
次の項では、全モデル項目の一部として利用できるモデル項目特性を列挙している。それぞれに対して、次の説明が提供されている。
説明
計算表現(はい又はいいえ)
正当な値
デフォルトの値
継承規則
説明: データ型と結び付ける。
計算表現: いいえ。
正当な値: データ型の定義を表す任意のxsd:QName
デフォルトの値: xsd:string
.
継承規則: 継承しない。
このモデル項目特性の効果は、インスタンスデータ上にxsi:type
属性を置くことと同じである。しかしながら、xsi:type
と違い、type
は、要素にも属性にも追加することができる。
<instance> <my:person-name> <my:first-name /> <my:last-name xsi:type="my:nonEmptyString" /> </my:person-name> </instance> <bind type="my:nonEmptyString" nodeset="/my:person-name/my:first-name" />
ここでは、XMLスキーマの型を要素に結び付ける2通りの方法を説明している。
説明: 値の変更が制限されているかどうかを表現する。
計算表現: はい。
正当な値: boolean()
でXPathのboolean
と変換可能な任意の表現
デフォルトの値: calculate
特性が指定されていなければfalse()
、指定されていればtrue()
。
継承規則: 祖先のノードのどれかがtrue
と評価されれば、true
として扱われる。そうでなければ、局所値が使われる。
注:
これは、局所及び全ての祖先ノード上で評価されたreadonly
特性の論理ORを取ることと等価である。
true
と評価されれば、このモデル項目特性は、XForms処理系に対して、束縛されたインスタンスデータのノードを変更することを許容すべきでないということを指示する。
値の変更を制限するのに加えて、readonly
モデル項目特性は、XForms利用者インタフェースに対して、ヒントを提供する。readonly
モデル項目特性を使ってインスタンスデータに束縛されたフォームコントロールは、入力や値の変更が許容されていないことを表示すべきである。この仕様書は、視覚、フォーカス、ナビゲーション順序についていかなる効果も定義しない。
<instance> <my:person-name> <my:first-name>Roland</my:first-name> <my:last-name/> </my:person-name> </instance> <bind nodeset="/my:person-name/my:first-name" readonly="true()"/>
ここでは、要素にreadonly
特性を結び付けている。
説明: 投稿される際に値が必須かどうかを表現する。
計算表現: はい。
正当な値: boolean()
でXPathのboolean
と変換可能な任意の表現
デフォルトの値: false()
.
継承規則: 継承しない。
フォームは、特定の値を必須とすることがあり、この必須条件は動的であってもよい。true
と評価されれば、このモデル項目特性は、空でないインスタンスデータノードが、インスタンスデータの投稿がなされる際に必須であることを指示する。空でないとは、次のように定義されている。
もし束縛されたインスタンスデータのノードが要素であれば、要素はxsi:nil
属性がtrue
に設定されていなければならない。
束縛されたインスタンスデータのノードの値が、1以上の長さのXPath string
に変換可能でなければならない。
下に言及されているようなものを除き、required
モデル項目特性は、視覚、フォーカス、ナビゲーション順序に関して、XForms利用者インタフェースにヒントを提供しない。XFormsの制作者は、required
のデータを受け取るフォームコントロールが間違いなく明白となるようにすることを強く推奨される。XForms処理系は、フォームコントロールが必須である指示を提供してもよいし、ナビゲーションの制限を含め、即時フィードバックを提供してもよい。4 処理モデルの章が、XForms処理系が必須の値をどのように強制するかについての詳細を含んでいる。
<instance> <my:person-name> <my:first-name>Roland</my:first-name> <my:last-name /> </my:person-name> </instance> <bind nodeset="/my:person-name/my:last-name" required="true()"/>
ここでは、値が与えられる必要があることを指示するために、my:last-name
要素にrequired
特性を結び付けている。
注:
XMLスキーマは、use
="required|optional|prohibited"
という似た名前の概念を持っている。これは、1) use
は属性にのみ適用されるが、XFormsのrequired
が任意のノードに適用される、2) use
は、属性全体を指定する必要があるかどうかに関係していた(値は関係なかった)が、required
は、投稿の際に、値がノードに必須かどうかを決定するという二つの点で、XFormsモデルと異なっている。
説明: モデル項目が現在関係しているかどうかを指示する。false
と評価されるこの特性を持つインスタンスデータのノードは、投稿の際に直列化されない。
計算表現: はい。
正当な値: boolean()
でXPathのboolean
と変換可能な任意の表現
デフォルトの値: true()
.
継承規則: 祖先のノードのどれかがXPathのfalse
と評価されれば、false
として扱われる。そうでなければ、局所値が使われる。
注:
これは、局所及び全ての祖先ノード上で評価されたreadonly
特性の論理ORを取ることと等価である。
多くのフォームには、他の条件に依存する記入項目がある。例えば、回答者が車を所有しているかどうかフォームで尋ねたとしよう。自分の車についての情報をさらに尋ねるのが適切になるのは、所有していると指し示した場合のみである。
relevant
モデル項目特性は、視覚、フォーカス、ナビゲーション順序に関して、XForms利用者インタフェースにヒントを提供する。概して、true
の場合、結び付けられたフォームコントロールは目に見えるべきである。false
の場合、結び付けられたフォームコントロール(及び全ての子供)と、groups及びwitch要素(内容を含む)は、利用できなくなるべきであり、ナビゲーション順序から削除されるべきであり、フォーカスを許可されないべきである。
注:
フォームコントロール、group又はswitchは、インスタンスノードと結び付けるのに、単一のノードの束縛として表現されなければならない。
<instance> <my:order> <my:item> <my:amount /> <my:discount>100</my:discount> </my:item> </my:order> </instance> <bind nodeset="my:item/my:discount" readonly="true()" relevant="../my:amount > 1000"/>
ここでは、注文数が1000より大きいときに割引が関係するように、my:discount
要素にrelevant
特性を結び付けている。
次の表は、利用者インタフェースへのrequired
とrelevant
との相互作用を示す。
required="true()" |
required="false()" |
|
relevant="true()" |
フォームコントロール(及び全ての子供)は、利用者にとって、見え、利用可能なものでなければならない。XForms利用者インタフェースは、値が必須であることを指示してもよい。 | フォームコントロール(及び全ての子供)は、利用者にとって、見え、利用可能なものでなければならない。XForms利用者インタフェースは、値がオプションであることを指示してもよい。 |
relevant="false()" |
フォームコントロール(及び全ての子供)は、利用者にとって、隠され、利用不可能なものでなければならない。XForms利用者インタフェースは、フォームコントロールが関係するようになれば、値が必須となることを指示してもよい。 | フォームコントロール(及び全ての子供)は、利用者にとって、隠され、利用不可能なものでなければならない。値を入力したり、フォーカスを得たりすることは許容されない。 |
説明: 結び付けられたインスタンスデータのノードの値を計算するのに使われる表現を与える。
計算表現: はい。
正当な値: 任意のXPath表現。
デフォルトの値: なし。
継承規則: 継承しない。
XFormsモデルは、他の値で計算されたモデル項目を含んでもよい。例えば、単位料金の数量倍としての行項目の和や、注文に応じて払うべき税金の額である。そのような計算値は、他のモデル項目の値を用いた計算表現で表現される。4 処理モデルの章は、計算がいつどのように実行されるかについての詳細を含む。
<instance> <my:order> <my:item> <my:amount /> <my:discount /> </my:item> </my:order> </instance> <bind nodeset="my:item/my:discount" calculate="../my:amount * 0.1" relevant="../my:amount > 1000"/>
ここでは、10% の割引が注文数が1000より大きいときに関係するということを指示するように、my:discount
要素にrelevant
特性を結び付けている。
説明: 結び付けられたインスタンスデータのノードを妥当と考えるために、充足する必要がある述語を指定する。
計算表現: はい。
正当な値: boolean()
でXPathのboolean
と変換可能な任意の表現
デフォルトの値: true()
.
継承規則: 継承しない。
XPath false
と評価されると、結び付けられたモデル項目は妥当ではない。逆は必ずしも真ではない。4 処理モデルの章は、いつどのように制約が計算されるか、及びいつ検証が実行されるかについての詳細を含む 。
<instance> <my:range> <my:from /> <my:to /> </my:range> </instance> <bind nodeset="my:to" constraint=". > ../my:from" />
ここでは、my:to
要素に結び付けられたconstraint
特性が、値がmy:from
要素のそれより大きくなければならないことを指示する。
注:
インスタンスデータ内の最小及び最大の存在数を指定するには、constraint
特性内でcount()
関数を使えばよい。
説明: そこで収集されるデータの具体的な種類を指示する、P3Pデータ要素をインスタンスデータのノードに加える。
計算表現: いいえ。
正当な値: xsd:string
.
デフォルトの値: なし
継承規則: 継承しない。
このモデル項目特性は、P3Pのデータ型システム[P3P 1.0]に基づいて、結び付けられたインスタンスデータのノードで収集されるデータの種類についての説明を持つ。
<instance> <my:person-name> <my:first-name /> <my:last-name /> </my:person-name> </instance> <bind type="my:nonEmptyString" nodeset="my:first-name" p3ptype="user.name.given"/>
ここでは、bind
要素によってfirst-name
要素にXMLスキーマ及びP3Pの型情報の両方を加えている。
5 データ型の章では、XFormsモデルによって収集されるデータ値の値空間を制約するXMLスキーマのデータ型を使う方法を説明した。このデータ型制約は、XMLスキーマで提供できる。代わって、この項では、インスタンスデータに加える型制約に対して様々な仕組みを列挙する。xsi:schemaLocation
及びxsi:noNamespaceSchemaLocation
属性は、スキーマの場所を決める目的では無視される。
XForms処理モデルは、検証処理の一部として、XMLスキーマのファセットを適用する。もっとも単純な水準では、ファセットの集合(XMLスキーマのデータ型による)をモデル項目と結び付けることが必要となる。これは、データ型の字句空間の妥当な表現に結び付けられた、インスタンスデータのノードの許容できる値を制限する効果を持つ。
モデル項目と結び付けられたファセットの集合は、与えられた順序で処理されるように、次のリストによって決定されなければならない。複数のデータ型制約が同じモデル項目に適用されると、全ての与えられた制限の組み合わせが適用されなければならない。満たすことのできない制約の組み合わせが生成されることがありうることに注意すること。制作者はこの実行を避けることを推奨される。
インスタンスデータに結び付けられたXMLスキーマ。
インスタンスデータ内のXMLスキーマxsi:type
属性。
XFormsの束縛を用いてインスタンスデータのノードに結び付けられたXForms type
制約。
もし型制約が何も提供されなければ、インスタンスデータのノードは、type="xsd:string"
をデフォルトにする(文字列規則をデフォルトにする)。
次に続くのは、追加の制約ファセットを用いて、xsd:string
に基礎付けられたデータ型を宣言している。
<xsd:simpleType name="nonEmptyString"> <xsd:restriction base="xsd:string"> <xsd:minLength value="1"/> </xsd:restriction> </xsd:simpleType>
この新しいデータ型は、ここで概要を述べた手法の一つによって、一つ以上のモデル項目と結び付けられる。
<my:first-name xsi:type="my:nonEmptyString"/>
これは、my:nonEmptyString
型であるべきfirst-name
要素を定義する。
<instance> <my:first-name /> </instance> <bind type="my:nonEmptyString" nodeset="/my:first-name"/>
ここでは、bind
要素でfirst-name
要素に型情報を加えている。このように、XFormsの制作者は、変更することができなくても、外部スキーマを拡張することができる。
目次 | 上へ |