9
votes

L'élément de schéma de séquence garantit-il l'ordre des éléments enfants?

Compte tenu de ce schéma XML (fragment): xxx

dans ce fragment XML: xxx

peut le Les éléments se produisent dans n'importe quel ordre? Ainsi, ces deux fragments de XML de xml sémantique équivalent: xxx

ou l'élément de séquence dans le schéma signifie que les éléments doivent se produire dans le même Ordre d'être sémantiquement équivalent?

La présence du schéma nécessite-t-elle l'analyseur / le désérialiseur de conserver les éléments de l'ordre dans lequel elles existent dans le texte XML? Si je comprends bien, normalement (c'est-à-dire sans schéma), il n'y a aucune obligation de le faire (même si la plupart des analyseurs le font habituellement).


0 commentaires

3 Réponses :


1
votes

Cela dépend vraiment du contexte. Dans la forme la plus pure de XML, les extraits que vous avez fournis sont sémantiquement équivalents indépendamment de l'ordre. Mais lorsque vous êtes (DE) Serializing Things avec XML, il pourrait y avoir une signification associée à l'ordre des éléments.

Dans ce cas, les documents XML sont sémantiquement équivalents si et uniquement si les matrices résultantes sont sémantiquement équivalentes.


2 commentaires

Droite, c'est la question. La présence de la dans le schéma nécessite-t-elle l'analyseur / déséréaliseur de maintenir les éléments dans l'ordre dans lequel elles existent dans le texte XML? Si je comprends bien, normalement (c'est-à-dire sans schéma), il n'y a aucune obligation de le faire (même si la plupart des analyseurs le font habituellement).


Si je comprends bien, le schéma n'a aucune incidence sur la lecture des éléments. C'est plutôt une méthode de savoir si un document est valide ou non tout en le lisant.



7
votes

L'élément de séquence signifie que les éléments individuels (non les éléments du réseau) sont censés préserver la commande.

par exemple xxx

dans cet exemple, mannequin Apparaît après GetienumerAbleresulter dans la séquence et la valider doit toujours apparaître dans cet ordre dans ce type complexe.

L'ordre des éléments "répéter" dans le type complexe "arrayofstring" n'est pas appliqué dans le schéma, et comme les tableaux n'impliquent pas ou n'applicitent aucun ordre explicite, la sémantique de la commande n'est pas garantie dans le CLR. .

Un moyen de garantir la commande serait d'imposer une commande sur la collection en sérialisant un index.


1 commentaires

Excellente réponse et sérialisation d'un index est en effet la solution originale que j'ai utilisée. J'ai créé une classe "ordonnée " qui était essentiellement un dictionnaire de où l'int était l'index. Apparemment, c'était la bonne réponse.



2
votes

Les éléments de chaîne peuvent survenir dans n'importe quel ordre - car au schéma, ils sont tous identiques


0 commentaires