web-dev-qa-db-fra.com

Différence entre <xsd: all> et <xsd: sequence> dans la définition du schéma?

J'utilise xsd:all dans un type complexe. Lorsque je manque des éléments obligatoires lors de la validation, tous les éléments sont affichés. Il n'affichera pas l'élément manquant exact.

Mais si je suis en utilisant xsd:sequence je peux obtenir l’élément manquant exact.

Y a-t-il une différence entre ces deux?

xsd:sequence: L'élément XML doit être dans le même ordre.

Mais xsd:all: L'élément XML peut être un ordre quelconque.

57
user1679378

<xsd:all> spécifie que les éléments enfants peuvent apparaître dans n'importe quel ordre.

<xsd:sequence> spécifie que les éléments enfants ne peuvent apparaître que dans l'ordre mentionné.

Exemple de séquence:

<xs:element name="compElement">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="ele1" type="xs:string"/>
      <xs:element name="ele2" type="xs:string"/>
      <xs:element name="ele3" type="xs:string"/>
      <xs:element name="ele4" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

Si vous créez un fichier XML à partir de ce xsd, il ressemblera à ceci:

<compElement>
  <ele1>First</ele1>
  <ele2>Second</ele2>
  <ele3>Third</ele3>
  <ele4>Fourth</ele4>
</compElement>

Exemple pour tous:

<xs:element name="compElement">
  <xs:complexType>
    <xs:all>
      <xs:element name="ele1" type="xs:string"/>
      <xs:element name="ele2" type="xs:string"/>
      <xs:element name="ele3" type="xs:string"/>
      <xs:element name="ele4" type="xs:string"/>
    </xs:all>
  </xs:complexType>
</xs:element>

Si vous créez un fichier XML à partir de ce xsd, il pourrait ressembler à ceci:

<compElement>
  <ele2>Second</ele2>
  <ele1>First</ele1>
  <ele4>Fourth</ele4>
  <ele3>Third</ele3>
</compElement>

Plus d'infos sur xsd: all
Plus d'infos on xsd: sequence

J'espère avoir répondu à votre question.

100
Madhusudan Joshi

Différence:

  • xsd: all - "Les éléments enfants peuvent apparaître dans n'importe quel ordre et chaque élément enfant peut apparaître zéro ou une fois" (c'est-à-dire que maxOccurs peut être égal à 0 ou 1)
  • xsd: sequence - "Les éléments enfants doivent apparaître dans une séquence. Chaque élément enfant peut apparaître de 0 à un nombre quelconque de fois" (c'est-à-dire que maxOccurs peut être 0 ou n'importe quel nombre ou "illimité"

A partir des tutoriels W3Schools ici et ici .

18
kamituel

Tous les indicateurs

L'indicateur <all> spécifie que les éléments enfants peuvent apparaître dans n'importe quel ordre et que chaque élément enfant ne doit apparaître qu'une seule fois: 

Indicateur de séquence

L'indicateur <sequence> spécifie que les éléments enfants doivent apparaître dans un ordre spécifique:

lien de référence

2
NPKR

Le schéma définit simplement ce qui constitue un document conforme.

La manière dont la non-conformité est signalée dépend entièrement du validateur. Rien n'empêche un validateur de signaler exactement les champs manquants, mais apparemment celui que vous utilisez ne le fait pas dans ce cas. 

Que ce soit un bug ou de par sa conception, vous devrez en discuter avec le fournisseur du validateur.

1
Joachim Lous

lorsque nous utilisons under, cela indique que tous les éléments déclarés dans complexType DOIVENT apparaître dans le même ordre dans le document XML. sinon, vous obtiendrez une erreur. car il n'est pas nécessaire de spécifier les éléments dans le bon ordre. 

0
user3423648