XmlSchemaInference.InferSchema Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Hiermee wordt een XSD-schema (XML Schema Definition Language) afgeleid van het opgegeven XML-document.
Overloads
| Name | Description |
|---|---|
| InferSchema(XmlReader) |
Hiermee wordt een XSD-schema (XML Schema Definition Language) afgeleid van het XML-document dat is opgenomen in het XmlReader opgegeven object. |
| InferSchema(XmlReader, XmlSchemaSet) |
Hiermee wordt een XSD-schema (XML Schema Definition Language) afgeleid van het XML-document in het XmlReader opgegeven object en wordt het afgeleid schema verfijnd met behulp van een bestaand schema in het XmlSchemaSet object dat is opgegeven met dezelfde doelnaamruimte. |
InferSchema(XmlReader)
- Bron:
- Infer.cs
- Bron:
- Infer.cs
- Bron:
- Infer.cs
- Bron:
- Infer.cs
- Bron:
- Infer.cs
Hiermee wordt een XSD-schema (XML Schema Definition Language) afgeleid van het XML-document dat is opgenomen in het XmlReader opgegeven object.
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
Parameters
- instanceDocument
- XmlReader
Een XmlReader object met het XML-document waaruit een schema moet worden afgeleid.
Retouren
Een XmlSchemaSet object met de uitgestelde schema's.
Uitzonderingen
Het XML-document is niet goed opgemaakt.
Het XmlReader object bevindt zich niet op het hoofdknooppunt of op een element. Er treedt een fout op tijdens het schemadeductieproces.
Voorbeelden
In dit voorbeeld wordt een XML-bestand als invoer gebruikt en wordt een schema gegenereerd waarmee de voorbeeld-XML kan worden gevalideerd.
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
Hier volgt het XML-invoerbestand.
<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>
Hier volgt het schema dat is afgeleid van het XML-document.
<?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>
Opmerkingen
Met de InferSchema methode worden een of meer W3C XSD-schema's (XML Schema Definition Language) afgeleid van het XML-exemplaardocument dat is opgenomen in het XmlReader opgegeven object. Als het XML-document elementen en kenmerken van meerdere naamruimten bevat, worden er meerdere schema's gegenereerd: één voor elke naamruimte die in het document wordt gebruikt. Het primaire schema is het schema waarmee het hele XML-document kan worden gevalideerd en de doelnaamruimte hetzelfde is als de naamruimte van het documentelement van het XML-document.
Hier volgen belangrijke opmerkingen bij het gebruik van de InferSchema methode.
De InferSchema methode negeert alle
xsi:type,xsi:schemaLocationofxsi:noNamespaceSchemaLocationkenmerken in het XML-document.Als het XmlReader object is getypt, wordt de typegegevens die het bevat genegeerd.
Als het XmlReader object is geplaatst op een element dat niet het hoofdelement van het XML-document is, wordt een schema alleen voor dat element afgeleid. Als het XmlReader object niet op een element is geplaatst, wordt de Read methode aangeroepen voor de XmlReader parameter totdat een element wordt aangetroffen (bijvoorbeeld wanneerNodeType).Element Op dit moment begint het deductieproces vanaf dat element. Als er tot het einde van het document geen element wordt aangetroffen, wordt er een ArgumentException gegenereerd.
Van toepassing op
InferSchema(XmlReader, XmlSchemaSet)
- Bron:
- Infer.cs
- Bron:
- Infer.cs
- Bron:
- Infer.cs
- Bron:
- Infer.cs
- Bron:
- Infer.cs
Hiermee wordt een XSD-schema (XML Schema Definition Language) afgeleid van het XML-document in het XmlReader opgegeven object en wordt het afgeleid schema verfijnd met behulp van een bestaand schema in het XmlSchemaSet object dat is opgegeven met dezelfde doelnaamruimte.
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
Parameters
- instanceDocument
- XmlReader
Een XmlReader object met het XML-document waaruit een schema moet worden afgeleid.
- schemas
- XmlSchemaSet
Een XmlSchemaSet object met een bestaand schema dat wordt gebruikt om het uitgestelde schema te verfijnen.
Retouren
Een XmlSchemaSet object met de uitgestelde schema's.
Uitzonderingen
Het XML-document is niet goed opgemaakt.
Het XmlReader object bevindt zich niet op het hoofdknooppunt of op een element. Er treedt een fout op tijdens het schemadeductieproces.
Voorbeelden
De volgende voorbeeldcode gebruikt XML-document 1 als invoer en genereert een schema waarmee XML-document 1 kan worden gevalideerd. De voorbeeldcode gebruikt vervolgens XML-document 2 en verfijnt het schema dat is gegenereerd op basis van XML-document 1, op basis van de wijzigingen in XML-document 2.
Hieronder ziet u XML-document 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>
Het volgende is XML-document 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>
Met de volgende voorbeeldcode wordt een schema afgeleid van het eerste XML-document in readeren wordt vervolgens het afgeleid schema verfijnd met de wijzigingen die zijn gevonden in het tweede XML-document in reader1. De voorbeeldcode maakt gebruik van de eerste overbelaste InferSchema methode om het schema af te leiden en de tweede overbelaste InferSchema methode om het bestaande schema in het XmlSchemaSet object te verfijnen.
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
Het volgende schema is het schema dat is afgeleid van XML-document 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>
Het volgende schema is de verfijnde versie van het bovenstaande schema, op basis van XML-document 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>
Opmerkingen
Met de InferSchema methode worden een of meer W3C XSD-schema's (XML Schema Definition Language) afgeleid van het XML-exemplaardocument dat is opgenomen in het XmlReader opgegeven object. Als het XML-document elementen en kenmerken van meerdere naamruimten bevat, worden er meerdere schema's gegenereerd: één voor elke naamruimte die in het document wordt gebruikt. Het primaire schema is het schema waarmee het hele XML-document kan worden gevalideerd en de doelnaamruimte hetzelfde is als de naamruimte van het documentelement van het XML-document.
Hier volgen belangrijke opmerkingen bij het gebruik van de InferSchema methode.
De InferSchema methode negeert alle
xsi:type,xsi:schemaLocationofxsi:noNamespaceSchemaLocationkenmerken in het XML-document.Als het XmlReader object is getypt, wordt de typegegevens die het bevat genegeerd.
Als het XmlReader object is geplaatst op een element dat niet het hoofdelement van het XML-document is, wordt een schema alleen voor dat element afgeleid. Als het XmlReader object niet op een element is geplaatst, wordt de Read methode aangeroepen voor de XmlReader parameter totdat een element wordt aangetroffen (bijvoorbeeld wanneerNodeType).Element Op dit moment begint het deductieproces vanaf dat element. Als er tot het einde van het document geen element wordt aangetroffen, wordt er een ArgumentException gegenereerd.
Als een XmlSchemaSet object wordt doorgegeven als een parameter en het element waarop het XmlReader object is geplaatst, wordt gedefinieerd in een van de schema's in de XmlSchemaSet, wordt het afgeleid schema gebruikt om een bestaand schema in de XmlSchemaSet parameter met dezelfde doelnaamruimte te verfijnen; anders wordt een nieuw schema afgeleid voor de naamruimte.