Учитывая следующее (часть) вызов мыла;
<m1:NextCommencementDateInput xmlns:m1="http://foo.bar.com/Types">
<aDate xmlns="">2010-06-02</aDate>
</m1:NextCommencementDateInput>
Apperantly это совпадает с (при проверке против xsd, использующего XMLSpy)
<m1:NextCommencementDateInput xmlns:m1="http://foo.bar.com/Types">
<aDate>2010-06-02</aDate>
</m1:NextCommencementDateInput>
Таким образом, что делает xmlns = "", делают точно?
Править: Для разработки, почему я спрашиваю, это вызвано тем, что я звоню третьему лицу, и они теперь заявляют, что мы должны удалить xmlns = "" из наших запросов. Я однако думаю, что они - то же, и они должны изменить свою сторону.
xmlns = ""
очищает определение пространства имен по умолчанию (также известного как пустой префикс). После этого объявления все элементы без префикса считаются имеющими пустое пространство имен.
Итак, разница такова:
Первый пример (с xmlns = "") очищает пустой префикс, поэтому элемент aDate имеет пустое пространство имен.
Второй пример этого не проясняет. Пространство имен элемента aDate зависит от объявления пространства имен в содержащей его области. Если есть активное объявление xmlns = "some: namespace", aDate будет иметь это пространство имен. В противном случае у него будет пустое пространство имен.
Кроме того, некоторые анализаторы XML жалуются на xmlns = "", если нет активного объявления xmlns = "some: namespace" для очистки ...
Согласно спецификации XML Namespace (§6.2), они полностью идентичны, за исключением самого дополнительного атрибута (который ваша реализация может скрывать или не скрывать от вас).