2010-07-06 30 views
5

Dada la siguiente (porción) de una llamada de jabón;¿Qué significa xmlns = "" significa exactamente

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

Apperantly esto es lo mismo que (cuando se valida con el XSD usando XMLSpy)

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

Entonces, ¿qué hace xmlns = "" hacen exactamente?

Editar: Para explicar por qué estoy preguntando esto es porque estoy llamando a un tercero y ahora afirman que debemos eliminar xmlns = "" de nuestras solicitudes. Sin embargo, creo que son lo mismo y deberían cambiar su lado.

+1

posible duplicado de [¿cuál es el uso exacto de xmlns en xml y html] (http://stackoverflow.com/questions/1372064/what-is-the-exact-usage-of-xmlns-in-xml-and-html) – kennytm

+0

(También relevante: http: // stackoverflow .com/questions/630468/what-is-xmlns-in-every-wpf-file) – kennytm

+2

No creo que sea un duplicado. Raymond pregunta sobre el uso específico de xmlns, mientras que los enlaces que proporcionó están hablando de xmlns en general. – maayank

Respuesta

1

De acuerdo con XML Namespace specification (§6.2), son completamente idénticos aparte del atributo extra en sí mismo (que su implementación puede o no ocultarle).

+0

De acuerdo con la especificación a la que se vinculan, * no * son iguales (pero dependerán del XML circundante). –

+0

Eso de hecho dependerá del contexto. Estaba tomando el ejemplo como un documento completo. –

5

xmlns="" borra la definición de espacio de nombres predeterminado (también conocido como prefijo vacío). Después de esta declaración, se considera que todos los elementos sin prefijo tienen espacio de nombre nulo.

Así que la diferencia es:

  • Primer ejemplo (con xmlns = "") despeja el prefijo vacío, por lo unaFecha elemento tiene espacio de nombres nulo.

  • El segundo ejemplo no lo borra. El espacio de nombre del elemento aDate depende de la declaración del espacio de nombres en el ámbito que lo contiene. Si hay una declaración activa xmlns = "some: namespace", aDate tendrá este espacio de nombres. De lo contrario, tendrá espacio de nombre nulo.

Además, algunos analizadores XML se quejan de xmlns = "" si no hay activos xmlns = "algunos: namespace" para borrar ...

Cuestiones relacionadas