2010-07-06 4 views
5

Biorąc pod uwagę następujące (kawałek) połączenie mydła;Co oznacza xmlns = "" dokładnie oznacza

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

Apperantly ten jest taki sam jak (podczas sprawdzania poprawności przeciwko XSD przy użyciu XMLSpy)

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

Więc co robi xmlns = "" zrobić dokładnie?

Edytuj: Aby wyjaśnić, dlaczego o to pytam, to dlatego, że dzwonię do strony trzeciej, a teraz stwierdzili, że powinniśmy usunąć xmlns = "" z naszych żądań. Myślę jednak, że są one takie same i powinny zmienić swoją stronę.

+1

możliwe duplikat [jaki jest dokładny wykorzystanie w xmlns xml i html] (http://stackoverflow.com/questions/1372064/what-is-the-exact-usage-of-xmlns-in-xml-and-html) – kennytm

+0

(Dotyczy również: http: // stackoverflow .pl/questions/630468/what-is-xmlns-in-every-wpf-file) – kennytm

+2

Nie sądzę, że jest to duplikat. Raymond pyta o konkretne użycie xmlns, podczas gdy linki, które podałeś, mówią ogólnie o xmlns. – maayank

Odpowiedz

1

Zgodnie z XML Namespace specification (§6.2), są one całkowicie identyczne, jak w przypadku samego dodatkowego atrybutu (którego realizacja może lub nie może się przed Tobą ukryć).

+0

Zgodnie ze specyfikacją, do której łącza są * nie są * takie same (ale zależy to od otaczającego XML). –

+0

To rzeczywiście zależy od kontekstu. Brałem przykład jako cały dokument. –

5

xmlns="" czyści definicję domyślnej przestrzeni nazw (również pustego prefiksu). Po tej deklaracji wszystkie elementy bez przedrostka są uważane za posiadające pustą przestrzeń nazw.

Więc różnica jest:

  • Pierwszy przykład (z xmlns = "") czyści pusty prefiks tak aDate element ma zerową nazw.

  • Drugi przykład go nie oczyszcza. Przestrzeń nazw elementu aDate zależy od deklaracji przestrzeni nazw w zakresie zawierającym zakres. Jeśli jest aktywna deklaracja xmlns = "some: namespace", aDate będzie mieć tę przestrzeń nazw. W przeciwnym razie będzie mieć pustą przestrzeń nazw.

Dodatkowo niektóre parser XML skarżą się na xmlns = „” jeśli nie ma żadnych aktywnych xmlns = „Niektóre nazw:” deklaracja wyczyścić ...