Система управления бизнес-процессами

<<предыдущая                                          содержание                                       следующая>>



10.5 Шлюзы

Шлюзы используются для контроля схождений и расхождений множественных Потоков операций в рамках Процесса. Необходимость в использовании Шлюзов отпадает в случае, если не возникает надобности контролировать Поток операций. Термин «Шлюз» подразумевает пропускное устройство, которое либо позволяет осуществлять переход через него, либо нет. Таким образом, как только Токены подходят к Шлюзу, то при его активизации они могут объединиться у входа в Шлюз и/или разделиться при выходе из Шлюза.

Графический элемент Шлюз представляет собой ромб, используемый во многих нотациях схем производственных процессов для изображения ветвления и знакомый большинству разработчиков моделей.

  • Шлюз представляет собой ромб, который ДОЛЖЕН БЫТЬ выполнен одинарной тонкой линией (см. фигуру 10.102)
    • Текст, цвет, размер, а также линии, используемые для изображения Шлюза, ДОЛЖНЫ соответствовать правилам, указанным в разделе «Использование Текста, Цвета и Линий в Моделировании Диаграмм».

Фигура 10.102 – Графический элемент Шлюз

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

При помощи Шлюзов можно указать все типы поведения Потоков операций бизнес-процесса: условие/ветвление (Эксклюзивный, Включающий, Комплексный), слияние, раздвоение, соединение. Таким образом, если раньше изображение ромба обычно использовалось для отображенияэксклюзивных условий, то благодаря BPMN, область его использования расширилась. На данный момент ромб может использоваться для отображения любого вида контроля Потока операции. Все Шлюзы имеют маркер, расположенный внутри графического элемента и указывающий на то, какой тип имеет тот или иной Шлюз (см. фигуру 10.103).

Эксклюзивный  или

Основанный на событиях 

Параллельный, основанный на событиях 

Включающий

Комплексный

Параллельный

Фигура 10.103 – Типы Шлюзов

Шлюзы контролируют ход как сходящихся, так и расходящихся Потоков операций. Это означает, что отдельно взятый Шлюз может быть соединен с несколькими Входящими и Исходящими потоками операций одновременно. Разработчики моделей и инструменты моделирования могут использовать два последовательных Шлюза для соединения и последующего разделения Потоков операций, т.е. одновременно использовать лишь одну его функцию.

Фигура 10.104 – Диаграмма классов элемента Gateway

В данном подразделе представлена общая информация о Шлюзах, а семантика исполнения описана в разделе 13.3.

10.5.1 Соединение с Потоками операций

Примечание: Несмотря на то, что Шлюз представляет собой ромб, Входящие и Исходящие потоки операций могут присоединяться к любой точке его границы, а не только к углам.

Данные правила относятся к использованию всех типов Шлюзов. Дополнительные правила соединения Потока операций для каждого типа Шлюзов описаны в другом подразделе этого документа.

  • Шлюз МОЖЕТ БЫТЬ целью Потока сообщений и соединяться с любым количеством Входящих потоков операций (ни одного, один и более).
    • В случае, если Шлюз не имеет ни одного Входящего потока операций, а Процесс не содержит в своем составе Стартового события, то расхождение Шлюза, зависящее от типа Шлюза (см. ниже), ДОЛЖНО БЫТЬ выполнено при создании экземпляра Процесса.
  • Шлюз МОЖЕТ являться источником Процесса и соединяться с любым количеством Исходящих потоков операций (ни одного, один и более).
  • Шлюз ДОЛЖЕН БЫТЬ соединен либо с несколькими Входящими, либо с несколькими Исходящими потоками операций, т.е. он ДОЛЖЕН соединять или разводить маршруты.
    • Шлюз, значение атрибута gatewayDirection которого равно unspecified, МОЖЕТ иметь как несколько входящих, так и несколько исходящих Потоков операций.
    • Шлюз, значение атрибута gatewayDirection которого равно mixed, ДОЛЖЕН БЫТЬ одновременно соединен как с входящими, так и с исходящими Потоками операций.
    • Шлюз, значение атрибута gatewayDirection которого равно converging, ДОЛЖЕН БЫТЬ соединен с несколькими Входящими потоками операций. При этом количество Исходящих потоков операций для него ДОЛЖНО БЫТЬ ограничено.
    • Шлюз, значение атрибута gatewayDirection которого равно diverging, ДОЛЖЕН БЫТЬ соединен с несколькими Исходящими потоками операций. При этом количество Входящих потоков операций для него ДОЛЖНО БЫТЬ ограничено.

