Существует ли такая вещь, как виртуальный URL-адрес для пространства имен?

Одна из веб-служб, унаследованных от моей текущей работы, содержит схему WSDL со следующим определением пространства имен:

<xs:schema 
  xmlns:xs="http://www.w3.org/2001/XMLSchema" 
  xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" 
  xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" 
  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
  xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
  xmlns:mns="http://my.example.com/sumproj/msgs.xsd" 
  xmlns:tns="http://my.example.com/sumproj" 
  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
  targetNamespace="http://my.example.com/sumproj/msgs.xsd" 
  elementFormDefault="qualified">

Ко всем перечисленным выше внешним URL-адресам можно получить доступ через веб-браузер, но внутренние (домен my.example.com) выдают только ошибку «Не найдено»:

Не найдено

Запрошенный URL-адрес /sumproj/msgs.xsd не найден на этом сервере.

Поскольку человек, спросивший о том, почему определенные вещи реализованы именно так, ушел, мне интересно, является ли это ошибкой или функцией:

  • Намерен ли разработчик разместить пространство имен XSD на этом сервере http://my.example.com и просто не успел реализовать?

  • Или это какая-то функция безопасности, в которой URL-адрес доступен только веб-службе через XML конфигурации, эффективно определяя этот URL-адрес как виртуальный, когда он фактически обращается к локальному хосту или аналогичному?

Если второе, то как это работает и где я могу узнать об этом подробнее?

(Примечание: пример example.com выше используется только для иллюстрации, я не могу раскрыть внутренний URL моего работодателя)


person Withheld    schedule 19.07.2013    source источник


Ответы (2)


Намерен ли разработчик разместить пространство имен XSD на этом http://my.example.com? server и просто не дошли до его реализации?

Это возможно, но не обязательно; без прочтения мыслей разработчика невозможен твердый ответ. Рациональный разработчик может поступить так или иначе, даже если многие люди, включая меня, скажут, что лучше и рациональнее размещать документацию по пространству имен (возможно, в форме документа схемы, возможно, в форме документа RDDL, возможно, в другом form) в URI пространства имен.

Или это какая-то функция безопасности, в которой URL-адрес доступен веб-службе только через XML-файл конфигурации, эффективно определяющий этот URL-адрес как виртуальный, когда он фактически обращается к локальному хосту или аналогичному?

Не невозможно, но это не метод проектирования, который, кажется, широко задокументирован. (По крайней мере, есть по крайней мере один специалист по XML, который никогда не слышал, чтобы это предлагалось.) Поэтому я предполагаю, что ответ таков: вероятно, это не входило в намерения первоначального автора.

Можете ли вы указать мне авторитетный источник, где я могу прочитать об этом?

Официальным источником пространств имен XML являются документы "Пространства имен в XML 1.0 (третье издание)" и "Пространства имен в XML 1.1 (Второе издание)", под редакцией Тима Брей и др. и опубликованы Консорциумом World Wide Web в 2009 и 2006 годах соответственно.

Трудно сжато доказать обратное, но изучение спецификации должно прояснить, что она не налагает требования о возможности разыменования URI, используемых в качестве имен пространств имен. В разделе 2.1 говорится: «Пространство имен XML идентифицируется ссылкой URI [RFC3986]», но ничто в спецификации не требует разыменования имен пространств имен. Раздел 2.3 определяет процесс сопоставления имени пространства имен как проверку идентичности строки и указывает, что это означает, что эквивалентные формы одного и того же URI (например, http://www.example.org/wine и http://www.Example.org/wine) не считаются равными для целей сопоставления имен пространства имен. Это не имело бы никакого смысла, если бы процессоры пространств имен должны были разыменовывать имена пространств имен.

Группа технической архитектуры W3C (TAG) обсуждает этот комплекс вопросов с точки зрения более высокого уровня в своем документе Архитектура всемирной паутины, том первый. См. в частности

  • раздел 3.5 (в котором излагается принцип, согласно которому «Ссылка не подразумевает разыменование»: «Разработчик приложения или автор спецификации НЕ ДОЛЖЕН требовать сетевого поиска представлений каждый раз, когда на них ссылаются».
  • раздел 4.5.3 о пространствах имен XML
  • раздел 4.5.4 о документах пространства имен (рекомендуется TAG)

См. также этот связанный вопрос (и мой ответ на Это).

если URL-адрес пространства имен указывает на ресурс, обязательно ли это означает, что схема WSDL должна обращаться к нему во время выполнения?

Нет. WSDL может налагать дополнительные правила на использование имен пространств имен в документах WSDL, но фрагмент документа, который вы цитируете, взят из документа схемы XSD. Спецификация XSD не требует разыменования имен пространств имен (хотя и предлагает это как одну из возможных стратегий поиска документов схемы XSD для использования в эпизоде ​​проверки).

Если ответ отрицательный, может ли он обращаться к нему во время выполнения? или это только для чтения человеком?

Процессорам не запрещено разыменовывать имя пространства имен, но некоторые авторитеты не одобряют этого. Когда широко распространенное программное обеспечение разыменовывает имена пространств имен при каждом запуске или при каждом чтении XML-документа, результатом может быть чрезмерный и ненужный сетевой трафик. W3C страдает от такого ненужного трафика в течение нескольких лет и теперь обслуживает все схемы с искусственно низкими скоростями, чтобы убедить пользователей жаловаться поставщикам их программного обеспечения. (Подробности см. в сообщении в блоге Теда Гилда от 2008 года. )

person C. M. Sperberg-McQueen    schedule 23.07.2013
comment
Я не мог бы попросить более подробного ответа, чем этот, ссылаясь на каждый из моих вопросов. Спасибо! - person Withheld; 24.07.2013

Пространства имен XML — это URI (унифицированные идентификаторы ресурсов), предназначенные для того, чтобы отличить авторское значение элемента «книга», скажем, от значения элемента «книга», которое может появиться в любом другом XML-документе.

Если я выбираю пространство имен для своей схемы, я должен быть абсолютно уверен, что оно не будет таким же, как пространство имен, которое может выбрать кто-то другой. Чтобы убедиться, что этого конфликта не произойдет, авторы обычно начинают свои пространства имен с принадлежащего им доменного имени. Это делает их похожими на URL-адреса, но на самом деле не требуется, чтобы URI пространства имен действительно указывал на полезный ресурс или вообще на что-либо. Полезные организации, такие как w3c, фактически публикуют ресурсы по этим URI, поэтому внешние пространства имен в приведенном выше документе работали.

person Polly Shaw    schedule 22.07.2013
comment
Самая важная часть информации, которую я прочитал в вашем ответе, заключается в том, что на самом деле не требуется, чтобы URI пространства имен действительно указывал на полезный ресурс или вообще на что-либо. Можете ли вы указать мне авторитетный источник, где я могу прочитать об этом? (Я пытался найти это в w3.org, но не смог) Кроме того, если URL-адрес пространства имен действительно указывает на ресурс, означает ли это обязательно, что схема WSDL должна обращаться к с ним во время выполнения? Если ответ отрицательный, может ли он обращаться к нему во время выполнения? или это только для человеческого чтения? Спасибо +1 на данный момент. - person Withheld; 22.07.2013
comment
На этой странице в w3schools написано: "URI пространства имен не используется синтаксическим анализатором для искать информацию. В любом случае, поскольку не существует стандарта того, что должно быть в URL-адресе, он не будет знать, что делать с ресурсом, если он что-то загрузит. вики-запись по этому вопросу ссылается на документ 12-летней давности, в котором предлагается стандарт, который еще не был принят. - person Polly Shaw; 23.07.2013