Domanda In XML, l'ordine è importante?


L'ordine in cui gli elementi di un genitore comune compaiono in XML è un dato significativo acquisito dal documento XML o l'ordine non è specificato come significativo? Ad esempio, considera i due documenti XML:

<people>
 <person name="sam"/>
 <person name="juni"/>
</people>

e

<people>
 <person name="juni"/>
 <person name="sam"/>
</people>

Questi documenti sono considerati come rappresentativi identico dati, o è la differenza nell'ordine catturato?


44
2017-07-15 13:46


origine


risposte:


L'ordine degli elementi è significativo in XML, quindi nel tuo esempio i due documenti sono diversi. L'ordine degli attributi non è significativo, però.

<people>
  <person name="kathy" id="1"/>
</people>

Questo è esattamente lo stesso di:

<people>
  <person id="1" name="kathy"/>
</people>

45
2017-07-15 13:52



Non sono identici - Se la sequenza questioni dipende dal programma o dall'utente che lo elabora. Ad esempio, la sequenza di elementi in un documento XHTML determina come vengono visualizzati in un browser e i motori di ricerca utilizzano la posizione nel documento per giudicare l'importanza relativa dei dati.


21
2017-07-15 13:50



L'ordine è potenzialmente importante, ma dipende da cosa viene trasmesso.

In XHTML, ad esempio, l'ordine è estremamente importante - se tu avessi fratelli paragrafi in un ordine casuale, sarebbe molto confuso!

In molti altri casi, non è importante.

XML è solo un modo per rappresentare un albero di nodi. Lo stesso XML dice che l'ordine è importante: le API devono conservare l'ordine, ad esempio - ma dipende da ciò che produce / interpreta i dati in veramente preoccuparsi per l'ordine o no.

Le specifiche XML devono "sbagliare sul lato dell'ordine": è facile ignorare l'ordine se non ti interessa, ma è difficile ricostruire l'ordine se le API decidono di cambiare le cose. (Dovresti mettere l'ordine in attributi ecc.)


18
2017-07-15 13:55



Mentre l'ordinamento degli attributi XML non è significativo per quanto riguarda lo standard XML, la rappresentazione testuale di XML pone necessariamente gli attributi in un ordine specifico. Questo può essere un problema per cose come XML Signature, che genera una firma digitale per i documenti XML. Un diverso ordine di attributo genererebbe una firma diversa, che chiaramente è errata.

Per questo (e per altri motivi), esiste ora uno standard per Canonicalizzazione XML, che definisce le regole per riorganizzare i documenti XML in modo che conservino lo stesso contenuto informativo, ma hanno cose come spazio bianco, dichiarazioni di spazi dei nomi e attributi riorganizzati in modo prevedibile .

A partire dal xml.com

L'XML canonico richiede l'inclusione   delle dichiarazioni di namespace e   attributi in lessicografico ascendente   ordine.


5
2017-07-15 14:02



Secondo Questo articolo, la versione 1.0 dello standard non richiede nemmeno che i parser segnalino i fratelli nell'ordine in cui appaiono nel documento. In quella luce, non sarebbero considerati diversi, poiché entrambi i bambini sono lì. Forse questo è cambiato, così che altre risposte sono per le versioni più recenti di XML, però.


4
2017-07-15 13:51



Dal puro punto di vista della validità XML, dipende dallo schema, se esiste, che descrive quali sono le regole per la formattazione dell'XML.

Detto questo, l'ordine deve essere preservato (vedi 2.1.1 in http://www.w3.org/TR/xml-infoset/) ma se è "importante" per un'applicazione dipende dal suo autore.

All'interno di uno schema, l'ordine può essere irrilevante con l'uso di xs:all compositore, anche se non sono sicuro che ciò influisca sulla conservazione dell'ordine acquisito, cioè mi aspetto che l'ordine all'origine / serializzazione venga mantenuto dai processori XML.

Tuttavia, in 1.0 questo compositore aggiunge una restrizione sugli elementi figli in modo che debbano verificarsi 0 o 1 volte. In XSD 1.1, questa restrizione viene rimossa, rendendo più semplice specificare contrattualmente che l'ordine non è importante, in modo efficace xs:all è diventata la versione non ordinata di xs:sequence.

A causa della eccessivamente restrittiva 1.0 xs:all compositore, l'ordinato xs:sequence il compositore doveva essere usato. Pertanto, l'ordine veniva spesso imposto artificialmente.

L'adozione di 1.1 da parte dei fornitori di librerie di validatori è lenta.

In quanto tale, le API devono considerare l'ordine quando si evolvono con nuovi elementi. Non sono a conoscenza di alcun framework di serializzazione XML che possa funzionare con 1.1 e devi supporre che i tuoi client utilizzeranno 1.0 e convalideranno i messaggi in arrivo 1.1 con le regole 1.0 e choke.

Luca


4
2017-08-28 09:31



Il Spec. XML 1.0 non dice nulla sull'ordine degli elementi con lo stesso nome dei figli dello stesso elemento genitore. Quindi sembra che il problema non sia definito.

Tuttavia, la maggior parte dei parser XML e delle API conserverà la sequenza come fornita nella rappresentazione testuale. Quindi, è possibile implementare applicazioni che si preoccupano dell'ordine degli elementi. E la risposta di fatto alla tua domanda è: sì, l'ordine conta. I due esempi sono diversi.

Osservando più da vicino, è necessario valutare quale sia il tuo caso d'uso. Se il tuo XML ha bisogno di interoperare con applicazioni diverse (forse di terze parti), devi sempre pensare che l'ordine sia importante. Se hai il controllo totale sull'applicazione che produce e consuma, potresti rilassare questa regola.

Come sempre, dovrai giudicare.


3
2017-07-15 14:09