4.データ型


Contents

この章は規範的である。

4.1 イントロダクション

この章は、全ての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データ型はレキシカルスペースの表現を持つ値空間に基づいている。定義されているデータ型にはそれぞれ、以下が規定される:

4.2 String

XFormsデータ型stringはXML Schema [XSchema-2] データ型stringから派生している。

レキシカル表現: Schemaにあるとおり

厳格な表現: Schemaにあるとおり

例: 値"hello" は次のように表現される:

定義されているXFormsファセット:

XForms stringデータ型は、そのXMLスキーマベースのデータ型の次の静的ファセットを継承する:

length, minLength, maxLength, pattern, enumeration, whiteSpace

4.3 Boolean

XFormsデータ型booleanはXML Schema [XSchema-2] データ型booleanから派生している。

レキシカル表現: Schemaにあるとおり

厳格な表現: Schemaにあるとおり

例: 真の値は次のように表現される:

定義されているXFormsファセット: 追加のファセットはない。

XForms Booleanデータ型は、そのXMLスキーマベースのデータ型の次の静的ファセットを継承する:

pattern, whiteSpace

4.4 Number

XFormsデータ型numberはXML Schema [XSchema-2] データ型decimalから派生している。

レキシカル表現: Schemaにあるとおり

厳格な表現: Schemaにあるとおり

例: 値 -42 は次のように表現される:

定義されているXFormsファセット:

XForms numberデータ型は、そのXMLスキーマベースのデータ型の次の静的ファセットを継承する:

precision, scale, pattern, whiteSpace, enumeration, maxInclusive, maxExclusive, minInclusive, minExclusive

数値計算は、リソース制約がそれを排除している場合を除いて、内部の値空間の値によって(レキシカルスペースの値によってではない)、小数演算を用いて実現されるべきである。

4.5 Currency

XFormsデータ型currencyはXFormsデータ型stringから派生している。

レキシカル表現: [ISO 4217]で定義されている通りの、3文字のリストからなる通貨コード。 これは開かれたリストとして考えられている--そこで定義されていない追加の通貨コードも許容できる。

厳格な表現: 先頭あるいは末尾の空白は許されていない。

例: 値「USドル」は次のように表現される:

定義されているXFormsファセット: XForms currencyデータ型は次のXFormsデータ型の全てのファセットを継承する:

4.6 金額の値

[編集者のフィードバックリクエスト 4.6.money: 金額のデータ型は本質的にはxform:numberプラスxform:currency指示子からなる。XFormsワーキンググループでは金銭データ型が原始データ型となるべきか、それともこのスペシャルケースについては新しい複合型のメカニズムが必要となるかについてのコンセンサスが成立していない。ここではどちらの選択肢も規定する。どちらの選択肢がベターであるか、フィードバックがあると嬉しい。]

選択肢A - 原始データ型

XFormsデータ型moneyはXFormsデータ型numberから派生している。

レキシカル表現: currencyはxform:currency文字列をxform:number文字列の終端に、間に空白を含まずに結合して表される。

厳格な表現: xform:numberxform:currencyの両方の部分は、それぞれが厳格な表現になっていなければならない。

例: 値4.37ユーロは次のように表される:

定義されているXFormsファセット:

選択肢B - 複合データ型

XFormsデータ型moneyは2つの部分、通貨識別子と値からなる。currencyデータ型はXFormsデータ型currencyから派生している。valueサブタイプはXFormsデータ型numberから派生している。

レキシカル表現: 複合データ型として、単体の値空間はないし、従って単体のレキシカルスペースもない。以下の例を参照。

厳格な表現: 以下の例を参照。

例: 値4.37ユーロは次のように2つ別々のレキシカルな値で表現される:

編注: これは本質的に、分かれているxform:numberxform:currencyのデータ型のインスタンス定義のショートカットである。 しかし、独立して設定可能なファセットはない。 インスタンスデータにマッピングされたとき、もしこのデータ型がエレメントに設定された場合、xform:numberおよびxform:currencyの部分はその子エレメントまたは属性として、おそらくXFormsネームスペースで設定できる。 もしこのデータ型が属性として設定された場合、属性には子がないので、両方の部分を表す方法はない。

定義されているXFormsファセット: 選択肢Aと同様

4.7 Date

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モデルで規定する検証を行わなかったと推定して、入力された日付を独自に検証しなければならない。

4.8 Time

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

4.9 Duration

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.精度: 月単体では近似の期間の指定をあらわす。月によってその長さは変わるからである。同様のことが、年にも言える。これは許されるべきか?]

4.10 URI

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となる。

4.11 Binary

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.バイナリ制限: さらにデータを制限するような、たとえばデータのサイズを制限するようなファセットが必要か? 他の制約も考えられる。たとえば、オーディオクリップの場合、ビットレートと演奏時間を制約したいかもしれない。]

4.12 XFormsファセット

それぞれのXForms ファセットについて、以下が規定される:

4.12.1 XFormsファセット: allowCurrency

利用環境: Simple, Schema.

説明: 利用できる通貨データ型を表す。

有効値: 任意の数の(サブタイプcurrencyの)3文字の通貨コードをもつリスト。たとえばUSDあるいはGBPなど。

デフォルト値: 制限なし

適用先:

4.12.2 XFormsファセット: enumeration

利用環境: Simple, Schema.

説明: このデータ型の値空間を特定の有効値の範囲(list)に限定する。

有効値: 親データ型と互換性のあるデータ型の値をもつリスト

デフォルト値: 制限なし

適用先:

編注: XForms enumeration ファセットの値は、Schema enumeration ファセットが静的列挙を扱うため、ほぼ常に動的制約となる。

