XML の DataSet スキーマ情報の読み込みLoading DataSet Schema Information from XML

DataSet のスキーマ (テーブル、列、リレーション、および制約) は、プログラムによって定義するか、DataAdapterFillメソッドまたはFillSchemaメソッドによって作成するか、または XML ドキュメントから読み込むことができます。The schema of a DataSet (its tables, columns, relations, and constraints) can be defined programmatically, created by the Fill or FillSchema methods of a DataAdapter, or loaded from an XML document. XML ドキュメントからdatasetスキーマ情報を読み込むには、データセットreadxmlschemaまたはInferXmlSchemaメソッドを使用します。To load DataSet schema information from an XML document, you can use either the ReadXmlSchema or the InferXmlSchema method of the DataSet. Readxmlschemaを使用すると、xml スキーマ定義言語 (XSD) スキーマを含むドキュメントまたはインライン xml スキーマを含む xml ドキュメントから、データセットスキーマ情報を読み込んだり、推測したりすることができます。ReadXmlSchema allows you to load or infer DataSet schema information from the document containing XML Schema definition language (XSD) schema, or an XML document with inline XML Schema. InferXmlSchemaを使用すると、指定した特定の xml 名前空間を無視しながら、xml ドキュメントからスキーマを推論できます。InferXmlSchema allows you to infer the schema from the XML document while ignoring certain XML namespaces that you specify.

注意

Web サービスまたは XML シリアル化を使用して、XSD コンストラクト (入れ子になったリレーションなど) を使用してメモリ内に作成されたデータセットを転送する場合、データセット内のテーブルの順序が保持されないことがあります。Table ordering in a DataSet might not be preserved when you use Web services or XML serialization to transfer a DataSet that was created in-memory by using XSD constructs (such as nested relations). この場合、データセットの受信者はテーブルの順序に依存しないようにしてください。Therefore, the recipient of the DataSet should not depend on table ordering in this case. ただし、転送されるデータセットのスキーマが、メモリ内に作成されるのではなく、XSD ファイルから読み取られた場合、テーブルの順序は常に保持されます。However, table ordering is always preserved if the schema of the DataSet being transferred was read from XSD files, instead of being created in-memory.

ReadXmlSchemaReadXmlSchema

データを読み込まずに XML ドキュメントからdatasetのスキーマを読み込むには、データセットreadxmlschemaメソッドを使用します。To load the schema of a DataSet from an XML document without loading any data, you can use the ReadXmlSchema method of the DataSet. Readxmlschemaは、XML スキーマ定義言語 (XSD) スキーマを使用して定義されたデータセットスキーマを作成します。ReadXmlSchema creates DataSet schema defined using XML Schema definition language (XSD) schema.

Readxmlschemaメソッドは、ファイル名、ストリーム、または読み込む XML ドキュメントを含んでいるXmlReaderの1つの引数を受け取ります。The ReadXmlSchema method takes a single argument of a file name, a stream, or an XmlReader containing the XML document to be loaded. この XML ドキュメントには、スキーマだけが含まれているか、またはデータのある XML 要素と共にスキーマがインラインで含まれています。The XML document can contain only schema, or can contain schema inline with XML elements containing data. インラインスキーマを XML スキーマとして記述する方法の詳細については、「 Xml スキーマ (XSD) からの DataSet リレーショナル構造の派生」を参照してください。For details about writing inline schema as XML Schema, see Deriving DataSet Relational Structure from XML Schema (XSD).

Readxmlschemaに渡された xml ドキュメントにインラインスキーマ情報が含まれていない場合、 READXMLSCHEMAは xml ドキュメント内の要素からスキーマを推論します。If the XML document passed to ReadXmlSchema contains no inline schema information, ReadXmlSchema will infer the schema from the elements in the XML document. データセットに既にスキーマが含まれている場合、新しいテーブルが存在しない場合は、新しいテーブルを追加することによって現在のスキーマが拡張されます。If the DataSet already contains a schema, the current schema will be extended by adding new tables if they do not already exist. 既存のテーブルには新しい列は追加されません。New columns will not be added to added to existing tables. 追加する列がデータセットに既に存在していても、XML で見つかった列と互換性のない型がある場合は、例外がスローされます。If a column being added already exists in the DataSet but has an incompatible type with the column found in the XML, an exception is thrown. Readxmlschemaが xml ドキュメントからスキーマを推論する方法の詳細については、「 Xml からの DataSet リレーショナル構造の推論」を参照してください。For details about how ReadXmlSchema infers a schema from an XML document, see Inferring DataSet Relational Structure from XML.

Readxmlschemaデータセットのスキーマのみを読み込むか推論しますが、 datasetReadXmlメソッドは、XML ドキュメントに含まれているスキーマとデータの両方の読み込みまたは推論を行います。Although ReadXmlSchema loads or infers only the schema of a DataSet, the ReadXml method of the DataSet loads or infers both the schema and the data contained in the XML document. 詳細については、「 XML からの DataSet の読み込み」を参照してください。For more information, see Loading a DataSet from XML.

