2010-07-06 40 views
5

Dato il seguente (pezzo di) chiamata al sapone;Cosa significa xmlns = "" significa esattamente

<m1:NextCommencementDateInput xmlns:m1="http://foo.bar.com/Types"> 
    <aDate xmlns="">2010-06-02</aDate> 
</m1:NextCommencementDateInput> 

Apperantly questo è lo stesso (durante la convalida contro il XSD utilizzando XMLSpy)

<m1:NextCommencementDateInput xmlns:m1="http://foo.bar.com/Types"> 
    <aDate>2010-06-02</aDate> 
</m1:NextCommencementDateInput> 

Così che cosa fa xmlns = "" fanno esattamente?

Modifica: Per spiegare perché sto chiedendo questo è perché sto chiamando una terza parte e ora stanno affermando che dovremmo rimuovere xmlns = "" dalle nostre richieste. Tuttavia penso che siano gli stessi e dovrebbero cambiare la loro parte.

+1

possibile duplicato di [ciò che è l'utilizzo esatto di xmlns in xml e html] (http://stackoverflow.com/questions/1372064/what-is-the-exact-usage-of-xmlns-in-xml-and-html) – kennytm

+0

(Anche rilevante: http: // stackoverflow .com/questions/630468/what-is-xmlns-in-every-wpf-file) – kennytm

+2

Non penso che questo sia un duplicato. Raymond chiede informazioni sull'uso specifico di xmlns mentre i link che hai fornito parlano di xmlns in generale. – maayank

risposta

1

Secondo lo XML Namespace specification (§6.2), sono completamente identici tranne che per l'attributo extra stesso (che la tua implementazione potrebbe o meno nascondere a te).

+0

In base alle specifiche a cui ci si collega sono * non * uguali (ma dipendono dall'XML circostante). –

+0

Ciò dipenderebbe effettivamente dal contesto. Stavo prendendo l'esempio come un intero documento. –

5

xmlns="" cancella la definizione di spazio dei nomi predefinito (noto anche come prefisso vuoto). Dopo questa dichiarazione tutti gli elementi senza prefisso sono considerati come aventi spazio dei nomi nulla.

Quindi la differenza è:

  • Primo esempio (con xmlns = "") cancella il prefisso vuoto quindi elemento aDate ha spazio nullo.

  • Il secondo esempio non lo cancella. Lo spazio dei nomi di un elemento di data dipende dalla dichiarazione dello spazio dei nomi nel campo di applicazione. Se è attiva la dichiarazione xmlns = "some: namespace", aDate avrà questo spazio dei nomi. Altrimenti avrà spazio dei nomi null.

Inoltre alcuni parser XML si lamentano su xmlns = "" se non ci sono xmlns = "attivi alcuni: namespace" dichiarazione di cancellare ...