単純型を推論するときの規則

更新 : November 2007

XmlSchemaInference クラスが属性と要素のデータ型を推論する方法を説明します。

XmlSchemaInference クラスは、属性と要素のデータ型を単純型として推論します。このセクションでは、推論される可能性がある型、複数の異なる値を 1 つの型に調整する方法、スキーマ定義 xsi 属性の取り扱いについて説明します。

推論型

XmlSchemaInference クラスは、要素値と属性値を単純型として推論し、生成されるスキーマに型属性をインクルードします。推論型はすべて単純型です。生成されるスキーマの一部として基本型またはファセットがインクルードされることはありません。

単純型推論グラフィック

XML ドキュメントで値が検出されるたびに、その値が個別に調べられます。値が調べられるときに、その値の型が推論されます。属性または要素の型が既に推論されており、その属性または要素に対して新たに検出された値が現在推論されている型と一致しない場合、XmlSchemaInference クラスは、一定の規則に基づいてその型を昇格させます。型を昇格させるときの規則については、このトピックの「型の昇格」のセクションで説明します。

生成されるスキーマに含まれる可能性がある推論型を次の表に示します。

単純型

説明

boolean

true、false、0、1

byte

-128 ~ 127 の整数

unsignedByte

0 ~ 255 の整数

short

-32768 ~ 32767 の整数

unsignedShort

0 ~ 65535 の整数

int

-2147483648 ~ 2147483647 の整数

unsignedInt

0 ~ 4294967295 の整数

long

-9223372036854775808 ~ 9223372036854775807 の整数

unsignedLong

0 ~ 18446744073709551615 の整数

integer

先頭に "-" 記号が付く可能性がある有限桁の数値。

decimal

精度が 0 ~ 28 桁の数値。

float

小数点数。指数を表す整数値を伴った、省略可能な "E" または "e" を付ける表記法もあります。仮数部の範囲は -16777216 ~ 16777216 です。指数部の範囲は -149 ~ 104 です。

float では、無限大および非数を表す特殊値が使用可能です。float の特殊値は、0、-0、INF、-INF、NaN です。

double

仮数部の範囲が -9007199254740992 ~ 9007199254740992 で、指数部の範囲が -1075 ~ 970 である点を除いて、float と同じです。

double では、無限大および非数を表す特殊値が使えます。float の特殊値は、0、-0、INF、-INF、NaN です。

duration

W3C の持続時間形式

dateTime

W3C の日付時刻形式

time

W3C の時刻形式

date

年に使用できる値は 0001 ~ 9999 に制限されています。

gYearMonth

W3C のグレゴリオ暦の年月形式

string

1 つ以上の Unicode 文字

型の昇格

XmlSchemaInference クラスは属性値と要素値を 1 つずつ調べます。値が検出されると、最も制限の厳しい、符号なし型が推論されます。属性または要素の型が推論されている状態で、現在推論されている型と一致しない新しい値が検出されると、推論型が現在の推論型と新しい値の両方に当てはまる新しい型に昇格します。XmlSchemaInference クラスは、推論型を昇格させるときに前の値を考慮します。

たとえば、2 つの XML ドキュメントから取得された次の XML フラグメントを見てみましょう。

<MyElement1 attr1="12" />

<MyElement1 attr1="52344" />

最初に attr1 の値が検出されると、attr1 の型は、値 12 に基づいて unsignedByte と推論されます。attr1 の 2 番目の値が検出されると、現在推論されている型 unsignedByte と現在の値 52344 に基づいて、型が unsignedShort に昇格します。

次に、2 つの XML ドキュメントから取得された次の XML を見てみましょう。

<MyElement2 attr2="0" />

<MyElement2 attr2="true" />

最初に attr2 の値が検出されると、attr2 の型は、値 0 に基づいて unsignedByte と推論されます。attr2 の 2 番目の値が検出されると、現在推論されている型 unsignedByte と現在の値 true に基づいて、型が string に昇格します。これは、XmlSchemaInference クラスが推論型を昇格させるときに前の値を考慮するためです。ただし、attr2 の 2 つのインスタンスが、上記の説明のように 2 つの別々の XML ドキュメントで検出されたのではなく、同じ XML ドキュメントで検出された場合、attr2 は boolean と推論されます。

無視される http://www.w3.org/2001/XMLSchema-instance 名前空間の属性

スキーマの推論で無視されるスキーマ定義属性を次に示します。

属性

説明

xsi:type

xsi:type が指定されている要素が検出された場合、xsi:type は無視されます。

xsi:nil

xsi:nil 属性を持った要素が検出されると、推論されるスキーマ内の要素宣言の値が nillable="true" に設定されます。xsi:nil 属性が true に設定された要素は子要素を持つことができません。

xsi:schemaLocation

xsi:schemaLocation は検出されても無視されます。

xsi:noNamespaceSchemaLocation

xsi:noNamespaceSchemaLocation は検出されても無視されます。

参照

概念

XML ドキュメントからのスキーマの推論

スキーマのノード型および構造を推論するときの規則

その他の技術情報

XML スキーマ オブジェクト モデル (SOM)