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 :
élément de type simple ;
élément vide ;
élément vide avec attributs ;
élément avec attributs et 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 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.
Remarque |
---|
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.
Remarque |
---|
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.
Remarque |
---|
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.
Remarque |
---|
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 |
Conversion |
---|---|
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 étend 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 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.
Voir aussi
Référence
Concepts
Inférence de schémas à partir de documents XML
Règles relatives à l'inférence de types simples