Partage via


XmlSchemaInference.InferSchema Méthode

Définition

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 tous xsi:schemaLocationxsi:noNamespaceSchemaLocation les 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 tous xsi:schemaLocationxsi:noNamespaceSchemaLocation les 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.

S’applique à