10.5.2 Эксклюзивный Шлюз

Эксклюзивные Шлюзы (Условия) включаются в состав бизнес-процесса для разделения Потока операций на несколько альтернативных маршрутов. Для данного экземпляра Процесса может быть выбран лишь один из предложенных маршрутов.

Условие можно представить себе в виде вопроса, который появляется в какой-то точке Процесса и предполагает несколько вариантов ответов. Каждый из предлагаемых ответов ассоциирован с условным выражением, которое, в свою очередь, взаимодействует с направленным от Шлюза Исходящим потоком операций.

  • Графический элемент Эксклюзивный Шлюз МОЖЕТ содержать внутренний маркер, выполненный в виде «X» (см. фигуру 10.106), что позволяет отличить данный тип Шлюза от других. Использование данного маркера НЕ является ОБЯЗАТЕЛЬНЫМ условием (см. фигуру 10.105).
    • На диаграмме НЕ ДОЛЖНО быть одновременно нескольких Шлюзов данного типа, содержащих маркер и отображаемых без маркера. Все такие Шлюзы ДОЛЖНЫ либо иметь маркер, либо отображаться без него.

Фигура 10.105 – Отображаемое без маркера Эксклюзивное Условие (Шлюз), основанное на данных

Фигура 10.106 – Отображаемое с маркером Эксклюзивное Условие (Шлюз), основанное на данных

Примечание: Первый из вышеприведенных фрагментов отображает предпочтительное изображение Эксклюзивного Шлюза. Это означает, что в данном документе Эксклюзивные Шлюзы отображаются без маркера.

Маршрут по умолчанию может быть указан или не указан. В случае, если маршрут по умолчанию указан, значит, ни одно из значений условного выражения не равно «true». Если же маршрут по умолчанию не указан, а Процесс выполняется так, что ни одно из значений условного выражения не равно «true», возникает исключение.

Объединяющий Эксклюзивный Шлюз используется для объединения нескольких альтернативных маршрутов в один. Токен каждого из Входящих потоков операций назначается на Исходящий поток операций без синхронизации.

Фигура 10.107 – Диаграмма классов элемента ExclusiveGateway

Элемент ExclusiveGateway наследует атрибуты и ассоциации элемента Gateway (см. таблицу 8.46). Таблица 10.123 содержит информацию о дополнительных атрибутах и ассоциациях элемента ExclusiveGateway.

Таблица 10.123 Атрибуты и ассоциации элемента ExclusiveGateway

Название атрибута

Описание/использование

default: SequenceFlow [0..1]

Данный атрибут указывает Поток операций, который наследует токен в случае, если ни одно из значений условного выражения другого Исходящего потока операций не равно «true». Поток операций по умолчанию не должен содержать условного выражения. Любые такие выражения ДОЛЖНЫ БЫТЬ проигнорированы.

10.5.3 Неэксклюзивный Шлюз

Разделяющие Неэксклюзивные Шлюзы (Условия) используются для разделения Потока операций на несколько альтернативных и параллельных маршрутов. Для данного экземпляра Процесса может быть выбран лишь один из предложенных маршрутов. В отличие от Эксклюзивных Шлюзов, значения всех используемых для данного типа Шлюзов условных выражений определены. В данном случае значение одного из условных выражений, равное «true», не исключает определения значения любого другого условного выражения. Токен проходит через все Потоки операций, определенные как «true». Поскольку каждый маршрут является независимым, МОГУТ БЫТЬ использованы любые комбинации этих маршрутов (от нуля и более); однако в действительности, должен быть выбран по-меньшей мере один маршрут.

  • Графический элемент Неэксклюзивный Шлюз ДОЛЖЕН содержать внутренний маркер, выполненный в виде круга (см. фигуру 10.108), что позволяет отличить данный тип Шлюза от других.

Фигура 10.108 – Пример Неэксклюзивного Шлюза

