この章は規範的である。
この章は、全てのXForms処理系がサポートするデータ型のコアセットから始まる。 XFormsモデルの章では、XFormsモデルを表現できる複数の方法を説明している。 この章に関して、最も重要な区別は"simpleシンタックス" (XFormsで定義される)と"スキーマシンタックス" ([XSchema-1]および[XSchema-2]で定義される)である。
XFormsの全てのデータ型は、XML Schema [XSchema-2]のデータ型を再利用ないし拡張するものであり、これは全ての制約ファセットを含む。 これらは前もって定義されており、変更できないものであるため、静的なファセットと呼ばれている。 多くの場合、XFormsでは、XFormsネームスペースの中で、意味的に等しいものと類似名の(like-namedな)ファセットを定義するが、ファセットを定義するためにXForms動的制約(第6章)を用いることもできる。 このことは、XFormsファセットは動的であり得るもので、実行時に評価される制約が自由に変化することを許容している、ということである。
XFormsモデルはこれらのデータ型を用いて、どのように送信される値をインスタンスデータに結びつけるかを定義する。たとえば、あなたがインスタンスデータ中のエレメントに、時間的に「開始日」以前になければならない値をもつ「終了日」を定義する方法はこうなる:
<date name="leavingDate" min="startingDate" /> <date name="startingDate" max="leavingDate" />
ここでは、これらの制約は全体的に動的であり、実際、相互に依存している。
XFormsの動的制約はXML Schemaで規定された静的制約を変更することはできないということに特に注意。
XForms検証ルール: XForms ファセットとスキーマファセットが潜在的に競合する値をもつ場合は常に、値空間を最小限のサブセットに制限する方が用いられる。
たとえば、これはスキーマの静的制約と競合するXForms ファセットの例である:
競合ファセットの例:
<xsd:complexType name="myNumber"> <xsd:restriction base="xform:number"> <xsd:maxInclusive value="20"/> <xform:maxInclusive value="100"/> </xsd:restriction> </xsd:complexType>この例は、XForms maxInclusive
ファセットと並行するスキーマのmaxInclusive
ファセットを表している。この場合、このXForms ファセットは何の効果もない。より制限的な制約であるvalue="20"
が用いられるためである。
XML Schemaと同様、XFormsデータ型はレキシカルスペースの表現を持つ値空間に基づいている。定義されているデータ型にはそれぞれ、以下が規定される:
xform:number
としては有効であるが、前者のみが厳格な表現として認められる。XFormsデータ型string
はXML Schema [XSchema-2] データ型string
から派生している。
レキシカル表現: Schemaにあるとおり
厳格な表現: Schemaにあるとおり
例: 値"hello" は次のように表現される:
定義されているXFormsファセット:
XForms string
データ型は、そのXMLスキーマベースのデータ型の次の静的ファセットを継承する:
length, minLength, maxLength, pattern,
enumeration, whiteSpace
XFormsデータ型boolean
はXML Schema [XSchema-2] データ型boolean
から派生している。
レキシカル表現: Schemaにあるとおり
厳格な表現: Schemaにあるとおり
例: 真の値は次のように表現される:
定義されているXFormsファセット: 追加のファセットはない。
XForms Boolean
データ型は、そのXMLスキーマベースのデータ型の次の静的ファセットを継承する:
pattern, whiteSpace
XFormsデータ型number
はXML Schema [XSchema-2] データ型decimal
から派生している。
レキシカル表現: Schemaにあるとおり
厳格な表現: Schemaにあるとおり
例: 値 -42 は次のように表現される:
定義されているXFormsファセット:
XForms number
データ型は、そのXMLスキーマベースのデータ型の次の静的ファセットを継承する:
precision, scale, pattern, whiteSpace, enumeration, maxInclusive, maxExclusive, minInclusive, minExclusive
数値計算は、リソース制約がそれを排除している場合を除いて、内部の値空間の値によって(レキシカルスペースの値によってではない)、小数演算を用いて実現されるべきである。
XFormsデータ型currency
はXFormsデータ型string
から派生している。
レキシカル表現: [ISO 4217]で定義されている通りの、3文字のリストからなる通貨コード。 これは開かれたリストとして考えられている--そこで定義されていない追加の通貨コードも許容できる。
厳格な表現: 先頭あるいは末尾の空白は許されていない。
例: 値「USドル」は次のように表現される:
定義されているXFormsファセット: XForms currency
データ型は次のXFormsデータ型の全てのファセットを継承する:
[編集者のフィードバックリクエスト 4.6.money: 金額のデータ型は本質的にはxform:number
プラスxform:currency
指示子からなる。XFormsワーキンググループでは金銭データ型が原始データ型となるべきか、それともこのスペシャルケースについては新しい複合型のメカニズムが必要となるかについてのコンセンサスが成立していない。ここではどちらの選択肢も規定する。どちらの選択肢がベターであるか、フィードバックがあると嬉しい。]
XFormsデータ型money
はXFormsデータ型number
から派生している。
レキシカル表現: currencyはxform:currency
文字列をxform:number
文字列の終端に、間に空白を含まずに結合して表される。
厳格な表現: xform:number
とxform:currency
の両方の部分は、それぞれが厳格な表現になっていなければならない。
例: 値4.37ユーロは次のように表される:
定義されているXFormsファセット:
XFormsデータ型money
は2つの部分、通貨識別子と値からなる。currency
データ型はXFormsデータ型currency
から派生している。value
サブタイプはXFormsデータ型number
から派生している。
レキシカル表現: 複合データ型として、単体の値空間はないし、従って単体のレキシカルスペースもない。以下の例を参照。
厳格な表現: 以下の例を参照。
例: 値4.37ユーロは次のように2つ別々のレキシカルな値で表現される:
編注: これは本質的に、分かれているxform:number
とxform:currency
のデータ型のインスタンス定義のショートカットである。
しかし、独立して設定可能なファセットはない。
インスタンスデータにマッピングされたとき、もしこのデータ型がエレメントに設定された場合、xform:number
およびxform:currency
の部分はその子エレメントまたは属性として、おそらくXFormsネームスペースで設定できる。
もしこのデータ型が属性として設定された場合、属性には子がないので、両方の部分を表す方法はない。
定義されているXFormsファセット: 選択肢Aと同様
XFormsデータ型date
はXML Schema [XSchema-2]データ型date
から派生している。
レキシカル表現: Schemaにあるとおり
厳格な表現: Schemaにあるとおり
例: 値「2000年1月31日」は次のように表現される:
値「現在から4年(後)」は次のように表現される:
値「現在ただいま」は次の動的制約として表現される:
定義されているXFormsファセット:
XForms date
データ型は、そのXMLスキーマベースのデータ型の次の静的ファセットを継承する:
duration, period, pattern, enumeration, whiteSpace, maxInclusive, maxExclusive, minInclusive, minExclusive
参考までに、特別な動的制約関数として、now()
が定義されている。
これは最小または最大のファセットを規定するために用いることができる。
さらに、送信日付から相対的な時間の値は、正または負の期間を用いて規定できる。
日付および期間のシンタックスはXML Schemaの時間インスタントと期間のために規定された[ISO 8601]のサブセット毎に従う。
XForms処理系が日付と時刻を取得するものを、日付検証と過去から未来までの選択を含めて提供することが推奨される。小さい携帯デバイスは、多くは現在時刻に近いビジネスの予約の範囲の日付のみを検証・取得するのみであろう。一方、履歴情報検索や長期間の金銭債務などのケースでの使用をサポートする、完全な機能のデスクトップブラウザでは、日付の拡張された範囲を提供するべきである。サーバは、常に、クライアントがXFormsモデルで規定する検証を行わなかったと推定して、入力された日付を独自に検証しなければならない。
XFormsデータ型time
はXML Schema [XSchema-2]データ型time
から派生している。
レキシカル表現: Schemaにあるとおり
厳格な表現: Schemaにあるとおり。ローカルタイムゾーンにアクセスしなければならないXForms処理系については、これは厳格な表現で含まれなければならない。
例: 値「EASTERN標準時午後1時20分」(UTCから5時間遅い)は次のように表現される:
定義されているXFormsファセット:
XForms time
データ型は、そのXMLスキーマベースのデータ型の次の静的ファセットを継承する:
duration, period, pattern, enumeration, whiteSpace, maxInclusive, maxExclusive, minInclusive, minExclusive
XFormsデータ型duration
はXML Schema [XSchema-2]データ型timeDuration
から派生している。
レキシカル表現: Schemaにあるとおり
厳格な表現: Schemaにあるとおり
例: 値「1年2ヶ月3日10時間30分」は次のように表現される:
値「マイナス120日」は次のように表現される:
定義されているXFormsファセット:
XForms duration
データ型は、そのXMLスキーマベースのデータ型の次の静的ファセットを継承する:
pattern, enumeration, whiteSpace, maxInclusive, maxExclusive, minInclusive, minExclusive
[編集者のフィードバックリクエスト 4.9.精度: 月単体では近似の期間の指定をあらわす。月によってその長さは変わるからである。同様のことが、年にも言える。これは許されるべきか?]
XFormsデータ型uri
はXML Schema [XSchema-2]データ型uriReference
から派生している。
レキシカル表現: uri
は[RFC 2396]のセクション4で定義されている、一致リソース識別子(URI)参照を表す。uri
は絶対でも相対でも良く、オプションとしてフラグメント識別子を持つこともできる。このデータ型は[RFC 2396]で定義される絶対的な一致リソース識別子(URI)を表す値に用いられる。
厳格な表現: Schemaにあるとおり
編注: 現在のSchemaの公開問題(open issue)として、どのように非ASCIIの値をURI 値空間またはレキシカルスペースで扱うか、というものがある。我々は、どのような結論であっても、XML Schemaワーキンググループの選択に合わせようと考えている。
例: 値'http://www.w3.org/'は次のように表現される:
定義されているXFormsファセット:
XForms uri
データ型は、そのXMLスキーマベースのデータ型の次の静的ファセットを継承する:
length, minLength, maxLength, pattern, enumeration, whiteSpace
uriScheme
ファセットによって、URIをURIスキームの限定セットに制限することができる。たとえば、http
またはmailto
などである。XForms処理系は、アドレスを取得または表示する手段、たとえばEメールアドレスの取得を提供することが望ましい。XForms ユーザーインターフェースはユーザーに相対的なURIを入力させることを可能にするが、内部値は常に絶対的なURIとなる。
XFormsデータ型binary
はXML Schema [XSchema-2]データ型binary
から派生している。
レキシカル表現: Schemaにあるとおり
厳格な表現: Schemaにあるとおり
定義されているXFormsファセット:
XForms binary
データ型は、そのXMLスキーマベースのデータ型の次の静的ファセットを継承する:
encoding, length, minLength, maxLength, pattern, enumeration, whiteSpace
これは特殊なInternetメディアタイプの適切なデータを使用するためのデータ型である。XForms処理系はこのメディアタイプを、どのようにユーザーに伝達するかを決定する際に使用するかもしれない。たとえば画像は、デジタルカメラやイメージスキャナ、ディスク中のファイルから取得しうる。
以下は、simpleシンタックスで、JPEGまたはPNGイメージを受信するモデルアイテムの有効な表現である:
<binary name="photo"> <mediaType>image/jpeg</mediaType> <mediaType>image/png</mediaType> </binary>
バイナリデータはXML インスタンスデータの一部として内部にパッケージすることもできるし、XMLから独立して参照するようにパッケージすることもできる。ここは更に詳細な作業がカバーされる必要がある。
[編集者のフィードバックリクエスト 4.11.バイナリ制限: さらにデータを制限するような、たとえばデータのサイズを制限するようなファセットが必要か? 他の制約も考えられる。たとえば、オーディオクリップの場合、ビットレートと演奏時間を制約したいかもしれない。]
それぞれのXForms ファセットについて、以下が規定される:
利用環境: Simple, Schema.
説明: 利用できる通貨データ型を表す。
有効値: 任意の数の(サブタイプcurrency
の)3文字の通貨コードをもつリスト。たとえばUSD
あるいはGBP
など。
デフォルト値: 制限なし
適用先:
利用環境: Simple, Schema.
説明: このデータ型の値空間を特定の有効値の範囲(list)に限定する。
有効値: 親データ型と互換性のあるデータ型の値をもつリスト
デフォルト値: 制限なし
適用先:
編注: XForms enumeration ファセットの値は、Schema enumeration ファセットが静的列挙を扱うため、ほぼ常に動的制約となる。
利用環境: Simple, Schema.
説明: そのデータ型の値空間を特定の長さをもつ値だけに制限する。文字列ベースあるいはバイナリベースのデータ型では、長さは[XSchema-2]にあるように測定される。
有効値: マイナスでないxform:number
として評価できる任意の式
デフォルト値: 制限なし
適用先:
利用環境: Simpleのみ
説明: そのデータ型の値空間を、指定されたルールのセットに従ったものに限定する。
有効値: 任意の数の有効なマスクシンタックスを表す値をもつリスト
デフォルト値: 制限なし
適用先:
XML Schemaは「Perlプログラミング言語で用いられている正規表現言語に近い」正規表現言語を定義しており、これはほとんどの既定データ型に適用できる。
しかし、正規表現シンタックスはいくらか複雑なものと考えられている。
そこで、XFormsではmask
ファセットの概念を定義している。
全てのmask
ファセットが正規表現に移植できる。
mask
ファセットはsimpleシンタックスでのみ利用できる。XML schemaは複数のpattern
ファセットの指定を可能にしている。同様に、複数のmask
またはpattern
のファセットが、これらを混用する場合を除いて、simpleシンタックスでは許されている。
XForms mask
は[WML1.3] format
におけるシンタックスと処理とを用いる。いくつか例を挙げる:
A
は "A", "X", "$", "%", "."にマッチするa
は "a", "x", "$", "%", "."にマッチするX
は "A", "X", "$", "%",
".", "4"にマッチするx
は "a", "x", "$", "%",
".", "4"にマッチするN
は "0", "4", "7"にマッチする3N
は "0", "63", "999" にマッチするが、"1234" にはマッチしない(注: マスクの最後で許された場合のみ)*X
は "$", "3.0", "ABCDEFG" にマッチする(注: マスクの最後で許された場合のみ)\
は次のリテラル文字をマスク中に追加(insert)するNNN\-NNNN
は"123-4567" にマッチするが、"1234567"にはマッチしないsWML format
処理と同様、XForms処理系は無効なmask
を無視しなければならない
利用環境: Simpleのみ
説明: 数値データ型について、maxExclusive ファセットのショートカットとなる。
有効値: maxExclusiveを参照
デフォルト値: maxExclusiveを参照
適用先:
利用環境: Schemaのみ
説明: その値空間を指定された値未満に限定する。
有効値: 親データ型と互換の値に評価できる任意の式
デフォルト値: 制限なし
適用先:
利用環境: Schemaのみ
説明: その値空間を指定された値以下に限定する。
有効値: 親データ型と互換の値に評価できる任意の式
デフォルト値: 制限なし
適用先:
利用環境: only Schema.
説明: そのデータ型の値空間に最大長を制限する。文字列ベース、バイナリベース、リストベースのデータ型については、長さは[XSchema-2]にある通りに測定される。
有効値: マイナスでないxform:number
として評価できる任意の式
デフォルト値: 制限なし
適用先:
利用環境: Simple, Schema.
説明: そのデータ型の値空間を特定のmimeタイプに制限する。
有効値: 任意の数のmimeタイプをもつリスト
デフォルト値: 制限なし
適用先:
利用環境: Simpleのみ
説明: 数値データ型について、minExclusive ファセットのショートカットとなる。
有効値: minExclusiveを参照
デフォルト値: minExclusiveを参照
適用先:
利用環境: Schemaのみ
説明: その値空間を指定された値より大きい値に限定する。
有効値: 親データ型と互換の値に評価できる任意の式
デフォルト値: 制限なし
適用先:
利用環境: Schemaのみ
説明: その値空間を指定された値以上に限定する。
有効値: 親データ型と互換の値に評価できる任意の式
デフォルト値: 制限なし
適用先:
利用環境: Schemaのみ
説明: そのデータ型の値空間に最低長を制限する。文字列ベース、バイナリベース、リストベースのデータ型については、長さは[XSchema-2]にある通りに測定される。
有効値: マイナスでないxform:number
として評価できる任意の式
デフォルト値: 制限なし
適用先:
利用環境: Simple, Schema.
説明: 数値データ型については、その値空間を、指定されたトータルの桁数が有効(significant)である範囲までに制限する。数値データ型は常にスケールに沿った精度を用い、精度はスケール以上でなければならない。
有効値: 数値データ型に関しては、マイナスでないxform:number
として評価できる任意の式
デフォルト値: 制限なし
適用先:
利用環境: Simpleのみ
説明: dateおよびtimeデータ型については、その値空間を、指定された精度内の有効なデータを含む値に制限する。
有効値: dateおよびtimeデータ型については、 "years", "months", "days", "hours", "minutes", "seconds"として評価できる任意の式。 "years"などの最大精度はtimeデータ型にとって意味がないかもしれず、また"seconds"などの最小精度はdateデータ型にとって意味がないかもしれないということに注意。
デフォルト値: 制限なし
適用先:
利用環境: Simple, Schema.
説明: 数値データ型に関しては、その値空間を、小数点以下の指定桁数までの値に制限する。たとえば、scale="0"
はその値空間を整数に限定する。数値データ型は常にスケールに従った精度を用い、精度はスケール以上でなければならない。
有効値: マイナスでないxform:number
として評価できる任意の式
デフォルト値: 制限なし
適用先:
利用環境: Simple, Schema.
説明: そのデータ型の値空間を、1つ以上の、http
, ftp
, mailto
, news
, ldap
などのURIスキームに従った値のセットに制限する。
有効値: 任意の数のURIスキームを表す文字列をもつリスト
デフォルト値: 制限なし
適用先: