Est-il un moyen de l'application/préserver l'ordre des éléments XML dans un Schéma XML?
Considérons le Schéma XML suivant:
<?xml version="1.0" encoding="UTF-8"?>
<schema
targetNamespace="http://www.example.org/library"
elementFormDefault="qualified"
xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:lib="http://www.example.org/library">
<element name="library" type="lib:libraryType"></element>
<complexType name="libraryType">
<sequence>
<element name="books" type="lib:booksType"></element>
</sequence>
</complexType>
<complexType name="booksType">
<sequence>
<element name="book" type="lib:bookType"
maxOccurs="unbounded" minOccurs="1"></element>
</sequence>
</complexType>
<complexType name="bookType">
<attribute name="title" type="string"></attribute>
</complexType>
</schema>
et un exemple de XML:
<?xml version="1.0" encoding="UTF-8"?>
<lib:library
xmlns:lib="http://www.example.org/library"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.org/library src/library.xsd ">
<lib:books>
<lib:book title="t1"/>
<lib:book title="t2"/>
<lib:book title="t3"/>
</lib:books>
</lib:library>
Est-il un moyen de garantir que l'ordre de <lib:book .../>
éléments est-elle préservée? Je veux être sûr que tout analyseur de lire le XML sera de retour des livres dans les oder, qui est d'abord le livre avec title="t1"
, puis le livre avec title="t2"
, et enfin le livre avec title="t3"
.
Autant que je sache parseurs XML ne sont pas nécessaires à la préservation de l'ordre. Je me demande si on peut appliquer ce par le biais de schémas XML? Une solution rapide pour moi, ce serait l'ajout d'un index
attribut à la <lib:book .../>
élément, et de déléguer la conservation de l'ordre pour l'application de la lecture du XML.
Commentaires? Des Suggestions?
xs:sequence
de faire respecter l'ordre pour une validation de schéma.La séquence n'a rien à voir avec un élément répété, mais avec un groupe disparate d'éléments enfants qui doivent se produire dans un ordre spécifique.
OriginalL'auteur MarcoS | 2010-05-26
Vous devez vous connecter pour publier un commentaire.
Je sais que c'est très vieux, mais néanmoins, je suis également à la recherche d'un moyen de garantir un préservé l'ordre des éléments XML.
Alors que tous les analyseurs peuvent préserver l'ordre, la définition XML en aucune manière impose le présent, et l'avenir des analyseurs peut gérer l'ordre d'une manière complètement différente.
Cela semble la meilleure solution qui existe maintenant est de donner les éléments d'un attribut " id " de sorte que la commande peut être vérifié dans le code après avoir été analysé.
Je déteste avoir à besoin de mes utilisateurs pour ajouter un arbitraire id="1" id="2", etc. lorsque la commande est déjà évident dans le fichier XML, mais autant que je sache, il n'existe pas de norme officielle en XML pour exiger un ordre spécifique pour la répétition d'éléments.
Mise à jour
Si vous êtes en utilisant .NET, il a une propriété que vous pouvez définir à définir l'ordre dans lequel il lit ces éléments. Donc, je suppose que tant que vous savez où votre XML sera analysée, et l'analyseur prend en charge l'exécution de l'élément de commande de la façon dont vous avez besoin, puis de la commande peut être exécutée.
Si, toutefois, un tiers ont été à prendre et essayer de reproduire vos résultats avec leur propre analyseur, la confusion pourrait s'ensuivre depuis que l'ordre est configuré quelque part d'autre, pas dans le XML, donc pas d'autre analyseur de mise en œuvre serait de savoir pour utiliser cette commande.
Donc, tout cela peut être résumé que: (a) l'Ordre ne peut être exécuté dans la spécification XML lui-même, mais (b) la Commande peut être et est souvent appliquée par un grand nombre de parseurs XML.
<sequence>
est cassé, si on ne peut pas supposer que le document de commande de l'enfant<element>
éléments est préservée. Si un analyseur qui ne fait pas de conserver l'ordre des éléments répétés ne pouvait pas lire le schéma requis pour valider un document. Autre schéma balises comme<import>
et<include>
sont également sensibles à l'ordre.C'était ma compréhension en 2011, basée sur la lecture du cahier des charges. La plupart des analyseurs de faire maintenir l'ordre de tous les éléments, et, de toute évidence, de plus en plus spécialisée de type XML comme le XHTML tels que définis par le W3C, l'ordre du document est maintenue. Mais je sais que la spécification XML 1.0 n'est pas élément de garantie de la commande elle-même. Je ne pense xs:sequence est probablement votre meilleur pari pour un type d'élément qui doit maintenir l'ordre, il semble que dans la plupart des endroits que j'ai lu que le maintien de l'ordre est au moins implicite.
Il semble à ma lecture que
xsd:sequence
est une exigence de conserver l'ordre des éléments disparates, de ne pas répéter les éléments. À l'inverse, il semble être omniprésent hypothèse que les éléments répétés doivent être livrés dans l'ordre du document. Mais ce ne serait pas la première screwup dans le monde de XML et SOAP, et il ne sera sûrement pas la dernière.la plupart des parseurs xml (si pas tous) de préserver l'ordre ou des éléments. En fait, l'ordre des éléments sont conceptuellement un absolu doit pour beaucoup à base de xml standard vocabulaires, un éminent étant xhtml. C'est aussi l'hypothèse implicite par les définitions de schéma XSD. Donc, votre réponse est tout simplement faux
Si quelques (ou même plus) des analyseurs de supposer des choses n'a pas d'importance. Élément de commande dépend du contexte, et de l'analyseur-dépendante, la plupart du temps. XHTML a ses propres spécifications. XSD a ses propres spécifications. Ceux qui ne sont pas pertinentes pour une discussion de la base de spécification XML. Ma conclusion a été qu'il n'est pas dans les specs, mais la plupart des analyseurs de faire respecter l'ordre de toute façon. Quel est le problème?
OriginalL'auteur Ben
Selon Michael Kay, qui semble être personne importante dans le monde XML, l'ordre est conservé.
Source: http://lists.xml.org/archives/xml-dev/201003/msg00045.html
OriginalL'auteur user1121956
Comme mentionné dans un commentaire ci-dessus,
xs:sequence
définit une collection ORDONNÉE. En voici la preuve:Source: W3C: XML Schema Partie 0
<lib:book .../>
, pas l'ordre des différents élémentsOriginalL'auteur shuron
L'ordre des éléments (à la différence des attributs) est importante en XML et chaque analyseur je sais conserve.
Chaque analyseur est libre d'ordonner les éléments qu'il aime. La seule façon de faire respecter l'ordre est par l'utilisation d'une séquence dans un xsd.
L'ordre de disparates éléments n'est pas conservé; l'ordre d'un élément répété doit sûrement être conservé ou d'autre XML n'a pas de représentation d'une simple liste.
OriginalL'auteur unbeli