Маршрут по умолчанию может быть указан или не указан. В случае, если маршрут по умолчанию указан, значит, ни одно из значений условного выражения не равно «true». Если же маршрут по умолчанию не указан, а Процесс выполняется так, что ни одно из значений условного выражения не равно «true», возникает исключение.

Объединяющие Неэксклюзивные Шлюзы используются для объединения нескольких альтернативных и параллельных маршрутов в один. Токен потока управления, поступающий в Неэксклюзивный Шлюз, МОЖЕТ БЫТЬ синхронизирован с другими токенами, поступающими в данный Шлюз позже. Предпочтительный способ синхронизации маршрутов посредством Неэксклюзивного Шлюза описан в данном подразделе.

Фигура 10.109 – Диаграмма классов элемента InclusiveGateway

Элемент InclusiveGateway наследует атрибуты и ассоциации элемента Gateway (см. таблицу 8.46). Таблица 10.124 содержит информацию о дополнительных атрибутах и ассоциациях элемента InclusiveGateway.

Таблица 10.124 Атрибуты и ассоциации элемента InclusiveGateway

Название атрибута

Описание/использование

default: SequenceFlow [0..1]

Данный атрибут указывает Поток операций, который наследует токен в случае, если ни одно из значений условного выражения других Потоков операций не равно «true». Поток операций по умолчанию не должен содержать условного выражения. Любые такие выражения ДОЛЖНЫ БЫТЬ проигнорированы.

10.5.4 Параллельный Шлюз

Параллельные Шлюзы используются для синхронизации (объединения) и создания параллельных маршрутов.

  • Графический элемент Параллельный Шлюз ДОЛЖЕН содержать внутренний маркер, выполненный в виде знака «+» (см. фигуру 10.110), что позволяет отличить данный тип Шлюза от других.

Фигура 10.110 – Пример Параллельного Шлюза

Параллельный Шлюз используется для синхронизации параллельных маршрутов.

Фигура 10.111 – Пример Параллельного Шлюза, используемого для синхронизации

С помощью Параллельного Шлюза параллельные маршруты создаются без необходимости проверки каких-либо условий. Благодаря работе Шлюза данного типа, любой Исходящий поток операций получает токен. Параллельный Шлюз ожидает поступления всех Входящих потоков операций до того, как от него отойдет Исходящий поток операций.

Фигура 10.112 – Диаграмма классов элемента ParallelGateway

Элемент ParallelGateway наследует атрибуты и ассоциации элемента Gateway (см. таблицу 8.46), однако, не может иметь каких-либо других атрибутов и ассоциаций.

10.5.5 Комплексные Шлюзы

Комплексные Шлюзы используются для моделирования поведения Потоков операций в случае комплексной синхронизации. Для точного описания такого поведения используется выражение ExpressionactivationCondition. Данное выражение может использоваться, к примеру, для указания того, что для активации Шлюза необходимо наличие трех токенов Входящих потоков операций из пяти. Как и при разделяющем поведении Неэксклюзивного Шлюза, условиями Исходящих потоков операций определяется то, какие токены сформирует Шлюз. Токены, прибывающие позже по двум оставшимся маршрутам, вызывают сброс Шлюза, а для Исходящих потоков операций формируются новые токены. Для определения того, будет ли Шлюз ожидать оставшиеся токены для того, чтобы осуществился его сброс, используется семантика синхронизации Неэксклюзивного Шлюза.

  • Графический элемент Комплексный Шлюз ДОЛЖЕН содержать внутренний маркер, выполненный в виде символа «*» (см. фигуру 10.113), что позволяет отличить данный тип Шлюза от других.

Фигура 10.113 – Пример Комплексного Шлюза

В отличие от других типов Шлюзов, Комплексный Шлюз имеет различные внутренние состояния, определяемые с помощью булевского атрибута waitingForStart. Исходное значение данного атрибута равно «true», но после активации оно меняется на «false». Этот атрибут может использоваться для определения того, где при активации Шлюза для Исходящих потоков операций формируются токены, а также того, где они формируются при его сбросе. РЕКОМЕНДУЕТСЯ выбрать, будут ли токены формироваться для кажого из Исходящих потоков операций при активации Шлюза или при его сбросе, но не одновременно. По-меньшей мере один Исходящий поток операций должен получить токен при активациии, но в таком случае при сбросе Шлюза токен формироваться НЕ ДОЛЖЕН.

