XmlSchemaInference.InferSchema Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Wywnioskuje schemat języka definicji schematu XML (XSD) z określonego dokumentu XML.
Przeciążenia
InferSchema(XmlReader) |
Wywnioskuje schemat języka definicji schematu XML (XSD) z dokumentu XML zawartego XmlReader w określonym obiekcie. |
InferSchema(XmlReader, XmlSchemaSet) |
Wywnioskuje schemat języka definicji schematu XML (XSD) z dokumentu XML zawartego w XmlReader określonym obiekcie i uściśli schemat wnioskowany przy użyciu istniejącego schematu w XmlSchemaSet obiekcie określonym z tą samą docelową przestrzenią nazw. |
InferSchema(XmlReader)
Wywnioskuje schemat języka definicji schematu XML (XSD) z dokumentu XML zawartego XmlReader w określonym obiekcie.
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
Parametry
Zwraca
XmlSchemaSet Obiekt zawierający wnioskowane schematy.
Wyjątki
Dokument XML nie jest dobrze sformułowany.
XmlReader Obiekt nie jest umieszczony w węźle głównym ani w elemecie. Podczas procesu wnioskowania schematu występuje błąd.
Przykłady
W tym przykładzie plik XML jest pobierany jako dane wejściowe i generuje schemat, który może zweryfikować przykładowy kod XML.
XmlReader^ reader = XmlReader::Create("contosoBooks.xml");
XmlSchemaSet^ schemaSet = gcnew XmlSchemaSet();
XmlSchemaInference^ schema = gcnew XmlSchemaInference();
schemaSet = schema->InferSchema(reader);
for each (XmlSchema^ s in schemaSet->Schemas())
{
s->Write(Console::Out);
}
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
Poniżej znajduje się wejściowy plik 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>
Poniżej przedstawiono schemat wnioskowany z dokumentu 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>
Uwagi
Metoda InferSchema wywnioskuje jeden lub więcej schematów języka definicji schematu XML W3C (XSD) z dokumentu wystąpienia XML zawartego XmlReader w określonym obiekcie. Jeśli dokument XML zawiera elementy i atrybuty z wielu przestrzeni nazw, generowanych jest wiele schematów: jeden dla każdej przestrzeni nazw używanej w dokumencie. Schemat podstawowy to schemat, który może zweryfikować cały dokument XML, a jego docelowa przestrzeń nazw jest taka sama jak przestrzeń nazw elementu dokumentu XML.
Poniżej przedstawiono ważne uwagi, które należy wziąć pod uwagę podczas korzystania z InferSchema metody .
Metoda InferSchema ignoruje wszystkie
xsi:type
atrybuty ,xsi:schemaLocation
lubxsi:noNamespaceSchemaLocation
w dokumencie XML.XmlReader Jeśli obiekt jest wpisany, informacje o typie, które zawiera, są ignorowane.
XmlReader Jeśli obiekt jest umieszczony na elemecie, który nie jest elementem głównym dokumentu XML, schemat jest wnioskowany tylko dla tego elementu. XmlReader Jeśli obiekt nie jest umieszczony w elemecie, Read metoda jest wywoływana w parametrze XmlReader do momentu napotkania elementu (na przykład gdy NodeType jest Elementto ). W tym momencie proces wnioskowania rozpoczyna się od tego elementu. Jeśli żaden element nie zostanie napotkany do końca dokumentu, ArgumentException zostanie zgłoszony element.
Dotyczy
InferSchema(XmlReader, XmlSchemaSet)
Wywnioskuje schemat języka definicji schematu XML (XSD) z dokumentu XML zawartego w XmlReader określonym obiekcie i uściśli schemat wnioskowany przy użyciu istniejącego schematu w XmlSchemaSet obiekcie określonym z tą samą docelową przestrzenią nazw.
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
Parametry
- schemas
- XmlSchemaSet
XmlSchemaSet Obiekt zawierający istniejący schemat używany do uściślinia wnioskowanego schematu.
Zwraca
XmlSchemaSet Obiekt zawierający wnioskowane schematy.
Wyjątki
Dokument XML nie jest dobrze sformułowany.
XmlReader Obiekt nie jest umieszczony w węźle głównym ani w elemecie. Podczas procesu wnioskowania schematu występuje błąd.
Przykłady
Poniższy przykładowy kod przyjmuje dokument XML 1 jako dane wejściowe i generuje schemat, który może zweryfikować dokument XML 1. Przykładowy kod pobiera następnie dokument XML 2 i uściśli schemat wygenerowany na podstawie dokumentu XML 1 na podstawie zmian znalezionych w dokumencie XML 2.
Poniżej przedstawiono dokument 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>
Poniżej przedstawiono dokument 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>
Poniższy przykładowy kod wywnioskuje schemat z pierwszego dokumentu XML zawartego w reader
pliku , a następnie uściśli schemat wnioskowany ze zmianami znalezionymi w drugim dokumencie XML zawartym w reader1
pliku . Przykładowy kod używa pierwszej przeciążonej InferSchema metody do wnioskowania schematu, a druga przeciążona InferSchema metoda uściśliła istniejący schemat w XmlSchemaSet obiekcie.
XmlReader^ reader = XmlReader::Create("item1.xml");
XmlReader^ reader1 = XmlReader::Create("item2.xml");
XmlSchemaSet^ schemaSet = gcnew XmlSchemaSet();
XmlSchemaInference^ inference = gcnew XmlSchemaInference();
schemaSet = inference->InferSchema(reader);
// Display the inferred schema.
Console::WriteLine("Original schema:\n");
for each (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");
for each (XmlSchema^ schema in schemaSet->Schemas("http://www.contoso.com/items"))
{
schema->Write(Console::Out);
}
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
Poniższy schemat jest schematem wywnioskowany z dokumentu 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>
Poniższy schemat to uściśliona wersja powyższego schematu oparta na dokumencie 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>
Uwagi
Metoda InferSchema wywnioskuje jeden lub więcej schematów języka definicji schematu XML W3C (XSD) z dokumentu wystąpienia XML zawartego XmlReader w określonym obiekcie. Jeśli dokument XML zawiera elementy i atrybuty z wielu przestrzeni nazw, generowanych jest wiele schematów: jeden dla każdej przestrzeni nazw używanej w dokumencie. Schemat podstawowy to schemat, który może zweryfikować cały dokument XML, a jego docelowa przestrzeń nazw jest taka sama jak przestrzeń nazw elementu dokumentu XML.
Poniżej przedstawiono ważne uwagi, które należy wziąć pod uwagę podczas korzystania z InferSchema metody .
Metoda InferSchema ignoruje wszystkie
xsi:type
atrybuty ,xsi:schemaLocation
lubxsi:noNamespaceSchemaLocation
w dokumencie XML.XmlReader Jeśli obiekt jest wpisany, informacje o typie, które zawiera, są ignorowane.
XmlReader Jeśli obiekt jest umieszczony na elemecie, który nie jest elementem głównym dokumentu XML, schemat jest wnioskowany tylko dla tego elementu. XmlReader Jeśli obiekt nie jest umieszczony w elemecie, Read metoda jest wywoływana w parametrze XmlReader do momentu napotkania elementu (na przykład gdy NodeType jest Elementto ). W tym momencie proces wnioskowania rozpoczyna się od tego elementu. Jeśli żaden element nie zostanie napotkany do końca dokumentu, ArgumentException zostanie zgłoszony element.
XmlSchemaSet Jeśli obiekt jest przekazywany jako parametr i element, na którym XmlReader obiekt jest umieszczony, jest zdefiniowany w jednym ze schematów w XmlSchemaSetobiekcie , wnioskowany schemat jest używany do uściślinia istniejącego schematu w parametrze XmlSchemaSet z tą samą docelową przestrzenią nazw. W przeciwnym razie nowy schemat jest wnioskowany dla przestrzeni nazw.