web-dev-qa-db-fra.com

Différence / similitudes entre xsd: any et xsd: anyType

Je lis sur XML, XML-Schema, DTD et je ne comprends pas vraiment la différence entre xsd: any et xsd: anyType.

Quelqu'un peut-il m'expliquer cela ou pointer vers un bon article? (veuillez ne pas créer de lien vers les spécifications du schéma XML - je l'ai lu et je suis plus confus)

TIA

23
user989812323

Cet article l'explique bien. Je cite:

xsd: anyType est un type, comme xsd: integer (bien que xsd: anyType soit spécial en ce sens qu'il peut agir comme un type simple ou complexe, et qu'il n'impose essentiellement aucune restriction sur l'arborescence qu'il valide - pensez-y librement comme le Analogue du langage de schéma Java.lang.Object).

Un exemple d'utilisation serait:

<xsd:element name="e" type="xsd:anyType"/>

Cela signifierait que les éléments nommés <e> peut avoir n'importe quel contenu, n'importe quel attribut, etc.

xs: any est un caractère générique, utilisable comme terme dans un modèle de contenu. Par exemple:

<xsd:complexType name="T">
  <xsd:sequence>
    <xsd:element ref="A"/>
    <xsd:any />
    <xsd:element ref="C"/>
  </xsd:sequence>
</xsd:complexType>

Les éléments de type T doivent avoir un contenu <A/><???/><C/>, où <???> peut être n'importe quel élément nommé. Maintenant, si vous regardez de très près, il existe une approximation de la définition de xsd: anyType donnée à titre de référence dans la recommandation, et elle utilise un caractère générique xsd: any comme moyen de dire qu'elle autorise tous les éléments.

Jetez également un œil au schéma XML .

30
dogbane

Le message de la liste de diffusion lié dans la réponse de Dogbane n'était pas clair pour moi jusqu'à ce que je crée l'exemple suivant:

Avec le schéma anyType:

<xsd:complexType name="Outer">
    <xsd:element name="e" type="xsd:anyType" />
</xsd:complexType>

Ce qui permet ce format:

<Outer>
    <e> // must be called "e"
        // but anything can go inside
    </e>
</Outer>

Et avec n'importe quel schéma:

<xsd:complexType name="Outer">
    <xsd:any />
</xsd:complexType>

Ce qui permet ce format:

<Outer>
    //anything can go inside
</Outer>

Donc, anyType est un type et any est un élément

28