На фигуре 10.114 отображена диаграмма класса ComplexGateway.

Фигура 10.114 – Диаграмма классов элемента ComplexGateway

Элемент ComplexGateway наследует атрибуты и ассоциации элемента Gateway (см. таблицу 8.46). Таблица 10.125 содержит информацию о дополнительных ассоциациях элемента ComplexGateway.

Таблица 10.125 Ассоциации элемента ComplexGateway

Название атрибута

Описание/использование

activationCondition: Expression [0..1]

Определяет, токены каких Входящих потоков операций будут синхронизированы для активации Шлюза.

default: SequenceFlow [0..1]

Указывает на Поток операций,который получит токен в случае, если ни одно из условных выражений других Потоков операций не равно «true». Поток операций по умолчанию не должен содержать условного выражения. Любые такие выражения ДОЛЖНЫ БЫТЬ проигнорированы.

activationCount: integer

В ходе выполнения ссылается на количество токенов Входящего потока операций, направленного к Комплексному Шлюзу.

waitingForStart: boolean = true

Указывает на внутреннее состояние Комплексного Шлюза, который может находится в ожидании активации (=true) или сброса (=false).

10.5.6 Шлюз, основанный на Событиях

В Процессе Шлюзы, основанные на Событиях, представляет собой точку ветвления, в которой направления альтернативных маршрутов зависят от происходящих Событий, а не от определения значений выражений, использующих данные Процесса, как это происходит при использовании Эксклюзивного и Неэксклюзивного Шлюзов. Определенное событие, чаще всего – получение сообщения, определяет то, какой из маршрутов будет выбран в данном случае. В основном, решение принимается одним из Участников Процесса на основании данных, которые в самом Процессе не видны. В этом случае и становится нужен Шлюз, основанный на Событиях.

Например, компания ждет подтверждения заказчиком выполнения ряда Действий. В случае положительного ответа эти Действия будут выполнены. В случае отрицательного ответа компания выполнит ряд других Действий. Ответ заказчика – Сообщение определенного рода - определяет выбор необходимого маршрута. Таким образом, сообщения «Да» и «Нет» являются разными, а не просто одинаковыми сообщениями с разными значениями свойства. Получение сообщения может быть выполнено посредством Промежуточного события Сообщение или Задачи Получение. Кроме триггера Сообщения могут использоваться и другие триггеры Промежуточного события, например, Таймер.

Как и все остальные типы Шлюзов, Шлюз, основанный на Событиях, отображается на диаграмме Процесса в виде ромба, внутри которого расположен соответствующий маркер.

  • Шлюз, основанный на Событиях, представляет собой ромб, который ДОЛЖЕН БЫТЬ выполнен одинарной тонкой линией.
    • Текст, цвет, размер, а также линии, используемые для изображения Шлюза, ДОЛЖНЫ соответствовать правилам, указанным в разделе «Использование Текста, Цвета и Линий в Моделировании Диаграмм».
  • Графический элемент Шлюз, основанный на Событиях, содержит внутренний маркер, который ДОЛЖЕН быть идентичным маркеру обрабатывающего триггер Промежуточного события (см. фигуру 10.115).

10.115 – Графический элемент Шлюз, основанный на Событиях

В отличие от поведения других типов Шлюзов, поведение Шлюза, основанного на Событиях, определяется не его типом, а конфигурацией элементов.

  • Шлюз, основанный на Событиях, ДОЛЖЕН содержать два или более Исходящих потоков операций.
    • Исходящие потоки операций, направленные от Шлюза данного типа, НЕ ДОЛЖНЫ содержать условных выражений.