次のコード例は、XML ドキュメントまたは XML ストリームからデータセットスキーマを読み込む方法を示しています。The following code examples show how to load a DataSet schema from an XML document or stream. 最初の例では、XML スキーマファイル名をReadxmlschemaメソッドに渡しています。The first example shows an XML Schema file name being passed to the ReadXmlSchema method. 2番目の例は、 system.object を示していますThe second example shows a System.IO.StreamReader.

Dim dataSet As DataSet = New DataSet  
dataSet.ReadXmlSchema("schema.xsd")  
DataSet dataSet = new DataSet();  
dataSet.ReadXmlSchema("schema.xsd");  
Dim xmlStream As New System.IO.StreamReader("schema.xsd")
Dim dataSet As DataSet = New DataSet  
dataSet.ReadXmlSchema(xmlStream)  
xmlStream.Close()  
System.IO.StreamReader xmlStream = new System.IO.StreamReader("schema.xsd");  
DataSet dataSet = new DataSet();  
dataSet.ReadXmlSchema(xmlStream);  
xmlStream.Close();  

InferXmlSchemaInferXmlSchema

データセットのInferXmlSchemaメソッドを使用して、XML ドキュメントからスキーマを推論するようにデータセットに指示することもできます。You can also instruct the DataSet to infer its schema from an XML document using the InferXmlSchema method of the DataSet. InferXmlSchemaは、 XmlReadModeInferSchema (データの読み込みとスキーマの推論) を使用したReadXmlと、読み取り中のドキュメントにインラインスキーマが含まれていない場合と同様に機能します。InferXmlSchema functions the same as do both ReadXml with an XmlReadMode of InferSchema (loads data as well as infers schema), and ReadXmlSchema if the document being read contains no inline schema. ただし、 InferXmlSchemaには、スキーマが推論されるときに無視する特定の XML 名前空間を指定できる追加機能が用意されています。However, InferXmlSchema provides the additional capability of allowing you to specify particular XML namespaces to be ignored when the schema is inferred. InferXmlSchemaは、ファイル名、ストリーム、またはXmlReaderによって指定された XML ドキュメントの場所である2つの必須引数を受け取ります。とは、操作によって無視される XML 名前空間の文字列配列です。InferXmlSchema takes two required arguments: the location of the XML document, specified by a file name, a stream, or an XmlReader; and a string array of XML namespaces to be ignored by the operation.

たとえば、次のような XML があるとします。For example, consider the following XML:

<NewDataSet xmlns:od="urn:schemas-microsoft-com:officedata">  
<Categories>  
  <CategoryID od:adotype="3">1</CategoryID>   
  <CategoryName od:maxLength="15" od:adotype="130">Beverages</CategoryName>   
  <Description od:adotype="203">Soft drinks and teas</Description>   
</Categories>  
<Products>  
  <ProductID od:adotype="20">1</ProductID>   
  <ReorderLevel od:adotype="3">10</ReorderLevel>   
  <Discontinued od:adotype="11">0</Discontinued>   
</Products>  
</NewDataSet>  

前の XML ドキュメントの要素に対して属性が指定されているため、 ReadxmlschemaメソッドとReadXmlメソッドの両方がInferSchemaXmlReadModeを使用すると、ドキュメント内のすべての要素に対して、 CategoriesCategoryID区分DescriptionProductsProductIDReorderLevel、および廃止されたテーブルが作成されます。Because of the attributes specified for the elements in the preceding XML document, both the ReadXmlSchema method and the ReadXml method with an XmlReadMode of InferSchema would create tables for every element in the document: Categories, CategoryID, CategoryName, Description, Products, ProductID, ReorderLevel, and Discontinued. (詳細については、「 XML からの DataSet リレーショナル構造の推論」を参照してください)。ただし、より適切な構造としては、 categoriesテーブルとProductsテーブルだけを作成してから、 categoriesテーブルのCategoryIDReorderLevel 、および 廃止 され た列を 作成します(For more information, see Inferring DataSet Relational Structure from XML.) However, a more appropriate structure would be to create only the Categories and Products tables, and then to create CategoryID, CategoryName, and Description columns in the Categories table, and ProductID, ReorderLevel, and Discontinued columns in the Products table. 推論されたスキーマで XML 要素に指定されている属性が無視されるようにするには、次の例に示すように、 InferXmlSchemaメソッドを使用して、 officedataの xml 名前空間を無視するように指定します。To ensure that the inferred schema ignores the attributes specified in the XML elements, use the InferXmlSchema method and specify the XML namespace for officedata to be ignored, as shown in the following example.

Dim dataSet As DataSet = New DataSet  
dataSet.InferXmlSchema("input_od.xml", New String() {"urn:schemas-microsoft-com:officedata"})  
DataSet dataSet = new DataSet();  
dataSet.InferXmlSchema("input_od.xml", new string[] "urn:schemas-microsoft-com:officedata");  

関連項目See also