Partager via


Règles pour l'inférence de types et de structure de nœud de schéma

Cette rubrique décrit comment le processus d'inférence de schéma convertit les types de nœuds d'un document XML en une structure en langage XSD (XML Schema Definition).

Règles d'inférence d'élément

Cette section décrit les règles d'inférence pour les déclarations d'élément. Huit structures de déclaration d'élément seront déduites :

  1. élément de type simple ;

  2. élément vide ;

  3. élément vide avec attributs ;

  4. élément avec attributs et contenu simple ;

  5. élément avec une séquence d'éléments enfants ;

  6. élément avec une séquence d'éléments enfants et d'attributs ;

  7. élément avec une séquence de choix d'éléments enfants ;

  8. élément avec une séquence de choix d'éléments enfants et d'attributs.

Notes

Toutes les déclarations complexType sont déduites comme des types anonymes. Le seul élément global déduit est l'élément racine ; tous les autres éléments sont locaux.

Pour plus d'informations sur le processus d'inférence de schéma, consultez Inférence de schémas à partir de documents XML.

Élément de type simple

Le tableau suivant présente l'entrée XML dans la méthode InferSchema et le schéma XML généré. L'élément en gras montre le schéma déduit pour l'élément de type simple.

Pour plus d'informations sur le processus d'inférence de schéma, consultez Inférence de schémas à partir de documents XML.

XML schéma
<?xml version="1.0"?>

<root>text</root>
<?xml version="1.0" encoding="utf-8"?>

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xml

ns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="root" type="xs:string" />

</xs:schema>

Élément vide

Le tableau suivant présente l'entrée XML dans la méthode InferSchema et le schéma XML généré. L'élément en gras montre le schéma déduit pour l'élément vide.

Pour plus d'informations sur le processus d'inférence de schéma, consultez Inférence de schémas à partir de documents XML.

XML schéma
<?xml version="1.0"?>

<empty/>
<?xml version="1.0" encoding="utf-8"?>

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xml

ns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="empty" />

</xs:schema>

Élément vide avec attributs

Le tableau suivant présente l'entrée XML dans la méthode InferSchema et le schéma XML généré. Les éléments en gras montrent le schéma déduit pour l'élément vide avec des attributs.

Pour plus d'informations sur le processus d'inférence de schéma, consultez Inférence de schémas à partir de documents XML.

XML schéma
<?xml version="1.0"?>

<empty attribute1="text"/>
<?xml version="1.0" encoding="utf-8"?>

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xml

ns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="empty">

<xs:complexType>

<xs:attribute name="attribute1" type="xs:string" use="required" />

</xs:complexType>

</xs:element>

</xs:schema>

Élément avec attributs et contenu simple

Le tableau suivant présente l'entrée XML dans la méthode InferSchema et le schéma XML généré. Les éléments en gras montrent le schéma déduit pour un élément avec des attributs et un contenu simple.

Pour plus d'informations sur le processus d'inférence de schéma, consultez Inférence de schémas à partir de documents XML.

XML schéma
<?xml version="1.0"?>

<root attribute1="text">value</root>
<?xml version="1.0" encoding="utf-8"?>

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xml

ns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="root">

<xs:complexType>

<xs:simpleContent>

<xs:extension base="xs:string">

<xs:attribute name="attribute1" type="xs:string" use="required" />

</xs:extension>

</xs:simpleContent>

</xs:complexType>

</xs:element>

</xs:schema>

Élément avec une séquence d'éléments enfants

Le tableau suivant présente l'entrée XML dans la méthode InferSchema et le schéma XML généré. Les éléments en gras montrent le schéma déduit pour un élément avec une séquence d'éléments enfants.

Notes

Même si un élément n'a qu'un seul élément enfant, il est traité comme une séquence.

Pour plus d'informations sur le processus d'inférence de schéma, consultez Inférence de schémas à partir de documents XML.

XML schéma
<?xml version="1.0"?>

<root>

<subElement/>

</root>
<?xml version="1.0" encoding="utf-8"?>

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xml

ns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="root">

<xs:complexType>

<xs:sequence>

<xs:element name="subElement" />

</xs:sequence>

</xs:complexType>

</xs:element>

</xs:schema>

Élément avec une séquence d'éléments enfants et d'attributs

Le tableau suivant présente l'entrée XML dans la méthode InferSchema et le schéma XML généré. Les éléments en gras montrent le schéma déduit pour un élément avec une séquence d'éléments enfants et d'attributs.

Notes

Même si un élément n'a qu'un seul élément enfant, il est traité comme une séquence.

Pour plus d'informations sur le processus d'inférence de schéma, consultez Inférence de schémas à partir de documents XML.

