単純型を推論するときの規則
更新 : 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 は検出されても無視されます。 |