То, что вы видите здесь, это «пространства имен XML». В двух словах:
- Пространство имен XML однозначно идентифицируется URI;URI никуда не должен указывать, это просто способ «владеть» именем. Например, информация конверта SOAP использует пространство имен
http://schemas.xmlsoap.org/soap/envelope/
. - В документе XML или даже в разделе документа XML пространствам имен присваиваются «локальные префиксы», которые ничего не значат за пределами этого документа. или раздел, и просто там, чтобы избежать записи целого URI много раз. Они объявлены с атрибутами, такими как
xmlns:someprefix="http://example.com"
, и используются в именах элементов и атрибутов, таких как <someprefix:foo someprefix:bar="hello" />
- Каждый раздел также имеет «пространство имен по умолчанию», объявленное как
xmlns="http://example.com"
, которое определяет элементы пространства имен весли у них нет префикса. - Служба SOAP обычно помещает свои пользовательские теги в определенное пространство имен для этой службы. В этом случае программа пытается создать пространство имен в зависимости от того, где вы выполняете код, и предлагает либо
http://localhost/webservices-soap/servicios
, либо http://localhost:8000/soap/servicios
. Пространство имен должно быть жестко закодировано, чтобы оно было одинаковым при развертывании службы, но для тестирования это не имеет значения. - Если вы пишете XML вручную, вы обычно назначаете запоминающиеся префиксыдля каждого пространства имен, например
SOAP-ENV
или soap
или envelope
для http://schemas.xmlsoap.org/soap/envelope/
, но это не меняет смысла вообще. В этом случае префиксы tns
и ns1
- это то, что различные библиотеки SOAP выбрали для использования.
В качестве быстрого примера, эти фрагменты XML будут иметь точно такое же значение:
<?xml version="1.0"?>
<abc:example xmlns:abc="http://example.com">
<abc:foo>42</abc:foo>
</abc:example>
и:
<?xml version="1.0"?>
<xyz:example xmlns:xyz="http://example.com">
<xyz:foo>42</xyz:foo>
</xyz:example>
и даже:
<?xml version="1.0"?>
<abc:example xmlns:abc="http://example.com">
<xyz:foo xmlns:xyz="http://example.com">42</xyz:foo>
</abc:example>
но это будет означать что-то другое (помните, префикс не имеет значения, только URI):
<?xml version="1.0"?>
<abc:example xmlns:abc="http://something.different.example.com">
<abc:foo>42</abc:foo>
</abc:example>