XML schéma
<?xml version="1.0"?>

<root attribute1="text">

<subElement1/>

<subElement2/>

</root>
<?xml version="1.0" encoding="utf-8"?>

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xml

ns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="root">

<xs:complexType>

<xs:sequence>

<xs:element name="subElement1" />

<xs:element name="subElement2" />

</xs:sequence>

<xs:attribute name="attribute1" type="xs:string" use="required" />

</xs:complexType>

</xs:element>

</xs:schema>

Élément avec une séquence de choix et d'éléments enfants

Le tableau suivant présente l'entrée XML dans la méthode InferSchema et le schéma XML généré. Les éléments en gras montrent le schéma déduit pour un élément avec une séquence et un choix d'éléments enfants.

Notes

L'attribut maxOccurs de l'élément xs:choice a la valeur "unbounded" dans le schéma déduit.

Pour plus d'informations sur le processus d'inférence de schéma, consultez Inférence de schémas à partir de documents XML.

XML schéma
<?xml version="1.0"?>

<root>

<subElement1/>

<subElement2/>

<subElement1/>

</root>
<?xml version="1.0" encoding="utf-8"?>

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xml

ns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="root">

<xs:complexType>

<xs:sequence>

<xs:choice maxOccurs="unbounded">

<xs:element name="subElement1" />

<xs:element name="subElement2" />

</xs:choice>

</xs:sequence>

</xs:complexType>

</xs:element>

</xs:schema>

Élément avec une séquence et un choix d'éléments enfants et d'attributs

Le tableau suivant présente l'entrée XML dans la méthode InferSchema et le schéma XML généré. Les éléments en gras montrent le schéma déduit pour un élément avec une séquence et un choix d'éléments enfants et d'attributs.

Notes

L'attribut maxOccurs de l'élément xs:choice a la valeur "unbounded" dans le schéma déduit.

Pour plus d'informations sur le processus d'inférence de schéma, consultez Inférence de schémas à partir de documents XML.

XML schéma
<?xml version="1.0"?>

<root attribute1="text">

<subElement1/>

<subElement2/>

<subElement1/>

</root>
<?xml version="1.0" encoding="utf-8"?>

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xml

ns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="root">

<xs:complexType>

<xs:sequence>

<xs:choice maxOccurs="unbounded">

<xs:element name="subElement1" />

<xs:element name="subElement2" />

</xs:choice>

</xs:sequence>

<xs:attribute name="attribute1" type="xs:string" use="required" />

</xs:complexType>

</xs:element>

</xs:schema>

Traitement d'attribut

Chaque fois qu'un nouvel attribut est rencontré dans un nœud, il est ajouté à la définition déduite du nœud avec use="required". La prochaine fois que le même nœud est trouvé dans l'instance, le processus d'inférence comparera les attributs de l'instance actuelle avec ceux déjà déduits. Si certains des attributs déjà déduits manquent dans l'instance, use="optional" est ajouté à la définition d'attribut. De nouveaux attributs sont ajoutés aux déclarations existantes avec use="optional".

Contraintes d'occurrence

Durant le processus d'inférence de schéma, les attributs minOccurs et maxOccurs sont générés, pour des composants déduits d'un schéma, avec les valeurs "0" ou "1" et "1" ou "unbounded". Les valeurs "1" et "unbounded" sont utilisées uniquement lorsque les valeurs "0" et "1" ne peuvent pas valider le document XML (par exemple, si MinOccurs="0" ne décrit pas précisément un élément, minOccurs="1" est utilisé).

Contenu mixte

Si un élément contient un contenu mixte (par exemple, du texte intercalé avec des éléments), l'attribut mixed="true" est généré pour la définition de type complexe déduite.

Autres règles d'inférence de type de nœud

Le tableau suivant décrit les règles d'inférence pour le traitement d'instruction, de commentaire, de référence d'entité, de CDATA, de type de document et de nœuds d'espace de noms.

Type de nœud Traduction
Instruction de traitement Ignoré.
Commentaire Ignoré.
Référence d'entité La classe XmlSchemaInference ne gère pas les références d'entité. Si un document XML contient des références d’entité, vous devez utiliser un lecteur qui développe les entités. Par exemple, vous pouvez passer un objet XmlTextReader avec la propriété EntityHandling définie à ExpandEntities comme paramètre. Si des références d'entité sont rencontrées et que le lecteur n'étend pas les entités, une exception est levée.
CDATA Toute section <![CDATA[ … ]] dans un document XML sera déduite en tant que xs:string.
Type du document Ignoré.
Espaces de noms Ignoré.

Pour plus d'informations sur le processus d'inférence de schéma, consultez Inférence de schémas à partir de documents XML.

Voir aussi