Элементы, являющиеся целью направленных от Шлюза Исходящих потоков операций, являются частью конфигурации Шлюза.

  • Конфигурация Шлюза, основанного на Событиях, задается посредством Исходящих потоков операций, целями которых являются Промежуточные события или Задачи Получение в любых комбинациях (см. фигуры 10.116 и 10.117). Исключениями являются ситуации, когда:
    • Для конфигурации используются Промежуточные события Сообщение. В данном случае для конфигурации Шлюза Задачи Получение использоваться НЕ ДОЛЖНЫ (и наборот).
      • Задачи Получение, используемые для конфигурации Шлюза, НЕ ДОЛЖНЫ быть соединены с какими-либо Промежуточными событиями.
    • Только следующие типы Промежуточных событий верны для Шлюза, основанного на События: Сообщение, Сигнал, Таймер, Условие, Множественный (включающий лишь вышеуказанные триггеры). Таким образом, для данного Шлюза не используются Промежуточные события следующих типов: Ошибка, Отмена, Компенсация, Связь.
  • Элементы, являющиеся целями в конфигурации Шлюза, основанного на Событиях, НЕ ДОЛЖНЫ иметь дополнительных Входящих потоков операций (исходящих не от данного Шлюза).

Фигура 10.116 – Пример Шлюза, основанного на Событиях, использующего Промежуточные события Сообщение

Фигура 10.117 – Пример Шлюза, основанного на Событиях, использующего Задачи Получение

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

Существуют различные типы Шлюзов, основанных на Событиях, которые могут быть использованы в начале Процессе. Поведение Шлюза и, соответственно, его маркер будут изменяться.

Шлюзы, основанные на Событиях, могут быть использованя для запуска экземпляра Процесса. Значение атриабута instantiate Шлюза по умолчанию равно «false». Однако если оно изменяется на «true», то при запуске первого в конфигурации Шлюза События запускается и экземпляр Процесса

  • В случае, если значение атриабута instantiate Шлюза равно «true», то данный Шлюз будет иметь маркер, идентичный маркеру Стартового события Множественного типа (см. фигуру 10.118).

Фигура 10.118 – Эксклюзивный, основанный на Событиях Шлюз, используемый для запуска экземпляра Процесса.

Для того, чтобы данный Шлюз мог инициировать запуск экземпляра События, не НЕ ДОЛЖЕН быть соединен ни с одним Входящим потоком операций.

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

  • В случае, если значение атриабута instantiate Шлюза равно «true», а значение атрибута eventGatewayType – «Parallel», то данный Шлюз будет иметь маркер, идентичный маркеру Стартового события Параллельного Множественного типа (см. фигуру 10.119).
    • Для того, чтобы значение атрибута eventGatewayType было равно «Parallel», значение атриабута instantiate Шлюза ДОЛЖНО БЫТЬ равно «true». Это означает, что для Шлюза, основанного на Событиях, который не используется для запуска экземпляра Процесса, значение атрибута eventGatewayType ДОЛЖЕН БЫТЬ равно «Exclusive», как для стандартного Параллельного Шлюза, используемого для объединения параллельных Событий в середине Процесса.

Фигура 10.119 – Параллельный, основанный на Событиях Шлюз, используемый для запуска экземпляра Процесса.

Параллельный Шлюз, основанный на Событиях, также представляет собой подобие состязания, где, однако, при запуске первого События и экземпляра Процесса остальные События конфигурации Шлюза с дистанции не снимаются. Эти оставшиеся События продолжают ждать своего запуска до момента успешного завершения Процесса. В данном случае, сообщение, запускающее События конфигурации Шлюза, ДОЛЖНО обладать той же корреляционной информацией.

Фигура 10.120 – Диаграмма классов элемента EventBasedGateway

Элемент EventBasedGateway наследует атрибуты и ассоциации элемента Gateway (см. таблицу 8.46). Таблица 10.127 содержит информацию о дополнительных атрибутах и ассоциациях элемента EventBasedGateway.

Таблица 10.127 Атрибуты и ассоциации элемента EventBasedGateway

Название атрибута

Описание/использование

instantiate: boolean = false

В случае, если значение данного атрибута равно «true», получение одного из Сообщений запустит экземпляр Процесса.

eventGatewayType: EventGate-wayType = Exclusive { Exclusive | Parallel }

Атрибут eventGatewayType определяет поведение Шлюза, используемого для запуска экземпляра Процесса (см. описание выше). Если значение атрибута instantiate равно «true», то значение данного атрибута не может быть никаким другим, кроме «parallel».

