XmlSchemaInference.InferSchema Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
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:schemaLocationellerxsi:noNamespaceSchemaLocationattribut 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:schemaLocationellerxsi:noNamespaceSchemaLocationattribut 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.