Опубликован: 11.05.2007 | Доступ: свободный | Студентов: 1706 / 243 | Оценка: 4.36 / 4.25 | Длительность: 16:06:00
Лекция 3:

Описание интерфейса программной компоненты

< Лекция 2 || Лекция 3: 123 || Лекция 4 >

3.2. Язык XML и схемы XML

Язык XML ( Extensible Markup Language ) в настоящее время нашел множество разнообразных применений и является основой для большого числа общепринятых спецификаций. На рис. 3.2 представлены основные используемые в распределенных системах спецификации, основанные на языке XMLXSD, SOAP, WSDL, – которые будут рассмотрены далее.

XML и основанные на нем спецификации

Рис. 3.2. XML и основанные на нем спецификации

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

<?xml version="1.0" encoding="utf-8"?>
<GeomFigures>
  <Point X="2" Y="-1" />
  <Line>
    <A X="-1" Y="-1" />
    <B X="2" Y="2" />
  </Line>
</GeomFigures>

Основными недостатками XML с точки зрения обмена сообщениями является неудобное, в силу его древовидной структуры, представление отношения "многие ко многим", а также несколько большие затраты времени на передачу и разбор сообщений на языке XML по сравнению с двоичным представлением аналогичных данных.

Поскольку свойственное XML открытое представление информации не всегда удобно с точки зрения безопасности, то существует спецификации XML-DigitalSignature и XML-Encrypton, предназначенные для передачи в XML конфиденциальной информации. Первая из них позволяет добавить к XML-документу цифровую подпись, вторая – зашифровать XML-документ или отдельные его элементы.

Для определения назначения элементов и атрибутов XML-документа введено понятие пространства имен XML ( XML namespace ), которое должно иметь уникальный идентификатор. Обычно пространство имен идентифицируется некоторым URI ( Uniform Resource Identifier ), связанным с доменом организации, предложившее пространство имен. По данному URI может располагаться некоторое описание пространства имен, однако это не обязательно. Все используемые в XML документе пространства имен описываются в корневом элементе документа в атрибутах с именем вида xmlns:schema_id. Таким образом схема связывается с некоторым коротким идентификатором schema_id, который затем используется как префикс атрибутов и элементов. Например, в следующей строчке пространству имен http://www.w3.org/2001/XMLSchema> дается идентификатор xs, используемый в имени элемента xs:schema.

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

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

Одним из достоинств XML является наличия языков спецификаций, определяющих правильный XML документ. Первоначально эту функцию выполнял DTD ( Document Type Definition ), однако в настоящий момент общепринятым стандартом является спецификация схем XML ( XML Schema Definition, XSD ). XSD документ является также документом на языке XML, использующим пространство имен http://www.w3.org/2001/XMLSchema. Файл с описанием схемы XML определяет:

  • словарь документа (имена элементов и атрибутов);
  • синтаксис корректного документа;
  • сложные типы данных.

Элементарные типы данных описаны в самом пространстве имен http://www.w3.org/2001/XMLSchema. Синтаксис схемы позволяет описать сложные типы данных, включающие в себя поля простых типов, сложных типов, а также сложные последовательности, каждый элемент которых может принадлежать к одному из нескольких сложных или простых типов данных. Таким образом, синтаксис схемы XML позволяет описать результат сериализации контейнера (списка или массива), в котором могут храниться объекты нескольких известных классов. В состав .NET Framework входит утилита xsd.exe, создающая схему по заданному классу, которая будет подробно рассмотрена в следующей главе. Соответствие между классами .NET и схемами не является взаимно однозначным. В частности, при использовании утилиты xsd.exe любым видам списочных контейнеров соответствует одинаковая последовательность в схемах XML.

3.3. SOAP: язык сообщений распределенной системы

Стандартизация описания языка XML дала широкие возможности для построения на его основе языков описания сообщений, передаваемых между программными компонентами, и языков описания сервисов программной компоненты. В конце 90-х годов началась разработка двух спецификаций для построения распределенных гетерогенных систем – SOAP и XML RPC. Спецификация XML RPC поддерживается в настоящий момент большим числом языков, но имеет меньше возможностей и не поддерживается стандартной библиотекой .NET Framework.

Поскольку в момент разработки данных спецификаций протокол HTTP был как наиболее распространенным, так и повсеместно разрешенным в межсетевых экранах протоколом, то он был выбран в качестве стандартного транспортного протокола для создания гетерогенных промежуточных сред. В силу этого, хотя спецификация SOAP не привязана жестко к какому либо транспортному протоколу, использующая SOAP и WSDL промежуточная среда получила названия веб служб ( web services ). Она использует два дополнительных языка – язык описания сообщения SOAP (пространство имен SOAP версии 1.1 – http://schemas.xmlsoap.org/soap/envelope/, версии 1.2 – http://schemas.xmlsoap.org/wsdl/soap12/) и язык описания сервисов и интерфейсов WSDL (пространство имен http://schemas.xmlsoap.org/wsdl/).

Рекомендация SOAP изначально разрабатывалась как спецификация для удаленного вызова методов и расшифровывалась как Simple Object Access Protocol . Сообщение SOAP представляет собой XML-документ, называемый конвертом или пакетом ( envelope ), содержащий заголовки с метаинформацией в элементе soap:Header и тело сообщения в элементе soap:Body . В заголовках пакета содержится дополнительная информация, которая может использоваться промежуточной средой. Благодаря тому, что основной стандарт не ограничивает содержание заголовков, SOAP является расширяемой спецификацией, и в настоящее время все еще идет процесс стандартизации ее расширений.

Что касается представления тела сообщения, то в силу различных причин в настоящий момент существует два различных способа представления информации в теле пакета SOAPкодирование SOAP RPC (в двух вариантах) и кодирование SOAP Document. Кодирование SOAP RPC предназначено исключительно для передачи параметров удаленного вызова и определяет сообщение как имя метода и список параметров. При использовании кодирования SOAP Document, которое является фактическим стандартом в настоящий момент, сообщение представляет собой XML документ со схемой и пространством имен, заданными в описании сервиса на языке WSDL. Хотя обычно сообщение и состоит из имени метода удаленного объекта и списка его параметров, но сама спецификация кодирования не фиксирует как либо его содержание.

В качестве примера рассмотрим простейшие сообщения SOAP версии 1.2 для сервиса, складывающего два числа. Сообщение запрос использует пространство имен http://summa.test/webservices, которое описано в интерфейсе компоненты, что будет показано далее. В элементе message содержатся сами складываемые числа.

<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
  <soap12:Body>
    <Add xmlns="http://summa.test/webservices">
      <message>
        <a>1</a>
        <b>2</b>
      </message>
    </Add>
  </soap12:Body>
</soap12:Envelope>

Сообщение с ответов программной компоненты.

<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
  <soap12:Body>
    <AddResponse xmlns="http://summa.test/webservices">
      <AddResult>3</AddResult>
    </AddResponse>
  </soap12:Body>
</soap12:Envelope>
< Лекция 2 || Лекция 3: 123 || Лекция 4 >