Niveau de prise en charge du schéma
Cette section décrit les détails relatifs au niveau de prise en charge du schéma.
Le schéma prend directement en charge les éléments suivants :
- Séquences d’éléments.
- Dérivation des types d’éléments.
- Choix simples d’éléments (ceux mappés à une union marquée).
- Types de base définis par le format binaire XSD / .NET, y compris les plages (min/max).
- Prise en charge simple de n’importe quel élément (aucune restriction sur le type d’élément).
- Éléments et attributs facultatifs avec des valeurs par défaut.
- Éléments répétitifs avec des plages (min/max).
- Éléments nillables.
Le schéma ne prend pas en charge directement les éléments suivants (ce qui implique le comportement de « secours ») :
- Types de base définis par l’utilisateur.
- Choix plus compliqués.
- Rejet des attributs inconnus.
- Aller-retour sur les attributs inconnus.
- Prise en charge plus complexe de n’importe quel élément.
- Toutes les constructions.
- Key/keyref.
Voici une répartition détaillée de la prise en charge des différents composants de schéma. Il est comparé au contrat de données dans WCF, car la similarité dans les fonctionnalités. La différence sera décrite.
En règle générale, pour les comportements de secours :
- les attributs sont sauvegardés dans WS_STRING ;
- le contenu de l’élément est retourné à WS_XML_BUFFER.
- complexType sont sauvegardés dans la structure contenant un champ de WS_XML_BUFFER.
- Les types simples sont sauvegardés dans WS_STRING.
wsutil génère des avertissements pour les composants de schéma qui ne sont actuellement pas entièrement pris en charge. L’application peut avoir besoin d’effectuer une vérification supplémentaire pour ces composants. Les heures supplémentaires wsutil peuvent être améliorées pour gérer certaines des fonctionnalités actuellement prises en charge dans l’exécution, telles que la prise en charge des valeurs par défaut. wsutil peut également être amélioré avec la sérialisation pour prendre en charge d’autres fonctionnalités telles que abstraites. Le nombre de composants de schéma non pris en charge peut être réduit au fil du temps.
Document de schéma global
Définition globale susceptible d’affecter les définitions incorporées dans le schéma. Il s’agit d’attributs globaux applicables à toutes les définitions du schéma.
attributs <xs :schema>
- attributeFromDefault ignoré.
- blockDefault ignoré.
- elementFormDefault Ignoré. Cela diffère de dataContract, car les éléments non qualifiés sont pris en charge lors de l’exécution.
- finalDefault ignoré. Il n’existe aucune prise en charge du langage C pour le concept final.
- ID ignoré.
- targetNamespace Pris en charge et mappé à l’espace de noms de service.
- version ignorée.
contenu <xs :schema>
- inclure pris en charge ; wsutil nécessite que toutes les définitions nécessaires soient disponibles en tant que fichiers d’entrée pendant le temps de compilation.
- redéfinissez ignoré. wsutil ne prend pas en charge cela.
- importation prise en charge ; wsutil nécessite que toutes les définitions nécessaires soient disponibles en tant que fichiers d’entrée pendant le temps de compilation.
- simpleType pris en charge : consultez la section type simple ci-dessous.
- complexType pris en charge : consultez la section « complexType »
- groupe ignoré.
- attributeGroup ignoré.
- élément Pris en charge ; mappe aux définitions d’éléments globaux.
- attribut pris en charge ; est mappé aux définitions d’attributs globaux.
- notation ignorée
Type complexe
Type complexe, représenté par <xs :complexType>, peut être une restriction de type simple ou de type complexe, extension de type simple, de tableaux ou de structure. Notez que dans l’extension de types simples, il n’existe aucun héritage et aucune prise en charge xsi :type.
attributs <xs :complexType>
- abstract Generate warning about unsupported feature, no change to code generation.
- bloquer Générer un avertissement concernant la fonctionnalité non prise en charge, aucune modification de la génération de code.
- générer un avertissement final concernant la fonctionnalité non prise en charge, aucune modification de la génération de code.
- ID ignoré.
- mixed Generate warning about unsupported feature, fallback to structure with WS_XML_BUFFER if true.
- nom pris en charge et mappé au nom du type de structure.
contenu <xs :complexType>
Il s’agit d’une définition de type pour la structure. la restriction complexContent n’est pas prise en charge.
- complexContent Support, extension de contenu complexe. Mappe à l’héritage de structure.
- groupe Actuellement de secours à structurer avec WS_XML_BUFFER champ. Peut être pris en charge en fonction de la particule sous-jacente.
- choix pris en charge comme union. Cela n’est pas pris en charge dans le contrat de données.
- séquence prise en charge : mappe aux champs d’une structure
- attribut pris en charge à l’exception de « interdit ». Secours à la structure avec WS_XML_BUFFER si 'interdit'.
- attributeGroup pris en charge : mappe à la séquence d’attributs
- anyAttribute ignoré
- AttributeGroupRef Pris en charge : mappe à la séquence d’attributs.
- GroupRef Est actuellement de secours pour structurer avec WS_XML_BUFFER champ. Peut être pris en charge en fonction du groupe sous-jacent.
- Toutes les cartes prises en charge sont mappées à XML_BUFFER
- (vide) carte prise en charge vers une description de struct vide sans struct généré.
< > xs :sequence dans un type complexe : contenu
wsutil prend uniquement en charge entièrement la séquence de minOccurs = 1 et maxOccurs = 1 ; sinon, le type complexe est actuellement retoqué sur WS_XML_BUFFER. Elle peut être prise en charge en tant que tableau de structures.
- élément Pris en charge ; chaque instance est mappée à un champ de la structure.
- Secours de groupe ; complexType est de secours pour WS_XML_BUFFER.
- Tous les secours ; complexType est de secours pour WS_XML_BUFFER.
- choix pris en charge ; mappez au champ union.
- secours de séquence ; complexType est de secours pour WS_XML_BUFFER.
- n’importe quelle prise en charge ; mappée à XML_BUFFER.
- (vide) pris en charge ; complexType peut être une structure vide s’il n’existe aucun attribut.
Éléments
< >xs :element peut se produire dans trois contextes.
- Il peut se produire dans un>xs :sequence <, décrivant un champ d’un struct normal. Dans ce cas, l’attribut maxOccurs doit être 1. Le champ est facultatif si minOccurs est 0.
- Il peut se produire dans un <>xs xs :sequence, décrivant un champ d’un tableau. Dans ce cas, l’attribut maxOccurs doit être supérieur à 1 ou « non lié ».
- Il peut se produire dans un> xs :schema <comme description d’élément global.
<xs :element> dans un> xs :sequence <ou <xs :choice> en tant que champ dans une structure
- ref pris en charge ; résolu en référence à l’élément global.
- nom Pris en charge, mappe au nom du champ.
- type Pris en charge, mappe au type de champ. Pour plus d’informations, consultez « Mappage de type ». S’il n’est pas spécifié (et que l’élément ne contient pas de type anonyme), xs :anyType est supposé.
- bloquer Générer un avertissement concernant la fonctionnalité non prise en charge, aucune modification de la génération de code.
- Générer un avertissement par défaut concernant la fonctionnalité non prise en charge, aucune modification de la génération de code.
- correction de l’avertissement Générer l’avertissement concernant la fonctionnalité non prise en charge, aucune modification de la génération de code.
- formulaire ignoré. Notre couche de sérialisation prend en charge les formulaires qualifiés et non qualifiés.
- ID ignoré.
- maxOccurs est mappé à un champ de données unique s’il est égal à 1. il est mappé à un champ de tableau (élément répétitif) si maxOccurs est supérieur à 1.
- minOccurs si 0, les options de champ sont définies sur FIELD_OPTIONAL, si nillable n’est pas définie.
- nillable Le champ est nillable. Pour plus d’informations, consultez sérialisation.
<xs :element> en tant qu’élément global : attributs
Les attributs minOccurs et maxOccurs ne sont pas valides en tant que description d’élément globale. L’application peut utiliser directement la description des éléments générés dans la couche de sérialisation ou les couches de canal.
- abstract Generate warning about unsupported feature, no change to code generation.
- bloquer Générer un avertissement concernant la fonctionnalité non prise en charge, aucune modification de la génération de code.
- Générer un avertissement par défaut concernant la fonctionnalité non prise en charge, aucune modification de la génération de code.
- générer un avertissement final concernant la fonctionnalité non prise en charge, aucune modification de la génération de code.
- correction de l’avertissement Générer l’avertissement concernant la fonctionnalité non prise en charge, aucune modification de la génération de code.
- ID ignoré.
- nom Pris en charge : mapper au nom de la description de l’élément global, et il s’agit de la base du type anonyme lorsqu’il est spécifié.
- l’application ignorée doit appeler avec l’indicateur approprié.
- substitutionGroup de secours vers la structure avec WS_XML_BUFFER si la valeur est définie. wsutil ne prend pas en charge substitutionGroup.
- tapez Pris en charge et mappez au type de l’élément.
<xs :element> en tant qu’élément global : contenu
- simpleType pris en charge ; mappe à la définition de type.
- complexType pris en charge ; mappe à un type complexe.
- générer un avertissement unique concernant la fonctionnalité non prise en charge, aucune modification de la génération de code. wsutil ne prend pas en charge les contraintes d’élément.
- key Generate warning about unsupported feature, no change to code generation. wsutil ne prend pas en charge les contraintes d’élément.
- keyref Generate warning about unsupported feature, no change to code generation. wsutil ne prend pas en charge les contraintes d’élément.
- (vide) Supporté; l’élément sans spécification de type n’est traité comme xs :anyType.
Types simples
attributs <xs :simpleType>
- Avertissement de génération finale concernant la fonctionnalité non prise en charge, aucune modification de la génération de code.
- ID ignoré
- Nom Pris en charge, mappe au nom de type.
contenu <xs :simpleType>
- Restriction Prise en charge, mappe au type ou à la plage d’énumération. Consultez la section « restrictions xs :simpleType ».
- Lister générer un avertissement concernant la fonctionnalité non prise en charge, secours à XML_BUFFER.
- Union Generate warning about unsupported feature, fallback to XML_BUFFER.
Restriction de type simple
Certaines facettes sont autorisées dans les types intégraux et le type de chaînes pour autoriser la prise en charge de la plage et de l’énumération.
prise en charge de l’énumération
<xs :enumeration> restriction de type simple pour le type de base de chaîne est traitée comme type d’énumération. Dans ce cas, l’attribut de base DOIT être de type chaîne. Dans le cas d’énumération, toutes les autres facettes sont ignorées.
plage sur la prise en charge de type simple
Certaines facettes sont pris en charge dans les types simples prennent en charge efficacement la plage autorisée sur le type. Voici une restriction pour les types intégraux et les types float/double. Les types simples avec d’autres facettes sont sauvegardés dans WS_STRING type
- minExclusive pris en charge
- minInclusive pris en charge
- maxExclusive pris en charge
- maxInclusive pris en charge
- totalDigits Generate warning about unsupported feature, no change to code generation.
- fractionDigits Générer un avertissement concernant la fonctionnalité non prise en charge, aucune modification de la génération de code.
- length Generate warning about unsupported feature, no change to code generation.
- minLength Generate warning about unsupported feature, no change to code generation.
- maxLength Generate warning about unsupported feature, no change to code generation.
- énumération Générer un avertissement concernant la fonctionnalité non prise en charge, aucune modification de la génération de code.
- whiteSpace Generate warning about unsupported feature, no change to code generation.
- générer un avertissement concernant la fonctionnalité non prise en charge, aucune modification de la génération de code.
- (vide) Supporté.
minLength et maxLength sur la chaîne n’est pas pris en charge actuellement, mais il s’agit d’une fonctionnalité souhaitable à prendre en charge.
Héritage
Wsutil prend en charge l’héritage de types complexes, autrement dit, une structure peut hériter d’une autre structure, similaire à l’héritage d’interface en C++. Pour ce faire, <xs :complexContentExtension>. <xs :simpleContentExtension> est pris en charge, mais est généré en tant que structure simple avec le type de base comme premier champ au lieu de l’héritage de type.
Mappage de type/primitive
Les identificateurs doivent être normalisés lors de la traduction à partir de NCNames en XML. Les chaînes sont nillables ; les types de pointeur sont nillables ; les types intégraux et float/double sont nillables et defaultValue a la valeur 0.