Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cette rubrique décrit comment le processus d’inférence de schéma traduit les types de nœuds dans un document XML en structure XSD (XML Schema Definition Language).
Règles d’inférence d’élément
Cette section décrit les règles d’inférence pour les déclarations d’éléments. Il existe huit structures de déclarations d’éléments qui seront déduites :
Élément de type simple
Élément vide
Élément vide avec des attributs
Élément avec des attributs et du contenu simple
élément avec une séquence d'éléments enfants ;
élément avec une séquence d'éléments enfants et d'attributs ;
élément avec une séquence de choix d'éléments enfants ;
élément avec une séquence de choix d'éléments enfants et d'attributs.
Remarque
Toutes les complexType déclarations sont déduites en tant que 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 typé simple
Le tableau suivant présente l’entrée XML de la InferSchema méthode 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" xmlns: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 de la InferSchema méthode et le schéma XML généré. L’élément en gras affiche 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" xmlns: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 de la InferSchema méthode et le schéma XML généré. Les éléments en gras affichent 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" xmlns: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 de la InferSchema méthode et le schéma XML généré. Les éléments en gras affichent le schéma déduit pour un élément avec des attributs et du 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" xmlns: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 de la InferSchema méthode 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.
Remarque
Même si un élément n’a qu’un seul élément enfant, il est toujours 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" xmlns: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 de la InferSchema méthode 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.
Remarque
Même si un élément n’a qu’un seul élément enfant, il est toujours 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" xmlns: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 de la InferSchema méthode 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.
Remarque
L’attribut maxOccurs de l’élément xs:choice est défini "unbounded" sur 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" xmlns: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 de la InferSchema méthode 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.
Remarque
L’attribut maxOccurs de l’élément xs:choice est défini "unbounded" sur 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" xmlns: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 des attributs
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 compare les attributs de l’instance actuelle avec ceux déjà déduits. Si certains des éléments déjà déduits sont manquants 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
Pendant le processus d’inférence du schéma, les attributs minOccurs et maxOccurs sont générés pour les 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 avec précision un élément, minOccurs="1" est utilisée).
Contenu mixte
Si un élément contient du contenu mixte (par exemple, du texte entrelacé 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 des instructions, des commentaires, des références d’entité, CDATA, type de document et nœuds d’espace de noms.
| Type de nœud | Traduction |
|---|---|
| Instruction de traitement | Ignoré. |
| Commentaire | Ignoré. |
| Référence d’entité | La XmlSchemaInference classe 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 | Toutes les <![CDATA[ … ]] sections d’un document XML seront déduites en tant que xs:string. |
| Type de 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.