Бөлісу құралы:


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

Параметры

instanceDocument
XmlReader

XmlReader Объект, содержащий XML-документ для вывода схемы из.

Возвращаемое значение

Объект 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

Параметры

instanceDocument
XmlReader

XmlReader Объект, содержащий XML-документ для вывода схемы из.

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 параметре с тем же целевым пространством имен; в противном случае новая схема выводится для пространства имен.

Применяется к