列の推論 (ADO.NET)
更新 : November 2007
ADO.NET は、DataSet のテーブルとして推論する要素を、XML ドキュメントから決定した後、それらのテーブルの列を推論します。ADO.NET 2.0 では、各 simpleType 要素の厳密に型指定されたデータ型を推論する新しいスキーマ推論エンジンが導入されました。以前のバージョンでは、推論される simpleType 要素のデータ型は、常に xsd:string でした。
移行および下位互換性
ReadXml メソッドは、InferSchema 型の引数を取ります。この引数を使用することにより、以前のバージョンと互換性のある推論方法を指定することができます。InferSchema 列挙体で使用できる値を、次の表に示します。
InferSchema
単純型を String として常に推論することで下位互換性を提供します。InferTypedSchema
厳密に型指定されたデータ型を推論します。DataTable で使用した場合、例外をスローします。IgnoreSchema
インライン スキーマを無視し、データを既存の DataSet スキーマに読み取ります。
属性
「テーブルの推論」で説明したとおり、属性を持つ要素は、テーブルとして推論されます。その要素の属性は、そのテーブルの列として推論されます。スキーマが XML に書き戻される場合に、列の名前が確実に属性として書き込まれるように、推論された列の ColumnMapping プロパティは MappingType.Attribute に設定されます。属性の値は、テーブルの行に格納されます。たとえば、次のような XML があるとします。
<DocumentElement>
<Element1 attr1="value1" attr2="value2"/>
</DocumentElement>
推論プロセスにより、attr1 および attr2 という 2 つの列を持つ Element1 という名前のテーブルが生成されます。2 つの列の ColumnMapping プロパティは、MappingType.Attribute に設定されます。
DataSet: DocumentElement
Table: Element1
attr1 |
attr2 |
---|---|
value1 |
value2 |
属性または子の要素を持たない要素
要素に子の要素または属性がない場合、その要素は列として推論されます。列の ColumnMapping プロパティは、MappingType.Element に設定されます。子の要素のテキストは、テーブルの行に格納されます。たとえば、次のような XML があるとします。
<DocumentElement>
<Element1>
<ChildElement1>Text1</ChildElement1>
<ChildElement2>Text2</ChildElement2>
</Element1>
</DocumentElement>
推論プロセスにより、ChildElement1 および ChildElement2 という 2 つの列を持つ Element1 という名前のテーブルが生成されます。2 つの列の ColumnMapping プロパティは、MappingType.Element に設定されます。
DataSet: DocumentElement
Table: Element1
ChildElement1 |
ChildElement2 |
---|---|
Text1 |
Text2 |
参照
概念
XML からの DataSet の読み込み (ADO.NET)
XML の DataSet スキーマ情報の読み込み (ADO.NET)