Загрузка сведений о схеме набора данных из XMLLoading DataSet Schema Information from XML

Схема DataSet (ее таблиц, столбцов, связей и ограничений) может быть определена программным способом, созданными методами Fill или FillSchema объекта DataAdapterили загруженными из 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-документа, можно использовать метод ReadXmlSchema или инферксмлсчема набора данных.To load DataSet schema information from an XML document, you can use either the ReadXmlSchema or the InferXmlSchema method of the DataSet. ReadXmlSchema позволяет загружать или выводить сведения о схеме набора данных из документа, содержащего схему 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. Инферксмлсчема позволяет вывести схему из XML-документа, игнорируя определенные заданное пространство имен XML.InferXmlSchema allows you to infer the schema from the XML document while ignoring certain XML namespaces that you specify.

Примечание

Упорядочивание таблиц в наборе данных может не сохраняться при использовании веб-служб или сериализации 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-документа без загрузки данных, можно использовать метод 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 принимает один аргумент имени файла, потока или XmlReader , содержащий XML-документ для загрузки.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).For details about writing inline schema as XML Schema, see Deriving DataSet Relational Structure from XML Schema (XSD).

Если XML-документ, переданный в ReadXmlSchema , не содержит встроенных сведений о схеме, 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.For details about how ReadXmlSchema infers a schema from an XML document, see Inferring DataSet Relational Structure from XML.

Хотя ReadXmlSchema загружает или выводит только схему набора данных, метод ReadXml набора данных загружает и определяет схему и данные, содержащиеся в 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.For more information, see Loading a DataSet from 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. Во втором примере показан объект System. IO. StreamReader.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 System.IO.StreamReader = 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

Также можно указать набору данных , что его схема будет изменяться из XML-документа с помощью метода инферксмлсчема набора данных.You can also instruct the DataSet to infer its schema from an XML document using the InferXmlSchema method of the DataSet. Инферксмлсчема функционирует так же, как и метода ReadXml с параметром XmlReadMode инферсчема (загружает данные и выводит схему), а ReadXmlSchema , если считываемый документ не содержит встроенной схемы.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. Однако инферксмлсчема предоставляет дополнительную возможность, позволяющую указывать определенные пространства имен XML, которые будут игнорироваться при выводимой схеме.However, InferXmlSchema provides the additional capability of allowing you to specify particular XML namespaces to be ignored when the schema is inferred. Инферксмлсчема принимает два обязательных аргумента: расположение XML-документа, определяемое именем файла, потоком или XmlReader; и строковый массив пространств имен 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 с параметром XmlReadMode инферсчема будут создавать таблицы для каждого элемента в документирован Категории, CategoryID, Категория, Описание, продукты, ProductID, ReorderLevelи снятые с работы.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.) Однако более подходящей структурой является создание только таблиц Categories и Products , а затем создание столбцов CategoryID, CategoryNameи Description в таблице Categories и Столбцы ProductID, ReorderLevelи ПоставкиПрекращены в таблице Products.(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-элементах, используйте метод инферксмлсчема и укажите пространство имен 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