Проверка схемы ответа SOAP

Краткая версия:

Я пытаюсь написать XSD, который будет проверять мой SOAP ответы службы. Я чувствую себя обязанным просто импортировать http: // schemas.xmlsoap.org/soap/envelope/ вместо переопределения элементов SOAP, таких как Envelope, Head и Body, но этот xmlsoap. Определение Body в схеме org слишком широко для моего использования - как только я импортирую схему SOAP, мой XSD (который я тщательно адаптировал для своей службы) неожиданно проверяет все сообщения SOAP.

Как мне обрабатывать определение конверта, головы, тела SOAP в моем XSD?

Я подозреваю, что проблема в том, что я пытаюсь повторно использовать другие схемы, которые я не должен пытаться повторно использовать. использовать. Конечно, эти схемы для SOAP предназначены для определения того, как (все) сообщения SOAP должны выглядеть. И, возможно, мне просто нужно определить в моей схеме, как я хочу, чтобы мое конкретное мыльное тело выглядело.

Я, возможно, только что ответил на свой вопрос. Может у кого-то есть другое решение?

Расширенная версия:

У меня небольшие проблемы с созданием XSD для описания ответного сообщения от одной из моих служб SOAP.

Вот ' Итак, я вручную написал XSD, который описывает все типы, которые принадлежат к моему сервисному мылу: Body



   
      
         
      
   
   

Когда я пытался проверить пример ответа (первый фрагмент XML) с помощью схемы (2-й фрагмент) с помощью PHP DOMDocument :: schemaValidateSource (), валидатор указал на мою первую очевидную ошибку:

Элемент 'soap: Envelope': Нет подходящего глобального объявления

«Ой, да, - подумал я, - эти элементы определены в пространстве имен SOAP, поэтому Мне нужно импортировать XSD SOAP "

Итак, я отредактировал свой XSD и добавил импорт:


И это сработало! DOMDocument :: schemaValidateSource возвращает true, когда я проверяю ответ мыла с помощью XSD.

Затем, в качестве проверки работоспособности , я взял другой XSD ответа мыла, который у меня лежал:



   
   
      
         
         
      
   
   

И я попытался проверить свой ответ мыла с помощью этой совершенно несвязанной схемы ...

И схема, которая, на первый взгляд, вообще не описывает это сообщение, также проверяет ответ мыла.

Затем я понимаю, что схема XSD должна быть причиной того, что ответ проверяется на соответствие этим двум различным схемам. Схема SOAP, которую я импортирую из http://schemas.xmlsoap.org/soap/envelope/ , определяет элемент Body как:




  


  
 
   Prose in the spec does not specify that attributes are allowed on the Body element
 
  


Что позволяет содержимому тега Body быть практически любым .

В этом есть смысл, цель XSD XSD - определить, как должны выглядеть ВСЕ XSD, а не только мой.

Итак, мой вопрос: как я должен создать XSD для проверки этих ответов SOAP, повторно используя существующие XSD SOAP, если это возможно?

Вот направление, в котором я следовал ...

  • Думаю, я мог бы выбросить XSD-схему xmlsoap.org из окна и самостоятельно переопределить Envelope и Body, точно указав, что должно отображаться в элементе Body. Но я чувствую, что в конечном итоге у меня будет копия всех элементов мыла внутри моего собственного XSD, с немного другим определением Head и Body, и это похоже на нарушение DRY.
  • Есть ли способ, которым я могу импортировать XSD xmlsoap.org, но затем переопределить определение мыла: Body изнутри моего XSD?
15
задан Justin 26 October 2010 в 00:27
поделиться