XmlSchemaInference.InferSchema Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Leitet ein XML-Schema der Schemadefinitionssprache (XSD) aus dem angegebenen XML-Dokument ab.
Überlädt
| Name | Beschreibung |
|---|---|
| InferSchema(XmlReader) |
Leitet ein XML-Schemadefinitionssprache (XSD)-Schema aus dem XML-Dokument ab, das XmlReader im angegebenen Objekt enthalten ist. |
| InferSchema(XmlReader, XmlSchemaSet) |
Leitet ein XML-Schema der Schemadefinitionssprache (XSD) aus dem XML-Dokument ab, das XmlReader im angegebenen Objekt enthalten ist, und verfeinert das abgeleitete Schema mithilfe eines vorhandenen Schemas im Objekt, das XmlSchemaSet mit demselben Zielnamespace angegeben ist. |
InferSchema(XmlReader)
- Quelle:
- Infer.cs
- Quelle:
- Infer.cs
- Quelle:
- Infer.cs
- Quelle:
- Infer.cs
- Quelle:
- Infer.cs
Leitet ein XML-Schemadefinitionssprache (XSD)-Schema aus dem XML-Dokument ab, das XmlReader im angegebenen Objekt enthalten ist.
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
Parameter
- instanceDocument
- XmlReader
Ein XmlReader Objekt, das das XML-Dokument enthält, aus dem ein Schema abgeleitet werden soll.
Gibt zurück
Ein XmlSchemaSet Objekt, das die abgeleiteten Schemas enthält.
Ausnahmen
Das XML-Dokument ist nicht wohlgeformt.
Das XmlReader Objekt wird nicht auf dem Stammknoten oder in einem Element positioniert. Während des Schemainferenzprozesses tritt ein Fehler auf.
Beispiele
In diesem Beispiel wird eine XML-Datei als Eingabe verwendet und ein Schema generiert, mit dem das Beispiel-XML überprüft werden kann.
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
Nachfolgend sehen Sie die XML-Eingabedatei.
<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>
Nachfolgend sehen Sie das Schema, das aus dem XML-Dokument abgeleitet wurde.
<?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>
Hinweise
Die InferSchema Methode leitet ein oder mehrere W3C XML Schema Definition Language (XSD)-Schemaschemas aus dem XML-Instanzdokument ab, das XmlReader im angegebenen Objekt enthalten ist. Wenn das XML-Dokument Elemente und Attribute aus mehreren Namespaces enthält, werden mehrere Schemas generiert: eine für jeden namespace, der im Dokument verwendet wird. Das primäre Schema ist das Schema, das das gesamte XML-Dokument überprüfen kann, und sein Zielnamespace entspricht dem Namespace des Dokumentelements des XML-Dokuments.
Im Folgenden finden Sie wichtige Hinweise, die Sie bei der Verwendung der InferSchema Methode berücksichtigen sollten.
Die InferSchema Methode ignoriert alle
xsi:typeAttributexsi:schemaLocationoderxsi:noNamespaceSchemaLocationAttribute im XML-Dokument.Wenn das XmlReader Objekt eingegeben wird, werden die darin enthaltenen Typinformationen ignoriert.
Wenn das XmlReader Objekt auf einem Element positioniert ist, das nicht das Stammelement des XML-Dokuments ist, wird ein Schema nur für dieses Element abgeleitet. Wenn das XmlReader Objekt nicht für ein Element positioniert ist, wird die Read Methode für den XmlReader Parameter aufgerufen, bis ein Element gefunden wird (z. B. wenn NodeType das ist Element). An diesem Punkt beginnt der Ableitungsprozess von diesem Element. Wenn bis zum Ende des Dokuments kein Element gefunden wird, wird ein ArgumentException Fehler ausgelöst.
Gilt für:
InferSchema(XmlReader, XmlSchemaSet)
- Quelle:
- Infer.cs
- Quelle:
- Infer.cs
- Quelle:
- Infer.cs
- Quelle:
- Infer.cs
- Quelle:
- Infer.cs
Leitet ein XML-Schema der Schemadefinitionssprache (XSD) aus dem XML-Dokument ab, das XmlReader im angegebenen Objekt enthalten ist, und verfeinert das abgeleitete Schema mithilfe eines vorhandenen Schemas im Objekt, das XmlSchemaSet mit demselben Zielnamespace angegeben ist.
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
Parameter
- instanceDocument
- XmlReader
Ein XmlReader Objekt, das das XML-Dokument enthält, aus dem ein Schema abgeleitet werden soll.
- schemas
- XmlSchemaSet
Ein XmlSchemaSet Objekt, das ein vorhandenes Schema enthält, das zum Verfeinern des abgeleiteten Schemas verwendet wird.
Gibt zurück
Ein XmlSchemaSet Objekt, das die abgeleiteten Schemas enthält.
Ausnahmen
Das XML-Dokument ist nicht wohlgeformt.
Das XmlReader Objekt wird nicht auf dem Stammknoten oder in einem Element positioniert. Während des Schemainferenzprozesses tritt ein Fehler auf.
Beispiele
Der folgende Beispielcode verwendet XML-Dokument 1 als Eingabe und generiert ein Schema, das XML-Dokument 1 überprüfen kann. Der Beispielcode verwendet dann XML-Dokument 2 und verfeinert das aus XML-Dokument 1 generierte Schema basierend auf den Änderungen, die in XML-Dokument 2 gefunden wurden.
Im Folgenden sehen Sie 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>
Im Folgenden sehen Sie 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>
Im folgenden Beispielcode wird ein Schema aus dem ersten XML-Dokument abgeleitet, in readerdem es enthalten ist, und anschließend wird das abgeleitete Schema mit den Im zweiten XML-Dokument gefundenen Änderungen verfeinert reader1. Der Beispielcode verwendet die erste überladene InferSchema Methode, um das Schema zu ableiten, und die zweite überladene InferSchema Methode, um das vorhandene Schema im XmlSchemaSet Objekt zu verfeinern.
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
Das folgende Schema ist das Schema, das aus XML-Dokument 1 abgeleitet wird.
<?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>
Das folgende Schema ist die verfeinerte Version des obigen Schemas, basierend auf 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>
Hinweise
Die InferSchema Methode leitet ein oder mehrere W3C XML Schema Definition Language (XSD)-Schemaschemas aus dem XML-Instanzdokument ab, das XmlReader im angegebenen Objekt enthalten ist. Wenn das XML-Dokument Elemente und Attribute aus mehreren Namespaces enthält, werden mehrere Schemas generiert: eines für jeden namespace, der im Dokument verwendet wird. Das primäre Schema ist das Schema, das das gesamte XML-Dokument überprüfen kann, und sein Zielnamespace entspricht dem Namespace des Dokumentelements des XML-Dokuments.
Im Folgenden finden Sie wichtige Hinweise, die Sie bei der Verwendung der InferSchema Methode berücksichtigen sollten.
Die InferSchema Methode ignoriert alle
xsi:typeAttributexsi:schemaLocationoderxsi:noNamespaceSchemaLocationAttribute im XML-Dokument.Wenn das XmlReader Objekt eingegeben wird, werden die darin enthaltenen Typinformationen ignoriert.
Wenn das XmlReader Objekt auf einem Element positioniert ist, das nicht das Stammelement des XML-Dokuments ist, wird ein Schema nur für dieses Element abgeleitet. Wenn das XmlReader Objekt nicht für ein Element positioniert ist, wird die Read Methode für den XmlReader Parameter aufgerufen, bis ein Element gefunden wird (z. B. wenn NodeType das ist Element). An diesem Punkt beginnt der Ableitungsprozess von diesem Element. Wenn bis zum Ende des Dokuments kein Element gefunden wird, wird ein ArgumentException Fehler ausgelöst.
Wenn ein XmlSchemaSet Objekt als Parameter übergeben wird und das Element, auf dem das XmlReader Objekt positioniert ist, in einem der Schemas im Schema definiert XmlSchemaSetwird, wird das abgeleitete Schema verwendet, um ein vorhandenes Schema im XmlSchemaSet Parameter mit demselben Zielnamespace zu verfeinern. Andernfalls wird ein neues Schema für den Namespace abgeleitet.