XmlSchemaInference.InferSchema Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Déduit un schéma XSD (XML Schema Definition Language) à partir du document XML spécifié.
Surcharges
| Nom | Description |
|---|---|
| InferSchema(XmlReader) |
Déduit un schéma XSD (XML Schema Definition Language) du document XML contenu dans l’objet XmlReader spécifié. |
| InferSchema(XmlReader, XmlSchemaSet) |
Déduit un schéma XSD (XML Schema Definition Language) à partir du document XML contenu dans l’objet XmlReader spécifié et affine le schéma déduit à l’aide d’un schéma existant dans l’objet XmlSchemaSet spécifié avec le même espace de noms cible. |
InferSchema(XmlReader)
- Source:
- Infer.cs
- Source:
- Infer.cs
- Source:
- Infer.cs
- Source:
- Infer.cs
- Source:
- Infer.cs
Déduit un schéma XSD (XML Schema Definition Language) du document XML contenu dans l’objet XmlReader spécifié.
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
Paramètres
- instanceDocument
- XmlReader
Objet XmlReader contenant le document XML à partir duquel déduire un schéma.
Retours
Objet XmlSchemaSet contenant les schémas déduits.
Exceptions
Le document XML n’est pas bien formé.
L’objet XmlReader n’est pas positionné sur le nœud racine ou sur un élément. Une erreur se produit pendant le processus d’inférence du schéma.
Exemples
Cet exemple utilise un fichier XML comme entrée et génère un schéma qui peut valider l’exemple 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
Voici le fichier XML d’entrée.
<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>
Voici le schéma déduit du document 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>
Remarques
La InferSchema méthode déduit un ou plusieurs schémas W3C XML Schema Definition Language (XSD) du document d’instance XML contenu dans l’objet XmlReader spécifié. Si le document XML contient des éléments et des attributs provenant de plusieurs espaces de noms, plusieurs schémas sont générés : un pour chaque espace de noms utilisé dans le document. Le schéma principal est le schéma qui peut valider l’intégralité du document XML, et son espace de noms cible est identique à l’espace de noms de l’élément de document du document XML.
Les remarques suivantes sont importantes à prendre en compte lors de l’utilisation de la InferSchema méthode.
La InferSchema méthode ignore tous
xsi:typeles attributs ou tousxsi:schemaLocationxsi:noNamespaceSchemaLocationles attributs du document XML.Si l’objet XmlReader est typé, les informations de type qu’il contient sont ignorées.
Si l’objet XmlReader est positionné sur un élément qui n’est pas l’élément racine du document XML, un schéma est déduit uniquement pour cet élément. Si l’objet XmlReader n’est pas positionné sur un élément, la Read méthode est appelée sur le XmlReader paramètre jusqu’à ce qu’un élément soit rencontré (par exemple, quand est NodeTypeElement). À ce stade, le processus d’inférence commence à partir de cet élément. Si aucun élément n’est rencontré jusqu’à la fin du document, un ArgumentException élément est levée.
S’applique à
InferSchema(XmlReader, XmlSchemaSet)
- Source:
- Infer.cs
- Source:
- Infer.cs
- Source:
- Infer.cs
- Source:
- Infer.cs
- Source:
- Infer.cs
Déduit un schéma XSD (XML Schema Definition Language) à partir du document XML contenu dans l’objet XmlReader spécifié et affine le schéma déduit à l’aide d’un schéma existant dans l’objet XmlSchemaSet spécifié avec le même espace de noms cible.
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
Paramètres
- instanceDocument
- XmlReader
Objet XmlReader contenant le document XML à partir duquel déduire un schéma.
- schemas
- XmlSchemaSet
Objet XmlSchemaSet contenant un schéma existant utilisé pour affiner le schéma déduit.
Retours
Objet XmlSchemaSet contenant les schémas déduits.
Exceptions
Le document XML n’est pas bien formé.
L’objet XmlReader n’est pas positionné sur le nœud racine ou sur un élément. Une erreur se produit pendant le processus d’inférence du schéma.
Exemples
L’exemple de code suivant prend le document XML 1 comme entrée et génère un schéma qui peut valider le document XML 1. L’exemple de code prend ensuite le document XML 2 et affine le schéma généré à partir du document XML 1, en fonction des modifications trouvées dans le document XML 2.
Voici le document 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>
Voici le document 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>
L’exemple de code suivant déduit un schéma du premier document XML contenu dans reader, puis affine le schéma déduit avec les modifications trouvées dans le deuxième document XML contenu dans reader1. L’exemple de code utilise la première méthode surchargée InferSchema pour déduire le schéma et la deuxième méthode surchargée InferSchema pour affiner le schéma existant dans l’objet 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
Le schéma suivant est le schéma déduit à partir du document 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>
Le schéma suivant est la version affinée du schéma ci-dessus, basée sur le document 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>
Remarques
La InferSchema méthode déduit un ou plusieurs schémas W3C XML Schema Definition Language (XSD) du document d’instance XML contenu dans l’objet XmlReader spécifié. Si le document XML contient des éléments et des attributs de plusieurs espaces de noms, plusieurs schémas sont générés : un pour chaque espace de noms utilisé dans le document. Le schéma principal est le schéma qui peut valider l’intégralité du document XML, et son espace de noms cible est identique à l’espace de noms de l’élément de document du document XML.
Les remarques suivantes sont importantes à prendre en compte lors de l’utilisation de la InferSchema méthode.
La InferSchema méthode ignore tous
xsi:typeles attributs ou tousxsi:schemaLocationxsi:noNamespaceSchemaLocationles attributs du document XML.Si l’objet XmlReader est typé, les informations de type qu’il contient sont ignorées.
Si l’objet XmlReader est positionné sur un élément qui n’est pas l’élément racine du document XML, un schéma est déduit uniquement pour cet élément. Si l’objet XmlReader n’est pas positionné sur un élément, la Read méthode est appelée sur le XmlReader paramètre jusqu’à ce qu’un élément soit rencontré (par exemple, quand est NodeTypeElement). À ce stade, le processus d’inférence commence à partir de cet élément. Si aucun élément n’est rencontré jusqu’à la fin du document, un ArgumentException élément est levée.
Si un XmlSchemaSet objet est passé en tant que paramètre et que l’élément sur lequel l’objet XmlReader est positionné est défini dans l’un des schémas du XmlSchemaSet, le schéma déduit est utilisé pour affiner un schéma existant dans le XmlSchemaSet paramètre avec le même espace de noms cible ; sinon, un nouveau schéma est déduit pour l’espace de noms.