2010-11-05 21 views
8

in altre parole:L'ordine del tag è rilevante per XML valido?

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
<tag1> 
    <tag1.1></tag1.1> 
</tag1> 
<tag2 /> 
<root> 

è lo stesso:

<?xml version="1.0" encoding="UTF-8"?> 
    <root> 
    <tag2 /> 
    <tag1> 
     <tag1.1></tag1.1> 
    </tag1>  
    <root> 

?

risposta

10

In tutti i dettagli come vengono mostrati, i due esempi sono semanticamente uguali.

È un comune equivoco di XML che in un documento XML ben formato l'ordine degli elementi di pari livello è significativo. Lo XML 1.0 spec specifica che gli attributi non sono ordinati, tuttavia non dice nulla sugli elementi. Pertanto un processore XML è libero di segnalare i fratelli di elementi nell'ordine che preferisce.

Detto questo, non penso che i processori XML comunemente usati riportino gli elementi in un ordine diverso rispetto all'ordine in cui appaiono in un documento.

Si chiede di un documento "valido" - ciò implica che un DTD o uno schema è in uso, e pertanto può (o non può essere) che l'ordine sia pertinente. Esistono meccanismi per una DTD o uno schema per specificare che l'ordine degli elementi è pertinente all'interno di un documento. Tuttavia, i tuoi esempi non mostrano l'uso di un DTD o di uno schema.

+0

In effetti c'è un DTD. Grazie. – Segolas

+0

"È un comune fraintendimento di XML che in un documento XML ben formato l'ordine degli elementi è significativo." Non è un fraintendimento. Vedi 3.2.1. Ovviamente, un processore XML potrebbe essere in grado di elaborare il vincolo di sequenza e restituire ancora gli elementi in un ordine diverso. Potrebbe anche ruotare tutti i nodi di testo. –

+0

@Robert Rossney - Ho modificato per passare a "elementi di pari livello", tuttavia, non vedo la rilevanza di 3.2.1 per l'ordinamento degli elementi di pari livello in un documento ben formato. Potresti elaborare? – philhobgen

1

Dipende dalla DTD (o dallo schema) della definizione della lingua.

1

Dipende da cosa sta consumando l'XML. L'ordine degli elementi potrebbe non essere importante in termini di buona formazione del documento XML (a seconda dell'XSD), ma alcuni programmi/API prevedono di leggere l'XML in ordine alfabetico (come DataContractSerializer in .NET).

Inoltre, l'ordine potrebbe essere semanticamente importante (ad esempio se l'XML rappresenta un documento, l'ordine è molto importante).

+3

Farei la distinzione tra * valido * (ad esempio conforme a qualche DTD/schema) e * ben formato * (cioè XML sintatticamente legale) più esplicito. In questo momento sarei tentato di dire che questo argomento non è corretto a causa del modo in cui usa la parola "valido". –

+0

@Andrzej - buon punto. Ho aggiornato la mia risposta per usare ben formato invece che valido. – RQDQ

+1

L'ordine degli elementi non * mai * sarà importante in quanto è ben formato e gli XSD non hanno nulla a che fare con una buona formazione. – Quentin

0

XML mantiene un ordine di documenti - quelli sono considerati due documenti diversi.

La tua applicazione potrebbe considerare non pertinente l'ordine degli elementi. Ad esempio, l'ordine degli elementi è essenziale in XHTML. Se si sta eseguendo la convalida con uno schema o simili, dipende dallo schema se entrambi i documenti sono validi.

Si noti che l'ordine degli attributi non è importante tuttavia (i documenti XML che differiscono solo nell'ordine degli attributi sugli elementi sono considerati identici).

4

Non è importante per XML stesso. Entrambi i documenti sono ovviamente documenti XML ben formati. Tuttavia, potrebbero non essere valido; durante la convalida con uno schema XML, è possibile specificare un ordine e non fornire gli elementi in tale ordine renderà il documento non valido secondo lo schema. Questo può essere fatto con l'elemento xsd:sequence come descritto here

Problemi correlati