XmlSchemaInference.InferSchema Metod

Definition

Härleder ett XSD-schema (XML Schema Definition Language) från det angivna XML-dokumentet.

Överlagringar

Name Description
InferSchema(XmlReader)

Härleder ett XSD-schema (XML Schema Definition Language) från XML-dokumentet som finns i det XmlReader angivna objektet.

InferSchema(XmlReader, XmlSchemaSet)

Härleder ett XSD-schema (XML Schema Definition Language) från XML-dokumentet som finns i det XmlReader angivna objektet och förfinar det angivna schemat med hjälp av ett befintligt schema i objektet XmlSchemaSet som anges med samma målnamnområde.

InferSchema(XmlReader)

Källa:
Infer.cs
Källa:
Infer.cs
Källa:
Infer.cs
Källa:
Infer.cs
Källa:
Infer.cs

Härleder ett XSD-schema (XML Schema Definition Language) från XML-dokumentet som finns i det XmlReader angivna objektet.

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

Parametrar

instanceDocument
XmlReader

Ett XmlReader objekt som innehåller XML-dokumentet för att härleda ett schema från.

Returer

Ett XmlSchemaSet objekt som innehåller de härledda schemana.

Undantag

XML-dokumentet är inte välformat.

Objektet XmlReader är inte placerat på rotnoden eller på ett element. Ett fel inträffar under schemainferensprocessen.

Exempel

Det här exemplet tar en XML-fil som indata och genererar ett schema som kan verifiera XML-exemplet.

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

Följande är xml-indatafilen.

<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>

Följande är det schema som härleds från XML-dokumentet.

<?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>

Kommentarer

Metoden InferSchema härleder ett eller flera XSD-scheman (W3C XML Schema Definition Language) från XML-instansdokumentet som finns i det XmlReader angivna objektet. Om XML-dokumentet innehåller element och attribut från flera namnområden genereras flera scheman: ett för varje namnområde som används i dokumentet. Det primära schemat är det schema som kan verifiera hela XML-dokumentet och dess målnamnområde är detsamma som namnområdet för dokumentelementet i XML-dokumentet.

Följande är viktiga att tänka på när du använder InferSchema metoden.

  • Metoden InferSchema ignorerar alla xsi:type, xsi:schemaLocationeller xsi:noNamespaceSchemaLocation attribut i XML-dokumentet.

  • Om objektet XmlReader skrivs ignoreras den typinformation som det innehåller.

  • XmlReader Om objektet placeras på ett element som inte är rotelementet i XML-dokumentet, härleds ett schema endast för det elementet. Om objektet XmlReader inte är placerat på ett element Read anropas metoden på parametern XmlReader tills ett element påträffas (till exempel när NodeType är Element). I det här läget börjar slutsatsdragningsprocessen från det elementet. Om inget element påträffas förrän slutet av dokumentet genereras ett ArgumentException .

Gäller för

InferSchema(XmlReader, XmlSchemaSet)

Källa:
Infer.cs
Källa:
Infer.cs
Källa:
Infer.cs
Källa:
Infer.cs
Källa:
Infer.cs

Härleder ett XSD-schema (XML Schema Definition Language) från XML-dokumentet som finns i det XmlReader angivna objektet och förfinar det angivna schemat med hjälp av ett befintligt schema i objektet XmlSchemaSet som anges med samma målnamnområde.

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

Parametrar

instanceDocument
XmlReader

Ett XmlReader objekt som innehåller XML-dokumentet för att härleda ett schema från.

schemas
XmlSchemaSet

Ett XmlSchemaSet objekt som innehåller ett befintligt schema som används för att förfina det härledda schemat.

Returer

Ett XmlSchemaSet objekt som innehåller de härledda schemana.

Undantag

XML-dokumentet är inte välformat.

Objektet XmlReader är inte placerat på rotnoden eller på ett element. Ett fel inträffar under schemainferensprocessen.

Exempel

Följande exempelkod tar XML-dokument 1 som indata och genererar ett schema som kan validera XML-dokument 1. Exempelkoden tar sedan XML-dokument 2 och förfinar schemat som genereras från XML-dokument 1, baserat på de ändringar som finns i XML-dokument 2.

Följande är XML-dokument 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>

Följande är XML-dokument 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>

Följande exempelkod härleder ett schema från det första XML-dokumentet i readeroch förfinar sedan det här schemat med de ändringar som finns i det andra XML-dokumentet i reader1. Exempelkoden använder den första överlagrade InferSchema metoden för att härleda schemat och den andra överlagrade InferSchema metoden för att förfina det befintliga schemat i XmlSchemaSet objektet.

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

Följande schema är det schema som härleds från XML-dokument 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>

Följande schema är den förfinade versionen av schemat ovan, baserat på XML-dokument 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>

Kommentarer

Metoden InferSchema härleder ett eller flera XSD-scheman (W3C XML Schema Definition Language) från XML-instansdokumentet som finns i det XmlReader angivna objektet. Om XML-dokumentet innehåller element och attribut från flera namnområden genereras flera scheman: ett för varje namnområde som används i dokumentet. Det primära schemat är det schema som kan verifiera hela XML-dokumentet och dess målnamnområde är detsamma som namnområdet för dokumentelementet i XML-dokumentet.

Följande är viktiga att tänka på när du använder InferSchema metoden.

  • Metoden InferSchema ignorerar alla xsi:type, xsi:schemaLocationeller xsi:noNamespaceSchemaLocation attribut i XML-dokumentet.

  • Om objektet XmlReader skrivs ignoreras den typinformation som det innehåller.

  • XmlReader Om objektet placeras på ett element som inte är rotelementet i XML-dokumentet, härleds ett schema endast för det elementet. Om objektet XmlReader inte är placerat på ett element Read anropas metoden på parametern XmlReader tills ett element påträffas (till exempel när NodeType är Element). I det här läget börjar slutsatsdragningsprocessen från det elementet. Om inget element påträffas förrän slutet av dokumentet genereras ett ArgumentException .

  • Om ett XmlSchemaSet objekt skickas som en parameter och elementet XmlReader som objektet placeras på definieras i något av schemana i XmlSchemaSetanvänds det härledda schemat för att förfina ett befintligt schema i parametern XmlSchemaSet med samma målnamnområde. Annars härleds ett nytt schema för namnområdet.

Gäller för