Élément <xdr:ElementType>

Définit un type d'élément à utiliser dans l'élément Schema de schéma XDR (XML-Data Reduced).

<ElementType
  content="{empty | textOnly | eltOnly | mixed}" 
  dt:type="datatype" 
  model="{open | closed}" 
  name="idref" 
  order="{one | seq | many}">

Attributs

  • content
    Indique si le contenu doit être vide ou s'il peut comporter du texte et/ou des éléments. Les valeurs suivantes peuvent être affectées à cet attribut. La valeur par défaut de l'attribut content est mixed. Lorsque l'attribut content est défini sur mixed, l'attribut order exige une valeur many.

    empty

    L'élément ne peut pas avoir de contenu.

    textOnly

    L'élément ne peut contenir que du texte, pas des éléments. Si l'attribut model est défini sur open, l'élément peut contenir du texte et d'autres éléments non nommés.

    eltOnly

    L'élément ne peut contenir que les éléments spécifiés. Il ne peut pas contenir de texte libre.

    mixed

    L'élément peut contenir un mélange d'éléments nommés et de texte. La valeur par défaut est mixed. Si la valeur de l'attribut content est mixed, les attributs minOccurs et maxOccurs ne provoquent pas d'erreur de validation si le nombre d'éléments enfants n'est pas compris dans ces limites.

Notes

Les éléments dont content="empty" et model="open" ne sont pas autorisés.

Exemple

L'exemple suivant illustre l'utilisation de l'attribut content avec différentes valeurs.

<ElementType name="x" content="empty"/>
<ElementType name="x" content="textOnly"/>
<ElementType name="x" content="eltOnly">
  <element type="y"/>
</ElementType>
<ElementType name="x" content="mixed">
  <element type="q"/>
  <element type="r"/>
</ElementType>

Exemple de code hérité

L'exemple suivant illustre l'attribut content pour une DTD (définition de type de document) équivalente.

