次の方法で共有


単純型を推論するための規則

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

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

推論型

XmlSchemaInference クラスは、要素と属性値を単純型として推論し、結果のスキーマに型属性を含めます。 推論されるすべての型は単純型です。 基本型またはファセットは、結果のスキーマの一部として含まれません。

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

次の表に、結果のスキーマで考えられる推論型を示します。

単純型 説明
ブーリアン True、false、0、1。
byte –128 ~ 127 の範囲の整数。
符号なしバイト 0 ~ 255 の範囲の整数。
短い –32768 ~ 32767 の範囲の整数。
符号なし短整数 0 ~ 65535 の範囲の整数。
整数 (int) 2147483648から2147483647までの範囲の整数。
符号なし整数 0 ~ 4294967295の範囲の整数。
長い 9223372036854775808から9223372036854775807までの範囲の整数。
符号なし長整数 0 ~ 18446744073709551615の範囲の整数。
整数 "-" のプレフィックスが付いている可能性のある有限の桁数。
10 進 精度が 0 から 28 桁までの数値。
float 必要に応じて、10 進数の後に "E" または "e" が続き、指数を表す整数値が続きます。 10進数値は、-16777216 から 16777216 の範囲内にあります。 指数値は、-149 ~ 104 の範囲にすることができます。

Float を使用すると、特殊な値で無限大と非数値を表すことができます。 float の特別な値は、0、-0、INF、-INF、NaN です。
ダブル 10 進値以外は float と同じで、-9007199254740992 から9007199254740992までの範囲にすることができ、指数値は -1075 から 970 の範囲にすることができます。

Double を使用すると、特殊な値で無限大と数値以外の値を表すことができます。 float の特別な値は、0、-0、INF、-INF、NaN です。
期間 W3C の持続時間形式
日時 W3C の日時形式。
時間 W3C 時刻形式。
日付 年の値は 0001 から 9999 に制限されます。
gYearMonth (年と月を示すXMLスキーマのデータ型) W3C グレゴリオ暦の月と年の形式。
文字列 1 つ以上の Unicode 文字。

型の上位変換

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

たとえば、2 つの XML ドキュメントの次の XML フラグメントについて考えてみます。

<MyElement1 attr1="12" />

<MyElement1 attr1="52344" />

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

次に、2 つの XML ドキュメントから次の XML を検討します。

<MyElement2 attr2="0" />

<MyElement2 attr2="true" />

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

https://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が検出された場合は無視されます。

こちらも参照ください