2009-06-29 8 views
8

Disons que je veux mettre en place un complexType générique comme ceci:Schéma XML: Définition d'une valeur par défaut pour un complexType?

<xs:complexType name="button"> 
    <xs:sequence> 
     <xs:element name="id" type="xs:string" minOccurs="0" maxOccurs="1"/> 
     <xs:element name="href" type="xs:string" minOccurs="0" maxOccurs="1"/> 
     <xs:element name="label" type="xs:string" minOccurs="0" maxOccurs="1"/> 
    </xs:sequence> 
</xs:complexType> 

Et je veux faire référence à cette complexType dans divers endroits dans mon dossier de schéma comme ceci:

<xs:element name="someButton" type="button" /> 

Est-il possible moi de définir des valeurs par défaut pour les sous-éléments de bouton via l'élément someButton? (Si je veux someButton d'avoir une étiquette par défaut de « Go » ou a href par défaut « index.html »)

En gros ... en ce moment j'ai quelque chose comme

<Field Name="State" DataSourceField="State" /> 

et je Je tente d'éliminer la redondance de la manière la plus simple possible.

Répondre

18

Non, uniquement pour les valeurs simples. Mais peut-être vous pouvez les utiliser pour faire ce que vous voulez, en donnant des valeurs par défaut pour toutes les parties simples de votre type complexe. Cependant, cela fonctionne mieux pour les attributs que pour les éléments que vous avez (parce que "les valeurs d'attributs par défaut s'appliquent quand les attributs sont manquants, et les valeurs par défaut des éléments s'appliquent quand les éléments sont vides" - voir ci-dessous). Les attributs sont eux-mêmes en option par défaut:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="button" type="button"/> 
    <xs:complexType name="button"> 
    <xs:attribute name="id" type="xs:string"/> 
    <xs:attribute name="href" type="xs:string" default="index.html"/> 
    <xs:attribute name="label" type="xs:string" default="Go"/> 
    </xs:complexType> 
</xs:schema> 

<button id="1"/> 

Les valeurs par défaut des deux attributs et éléments sont déclarés en utilisant l'attribut par défaut, bien que cet attribut a une conséquence légèrement différente dans chaque cas. Lorsqu'un attribut est déclaré avec une valeur par défaut, la valeur de l'attribut est la valeur qui apparaît en tant que valeur de l'attribut dans un document d'instance; Si l'attribut n'apparaît pas dans le document d'instance, le processeur de schéma fournit à l'attribut une valeur égale à celle de l'attribut par défaut. Notez que les valeurs par défaut pour les attributs n'ont de sens que si les attributs eux-mêmes sont facultatifs, et donc c'est une erreur de spécifier à la fois une valeur par défaut et n'importe quoi d'autre qu'une valeur de facultatif à utiliser.

Le processeur de schéma traite les éléments par défaut de manière légèrement différente. Lorsqu'un élément est déclaré avec une valeur par défaut, la valeur de l'élément est la valeur qui apparaît en tant que contenu de l'élément dans le document d'instance. Si l'élément apparaît sans aucun contenu, le processeur de schéma fournit à l'élément une valeur égale à celle de l'attribut par défaut. Toutefois, si l'élément n'apparaît pas dans le document d'instance, le processeur de schéma ne fournit aucun élément. En résumé, les différences entre les valeurs par défaut des éléments et des attributs peuvent être indiquées comme suit: Les valeurs d'attribut par défaut s'appliquent lorsque les attributs sont manquants et les valeurs par défaut des éléments s'appliquent lorsque les éléments sont vides. [nous soulignons]

http://www.w3.org/TR/xmlschema-0/#OccurrenceConstraints

Questions connexes