empty: <!ELEMENT x EMPTY>
textOnly: <!ELEMENT x (#PCDATA)>
eltOnly: <!ELEMENT x y>
mixed: <!ELEMENT x (#PCDATA | q | r)*>
  • dt:type
    Type de données de l'élément. Les types de données valides sont définis le document sur les références des types de données de schéma XDR.
  • model
    Indique si le contenu ne peut comprendre que ce qui est défini dans le modèle de contenu. La valeur par défaut est open.

    <ElementType name="x" model="open"/>
    

    Lorsque le modèle est défini sur open, l'élément peut comprendre d'autres éléments ou attributs que ceux qui sont explicitement déclarés dans le modèle de contenu. Ces balises supplémentaires peuvent provenir du même espace de noms ou d'un espace différent. S'ils sont dans le même espace de noms, une définition ElementType ou AttributeType correspondante doit exister dans le schéma.

    Lorsque le modèle est défini sur closed, l'élément ne peut pas comprendre d'autres éléments ou du contenu mixte non spécifié dans le modèle de contenu. La DTD utilise un modèle closed.

  • name
    Nom de l'élément. Cet attribut est obligatoire. Si ce type d'élément est déclaré comme un enfant valide d'un autre type d'élément, ce nom est spécifié dans un élément element.

    <ElementType name="x">
    </ElementType>
    

    La DTD équivalente est la suivante.

    <!ELEMENT x EMPTY>
    
  • order
    Indique comment les éléments doivent s'afficher. Cet indicateur peut prendre les valeurs suivantes.

    one

    N'autorise qu'un seul élément d'un ensemble. Pour qu'un document soit correctement validé lorsque l'attribut one est spécifié, l'attribut model de l'élément ElementType doit être défini sur closed.

    seq

    Exige que les éléments s'affichent dans l'ordre spécifié.

    many

    Permet d'afficher (ou de ne pas afficher) les éléments dans n'importe quel ordre. Si vous spécifiez many pour l'attribut order, les valeurs de maxOccurs n'ont plus de sens pour la validation.

    La valeur seq est obligatoire pour spécifier des séquences valides. Par exemple, elle peut être utilisée pour spécifier quand une séquence particulière, comme x1,y1 ou x2,y2, est valide, mais qu'aucune autre combinaison possible n'est valide. La valeur seq remplit le même rôle que les parenthèses dans une DTD. La valeur par défaut est seq.

    L'exemple suivant illustre le paramètre one. La valeur de l'attribut model doit être closed lorsque la valeur one est spécifié pour l'attribut order.

    <ElementType name="z" content="eltOnly" order="one" model="closed">
    <element type="x" minOccurs="1" maxOccurs="1"/>
    <element type="y" minOccurs="1" maxOccurs="1"/>
    </ElementType>
    

    L'exemple suivant illustre le paramètre seq.

    <ElementType name="x" content="eltOnly" order="one" model="closed">
      <group order="seq" content="eltOnly" model="closed">
        <element type="x1"/>
        <element type="y1"/>
      </group>
      <group order="seq" content="eltOnly" model="closed">
        <element type="x2"/>
        <element type="y2"/>
      </group>
    </ElementType>
    

    L'exemple suivant illustre le paramètre many.

    <ElementType name="x" content="eltOnly" order="many" model="closed">
      <element type="q"/>
      <element type="r"/>
    </ElementType>
    

    Si le paramètre many est affecté à l'attribut order, les attributs minOccurs et maxOccurs n'ont plus de sens pour la validation. Au lieu d'utiliser le paramètre many pour l'attribut order en combinaison avec minOccurs et maxOccurs, utilisez le paramètre seq. Par exemple, dans le schéma suivant, order="seq".

    <?xml version="1.0"?>
    <Schema name="SampleSchema" xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:dt="urn:schemas-microsoft-com:datatypes">
        <ElementType name="PublisherID" model="closed" dt:type="ID"
          content="textOnly">
        </ElementType>
        <ElementType name="PublisherName" model="closed" dt:type="string"
          content="textOnly">
        </ElementType>
    
        <ElementType name="Publisher" model="closed" content="eltOnly"
          order="many">
          <element type="PublisherID"/>
          <element type="PublisherName"/>
        </ElementType>
    
        <ElementType name="Book" model="closed" content="eltOnly"
          order="seq">
        <element type="Publisher" minOccurs="1" maxOccurs="1"/>
        </ElementType>  
    
    </Schema>
    

Si le document XML suivant est validé par rapport au schéma ci-dessus, la validation échoue parce que le nombre d'éléments Publisher dépasse la valeur spécifiée pour maxOccurs (1). Toutefois, si order est défini sur many, la validation réussit à tort parce que le paramètre maxOccurs="1" est ignoré.

<?xml version='1.0'?>
<Book xmlns="x-schema:orderschema.xml" >

<Publisher>
    <PublisherID>P1</PublisherID>
    <PublisherName>GGG</PublisherName>
</Publisher>
<Publisher>
    <PublisherID>P2</PublisherID>
    <PublisherName>North</PublisherName>
</Publisher>

</Book>

Informations sur l'élément

Nombre d'occurrences

Illimité

Éléments parents

Schéma

Éléments enfants

attribute, AttributeType, datatype, description, element, group

Propriétés de l'élément

BALISE Explication

Name="idref"

Les éléments ElementType et AttributeType doivent avoir un nom.

Model="open"

Des éléments ou du contenu mixte non spécifié dans le modèle de contenu sont autorisés dans cet élément. Pour sous-classer une définition spécifique, ce paramètre doit être open (si l'héritage doit encore être implémenté).

Model="closed"

Des éléments ou du contenu mixte non spécifié dans le modèle de contenu ne sont pas autorisés dans cet élément.

content="empty"

L'élément ne peut rien contenir.

content="textOnly"

L'élément ne peut contenir que du texte, pas des éléments. Si model="open", l'élément peut contenir du texte et d'autres éléments non nommés.

*

content="mixed"

L'élément peut contenir un mélange d'éléments nommés et de texte. Si model="open", l'élément peut contenir du texte et d'autres éléments non nommés. Implique order='many' et maxOccurs="*" !

order='one'

N'autorise qu'un seul élément d'un ensemble.

*

order='seq'

Indique que les éléments doivent s'afficher dans l'ordre spécifié. C'est similaire à la valeur par défaut pour une liste d'éléments, mais cette déclaration est nécessaire pour regrouper des séquences, comme dans l'exemple où x1,y1 et x2,y2 sont autorisés, contrairement aux autres combinaisons. Cette valeur remplit le même rôle que les parenthèses dans une DTD.

order='many'

Les éléments peuvent s'afficher (ou ne pas s'afficher) dans n'importe quel ordre.

dt:type=datatype

Spécifie que l'élément doit contenir un entier. Pour une liste des types de données primitifs, voir le document sur les références des types de données de schéma XDR.

Remarques

Le terme « type d'élément » fait référence au type d'élément dont tous les éléments qui partagent un nom sont des instances. Les types d'éléments sont déclarés dans des schémas ; les éléments se trouvent dans des documents. Les types d'éléments sont déclarés à l'aide du type d'élément ElementType.

Exemple

<ElementType name="x">
  <!-- element content declarations go here -->
</ElementType>

Voir aussi

Référence

Référence des types de données de schéma XDR