4.12.3 XFormsファセット: length

利用環境: Simple, Schema.

説明: そのデータ型の値空間を特定の長さをもつ値だけに制限する。文字列ベースあるいはバイナリベースのデータ型では、長さは[XSchema-2]にあるように測定される。

有効値: マイナスでないxform:numberとして評価できる任意の式

デフォルト値: 制限なし

適用先:

4.12.4 XFormsファセット: mask

利用環境: Simpleのみ

説明: そのデータ型の値空間を、指定されたルールのセットに従ったものに限定する。

有効値: 任意の数の有効なマスクシンタックスを表す値をもつリスト

デフォルト値: 制限なし

適用先:

XML Schemaは「Perlプログラミング言語で用いられている正規表現言語に近い」正規表現言語を定義しており、これはほとんどの既定データ型に適用できる。 しかし、正規表現シンタックスはいくらか複雑なものと考えられている。 そこで、XFormsではmask ファセットの概念を定義している。 全てのmask ファセットが正規表現に移植できる。

mask ファセットはsimpleシンタックスでのみ利用できる。XML schemaは複数のpattern ファセットの指定を可能にしている。同様に、複数のmaskまたはpatternファセットが、これらを混用する場合を除いて、simpleシンタックスでは許されている。

XForms mask[WML1.3] formatにおけるシンタックスと処理とを用いる。いくつか例を挙げる:

WML format 処理と同様、XForms処理系は無効なmaskを無視しなければならない

4.12.5 XFormsファセット: max

利用環境: Simpleのみ

説明: 数値データ型について、maxExclusive ファセットのショートカットとなる。

有効値: maxExclusiveを参照

デフォルト値: maxExclusiveを参照

適用先:

4.12.6 XFormsファセット: maxExclusive

利用環境: Schemaのみ

説明: その値空間を指定された値未満に限定する。

有効値: 親データ型と互換の値に評価できる任意の式

デフォルト値: 制限なし

適用先:

4.12.7 XFormsファセット: maxInclusive

利用環境: Schemaのみ

説明: その値空間を指定された値以下に限定する。

有効値: 親データ型と互換の値に評価できる任意の式

デフォルト値: 制限なし

適用先:

4.12.8 XFormsファセット: maxLength

利用環境: only Schema.

説明: そのデータ型の値空間に最大長を制限する。文字列ベース、バイナリベース、リストベースのデータ型については、長さは[XSchema-2]にある通りに測定される。

有効値: マイナスでないxform:numberとして評価できる任意の式

デフォルト値: 制限なし

適用先:

4.12.9 XFormsファセット: mediaType

利用環境: Simple, Schema.

説明: そのデータ型の値空間を特定のmimeタイプに制限する。

有効値: 任意の数のmimeタイプをもつリスト

デフォルト値: 制限なし

適用先:

4.12.10 XFormsファセット: min

利用環境: Simpleのみ

説明: 数値データ型について、minExclusive ファセットのショートカットとなる。

有効値: minExclusiveを参照

デフォルト値: minExclusiveを参照

適用先:

4.12.11 XFormsファセット: minExclusive

利用環境: Schemaのみ

説明: その値空間を指定された値より大きい値に限定する。

有効値: 親データ型と互換の値に評価できる任意の式

デフォルト値: 制限なし

適用先:

4.12.12 XFormsファセット: minInclusive

利用環境: Schemaのみ

説明: その値空間を指定された値以上に限定する。

有効値: 親データ型と互換の値に評価できる任意の式

デフォルト値: 制限なし

適用先:

4.12.13 XFormsファセット: minLength

利用環境: Schemaのみ

説明: そのデータ型の値空間に最低長を制限する。文字列ベース、バイナリベース、リストベースのデータ型については、長さは[XSchema-2]にある通りに測定される。

有効値: マイナスでないxform:numberとして評価できる任意の式

デフォルト値: 制限なし

適用先:

4.12.14 XFormsファセット: precision (数値データ型に適用)

利用環境: Simple, Schema.

説明: 数値データ型については、その値空間を、指定されたトータルの桁数が有効(significant)である範囲までに制限する。数値データ型は常にスケールに沿った精度を用い、精度はスケール以上でなければならない。

有効値: 数値データ型に関しては、マイナスでないxform:numberとして評価できる任意の式

デフォルト値: 制限なし

適用先:

4.12.14.1 XFormsファセット: precision (dateおよびtimeデータ型に適用)

利用環境: Simpleのみ

説明: dateおよびtimeデータ型については、その値空間を、指定された精度内の有効なデータを含む値に制限する。

有効値: dateおよびtimeデータ型については、 "years", "months", "days", "hours", "minutes", "seconds"として評価できる任意の式。 "years"などの最大精度はtimeデータ型にとって意味がないかもしれず、また"seconds"などの最小精度はdateデータ型にとって意味がないかもしれないということに注意。

デフォルト値: 制限なし

適用先:

4.12.15 XFormsファセット: scale

利用環境: Simple, Schema.

説明: 数値データ型に関しては、その値空間を、小数点以下の指定桁数までの値に制限する。たとえば、scale="0"はその値空間を整数に限定する。数値データ型は常にスケールに従った精度を用い、精度はスケール以上でなければならない。

有効値: マイナスでないxform:numberとして評価できる任意の式

デフォルト値: 制限なし

適用先:

4.12.16 XFormsファセット: uriScheme

利用環境: Simple, Schema.

説明: そのデータ型の値空間を、1つ以上の、http, ftp, mailto, news, ldapなどのURIスキームに従った値のセットに制限する。

有効値: 任意の数のURIスキームを表す文字列をもつリスト

デフォルト値: 制限なし

適用先: