XmlSchemaInference.InferSchema Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Odvodí schéma XSD (XML Schema Definition Language) ze zadaného dokumentu XML.
Přetížení
| Name | Description |
|---|---|
| InferSchema(XmlReader) |
Odvodí schéma XSD (XML Schema Definition Language) z dokumentu XML obsaženého v zadaném objektu XmlReader . |
| InferSchema(XmlReader, XmlSchemaSet) |
Odvodí schéma XSD (XML Schema Definition Language) z dokumentu XML obsaženého v zadaném XmlReader objektu a upřesní odvozené schéma pomocí existujícího schématu v objektu XmlSchemaSet určeném se stejným cílovým oborem názvů. |
InferSchema(XmlReader)
- Zdroj:
- Infer.cs
- Zdroj:
- Infer.cs
- Zdroj:
- Infer.cs
- Zdroj:
- Infer.cs
- Zdroj:
- Infer.cs
Odvodí schéma XSD (XML Schema Definition Language) z dokumentu XML obsaženého v zadaném objektu 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
Parametry
Návraty
Objekt XmlSchemaSet obsahující odvozená schémata.
Výjimky
Dokument XML není ve správném formátu.
Objekt XmlReader není umístěn na kořenovém uzlu nebo na elementu. Během procesu odvození schématu dojde k chybě.
Příklady
Tento příklad vezme soubor XML jako vstup a vygeneruje schéma, které může ověřit příklad 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
Následuje vstupní soubor 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>
Následuje schéma odvozené 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>
Poznámky
Metoda InferSchema odvodí jedno nebo více schémat W3C XML Schema Definition Language (XSD) z dokumentu instance XML obsaženého v zadaném objektu XmlReader . Pokud dokument XML obsahuje prvky a atributy z více oborů názvů, vygenerují se více schémat: jedno pro každý obor názvů použitý v dokumentu. Primární schéma je schéma, které může ověřit celý dokument XML a jeho cílový obor názvů je stejný jako obor názvů prvku dokumentu xml dokumentu.
Při použití InferSchema této metody je potřeba vzít v úvahu následující důležité poznámky.
Metoda InferSchema ignoruje všechny
xsi:type,xsi:schemaLocationneboxsi:noNamespaceSchemaLocationatributy v dokumentu XML.XmlReader Pokud je objekt zadán, informace o typu, které obsahuje, jsou ignorovány.
XmlReader Pokud je objekt umístěn na element, který není kořenovým prvkem dokumentu XML, schéma je odvozeno pouze pro tento prvek. XmlReader Pokud objekt není umístěn na elementu, Read metoda je volána na XmlReader parametr, dokud není nalezen prvek (například když NodeType je Element). V tomto okamžiku proces odvození začíná z tohoto prvku. Pokud se do konce dokumentu nezjistí žádný prvek, ArgumentException vyvolá se chyba.
Platí pro
InferSchema(XmlReader, XmlSchemaSet)
- Zdroj:
- Infer.cs
- Zdroj:
- Infer.cs
- Zdroj:
- Infer.cs
- Zdroj:
- Infer.cs
- Zdroj:
- Infer.cs
Odvodí schéma XSD (XML Schema Definition Language) z dokumentu XML obsaženého v zadaném XmlReader objektu a upřesní odvozené schéma pomocí existujícího schématu v objektu XmlSchemaSet určeném se stejným cílovým oborem názvů.
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
Objekt XmlSchemaSet obsahující existující schéma sloužící k upřesnění odvozeného schématu.
Návraty
Objekt XmlSchemaSet obsahující odvozená schémata.
Výjimky
Dokument XML není ve správném formátu.
Objekt XmlReader není umístěn na kořenovém uzlu nebo na elementu. Během procesu odvození schématu dojde k chybě.
Příklady
Následující příklad kódu přebírá dokument XML 1 jako vstup a vygeneruje schéma, které může ověřit dokument XML 1. Ukázkový kód pak vezme dokument XML 2 a zpřesní schéma generované z dokumentu XML 1 na základě změn nalezených v dokumentu XML 2.
Následuje 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>
Následuje 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>
Následující příklad kódu odvodí schéma z prvního dokumentu XML obsaženého v readera potom upřesní odvozené schéma se změnami nalezenými ve druhém dokumentu XML obsaženém v reader1. Ukázkový kód používá první přetíženou InferSchema metodu k odvození schématu a druhou přetíženou InferSchema metodu pro upřesnění existujícího schématu v objektu 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
Následující schéma je schéma odvozené 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>
Následující schéma je upřesněná verze výše uvedeného schématu na základě dokumentu 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>
Poznámky
Metoda InferSchema odvodí jedno nebo více schémat W3C XML Schema Definition Language (XSD) z dokumentu instance XML obsaženého v zadaném objektu XmlReader . Pokud dokument XML obsahuje prvky a atributy z více oborů názvů, vygenerují se více schémat: jedno pro každý obor názvů použitý v dokumentu. Primární schéma je schéma, které může ověřit celý dokument XML a jeho cílový obor názvů je stejný jako obor názvů prvku dokumentu xml dokumentu.
Při použití InferSchema této metody je potřeba vzít v úvahu následující důležité poznámky.
Metoda InferSchema ignoruje všechny
xsi:type,xsi:schemaLocationneboxsi:noNamespaceSchemaLocationatributy v dokumentu XML.XmlReader Pokud je objekt zadán, informace o typu, které obsahuje, jsou ignorovány.
XmlReader Pokud je objekt umístěn na element, který není kořenovým prvkem dokumentu XML, schéma je odvozeno pouze pro tento prvek. XmlReader Pokud objekt není umístěn na elementu, Read metoda je volána na XmlReader parametr, dokud není nalezen prvek (například když NodeType je Element). V tomto okamžiku proces odvození začíná z tohoto prvku. Pokud se do konce dokumentu nezjistí žádný prvek, ArgumentException vyvolá se chyba.
XmlSchemaSet Pokud se objekt předá jako parametr a element, na kterém XmlReader je objekt umístěn, je definován v jednom ze schémat v objektu XmlSchemaSet, odvozené schéma se použije k upřesnění existujícího schématu v parametru XmlSchemaSet se stejným cílovým oborem názvů. V opačném případě se pro obor názvů odvodí nové schéma.