2009-10-19 3 views
21

Czy "puste" jest poprawną wartością dla przestrzeni nazw XML? Jeśli tak, co to znaczy?Czy xmlns = "" jest poprawną przestrzenią nazw xml?

Mam następujący kod XML, ale nie mam pewności, do których należą obszary nazw Field1 i Field2.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soapenv:Header /> 
    <soap:Body> 
    <Root xmlns="uri"> 
     <Field1 xmlns="">147079737</Field1> 
     <Field2 xmlns="">POL</Field2> 
    </Root> 
    </soap:Body> 
</soapenv:Envelope> 
+0

Interesujące pytanie. Jeśli nie jest to zgodne z prawem, to w jaki sposób można określić "no namespace" dla elementu, którego rodzic * jest * w przestrzeni nazw? – skaffman

+9

@skaffman: Jest legalny i jest to sposób na wprowadzenie elementu do globalnej przestrzeni nazw. –

+3

Zgadzam się z @Frerich Raabe: Bez tego nie byłbyś w stanie pozbyć się odziedziczonej przestrzeni nazw w węźle potomnym. – Tomalak

Odpowiedz

23

Tak, jest ważny. Section 6.2 w Namespaces in XML 1.0 Recommendation specjalnie mówi:

Wartość atrybutu w domyślnej deklaracji przestrzeni nazw może być pusty. Ma to taki sam skutek w zakresie deklaracji, że nie istnieje domyślna przestrzeń nazw.

Cytat z komentarzem:

To jest legalne, a to jest droga do wniesienia element do globalnej przestrzeni nazw.

+0

Ale czy powyższe jest * domyślną * deklaracją przestrzeni nazw? –

+0

@Brian: Tak; patrz Definicja 3 w sekcji 3 w "Przestrzeni nazw w rekomendacji XML 1.0" W mojej odpowiedzi podłączyłem. Mówi "[Definicja: Jeśli nazwa atrybutu pasuje do DefaultAttName, to nazwa przestrzeni nazw w wartości atrybutu jest domyślną przestrzenią nazw w zakresie elementu, do którego dołączona jest deklaracja.] '. DefaultAttName jest zdefiniowany jako "xmlns". –

+0

W moim przypadku, jeśli jest to to samo, co brak przestrzeni nazw, to jaka jest przestrzeń nazw? Czy XML ma predefiniowaną domyślną przestrzeń nazw, która jest używana wtedy, gdy nie ma domyślnej przestrzeni nazw podanej przez użytkownika, tak jak w moim przypadku? –

3

To nie jest prawidłowy XML NS. To nie jest poprawna deklaracja NS NSX. Proszę sprawdzić section 2.2 przestrzeni nazw w XML 1.0:

ciąg pusty, choć jest to legalne odniesienia URI, nie może być używany jako nazwa przestrzeni nazw.

Jest to jednak jedyny sposób nierozpoznania domyślnej deklaracji NS, jeśli taka istnieje, lub nie ma żadnego skutku. Widzieć. Przestrzenie nazw w XML 1.0 i 1.1, section 6.2. Jednak 1.1 NS rec dodał sposób, aby również nie ujawnić deklaracji NS z prefiksem.

W ten sposób jest poprawna, ale nie jest "poprawną przestrzenią nazw XML" taką, jaka została napisana w OP.

+0

Wygląda na to, że mylące prefiksy przestrzeni nazw mają rzeczywisty obszar nazw (identyfikatory URI przestrzeni nazw). Pusty ciąg nie jest prawidłowym prefiksem przestrzeni nazw, ale prawidłowym identyfikatorem URI przestrzeni nazw. – vog

+0

Nie sądzę, żebym coś pomieszał. Znam różnicę. BTW Nie widzę, gdzie moja odpowiedź może sugerować, że. – lkuty

+0

A przyjęta odpowiedź jest błędna. – lkuty