Partager via


Prise en charge de la liaison de l'élément Any

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 partielle pour l'élément <any>.

Lors de la génération de code source à partir d'un document de schéma XML, Xsd.exe traduit l'élément <any> en champ de type XmlElement, avec un attribut XmlAnyElementAttribute.

Explication

Le caractère générique <any> permet de faire apparaître tout élément (de n'importe quel nom ou type) dans la position donnée dans une instance de document XML, avec certaines contraintes.

Lors de la génération de code source à partir d'un document de schéma XML, Xsd.exe traduit l'élément <any> en champ de type XmlElement, avec un attribut XmlAnyElementAttribute. Cet attribut permet à une classe de représenter des éléments XML arbitraires sans les lier aux types non-XML identifiés par d'autres champs ou propriétés possibles de la classe.

Si l'élément <any> apparaît avec un attribut maxOccurs ayant une valeur supérieure à 1 ou unbounded, Xsd.exe crée un tableau XmlElement avec un attribut XmlAnyElement. Un seul XmlElement est créé lorsque la valeur de l'attribut maxOccurs est 1 (valeur par défaut) ou 0. Pour obtenir une explication de ce comportement, reportez-vous à l'attribut maxOccurs.

Lors de la génération d'un document de schéma XML à partir d'un ensemble de classes dans un assembly, Xsd.exe exécute la traduction inverse : un champ ou une propriété de type System.Xml.XmlElement, avec un attribut XmlAnyElementAttribute, est traduit en élément <any>.

Attributs namespace et processContents

Lors de la génération de définitions ou de classes de schéma XML, les attributs namespace et processContents sont ignorés. Cela signifie que, quelles que soient les valeurs des attributs dans une définition de schéma XML d'origine, lorsque Xsd.exe génère des classes à partir de cette définition puis génère un autre schéma XML à partir de ces classes, l'élément <any> du schéma XML généré ne dispose plus de ces attributs. Par conséquent, les valeurs par défaut suivantes sont rétablies dans ce dernier schéma :

  • namespace="##any" : l'attribut namespace spécifie les espaces de noms dans lesquels l'élément doit être défini. Une valeur ##any autorise tout espace de noms.

  • processContents="strict" : lors de la validation d'un document XML d'instance en vue de sa conformité au schéma XML spécifié, vérifiez que tous les types d'éléments sont validés d'après le ou les espaces de noms spécifiés. Si un type d'élément n'est pas reconnu, la validation échoue.

De même, lors de la désérialisation de documents XML en objets, les attributs namespace et processContents sont ignorés. La classe XmlSerializer se comporte plutôt comme si les valeurs suivantes avaient été affectées aux deux attributs :

  • namespace="##any" : il s'agit de la valeur par défaut.

  • processContents="lax" : lors de la validation d'un document XML d'instance en vue de sa conformité au schéma XML spécifié, validez l'élément uniquement si son espace de noms peut être obtenu ; sinon, vérifiez qu'un élément non reconnu se compose d'un contenu XML correctement construit.

2w8zbwa2.note(fr-fr,VS.100).gifRemarque :
Même si au moment de l'exécution le .NET Framework suppose processContents="lax", lors du déploiement, le .NET Framework génère des définitions de schéma XML dans lesquelles processContents="strict" par défaut est spécifié implicitement.

Xsd.exe et la classe XmlSerializer fournissent les mêmes liaisons pour les attributs namespace et processContents lorsqu'ils apparaissent dans l'élément <anyAttribute>.

Exemple

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

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
            targetNamespace="http://example.org/" xmlns="http://example.org/" elementFormDefault="qualified">
    <xsd:element name="complexInstance" type="MyComplexType"/>

    <xsd:complexType name="MyComplexType">
        <xsd:sequence>
            <xsd:element name="field1" type="xsd:string"/>
            <xsd:any namespace="##local" processContents="strict"/>
        </xsd:sequence>
    </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 string field1;
        
    [System.Xml.Serialization.XmlAnyElementAttribute()]
    public System.Xml.XmlElement Any;
}

Type complexe 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="0" maxOccurs="1" name="field1" type="xs:string" />
      <xs:any minOccurs="0" maxOccurs="1" />
    </xs:sequence>
  </xs:complexType>
</xs:schema>

Attributs possibles Prise en charge de la liaison

id

L'utilitaire Xsd.exe ignore l'attribut id qui a pour but de fournir un identificateur unique.

maxOccurs

Consultez la section Explication qui figure dans cette rubrique. Consultez également l'attribut Prise en charge de la liaison de l'attribut MaxOccurs.

minOccurs

Lors de la génération du code source à partir d'un document de schéma XML, l'outil Xsd.exe ignore l'attribut minOccurs lorsqu'il est appliqué à l'élément <any>.

Lors de la génération d'un document XSD à partir de classes, l'outil Xsd.exe produit une valeur 0 pour l'attribut minOccurs dans l'élément <any>.

Consultez l'attribut Prise en charge de la liaison de l'attribut MinOccurs.

namespace

Consultez la section Attributs namespace et processContents dans cette rubrique.

processContents

Consultez la section Attributs namespace et processContents dans cette rubrique.

Éléments parents possibles :  <choice>, <sequence>

Éléments enfants possibles :  <annotation>

Voir aussi

Référence

XmlSchemaAny