Partager via


Prise en charge de la liaison de l'attribut Form

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 fournit la prise en charge de liaison pour l'attribut form.

L'outil Xsd.exe équivaut à l'attribut XML form avec la propriété Form des attributs XmlAttribute ou XmlElement, même si le code de sérialisation XML du .NET Framework reconnaît une valeur par défaut différente, qualified, pour les éléments.

Explication

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 spécifier si un attribut ou un élément local particulier doit être qualifié par un espace de noms, l'attribut form est ajouté à une déclaration <element> ou <attribute> locale. Les valeurs possibles sont qualified et unqualified.

La valeur par défaut de l'attribut form est héritée de l'attribut elementFormDefault ou attributeFormDefault de l'élément <schema> de la racine. Pour ces deux attributs, la valeur par défaut est unqualified.

Le .NET Framework ne permet pas de spécifier le formulaire à un niveau global ou au niveau du schéma au sein d'une définition de classe. Au lieu de cela, lors de la génération d'un document de schéma XML à partir d'un ensemble de classes, Xsd.exe produit toujours un schéma XML qui présente les caractéristiques suivantes :

  • Ne spécifie pas attributeFormDefault, rétablissant la valeur par défaut unqualified.

  • Spécifie elementFormDefault="qualified", à l'aide d'une valeur par défaut différente de celle utilisée par le schéma XML.

Xsd.exe traite les autres valeurs des valeurs par défaut attributeFormDefault="qualified" et elementFormDefault="unqualified" en définissant le formulaire par champ.

À cause de ces contraintes, Xsd.exe génère le code source à partir de l'attribut form comme illustré dans le tableau suivant.

Attribut form

form="qualified"

form="unqualified"

<attribute> element

Un paramètre Form=XmlSchemaForm.Qualified est passé à la déclaration de l'attribut XmlAttribute.

Aucun paramètre de formulaire n'est passé à la déclaration de l'attribut XmlAttribute pour le champ <attribute>.

<element> element

Aucun attribut XmlElement n'est appliqué, sauf pour passer un paramètre non lié.

Un paramètre Form=XmlSchemaForm.Unqualified est passé à la déclaration de l'attribut XmlElement pour le champ <element>.

Le paramètre passé à la déclaration XmlAttribute ou 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

Le formulaire est spécifié dans le code source uniquement si sa valeur est différente de la valeur par défaut dans le document de schéma XML d'origine, conformément aux valeurs par défaut du .NET Framework, par opposition à celles du schéma XML. Étant donné que l'attribut form substitue les attributs attributeFormDefault et elementFormDefault, un schéma qui attribue au formulaire une valeur autre que celle par défaut au niveau <schema>, puis la valeur par défaut au niveau <attribute> ou <element>, produit une source qui ne spécifie aucun formulaire. La signification est identique en matière de conformité aux instances de documents.

Example

Document de schéma XML d'entrée :

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
            xmlns="http://example.org/" targetNamespace="http://example.org/" elementFormDefault="qualified">
  <xsd:element name="ComplexInstance" type="MyComplexType"/>
  <xsd:complexType name="MyComplexType">
    <xsd:sequence>
      <xsd:element name="elementQ" type="xsd:decimal" form="qualified" />
      <xsd:element name="elementU" type="xsd:Date" form="unqualified" />
    </xsd:sequence>
    <xsd:attribute name="attributeQ" type="xsd:string"  use="required" form="qualified"/>
    <xsd:attribute name="attributeU" type="xsd:boolean" use="required" form="unqualified"/>
  </xsd:complexType>
</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("ComplexInstance", Namespace="http://example.org/", IsNullable=false)]
 public class MyComplexType {
        
     public System.Decimal elementQ;
        
    [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
    public string elementU;
        
    [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)]
    public string attributeQ;
        
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public bool attributeU;
}

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="ComplexInstance" type="tns:MyComplexType" />
  <xs:complexType name="MyComplexType">
    <xs:sequence>
      <xs:element minOccurs="1" maxOccurs="1" name="elementQ" type="xs:decimal" />
      <xs:element minOccurs="0" maxOccurs="1" form="unqualified" name="elementU" type="xs:string" />
    </xs:sequence>
    <xs:attribute form="qualified" name="attributeQ" type="xs:string" />
    <xs:attribute name="attributeU" type="xs:boolean" use="required" />
  </xs:complexType>
</xs:schema>

Éléments conteneurs possibles :  <attribute>, <element>

Voir aussi

Référence

System.Xml.Schema.XmlSchemaAttribute.Form
System.Xml.Schema.XmlSchemaElement.Form