XmlSchemaInference.InferSchema Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Выводит схему языка определения XML-схемы (XSD) из указанного XML-документа.
Перегрузки
| Имя | Описание |
|---|---|
| InferSchema(XmlReader) |
Содержит схему языка определения XML-схемы (XSD) из XML-документа, содержащегося в указанном объекте XmlReader . |
| InferSchema(XmlReader, XmlSchemaSet) |
Выводит схему языка определения схемы XML (XSD) из XML-документа, содержащегося в XmlReader указанном объекте, и обновляет выводимую схему с помощью существующей схемы в XmlSchemaSet объекте, указанном с тем же целевым пространством имен. |
InferSchema(XmlReader)
- Исходный код:
- Infer.cs
- Исходный код:
- Infer.cs
- Исходный код:
- Infer.cs
- Исходный код:
- Infer.cs
- Исходный код:
- Infer.cs
Содержит схему языка определения XML-схемы (XSD) из XML-документа, содержащегося в указанном объекте XmlReader .
public:
System::Xml::Schema::XmlSchemaSet ^ InferSchema(System::Xml::XmlReader ^ instanceDocument);
public System.Xml.Schema.XmlSchemaSet InferSchema(System.Xml.XmlReader instanceDocument);
member this.InferSchema : System.Xml.XmlReader -> System.Xml.Schema.XmlSchemaSet
Public Function InferSchema (instanceDocument As XmlReader) As XmlSchemaSet
Параметры
Возвращаемое значение
Объект XmlSchemaSet , содержащий выводимые схемы.
Исключения
XML-документ не является хорошо сформированным.
XmlReader Объект не расположен на корневом узле или на элементе. Ошибка возникает во время процесса вывода схемы.
Примеры
Этот пример принимает XML-файл в качестве входных данных и создает схему, которая может проверить пример XML.
XmlReader reader = XmlReader.Create("contosoBooks.xml");
XmlSchemaSet schemaSet = new XmlSchemaSet();
XmlSchemaInference schema = new XmlSchemaInference();
schemaSet = schema.InferSchema(reader);
foreach (XmlSchema s in schemaSet.Schemas())
{
s.Write(Console.Out);
}
Dim reader As XmlReader = XmlReader.Create("contosoBooks.xml")
Dim schemaSet As XmlSchemaSet = New XmlSchemaSet()
Dim schema As XmlSchemaInference = New XmlSchemaInference()
schemaSet = schema.InferSchema(reader)
For Each s As XmlSchema In schemaSet.Schemas()
s.Write(Console.Out)
Next
Ниже приведен входной XML-файл.
<bookstore xmlns="http://www.contoso.com/books">
<book genre="autobiography" publicationdate="1981-03-22" ISBN="1-861003-11-0">
<title>The Autobiography of Benjamin Franklin</title>
<author>
<first-name>Benjamin</first-name>
<last-name>Franklin</last-name>
</author>
<price>8.99</price>
</book>
<book genre="novel" publicationdate="1967-11-17" ISBN="0-201-63361-2">
<title>The Confidence Man</title>
<author>
<first-name>Herman</first-name>
<last-name>Melville</last-name>
</author>
<price>11.99</price>
</book>
<book genre="philosophy" publicationdate="1991-02-15" ISBN="1-861001-57-6">
<title>The Gorgias</title>
<author>
<name>Plato</name>
</author>
<price>9.99</price>
</book>
</bookstore>
Ниже приведена схема, выводимая из XML-документа.
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.contoso.com/books" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="bookstore">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="book">
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string" />
<xs:element name="author">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="name" type="xs:string" />
<xs:element minOccurs="0" name="first-name" type="xs:string" />
<xs:element minOccurs="0" name="last-name" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="price" type="xs:decimal" />
</xs:sequence>
<xs:attribute name="genre" type="xs:string" use="required" />
<xs:attribute name="publicationdate" type="xs:date" use="required" />
<xs:attribute name="ISBN" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Комментарии
Метод InferSchema содержит одну или несколько схем языка определения схемы XML W3C (XSD) из документа экземпляра XML, содержащегося в указанном объекте XmlReader . Если XML-документ содержит элементы и атрибуты из нескольких пространств имен, создается несколько схем: по одному для каждого пространства имен, используемого в документе. Основная схема — это схема, которая может проверить весь XML-документ, а целевое пространство имен совпадает с пространством имен элемента документа XML-документа.
Ниже приведены важные заметки, которые следует учитывать при использовании InferSchema метода.
Метод InferSchema игнорирует любые
xsi:typexsi:schemaLocationатрибуты илиxsi:noNamespaceSchemaLocationатрибуты в XML-документе.XmlReader Если объект типируется, сведения о типе, содержащиеся в нем, игнорируются.
XmlReader Если объект расположен на элементе, который не является корневым элементом XML-документа, схема выводится только для этого элемента. XmlReader Если объект не расположен на элементе, метод вызывается в XmlReader параметре до тех пор, Read пока не будет обнаружен элемент (например, когда NodeType естьElement). На этом этапе процесс вывода начинается с этого элемента. Если элемент не обнаружен до конца документа, ArgumentException создается исключение.
Применяется к
InferSchema(XmlReader, XmlSchemaSet)
- Исходный код:
- Infer.cs
- Исходный код:
- Infer.cs
- Исходный код:
- Infer.cs
- Исходный код:
- Infer.cs
- Исходный код:
- Infer.cs
Выводит схему языка определения схемы XML (XSD) из XML-документа, содержащегося в XmlReader указанном объекте, и обновляет выводимую схему с помощью существующей схемы в XmlSchemaSet объекте, указанном с тем же целевым пространством имен.
public:
System::Xml::Schema::XmlSchemaSet ^ InferSchema(System::Xml::XmlReader ^ instanceDocument, System::Xml::Schema::XmlSchemaSet ^ schemas);
public System.Xml.Schema.XmlSchemaSet InferSchema(System.Xml.XmlReader instanceDocument, System.Xml.Schema.XmlSchemaSet schemas);
member this.InferSchema : System.Xml.XmlReader * System.Xml.Schema.XmlSchemaSet -> System.Xml.Schema.XmlSchemaSet
Public Function InferSchema (instanceDocument As XmlReader, schemas As XmlSchemaSet) As XmlSchemaSet
Параметры
- schemas
- XmlSchemaSet
Объект XmlSchemaSet , содержащий существующую схему, используемую для уточнения выводимой схемы.
Возвращаемое значение
Объект XmlSchemaSet , содержащий выводимые схемы.
Исключения
XML-документ не является хорошо сформированным.
XmlReader Объект не расположен на корневом узле или на элементе. Ошибка возникает во время процесса вывода схемы.
Примеры
Следующий пример кода принимает XML-документ 1 в качестве входных данных и создает схему, которая может проверить XML-документ 1. Затем пример кода принимает XML-документ 2 и обновляет схему, созданную из XML-документа 1, на основе изменений, обнаруженных в XML-документе 2.
Ниже приведен XML-документ 1.
<?xml version="1.0" encoding="utf-8"?>
<item xmlns="http://www.contoso.com/items" productID="123456789">
<name>Hammer</name>
<price>9.95</price>
<supplierID>1929</supplierID>
</item>
Ниже приведен XML-документ 2.
<?xml version="1.0" encoding="utf-8"?>
<item xmlns="http://www.contoso.com/items" productID="A53-246">
<name>Paint</name>
<price>12.50</price>
</item>
В следующем примере кода приводится схема из первого XML-документа, содержащегося в reader, а затем уточняет выводимую схему с изменениями, найденными во втором XML-документе, который содержится в reader1. В примере кода используется первый перегруженный InferSchema метод для вывода схемы, а второй перегруженный InferSchema метод — для уточнения существующей схемы в объекте XmlSchemaSet .
XmlReader reader = XmlReader.Create("item1.xml");
XmlReader reader1 = XmlReader.Create("item2.xml");
XmlSchemaSet schemaSet = new XmlSchemaSet();
XmlSchemaInference inference = new XmlSchemaInference();
schemaSet = inference.InferSchema(reader);
// Display the inferred schema.
Console.WriteLine("Original schema:\n");
foreach (XmlSchema schema in schemaSet.Schemas("http://www.contoso.com/items"))
{
schema.Write(Console.Out);
}
// Use the additional data in item2.xml to refine the original schema.
schemaSet = inference.InferSchema(reader1, schemaSet);
// Display the refined schema.
Console.WriteLine("\n\nRefined schema:\n");
foreach (XmlSchema schema in schemaSet.Schemas("http://www.contoso.com/items"))
{
schema.Write(Console.Out);
}
Dim reader As XmlReader = XmlReader.Create("item1.xml")
Dim reader1 As XmlReader = XmlReader.Create("item2.xml")
Dim schemaSet As XmlSchemaSet = New XmlSchemaSet()
Dim inference As XmlSchemaInference = New XmlSchemaInference()
schemaSet = inference.InferSchema(reader)
' Display the inferred schema.
Console.WriteLine("Original schema:\n")
For Each schema As XmlSchema In schemaSet.Schemas("http://www.contoso.com/items")
schema.Write(Console.Out)
Next
' Use the additional data in item2.xml to refine the original schema.
schemaSet = inference.InferSchema(reader1, schemaSet)
' Display the refined schema.
Console.WriteLine("\n\nRefined schema:\n")
For Each schema As XmlSchema In schemaSet.Schemas("http://www.contoso.com/items")
schema.Write(Console.Out)
Next
Следующая схема — это схема, выводимая из XML-документа 1.
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.contoso.com/items" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="item">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="price" type="xs:decimal" />
<xs:element name="supplierID" type="xs:unsignedShort" />
</xs:sequence>
<xs:attribute name="productID" type="xs:unsignedInt" use="required" />
</xs:complexType>
</xs:element>
</xs:schema>
Следующая схема — это улучшенная версия приведенной выше схемы на основе XML-документа 2.
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.contoso.com/items" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="item">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="price" type="xs:decimal" />
<xs:element minOccurs="0" name="supplierID" type="xs:unsignedShort" />
</xs:sequence>
<xs:attribute name="productID" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:schema>
Комментарии
Метод InferSchema содержит одну или несколько схем языка определения схемы XML W3C (XSD) из документа экземпляра XML, содержащегося в указанном объекте XmlReader . Если XML-документ содержит элементы и атрибуты из нескольких пространств имен, создается несколько схем: по одному для каждого пространства имен, используемого в документе. Основная схема — это схема, которая может проверить весь XML-документ, а целевое пространство имен совпадает с пространством имен элемента документа XML-документа.
Ниже приведены важные заметки, которые следует учитывать при использовании InferSchema метода.
Метод InferSchema игнорирует любые
xsi:typexsi:schemaLocationатрибуты илиxsi:noNamespaceSchemaLocationатрибуты в XML-документе.XmlReader Если объект типируется, сведения о типе, содержащиеся в нем, игнорируются.
XmlReader Если объект расположен на элементе, который не является корневым элементом XML-документа, схема выводится только для этого элемента. XmlReader Если объект не расположен на элементе, метод вызывается в XmlReader параметре до тех пор, Read пока не будет обнаружен элемент (например, когда NodeType естьElement). На этом этапе процесс вывода начинается с этого элемента. Если элемент не обнаружен до конца документа, ArgumentException создается исключение.
XmlSchemaSet Если объект передается как параметр и элемент, на котором XmlReader находится объект, определяется в одной из схем в этой XmlSchemaSetсхеме, вычисленная схема используется для уточнения существующей схемы в XmlSchemaSet параметре с тем же целевым пространством имен; в противном случае новая схема выводится для пространства имен.