Основанный на Событиях Шлюз (или множество таких Шлюзов) может быть помещен в начало Потока операций Процесса и не иметь Входящих потоков операций. Возможно одновременное использование стандартных Стартовых событий и основанных на данных Шлюзов.

10.5.7 Gateway Package XML Schemas Представление XML-схемы для пакета Шлюза

Таблица 10.128 - XML-схема для элемента ComplexGateway

<xsd:element name="complexGateway" type="tComplexGateway"
   substitutionGroup="flowElement"/>
<xsd:complexType name="tComplexGateway">
   <xsd:complexContent>
      <xsd:extension base="tGateway">
         <xsd:sequence>
            <xsd:element name="activationCondition" type="tExpression" minOccurs="0"
             maxOccurs="1"/>
         </xsd:sequence>
         <xsd:attribute name="default" type="xsd:IDREF"/>
      </xsd:extension>
   </xsd:complexContent>
</xsd:complexType>

Таблица 10.129 - XML-схема для элемента EventBasedGateway

<xsd:element name="eventBasedGateway" type="tEventBasedGateway"
    substitutionGroup="flowElement"/>
<xsd:complexType name="tEventBasedGateway">
   <xsd:complexContent>
      <xsd:extension base="tGateway">
           <xsd:attribute name="instantiate" type="xsd:boolean" default="false"/>
           <xsd:attribute name="eventGatewayType" type="tEventBasedGatewayType"
            default="Exclusive"/>
      </xsd:extension>
   </xsd:complexContent>
</xsd:complexType>

<xsd:simpleType name="tEventBasedGatewayType">
   <xsd:restriction base="xsd:string">
      <xsd:enumeration value="Exclusive"/>
      <xsd:enumeration value="Parallel"/>
   </xsd:restriction>
</xsd:simpleType>

Таблица 10.130 - XML-схема для элемента ExclusiveGateway

<xsd:element name="exclusiveGateway" type="tExclusiveGateway" substitutionGroup="flowElement"/>
<xsd:complexType name="tExclusiveGateway">
    <xsd:complexContent>
        <xsd:extension base="tGateway">
            <xsd:attribute name="default" type="xsd:IDREF" use="optional"/>
        </xsd:extension>
    </xsd:complexContent>
</xsd:complexType>

Таблица 10.131 - XML-схема для элемента InclusiveGateway

<xsd:element name="gateway" type="tGateway" abstract="true"/>
<xsd:complexType name="tGateway">
   <xsd:complexContent>
      <xsd:extension base="tFlowElement">
         <xsd:attribute name="gatewayDirection" type="tGatewayDirection" default="Unspecified"/>
      </xsd:extension>
   </xsd:complexContent>
</xsd:complexType>

<xsd:simpleType name="tGatewayDirection">
     <xsd:restriction base="xsd:string">
         <xsd:enumeration value="Unspecified"/>
         <xsd:enumeration value="Converging"/>
         <xsd:enumeration value="Diverging"/>
         <xsd:enumeration value="Mixed"/>
     </xsd:restriction>
</xsd:simpleType>

Таблица 10.132 - XML-схема для элемента Gateway

<xsd:element name="inclusiveGateway" type="tInclusiveGateway" substitutionGroup="flowElement"/>
<xsd:complexType name="tInclusiveGateway">
   <xsd:complexContent>
         <xsd:extension base="tGateway">
              <xsd:attribute name="default" type="xsd:IDREF" use="optional"/>
         </xsd:extension>
   </xsd:complexContent>
</xsd:complexType>

Таблица 10.133 - XML-схема для элемента ParallelGateway

<xsd:element name="parallelGateway" type="tParallelGateway" substitutionGroup="flowElement"/>
<xsd:complexType name="tParallelGateway">
    <xsd:complexContent>
       <xsd:extension base="tGateway"/>
    </xsd:complexContent>
</xsd:complexType>


<<предыдущая                                          содержание                                       следующая>>


Данные материалы предназначены исключительно для ознакомления в личных целях.Любое воспроизведение, копирование, а так же коммерческое и некоммерческое использование материалов должно согласовываться с авторами материалов (). Допускается использование материалов сайта без уведомления авторов, но с явным указанием источника.