TargetNamespace и пространство имен в WSDL
Я изучаю веб-сервисы SOAP, и я действительно новичок в веб-сервисах. В WSDL я немного запутался в отношении элемента targetNamespace
в определении и namespace
, включенного в xsd:schema
.
<definitions .... targetNamespace=" " >
<xsd:schema>
<xsd:import namespace=" " schemaLocation=""/>
</xsd:schema>
Что это означает под этими двумя элементами, и я просмотрел много статей в Интернете и не смог четко определить это. Кто-нибудь, пожалуйста, объясните мне?
Эти два получают одинаковые значения?
Ответы
Ответ 1
Целевое пространство имен в файле WSDL будет пространством имен, связанным с самой службой SOAP. Например, у нас есть обслуживание клиентов, пространство имен будет чем-то вроде http://www.acme.com/Customer/V1/CustomerService
.
В разделе импорта XSD указано пространство имен XSD, которое вы собираетесь импортировать. Файл XSD будет содержать данные, которые служба отправит, т.е. Содержит определения объектов, которые будут сериализованы в XML и отправлены вверх и вниз в качестве запроса и ответов. XSD также может содержать операции, которые WSDL будет предоставлять.
WSDL может импортировать один или несколько файлов XSD, и каждый XSD будет иметь собственное пространство имен. XSD будет содержать пространство имен, например:
-
http://www.acme.com/Customer/V1/GetCustomerRequest
для GetCustomerRequest это определит структуру данных операции GetCustomerRequest.
-
http://www.acme.com/Customer/V1/CustomerObject
для CustomerObject это определит структуру данных объекта CustomerObject.
Пространства имен немного похожи на пакеты Java, они просто позволяют вам определять иерархию объектов. Важно понять, что у вас может быть два объекта Customer, принадлежащих вашей системе продажи, и один, который принадлежит вашей системе CRM, например. Поместив их в отдельные пространства имен, вы сможете использовать оба объекта Customer в одной службе, если они имеют уникальные пространства имен.
Обычно эти пространства имен также станут частью каталога SOA, и их определение будет частью ваших стандартов управления SOA. Они важны, если вы хотите успешно выполнить SOA.
Ответ 2
Я объясню использование Java-аналогии.
Пространство имен подобно пространству имен Java. Каждый элемент xml находится в пространстве имен. Предоставление targetNamespace означает, что все элементы (и типы), определенные внутри, находятся в этом пространстве имен. Это похоже на то, что все классы Java находятся внутри пакета.
Импортируемый xsd будет иметь свое собственное пространство имен задач, которое будет означать, что все элементы в xsd будут в определенном пространстве имен.
Импорт в wsdl похож на предоставление импорта java с указанием пакета.
Надеюсь, я понятен и полезен: D.
Ответ 3
targetNamespace - это "артефакт" XML-схемы. Определенные пользователем типы данных могут иметь конфликт имен при работе с другой командой. Этот атрибут элемента schema
определяет пространство имен, т.е. пакет. По соглашению мы используем URI/URL, но мы можем использовать любую строку.
<?xml version="1.0" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="namespace">
...
</xs:schema>
например:
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/beans/spring-mvc.xsd" xmlns:mvc="http://www.springframework.org/schema/mvc"
// or if the schema exist in current directory we can declare as follows
xsi:schemaLocation="http://www.springframework.org/schema/mvc spring-mvc.xsd" xmlns:mvc="http://www.springframework.org/schema/mvc"
//for import xml schema
<xsd:import schemaLocation="http://localhost:9999/ws/hello?xsd=1" namespace="http://ws.peter.com/"/>
Примечание: xsi:schemaLocation
означает, что пространство имен и URL разделены пробелами. И xmlns:mvc
означает пространство имен http://www.springframework.org/schema/mvc
, определенное как псевдоним mvc
.
Например: spring XML-схема beans имеет одинаковое targetNamespace для разных версий spring-beans.xsd.
![enter image description here]()
Пространство имен аналогия:
+---------+--------------------------------------------------------+------------------------------+------------------------+
| Context | Name | Namespace identifier | Local name |
+---------+--------------------------------------------------------+------------------------------+------------------------+
| Path | /home/user/readme.txt | /home/user (path) | readme.txt (file name) |
| XML | xmlns:xhtml="http://www.w3.org/1999/xhtml"<xhtml:body> | http://www.w3.org/1999/xhtml | body |
| Java | java.util.Date | java.util | Date |
+---------+--------------------------------------------------------+------------------------------+------------------------+
для более подробной информации