Prise en charge de la liaison de l'élément Schema
Cette rubrique est spécifique à une technologie existante. Les services Web XML et les clients du service Web XML doivent à présent être créés à l'aide de Windows Communication Foundation.
Le .NET Framework prend en charge la liaison pour l'élément <schema>.
L'élément <schema> est l'élément racine d'un document de schéma XML.
Explication
L'élément <schema> est l'élément racine d'un document de schéma XML.
Parmi les attributs de l'élément <schema>, les attributs blockDefault, finalDefault, id et version n'ont pas de liaison aux entités de code .NET Framework. L'attribut targetNamespace est reconnu ; les attributs attributeFormDefault et elementFormDefault sont partiellement reconnus. Consultez le tableau suivant. Pour plus d'informations, consultez les rubriques sur les attributs individuels.
Attribut TargetNamespace
L'attribut targetNamespace de l'élément racine <schema> spécifie l'espace de noms du schéma en tant qu'URI (Uniform Resource Identifier). L'outil Xsd.exe lie l'attribut targetNamespace de l'élément <schema> aux propriétés Namespace de différents attributs XML.
Lors de la génération du code source à partir d'un document de schéma XML, Xsd.exe utilise la valeur targetNamespace comme suit :
Pour chaque type généré correspondant à un type de données dans le schéma, Xsd.exe affecte à la propriété System.Xml.Serialization.XmlTypeAttribute.Namespace la valeur targetNamespace.
Pour chaque type généré correspondant à un type de données qui peut apparaître comme la racine d'un document XML conforme au schéma, Xsd.exe affecte à la propriété System.Xml.Serialization.XmlRootAttribute.Namespace la valeur targetNamespace. Un type de données peut apparaître en tant que racine du document s'il est utilisé par un élément <element> déclaré globalement (comme un enfant de l'élément <schema> racine).
Lors de la génération d'un document de schéma XML à partir d'un ensemble de classes dans un assembly, Xsd.exe crée un document de schéma XML avec un attribut targetNamespace unique pour chaque valeur unique qu'il rencontre dans la propriété Namespace de certaines classes d'attributs XML. La propriété apparaît comme suit :
System.Xml.Serialization.XmlRootAttribute.Namespace
System.Xml.Serialization.XmlTypeAttribute.Namespace
Attribut AttributeFormDefault
L'utilitaire Xsd.exe génère des schémas XML qui laissent l'attribut attributeFormDefault global non spécifié. Lorsqu'il rencontre l'attribut dans un schéma existant, il définit la propriété Form de chaque XmlAttributeAttribute de champ non substitué en conséquence.
Explication : attribut AttributeFormDefault
Le schéma XML requiert que tous les éléments et attributs globalement déclarés (comme enfants de l'élément <schema>) apparaissent qualifiés par un espace de noms dans une instance de document. Pour les éléments et les attributs déclarés localement (dans une définition <complexType>), la qualification d'espace de noms est facultative.
Pour contrôler la qualification d'espace de noms pour tous les éléments et attributs locaux déclarés dans un document de schéma XML, utilisez respectivement les attributs elementFormDefault et attributeFormDefault de l'élément <schema> racine. Les valeurs possibles pour ces deux attributs sont qualified
et unqualified
, la valeur par défaut étant unqualified
.
De plus, l'attribut form peut être utilisé sur une déclaration <element> ou <attribute> locale afin de substituer la valeur par défaut du schéma pour cet élément ou cet attribut spécifique.
Le tableau suivant décrit comment Xsd.exe traite les trois choix possibles pour attributeFormDefault : qualified
, unqualified
, non spécifié. (Souvenez-vous que lors de la génération du code source à partir d'un document de schéma XML, Xsd.exe crée un champ public pour chaque attribut XML et applique à ce champ un attribut .NET Framework, XmlAttributeAttribute.)
Valeurs attributeFormDefault possibles |
Source générée par Xsd.exe à partir de XSD |
XSD généré par Xsd.exe à partir d'un assembly compilé depuis la même source |
|
Les classes et les champs correspondant aux attributs apparaissent sans formulaire spécifié. |
Non spécifié, la valeur par défaut |
|
Les classes et les champs correspondant aux attributs apparaissent sans formulaire spécifié. |
Non spécifié, la valeur par défaut |
|
Les champs qui correspondent à la fois à des attributs déclarés localement et à des attributs déclarés globalement apparaissent avec un attribut XmlAttribute qui est passé |
Non spécifié, la valeur par défaut En outre, chaque déclaration d'attribut spécifie |
Le paramètre passé à la déclaration XmlAttribute définit la propriété Form, dont les valeurs possibles proviennent de l'énumération XmlSchemaForm :
XmlSchemaForm.Qualified
XmlSchemaForm.Unqualified
XmlSchemaForm.None : valeur par défaut
L'une des conséquences de l'utilisation d'un paramètre XmlAttribute est que ce qui était un paramètre global dans le document XSD d'origine devient spécifié pour chaque attribut XML dans le code source et le XSD généré. L'attribut attributeFormDefault global est toujours considéré comme non spécifié, avec restauration de la valeur par défaut unqualified
.
Exemple : attribut AttributeFormDefault
Document de schéma XML d'entrée où attributeFormDefault="qualified"
:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" attributeFormDefault="qualified"
xmlns="http://example.org/" targetNamespace="http://example.org/" elementFormDefault="qualified">
<xsd:attribute name="version" type="xsd:string"/>
<xsd:complexType name="keyInfo">
<xsd:attribute ref="version" />
<xsd:attribute name="public" type="xsd:boolean" use="required"/>
</xsd:complexType>
<xsd:element name="key" type="keyInfo"/>
</xsd:schema>
Classe C# générée à partir du document de schéma XML précédent :
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://example.org/")]
[System.Xml.Serialization.XmlRootAttribute("key", Namespace="http://example.org/", IsNullable=false)]
public class keyInfo {
[System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)]
public string version;
System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)]
public bool @public;
}
Élément <schema> racine du schéma XML généré depuis un assembly compilé à partir de la source C# précédente (les déclarations d'attribut apparaissent également sans attribut form) :
<xs:schema xmlns:tns="http://example.org/" elementFormDefault="qualified" targetNamespace="http://example.org/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
...
</xs:schema>
Attribut ElementFormDefault
L'utilitaire Xsd.exe génère des schémas XML qui laissent l'ensemble d'attributs elementFormDefault global affecté à la valeur "qualified"
. Lorsqu'il rencontre l'attribut dans un schéma existant, il définit la propriété Form de chaque XmlElementAttribute de champ non substitué en conséquence.
Explication : attribut ElementFormDefault
Le schéma XML requiert que tous les éléments et attributs globalement déclarés (comme enfants de l'élément <schema>) apparaissent qualifiés par un espace de noms dans une instance de document. Pour les éléments et les attributs déclarés localement (dans une définition <complexType>), la qualification d'espace de noms est facultative.
Pour contrôler la qualification d'espace de noms pour tous les éléments et attributs locaux déclarés dans un document de schéma XML, utilisez respectivement les attributs elementFormDefault et attributeFormDefault de l'élément <schema> racine. Les valeurs possibles pour ces deux attributs sont qualified
et unqualified
, la valeur par défaut étant unqualified
.
De plus, l'attribut form peut être utilisé sur une déclaration <element> ou <attribute> locale afin de substituer la valeur par défaut du schéma pour cet élément ou cet attribut spécifique.
Alors que la valeur par défaut de elementFormDefault est unqualified
, le .NET Framework traite la valeur par défaut comme qualified
, tout en respectant encore l'utilisation de la valeur unqualified
. Le tableau suivant décrit comment Xsd.exe traite les trois choix possibles pour elementFormDefault : qualified
, unqualified
, non spécifié. (Souvenez-vous que lors de la génération de code source à partir d'un document de schéma XML, Xsd.exe crée un champ public pour chaque élément XML.)
Valeurs elementFormDefault possibles |
Source générée par Xsd.exe à partir de XSD |
XSD généré par Xsd.exe à partir d'un assembly compilé depuis la même source |
|
Les classes et les champs correspondant aux éléments apparaissent sans formulaire spécifié. |
|
|
Les classes et les champs correspondant aux éléments apparaissent sans formulaire spécifié. |
|
|
Les champs correspondant à des éléments localement déclarés apparaissent avec un attribut XmlElement qui est passé |
En outre, chaque élément qui avait été déclaré localement à l'origine utilise |
Le paramètre passé à la déclaration XmlElement définit la propriété Form, dont les valeurs possibles proviennent de l'énumération XmlSchemaForm :
XmlSchemaForm.Qualified
XmlSchemaForm.Unqualified
XmlSchemaForm.None : valeur par défaut
L'une des conséquences de l'utilisation d'un paramètre XmlElement est que ce qui était un paramètre global dans le document XSD d'origine devient spécifié pour chaque élément XML dans le code source et le XSD généré. L'attribut elementFormDefault global est toujours censé avoir la valeur qualified
.
Exemple : attribut ElementFormDefault
Document de schéma XML d'entrée où elementFormDefault="unqualified"
:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://example.org/" targetNamespace="http://example.org/" elementFormDefault="unqualified">
<xsd:element name="version" type="xsd:string"/>
<xsd:complexType name="keyInfo">
<xsd:sequence>
<xsd:element ref="version" />
<xsd:element name="public" type="xsd:boolean" />
</xsd:sequence>
</xsd:complexType>
<xsd:element name="key" type="keyInfo"/>
</xsd:schema>
Classe C# générée à partir du document de schéma XML précédent :
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://example.org/")]
[System.Xml.Serialization.XmlRootAttribute("key", Namespace="http://example.org/", IsNullable=false)]
public class keyInfo {
public string version;
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public bool @public;
}
Document de schéma XML généré à partir d'un assembly compilé depuis la source C# précédente :
<xs:schema xmlns:tns="http://example.org/" elementFormDefault="qualified" targetNamespace="http://example.org/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="key" type="tns:keyInfo" />
<xs:complexType name="keyInfo">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="1" name="version" type="xs:string" />
<xs:element minOccurs="1" maxOccurs="1" form="unqualified" name="public" type="xs:boolean" />
</xs:sequence>
</xs:complexType>
</xs:schema>
Attributs possibles | Prise en charge de la liaison |
---|---|
attributeFormDefault |
Le .NET Framework reconnaît la valeur par défaut, Consultez la section Attribut AttributeFormDefault précédente. |
blockDefault |
L'attribut blockDefault de l'élément <schema> fournit une valeur par défaut pour les attributs block des éléments <complexType> et <element>. L'outil Xsd.exe ignore l'attribut blockDefault de l'élément <schema> ainsi que l'attribut block dans ses éléments respectifs. |
elementFormDefault |
Le .NET Framework utilise une valeur par défaut différente, Consultez la section Attribut ElementFormDefault précédente. |
finalDefault |
L'attribut finalDefault de l'élément <schema> fournit une valeur par défaut pour les attributs final de certains éléments. L'outil Xsd.exe ignore l'attribut finalDefault de l'élément <schema> ainsi que l'attribut final dans ses éléments respectifs. |
id |
L'utilitaire Xsd.exe ignore l'attribut id qui a pour but de fournir un identificateur unique. |
xml:lang |
Xsd.exe ignore l'attribut lang dans l'espace de noms http://www.w3.org/XML/1198 lorsqu'il est utilisé dans l'élément <schema> racine. |
targetNamespace |
L'outil Xsd.exe lie l'attribut targetNamespace de l'élément <schema> aux propriétés Namespace de différents attributs XML. Les attributs utilisés dépendent de la direction de la traduction. Consultez la section Attribut TargetNamespace précédente. |
version |
L'attribut version est disponible pour information. L'outil Xsd.exe ignore l'attribut. |
Éléments parents possibles : aucun (élément racine)
Éléments enfants possibles : <annotation>, <attribute>, <attributeGroup>, <complexType>, <element>, <group>, <import>, <include>, <notation>, <redefine>, <simpleType>