Gibt es eine Möglichkeit, die Reihenfolge von XML-Elementen in einem XML-Schema zu erzwingen / zu bewahren?

8

Betrachten wir das folgende XML-Schema:

%Vor%

und ein entsprechendes XML-Beispiel:

%Vor%

Gibt es eine Möglichkeit zu garantieren, dass die Reihenfolge von <lib:book .../> -Elementen erhalten bleibt? Ich möchte sicher sein, dass jeder Parser, der die XML liest, Bücher in der angegebenen Reihenfolge zurückgibt, nämlich zuerst das Buch mit title="t1" , dann das Buch mit title="t2" und schließlich das Buch mit title="t3" .

Soweit ich weiß, sind XML-Parser nicht erforderlich, um die Reihenfolge zu erhalten. Ich frage mich, ob man dies durch XML Schema erzwingen kann? Eine schnelle Lösung für mich wäre, ein index -Attribut zum <lib:book .../> -Element hinzuzufügen und die Auftragserhaltung an die Anwendung zu delegieren, die das XML liest.

Kommentare? Vorschläge?

    
MarcoS 26.05.2010, 10:07
quelle

4 Antworten

1

Ich weiß, dass dies sehr alt ist, aber dennoch suche ich nach einer Möglichkeit, eine konservierte Reihenfolge von XML-Elementen zu gewährleisten.

Während alle aktuellen Parser die Reihenfolge beibehalten können, erfordert die XML-Definition dies in keiner Weise, und zukünftige Parser können die Reihenfolge komplett anders handhaben.

Es scheint die beste Lösung zu sein, die jetzt besteht, den Elementen ein "id" -Attribut zu geben, damit die Reihenfolge nach dem Parsen im Code verifiziert werden kann.

Ich hasse es, von meinen Benutzern verlangen zu müssen, eine beliebige ID="1", id="2" usw. hinzuzufügen, wenn die Reihenfolge in der XML-Datei bereits offensichtlich ist, aber soweit ich weiß, gibt es keinen offiziellen Standard in XML, um eine bestimmte Reihenfolge für Wiederholungselemente zu erfordern.

Aktualisieren

Wenn Sie .NET verwenden, können Sie festlegen, in welcher Reihenfolge solche Elemente gelesen werden sollen. So lange, wie Sie wissen, wo Ihr XML analysiert wird, und der Parser unterstützt die Durchsetzung Wenn das Element so angeordnet ist, wie Sie es benötigen, kann die Reihenfolge erzwungen werden.

Wenn jedoch ein Drittanbieter Ihre Ergebnisse mit seinem eigenen Parser übernehmen und versuchen würde, Ihre Ergebnisse zu replizieren, könnte dies Verwirrung stiften, da dieser Auftrag an anderer Stelle und nicht im XML-Code konfiguriert ist. Daher würde keine andere Parser-Implementierung dies nutzen bestellen.

Dies kann also zusammengefasst werden: (a) Die Reihenfolge kann nicht innerhalb der XML-Spezifikation selbst durchgesetzt werden, aber (b) Die Reihenfolge kann und wird oft von einer großen Anzahl von XML-Parsern erzwungen.

    
Ben 03.04.2011, 02:54
quelle
6

Laut Michael Kay, der eine wichtige Person in der XML-Welt zu sein scheint, bleibt die Reihenfolge erhalten.

  

Ja, Sie können davon ausgehen, dass die Reihenfolge der Elemente erhalten bleibt. Die Autoren der XML-Spezifikation haben es versäumt, dies explizit zu sagen, aber das liegt daran, dass sie es für offensichtlich hielten. Ein Parser, der die Reihenfolge nicht aufrechterhält, könnte technisch konform sein, aber niemand würde ihn jemals benutzen; Viele, viele XML-Anwendungen hängen davon ab, dass die Reihenfolge beibehalten wird, insbesondere diejenigen, die XML zur Darstellung von Dokumenten verwenden.

Quelle: Ссылка

    
user1121956 09.11.2014 14:22
quelle
2
___ answer5527257 ___

Ich weiß, dass dies sehr alt ist, aber dennoch suche ich nach einer Möglichkeit, eine konservierte Reihenfolge von XML-Elementen zu gewährleisten.

Während alle aktuellen Parser die Reihenfolge beibehalten können, erfordert die XML-Definition dies in keiner Weise, und zukünftige Parser können die Reihenfolge komplett anders handhaben.

Es scheint die beste Lösung zu sein, die jetzt besteht, den Elementen ein "id" -Attribut zu geben, damit die Reihenfolge nach dem Parsen im Code verifiziert werden kann.

Ich hasse es, von meinen Benutzern verlangen zu müssen, eine beliebige ID="1", id="2" usw. hinzuzufügen, wenn die Reihenfolge in der XML-Datei bereits offensichtlich ist, aber soweit ich weiß, gibt es keinen offiziellen Standard in XML, um eine bestimmte Reihenfolge für Wiederholungselemente zu erfordern.

Aktualisieren

Wenn Sie .NET verwenden, können Sie festlegen, in welcher Reihenfolge solche Elemente gelesen werden sollen. So lange, wie Sie wissen, wo Ihr XML analysiert wird, und der Parser unterstützt die Durchsetzung Wenn das Element so angeordnet ist, wie Sie es benötigen, kann die Reihenfolge erzwungen werden.

Wenn jedoch ein Drittanbieter Ihre Ergebnisse mit seinem eigenen Parser übernehmen und versuchen würde, Ihre Ergebnisse zu replizieren, könnte dies Verwirrung stiften, da dieser Auftrag an anderer Stelle und nicht im XML-Code konfiguriert ist. Daher würde keine andere Parser-Implementierung dies nutzen bestellen.

Dies kann also zusammengefasst werden: (a) Die Reihenfolge kann nicht innerhalb der XML-Spezifikation selbst durchgesetzt werden, aber (b) Die Reihenfolge kann und wird oft von einer großen Anzahl von XML-Parsern erzwungen.

    
___ answer2912255 ___

Die Reihenfolge der Elemente (im Gegensatz zu Attributen) ist in XML von Bedeutung, und jeder Parser, den ich kenne, behält sie bei.

    
___ antwort12196740 ___

Wie in einem Kommentar oben erwähnt, xs:sequence definiert eine ORDERED-Sammlung. Hier ist der Beweis:

%Vor%      

... Diese Elemente müssen name, street, city, state und zip genannt werden, wie durch die Werte der Namensattribute der Deklarationen angegeben, und die Elemente müssen in derselben Reihenfolge (Reihenfolge) erscheinen, in der sie vorkommen sind deklariert .

Quelle : W3C: XML-Schema Teil 0

    
___ answer26829193 ___

Laut Michael Kay, der eine wichtige Person in der XML-Welt zu sein scheint, bleibt die Reihenfolge erhalten.

  

Ja, Sie können davon ausgehen, dass die Reihenfolge der Elemente erhalten bleibt. Die Autoren der XML-Spezifikation haben es versäumt, dies explizit zu sagen, aber das liegt daran, dass sie es für offensichtlich hielten. Ein Parser, der die Reihenfolge nicht aufrechterhält, könnte technisch konform sein, aber niemand würde ihn jemals benutzen; Viele, viele XML-Anwendungen hängen davon ab, dass die Reihenfolge beibehalten wird, insbesondere diejenigen, die XML zur Darstellung von Dokumenten verwenden.

Quelle: Ссылка

    
___ tag123xml ___ Die XML-Datei (Extensible Markup Language) ist ein flexibles, strukturiertes Dokumentformat, das Codierungsregeln für Menschen und Maschinen definiert. ___ tag123xsd ___ XSD bezieht sich im Allgemeinen auf ein Dokument, das im W3C-XML-Schema-Format geschrieben wurde und eine Beschreibung eines bestimmten XML-Dokumenttyps enthält. ___ qstntxt ___

Betrachten wir das folgende XML-Schema:

%Vor%

und ein entsprechendes XML-Beispiel:

%Vor%

Gibt es eine Möglichkeit zu garantieren, dass die Reihenfolge von %code% -Elementen erhalten bleibt? Ich möchte sicher sein, dass jeder Parser, der die XML liest, Bücher in der angegebenen Reihenfolge zurückgibt, nämlich zuerst das Buch mit %code% , dann das Buch mit %code% und schließlich das Buch mit %code% .

Soweit ich weiß, sind XML-Parser nicht erforderlich, um die Reihenfolge zu erhalten. Ich frage mich, ob man dies durch XML Schema erzwingen kann? Eine schnelle Lösung für mich wäre, ein %code% -Attribut zum %code% -Element hinzuzufügen und die Auftragserhaltung an die Anwendung zu delegieren, die das XML liest.

Kommentare? Vorschläge?

    
___ qstnhdr ___ Gibt es eine Möglichkeit, die Reihenfolge von XML-Elementen in einem XML-Schema zu erzwingen / zu bewahren? ___
shuron 30.08.2012 12:21
quelle
1

Die Reihenfolge der Elemente (im Gegensatz zu Attributen) ist in XML von Bedeutung, und jeder Parser, den ich kenne, behält sie bei.

    
unbeli 26.05.2010 11:00
quelle

Tags und Links