Предисловие В сборнике представлены статьи сотрудников Института системного программирования, описывающие результаты исс...
29 downloads
392 Views
4MB Size
Report
This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Report copyright / DMCA form
Предисловие В сборнике представлены статьи сотрудников Института системного программирования, описывающие результаты исследований, которые получены в 2002-2003 гг. В статьях обсуждаются как теоретические вопросы, так и аспекты организации прикладных систем. В статье И.Б. Бурдонова, А.С. Косачева и В.В. Кулямина “Асинхронные автоматы: классификация и тестирование” предлагается теория конечных автоматов, которые отличаются от классических автоматов Мили тем, что смена состояния автомата происходит либо при приеме входного символа, либо при выдаче выходного символа, причем выбор перехода всегда недетерминирован. Вводится понятие асинхронного автомата, в котором допускается смена состояния при отсутствии входного символа. Предлагается классификация асинхронных автоматов, основанная на реализуемой автоматом словарной функции и эквивалентности автоматов с совпадающей словарной функцией. Статья А.В. Чернова “Об одном методе маскировки программ” посвящена обсуждению подхода к защите от возможности восстановления исходного кода программы по ее объектному коду – маскировке (obfuscation) программ. Предлагаемый метод маскировки основан, главным образом, на преобразовании графа потока управления исходной программы. При использовании данного метода не затрагиваются структуры данных исходной программы, но в замаскированную программу вносится большое число несущественных зависимостей по данным. В статье Г.В. Ключникова, А.С. Косачева, Н.В. Пакулина, А.К. Петренко и В.З. Шнитмана “Применение формальных методов для тестирования реализации IPv6” представлен опыт разработки тестового набора для реализации протокола IPv6. Использовался метод разработки тестовых наборов на основе формальных спецификаций UniTesK, разработанный и развиваемый в ИСП РАН. Объектом тестирования была реализация протокола IPv6, выполненная в Microsoft Research. Описываются организация тестового набора и результаты проекта. Исследованию современных подходов, методов и технологии реинжиниринга информационных систем посвящена статья К.В. Ахтырченко и Т.П. Сорокваша “Методы и технологии реинжиринга ИС”. На основе проведенного анализа и вводимой авторами классификации дается оценка текущего состояния данной области. Предметом статьи В.В. Кулямина и О.Л. Петренко “Место тестирования среди методов оценки качества ПО” является оценка места тестирования в современном процессе производства программного обеспечения. Исследуются понятия качества ПО и значимости тестирования при обеспечении и контроле качества. 5
Статья Д.Н. Волкова “Вопросы организации распределенного хранения данных в системах обработки изображений” содержит анализ методов организации хранения данных в современных фотограмметрических системах. Описывается разработанный автором подход к организации распределенного хранилища данных для систем обработки изображений. В статье Л.Г. Новака и С.Д. Кузнецова “Свойства схем данных XML” изучаются свойства XML-схем и методов преобразования схем над моделью данных XML. Предлагается методика, позволяющая упростить алгоритмы управления данными и метаданными XML за счет выделения простых подклассов из множества XML-схем. Статья Д.Р. Ширяева “Автоматическая генерация графических пользовательских интерфейсов доступа к интегрированным данным на основе диаграмм классов UML” посвящена описанию выработанной автором технологии автоматического построения графических пользовательских интерфейсов к системе интеграции данных на основе представления глобальной схемы в виде диаграммы классов UML. Используя одно и то же представление глобальной схемы, оказывается возможным генерировать разные виды GUI – формы и каталоги, а также своеобразный интерфейс с навигацией по классам. Следует отметить, что многие из работ, представленных в сборнике, поддерживались грантами РФФИ и других научных фондов. Член-корреспондент РАН
6
В.П. Иванников
Асинхронные автоматы: классификация и тестирование И.Б. Бурдонов, А.С. Косачев, В.В. Кулямин Аннотация. В статье рассматриваются конечные автоматы, отличающиеся от классического автомата Мили тем, что переход осуществляется либо по приему стимула (входного символа), либо по выдаче реакции (выходного символа), причем в каждом состоянии выбор одного из допустимых переходов недетерминирован. Такими автоматами являются автоматы с отложенной реакцией (АОР), в которых переход по стимулу выполняется всегда, когда этот стимул имеется на входе автомата, и автоматы вводавывода (IOSM - Input/Output State Machines), в которых переход по выдаче реакции допустим независимо от наличия стимула, в то время как, принятый в этом состоянии стимул может быть принят позже, в другом состоянии. Обобщением этих классов автоматов является асинхронный автомат, в котором допускаются также переходы по отсутствию стимула. Предлагается классификация асинхронных автоматов, основанная на реализуемой автоматом словарной функции и эквивалентности автоматов с совпадающей словарной функцией. Показывается, что класс всех асинхронных автоматов эквивалентен своему подклассу автоматов с отложенными реакциями, а словарные функции автоматов ввода-вывода образуют собственное подмножество всех автоматных словарных функций. С автоматом связывается также множество сериализаций (смешанных последовательностей воспринимаемых стимулов и выдаваемых реакций), и исследуется его связь со словарной функцией. Статья завершается обзором основных проблем тестирования соответствия, когда асинхронные автоматы используются как спецификационная модель программных и аппаратных систем.
1. Введение Понятие автомата с отложенными реакциями (АОР) было введено авторами настоящей статьи совместно с А.Хорошиловым для моделирования многопроцессной программной системы, интерфейс которой основан на обмене сообщениями. В ответ на входное сообщение система может выдать несколько выходных сообщений, причем, если в процессе их выдачи поступает следующее входное сообщение, оно может изменить выходной поток. Целью моделирования являлось написание формальных спецификаций, на основе которых создавался тест для проверки соответствия реализации спецификации. Поскольку внутреннее состояние тестируемой системы было недоступно, она рассматривалась как «черный ящик» и о ее поведении можно было судить только по ее реакциям (выходным сообщениям) на подаваемые стимулы (тестовые входные сообщения). 7
Автоматы с отложенными реакциями похожи на хорошо известные в литературе [1-6] автоматы ввода-вывода (IOSM – Input/Output State Machines), называемые также взаимодействующими конечными автоматами (CFSM - Communicating Finite State Machines). В обоих автоматах переход из одного состояния в другой происходит либо как прием входного символа (стимула) – принимающий переход, либо как выдача выходного символа (реакции) – посылающий переход, либо как пустой переход, не сопровождающийся ни приемом стимула, ни выдачей реакции. Стимул допустим в некотором состоянии, если в этом состоянии определен принимающий переход по этому стимулу, в противном случае стимул недопустим в данном состоянии. Поскольку мы не требуем допустимости каждого стимула в каждом состоянии, рассматриваемые автоматы являются частично-определенными. Состояние автомата – принимающее, если в нем определены только принимающие переходы, посылающее, если в нем определены только посылающие или пустые переходы, смешанное, если в нем определены как принимающие, так и посылающие или пустые переходы, и терминальное, если в нем никаких переходов не определено. Принимающие и смешанные состояния будем называть рецептивными (в этих состояниях возможен прием стимула). Стимулы могут поступать на автомат только в рецептивном состоянии, но они не обязаны поступать в каждом его рецептивном состоянии. Переходы, допустимые в данном состоянии, определяются в зависимости от наличия или отсутствия стимула на входе автомата и, в случае наличия стимула, от самого этого стимула. Если оказывается, что таких допустимых переходов несколько, то выбирается один из них недетерминированным образом. В обоих автоматах, если состояние посылающее или рецептивное, но стимул отсутствует, то допустимыми являются посылающие и пустые переходы, определенные в этом состоянии. Различие между АОР и IOSM имеет место при определении допустимых переходов в случае наличия стимула в смешанном состоянии. Для АОР допустимы только принимающие переходы по этому стимулу и недопустимы как принимающие переходы по другим стимулам, так и посылающие и пустые переходы. Для IOSM также допустимы принимающие переходы по этому стимулу и недопустимы переходы по другим стимулам, однако посылающие и пустые переходы остаются допустимыми. При этом, если выполняется посылающий или пустой переход, то стимул остается на входе автомата в ожидании либо 1) выборки допустимого принимающего перехода по этому стимулу в другом рецептивном состоянии, либо 2) перехода в принимающее состояние, в котором не определен переход по данному стимулу. В случае 1) стимул выбирается автоматом и далее на его вход может поступить следующий стимул, а в случае 2) поведение автомата считается не определенным и это рассматривается как, так называемая, ошибка неспецифицированного ввода. Заметим, что для АОР такая ошибка фиксируется сразу же, как только на вход автомата поступает недопустимый в текущем состоянии стимул. Разумеется, возможно также выполнение автомата, при котором стимул никогда не будет выбран: если автомат перешел в терминальное состояние или бесконечно выполняются посылающие и пустые переходы (для 8
АОР – в посылающих состояниях). В терминальном состоянии автомат останавливается: состояние не меняется и прекращается как прием стимулов, так и выдача реакций. Хотя в терминальном состоянии все стимулы формально недопустимы, тем не менее ошибка неспецифицированного ввода не фиксируется, поскольку считается, что работа автомата закончена. Классический автомат Мили, который на каждый допустимый стимул выдает ровно одну реакцию и ничего не делает при отсутствии стимулов, может рассматриваться как частный случай АОР и IOSM. Для этого достаточно каждый его переход, сопровождающийся приемом стимула и выдачей реакции, представить как последовательность из двух переходов: принимающего перехода по этому стимулу и посылающего перехода по этой реакции, между которыми добавляется промежуточное посылающее состояние (исходные нетерминальные состояния становятся принимающими, а смешанных состояний нет). Тестирование соответствия основано на сравнении поведения двух автоматов: спецификационного, заданного явно, например, своим графом состояний, и реализационного, рассматриваемого как «черный ящик», о графе состояний которого и текущем состоянии мы не имеем информации, но можем судить о его поведении по тем реакциям, которые он выдает в ответ на поступающие к нему тестовые стимулы. Реализация считается соответствующей спецификации, если для любой последовательности стимулов (входного слова) автоматы выдают одинаковые последовательности реакций (выходные слова). Для недетерминированного спецификационного автомата более осмысленно говорить не о совпадении выходных слов, а о принадлежности любого выходного слова, выдаваемого реализацией, множеству выходных слов, разрешаемых спецификацией. Заметим, что при этом реализационный автомат может быть даже детерминированным (выходное слово однозначно определяется его начальным состоянием и входным словом). Иными словами, спецификация описывает не одну реализацию, а класс реализаций ей соответствующих (сводимых к ней). С автоматом связана словарная функция, им реализуемая и определяемая как отображение входного слова, подаваемого на автомат, начиная с его начального состояния, во множество возможных выходных слов. Область ее определения включает только допустимые входные слова, то есть, такие, которые не могут при некотором возможном выполнении автомата вызвать ошибку неспецифицированного ввода. По существу, тестирование соответствия ставит своей задачей определение словарной функции реализационного автомата и сравнение ее со словарной функцией спецификационного автомата: область определения этих словарных функций предполагается одинаковой (по крайней мере, модельный домен вложен в реализационный), а тестирование проверяет, что для каждого допустимого входного слова значение на нем реализационной словарной функции вложено в значение спецификационной словарной функции. Для классического автомата Мили такое определение словарной функции достаточно: все нетерминальные состояния рецептивны и подача на его вход 9
допустимого входного слова длины n вызывает последовательность переходов через m≤n рецептивных состояний, заканчивающуюся в m+1-ом терминальном или, если m=n, терминальном или рецептивном состоянии, и выдачу соответствующего выходного слова длины m. Однако, для АОР и IOSM, в которых посылающие и пустые переходы могут выполняться и при отсутствии стимулов, понятие словарной функции нуждается в уточнении. Для определения входного слова, кроме самой последовательности стимулов, нам следует рассматривать также «паузы» между соседними стимулами, которые естественно измерять в количестве рецептивных состояний, проходимых между приемом этих стимулов. Для моделирования прохода одного рецептивного состояния с отсутствием стимула на входе автомата удобно ввести понятие пустого стимула, расширив им алфавит стимулов. Если между двумя непустыми стимулами во входном слове располагается k пустых стимулов, то это означает, что автомат между приемами этих непустых стимулов пройдет k рецептивных состояний при отсутствии стимула на его входе. Пустой стимул считается допустимым в любом рецептивном состоянии. После этого удобно ввести понятия входной и выходной очередей автомата. Во входной очереди располагается входное слово в расширенном алфавите стимулов, а в выходную очередь поступают выдаваемые автоматом реакции, формируя в ней выходное слово. Принимающий переход по (непустому) стимулу допустим только в том случае, когда в голове входной очереди располагается этот стимул. При выполнении такого перехода стимул удаляется из очереди. Напомним, что в этой ситуации в рецептивном состоянии АОР всегда выполняет принимающий переход, а IOSM может выполнить также посылающий или пустой переход, и тогда непустой стимул остается в голове входной очереди. Если же головной стимул очереди пустой, то он в автоматах обоих видов удаляется при посылающем или пустом переходе из рецептивного состояния. Посылающий переход помещает в выходную очередь соответствующую реакцию и, если это переход из посылающего состояния, не изменяет входной очереди и не зависит от её содержимого. После этого словарная функция определяется на множестве допустимых входных слов в расширенном алфавите стимулов таким образом, что если во входную очередь автомата поместить данное допустимое входное слово, то множество выходных слов, которые могут оказаться в выходной очереди, как раз и есть значение словарной функции. Теперь обратим внимание на то, что для того, чтобы поведение автомата было полностью определено, входное слово должно содержать в конце «достаточное» число пустых стимулов. Иначе, может сложиться ситуация, когда автомат переходит в рецептивное состояние, а входная очередь пуста, то есть, не содержит не только непустые, но и пустые стимулы, хотя последние как раз и предназначены для моделирования пустоты очереди. Более того, если автомат содержит цикл из пустых и посылающих переходов, проходящий хотя бы через одно рецептивное состояние, то таких концевых пустых стимулов должно быть бесконечное число. Это наталкивает на мысль рассматривать словарную функцию определенной не на конечных, а на бесконечных входных словах. 10
Бесконечное слово, содержащее только конечное число непустых стимулов, является аналогом конечного слова и мы будем называть его квази-конечным словом. Мы будем определять словарную функцию на всех допустимых бесконечных словах, а не только квази-конечных. Причина этого в том, что в отличии от классического автомата Мили, в АОР и IOSM такая словарная функция, вообще говоря, не восстанавливается однозначно по ее сужению на поддомене всех допустимых квази-конечных входных слов (см. ниже 3.5.2). Теперь можно рассматривать естественное обобщение АОР и IOSM, заключающееся в том, что автомату разрешается выполнять принимающие переходы не только по непустому стимулу, но также и по пустому стимулу, то есть, поскольку пустой стимул моделирует отсутствие стимула, по отсутствию стимула на входе автомата. Такой переход будем называть e-переходом, а общий вид автомата с e-переходами - асинхронным автоматом, имея в виду, что выдача реакции происходит, вообще говоря, асинхронно с приемом стимула. (Наше понятие асинхронного автомата следует отличать от понятия асинхронно выполняющейся сети взаимодействующих автоматов.) Интерпретация поведения такого асинхронного автомата зависит от двух независимых факторов. Во-первых, от вида того автомата, из которого этот асинхронный автомат произошел – АОР или IOSM, а именно, является ли прием непустого стимула в рецептивном состоянии обязательным или не обязательным. В первом случае асинхронный автомат будем называть императивным, а во втором – факультативным. Во-вторых, поскольку удаление пустого стимула из головы входной очереди теперь может происходить при выборе либо, как раньше, посылающего или пустого перехода из рецептивного состояния, либо принимающего e-перехода, необходимо определиться с взаимным приоритетом этих двух видов переходов, если они определены в одном и том же смешанном состоянии. Приоритет может быть: 1) у посылающих и пустых переходов; 2) у e-переходов; 3) они могут быть равноприоритетны. Таким образом, всего может быть 8 базовых классов автоматов: императивный или факультативный, без e-переходов или с e-переходами и одним из трех указанных приоритетов e-переходов по отношению к посылающим и пустым переходам. Статья состоит из четырех частей. 2-ая (после Введения) часть посвящена определению и сравнительному изучению асинхронных автоматов базовых классов. При этом, в первую очередь, обращается внимание на реализуемые ими словарные функции. С помощью преобразований автоматов, сохраняющих их словарную функцию, все автоматы приводятся к одному классу автоматов без смешанных состояний. На этой основе проводится классификация автоматов, в частности показывается эквивалентность класса всех асинхронных автоматов подклассу АОР – императивных автоматов без e-переходов, и, напротив, 11
показывается, что класс IOSM – факультативных автоматов без e-переходов – не способен моделировать класс всех асинхронных автоматов. В 3-ей части изучаются реализуемые автоматами сериализации (смешанные последовательности стимулов и реакций) и маршруты (последовательности переходов). Вводятся понятия строгой моделируемости и строгой эквивалентности, основанные не на словарной функции, а на множестве реализуемых сериализаций, и показывается, что преобразования автоматов, использованные во 2-ой части, сохраняют не только словарную функцию, но и множество сериализаций. Устанавливается связь словарной функции и множества сериализаций автомата. Рассматриваются вопросы регулярности и существования отвергающих автоматов. Далее рассматриваются конечные сериализации, предикаты на множестве конечных сериализаций и индуцируемые такими предикатами семейства автоматов с соответствующими им словарными функциями. 4-ая часть посвящена проблемам тестирования соответствия для асинхронных автоматов. Проводится разделение на гипотезы – предусловия тестирования, и тестируемые условия, проверяемые в процессе тестирования. Для каждой проблемы намечаются возможные пути ее решения.
2. Словарная функция 2.1. Асинхронный автомат Асинхронным автоматом будем называть шестерку m=(V,v0,X,e,Y,T), где: • V – множество состояний; • v0∈V – начальное состояние; • X – входной алфавит стимулов; • e∉X – пустой стимул, X`=X∪{e} – расширенный алфавит стимулов; • Y – выходной алфавит реакций; будем считать, что алфавиты стимулов и реакций не пересекаются X`∩Y= ∅; • T = R`∪S∪I – множество переходов, где: o R` ⊆ V×X`×V – принимающие переходы, o S ⊆ V×Y×V – посылающие переходы, o I ⊆ V×V – пустые переходы. Принимающие переходы можно разделить на два вида: R=R`∩V×X×V – принимающие переходы по непустым стимулам или x-переходы, и E=R`∩V×{e}×V – принимающие переходы по пустым стимулам или e-переходы. Состояния можно разделить на терминальные, в которых не определены никакие переходы, посылающие, в которых определены только посылающие и пустые переходы, принимающие, в которых определены только принимающие переходы, и смешанные, в которых определены как принимающие, так и посылающие или пустые переходы. Принимающие и смешанные переходы будем называть рецептивными. 12
Стимул x допустим в состоянии v, если имеется хотя бы один принимающий переход (v, x, v`). Автомат конечен, если конечны множества состояний V и переходов T. По умолчанию, мы будем рассматривать только конечные автоматы. Такое определение автомата не полностью описывает его выполнение, поскольку дополнительно нужно указать, является ли автомат императивным или факультативным, разрешены ли в нем e-переходы и какой их приоритет по отношению к посылающим и пустым переходам. Введем обозначения: • M=Mi∪Mf – класс всех асинхронных автоматов, • Mi=Mi0∪Mi1∪Mi2∪Mi3 – императивные автоматы, • Mf=Mf0∪Mf1∪Mf2∪Mf3 – факультативные автоматы, • Mi0 (Mf0) – императивные (факультативные) автоматы без e-переходов (E=∅), • Mi1 (Mf1) – императивные (факультативные) автоматы с e-переходами и приоритетом посылающих и пустых переходов над e-переходами, • Mi2 (Mf2) – императивные (факультативные) автоматы с e-переходами и приоритетом e-переходов над посылающими и пустыми переходами, • Mi3 (Mf3) – императивные (факультативные) автоматы с e-переходами и равноприоритетностью посылающих и пустых переходов и e-переходов. Будем считать, что с автоматом связаны две очереди: входная очередь, в которой располагается бесконечное входное слово в алфавите X`, и выходная очередь, в которую помещаются выдаваемые автоматом реакции, формируя выходное слово в алфавите Y. Срабатывание (однократное выполнение) автомата в состоянии v заключается в определении допустимых переходов, определенных в этом состоянии и, если такие есть, недетерминированном выборе одного из них и выполнении его. Если выбирается пустой переход (v,v`), автомат переходит в состояние v`, входная и выходная очереди не изменяются. Если выбирается принимающий переход (v,x,v`), то x – головной стимул входной очереди и он удаляется из нее, автомат переходит в состояние v`, выходная очередь не изменяется. Если выбирается посылающий переход (v,y,v`), автомат переходит в состояние v`, а в конец выходной очереди помещается реакция y; если v – смешанное состояние и головной стимул входной очереди пустой, то он удаляется из входной очереди, в противном случае входная очередь не изменяется. В срабатывание автомата входит также его действия в случае отсутствия допустимых переходов. Множество допустимых переходов, а также действия автомата при отсутствии допустимых переходов, зависят в общем случае от состояния v, головного стимула x входной очереди и класса автомата: • В терминальном состоянии v допустимых переходов нет. Автомат останавливается: состояние, входная и выходная очереди не изменяются. • В посылающем состоянии v допустимые переходы – это все посылающие (v,y,v`) и пустые (v,v`) переходы. 13
•
В принимающем состоянии v допустимые переходы – это все принимающие переходы (v,x,v`). Если таких переходов нет, то выполнение автомата зависит от того, пустой или непустой головной стимул: если x≠e непустой (недопустимый) стимул, то поведение автомата не определено, это квалифицируется как ошибка неспецифицированного ввода; если же x=e пустой стимул, то автомат остается в состоянии v, а пустой стимул удаляется из входной очереди, выходная очередь не изменяется. • В смешанном состоянии v: o Если x=e пустой стимул, то допустимые переходы: для автоматов Mi0,Mi1,Mf0,Mf1 – посылающие (v,y,v`) и пустые (v,v`) переходы; для автоматов Mf2,Mi2 - e-переходы (v,e,v`), а если их нет, то посылающие (v,y,v`) и пустые (v,v`) переходы; для автоматов Mf3,Mi3 – e-переходы (v,e,v`), если они есть, плюс посылающие (v,y,v`) и пустые (v,v`) переходы. o Если x≠e непустой допустимый стимул, то допустимые переходы: для императивных автоматов Mi - x-переходы (v,x,v`); для факультативных автоматов Mf – x-переходы (v,x,v`) плюс посылающие (v,y,v`) и пустые (v,v`) переходы. o Если x≠e непустой недопустимый стимул, то допустимые переходы: отсутствуют для императивных автоматов Mi – поведение автомата не определено, это квалифицируется как ошибка неспецифицированного ввода; для факультативных автоматов Mf – посылающие (v,y,v`) и пустые (v,v`) переходы. Заметим, что класс автомата влияет на его срабатывание только в смешанных состояниях. Выполнением автомата по бесконечному входному слову w будем называть последовательность однократных срабатываний, начинающуюся в начальном состоянии v0, когда во входной очереди находится слово w. Подпоследовательность посылающих переходов определяет выходное слово u, появляющееся в выходной очереди при данном выполнении. Выполнение допустимо, если оно бесконечное или заканчивается в терминальном состоянии, и недопустимо, если оно заканчивается по ошибке неспецифицированного ввода. Поскольку автомат, вообще говоря, недетерминированный, одному входному слову может соответствовать множество возможных выполнений автомата. Входное слово допустимо, если все его возможные выполнения допустимы. Соответственно, выполнение по допустимому входному слову будем называть вполне-допустимым. Заметим, что вполне-допустимое выполнение допустимо, но 14
обратное, вообще говоря, не верно. Словарная функция автомата W ставит в соответствие каждому допустимому входному слову w множество выходных слов u для всех возможных выполнений. Заметим, что входное слово не обязательно будет полностью выбрано из входной очереди при том или ином выполнении. Допустимость входных слов и словарную функцию можно определить для любого состояния автомата, если его рассматривать как начальное состояние. В дальнейшем мы по умолчанию будем иметь в виде допустимость входных слов и словарную функцию для заданного начального состояния автомата v0.
2.2. Финальная допустимость стимулов Для факультативного автомата, в отличии от императивного, допустимость или недопустимость стимула x в смешанном состоянии v еще ничего не говорит о допустимости или недопустимости в этом состоянии входного слова w, начинающегося со стимула x, в частности, учитывая, что пустые стимулы допустимы во всех нерецептивных состояниях слова xeω. Введем понятие финальной допустимости стимула в факультативном автомате: непустой стимул финально допустим в рецептивном состоянии v, если он допустим в любом принимающем состоянии v`, в которое можно попасть из состояния v по цепочке посылающих и пустых переходов (цепочка будет нулевой длины, если v принимающее состояние). Возможные сочетания допустимости и финальной допустимости стимулов приведены на Рис. 1. Очевидно, для факультативного автомата входное слово допустимо тогда и только тогда, когда при любом выполнении автомата в проходимых рецептивных состояниях головные стимулы финально допустимы. Для принимающих состояний понятия допустимости и финальной допустимости стимулов совпадают. Однако, для смешанных состояний и допустимые и недопустимые стимулы могут быть как финально допустимы, так и финально недопустимы. Допустимость и финальная допустимость стимулов в факультативном автомате X = {x1,x2,x3,x4} Начальное состояние v0, принимающее состояние vR, терминальные состояния v1, v2 и v3. В состоянии v0: x1 - допустим и финально допустим x2 - допустим, но финально недопустим x3 - недопустим, но финально допустим x4 - недопустим и финально недопустим Рис. 1 Обозначим через M`f⊂Mf, M`f1⊂Mf1, M`f2⊂Mf2, M`f3⊂Mf3 подклассы факультативных автоматов, в которых допустимость и финальная допустимость стимулов совпадают. 15
Теорема о финальной допустимости стимулов: Каждый базовый класс факультативных автоматов моделируется своим подклассом автоматов, в которых совпадают допустимость и финальная допустимость стимулов, и, следовательно, эквивалентен ему: W[M`f]=W[Mf], W[M`f1]=W[Mf1], W[M`f2]=W[Mf2], W[M`f3]=W[Mf3]. Доказательство: Определим следующую процедуру преобразования факультативного автомата (Рис. 2): Сведение финальной допустимости к обычной допустимости (случай, когда состояние v остается рецептивным)
X = {x1,x2,x3,x4} стимул x1 допустим и финально допустим в состоянии v стимул x2 допустим, но финально недопустим в состоянии v стимул x3 недопустим, но финально допустим в состоянии v стимул x4 недопустим и финально недопустим в состоянии v Рис. 2 •
Добавим дополнительные состояния вида (v,x), где v∈V – основное состояние, а x∈X – непустой стимул. • Для каждого основного смешанного состояния v удалим все определенные в нем принимающие переходы (v,x,v`) по допустимым, но финально недопустимым стимулам x. • Для каждого основного смешанного состояния v и недопустимого, но финально допустимого в нем стимула x, добавим принимающий переход, ведущий в дополнительное состояние (v,x,(v,x)). • Если в основном рецептивном состоянии v стимул x финально допустим, то для каждого принимающего перехода (v,x,v`) добавим пустой переход из соответствующего дополнительного состояния ((v,x),v`). • Для каждого посылающего (v,y,v`) и пустого (v,v`) перехода добавим, соответственно, посылающий ((v,x),y,(v`,x)) или пустой ((v,x),(v`,x)) переход из дополнительных состояний. Теперь в каждом смешанном основном состоянии допустимы те и только те стимулы, которые финально допустимы. Дополнительные состояния – посылающие. Из этого правила есть одно важное исключение: основное смешанное состояние v может стать нерецептивным (посылающим), если окажется, что все непустые стимулы недопустимы в нем, и в нем не определены 16
e-переходы. Нерецептивность состояния приводит к тому, что при выходе из него по посылающему или пустому переходу пустой головной стимул не удаляется из очереди. Иными словами, если в момент прихода в состояние v во входной очереди было слово ew, то после посылающего или пустого перехода, определенного в v, во входной очереди раньше оставалось слово w, а теперь, когда состояние стало нерецептивным, – то же самое слово ew. Здесь нужно рассмотреть два случая. Случай 1. Если автомат не имеет e-переходов (класс Mf0), то финальная недопустимость стимула x в состоянии v означает существование выполнения, начинающегося в v, содержащего только посылающие и пустые переходы и заканчивающегося в принимающем состоянии v`, в которой стимул x недопустим. Поскольку в v` не определены e-переходы, сначала будут удалены из очереди все пустые стимулы, а потом выбран непустой стимул и, если это x, то фиксируется ошибка неспецифицированного ввода. Следовательно из финальной недопустимости стимула x в смешанном состоянии v следует финальная недопустимость в нем любого слова enx. Тем самым, если в состоянии v недопустимы все непустые стимулы, то в этом состоянии допустимо единственное бесконечное слово eω (которое всегда допустимо). Поскольку для ew=eω, очевидно, w=eω, имеем ew=w и, следовательно, словарная функция не меняется. Случай 2. Если автомат может иметь e-переходы (классы Mf1, Mf2, Mf3), то, вообще говоря, из финальной недопустимости стимула x в состоянии v не следует финальная недопустимость в нем слова ex, то есть, финальная недопустимость стимула x в конце v` какого-нибудь e-перехода (v,e,v`). Простое удаление принимающих переходов, определенных в v, может изменить словарную функцию. Пример на Рис. 3.
переходов эквивалентно (по изменению состояния и содержимого очередей) движению по одному старому переходу. Поэтому и в этом случае словарная функция не меняется. См. Рис. 4. Сведение финальной допустимости к обычной допустимости (особый случай)
x≠x` Рис. 4 Теорема о финальной допустимости стимулов доказана. В дальнейшем мы вместо базовых классов Mf, Mf1, Mf2, Mf3 будем рассматривать эквивалентные им подклассы M`f, M`f1, M`f2, M`f3, которые также будем называть базовыми классами факультативных автоматов там, где это не приведет к недоразумениям.
x≠x`
Рис. 3 Поэтому для таких автоматов, кроме удаления принимающих переходов (v,x,v1) из состояния v, мы дополнительно преобразуем хотя бы один пустой (v,v2) или посылающий (v,y,v3) переход из v, в два смежных перехода, первый из которых e-переход (v,e,v2`), ведущий в дополнительное состояние v2`, а второй пустой (v2`,v`) переход, или, соответственно, e-переход (v,e,v3`) и посылающий (v3`,y,v`) переход. Состояние v остается рецептивным, а движение по паре новых смежных 17
18
2.3. Автоматы без смешанных состояний Обозначим через A класс автоматов без смешанных состояний с e-переходами. Отсутствие смешанных состояний и возможное наличие e-переходов делает автомат этого класса одновременно элементом любого из базовых классов с разрешенными e-переходами, которые отличаются друг от друга поведением только в смешанных состояниях, то есть, A = Mi3∩Mi2∩Mi1∩M`f3∩M`f2∩M`f1. Тем самым, класс A моделируется каждым из базовых классов: W[A]⊆W[Mi3], W[A]⊆W[Mi2], W[A]⊆W[Mi1], W[A]⊆W[M`f3], W[A]⊆W[M`f2], W[A]⊆W[M`f1].
1. Смешанное состояние без e-переходов. 1.1. Императивный автомат (Рис. 5). Mi0=Mi3=Mi2=Mi1
(1)
Теорема об автомате без смешанных состояний: Класс M всех асинхронных автоматов моделируется своим подклассом A автоматов без смешанных состояний и, следовательно, эквивалентен ему. теоремы следует эквивалентность Из этой W[A]=W[Mi3]=W[Mi2]=W[Mi1]=W[M`f3]=W[M`f2]=W[M`f1] и вложенности W[Mi0]⊆W[A] и W[Mf0]⊆W[A]. Доказательство: Для доказательства достаточно рассмотреть возможные срабатывания автоматов разных классов в смешанных состояниях. Можно выделить 11 случаев, изображенных на Таб. 1. Тип смешанного состояния
(1)
(2)
Срабатывание автомата в смешанном состоянии (1.1)Mi0=Mi3=Mi2=Mi1
(1.2)M`f0=M`f3=M`f2=M`f1
x:(v,x,vx)
x:(v,x,vx) x:(v,y,vy) e:(v,y,vy) (2.2)Mi2=M`f2 (2.3)Mi1=M`f1
e:(v,e,ve) e:(v,y,vy)
e:(v,e,ve)
x:(v,x,vx)
x:(v,x,vx)
e:(v,y,vy)
e:(v,e,(v,e))+((v,e),y,vy)
Рис. 5 Для каждого состояния v типа 1 добавляется дополнительное состояние (v,e). Посылающий (v,y,v`y) или пустой (v,v`y) переход из v заменяется на e-переход, ведущую в дополнительное состояние (e,v,(v,e)) и, соответственно, посылающий ((v,e),y,vy) или пустой ((v,e),vy) переход из этого дополнительного состояния. 1.2. Факультативный автомат (Рис. 6). M`f0=M`f3=M`f2=M`f1
(1)
e:(v,y,vy) (2.1)Mi3=M`f3
A
A
x:(v,x,vx) x:(v,y,vy)
x:(v,x,(v,x))+((v,x),vx) x:(v,x,(v,x))+((v,x),y,(vy,x))
e:(v,y,vy)
e:(v,e,(v,e))+((v,e),y,vy)
e:(v,y,vy) Рис. 6
(3.1.1)Mi3 (3.1.2)Mi2 (3.1.3)Mi1 (3.2.1)M`f3 (3.2.2)M`f2 (3.2.3)M`f1 (3)
x:(v,x,vx)
x:(v,x,vx)
e:(v,e,ve) e:(v,y,vy)
e:(v,e,ve)
x:(v,x,vx)
e:(v,y,vy)
x:(v,x,vx) x:(v,y,vy)
x:(v,x,vx) x:(v,y,vy)
e:(v,e,ve) e:(v,y,vy)
e:(v,e,ve)
Аналогично случаю 1.1, для каждого состояния v типа 1 добавляется дополнительное состояние (v,e); посылающий (v,y,v`y) или пустой (v,v`y) переход из v заменяется на e-переход в дополнительное состояние (e,v,(v,e)) и, соответственно, посылающий ((v,e),y,vy) или пустой ((v,e),vy) переход из этого дополнительного состояния. Затем в моделирующий автомат добавляются дополнительные состояния вида (v,x) для состояний v∈V и непустых стимулов x∈X. Для каждого основного смешанного состояния v∈V рассматриваемого типа и допустимого в нем непустого стимула x добавляется принимающий переход
x:(v,x,vx) x:(v,y,vy) e:(v,y,vy)
Таб. 1 19
20
(v,x,(v,x)). В каждом дополнительном состоянии (v,x) определяются посылающие ((v,x),y,(v`,x)) и пустые ((v,x),(v`,x)) переходы тогда и только тогда, когда в моделируемом автомате есть переходы, соответственно, (v,y,v`) и (v,v`). В каждом дополнительном состоянии (v,x) определяется пустой переход ((v,x),v`) тогда и только тогда, когда в моделируемом автомате есть переход (v,x,v`). 2. Смешанное состояние, в котором все принимающие переходы – eпереходы. 2.1. Равный приоритет e-переходов и посылающих и пустых переходов (Рис. 7). Mi3=M`f3 A
Приоритет e-переходов приводит к тому, что в состоянии типа 2 вообще никогда не будут выполняться посылающие и пустые переходы, поэтому их можно удалить. 2.3. Приоритет посылающих и пустых переходов (Рис. 9). Mi1=M`f1 A
(2) e:(v,y,vy)
e:(v,e,(v,e))+((v,e),y,vy)
(2) e:(v,e,ve) e:(v,y,vy)
e:(v,e,ve) e:(v,e,(v,e))+((v,e),y,vy) Рис. 9
Рис. 7 Аналогично случаю 1.1, для каждого состояния v типа 2 добавляется дополнительное состояние (v,e); посылающий (v,y,v`y) или пустой (v,v`y) переход из v заменяется на e-переход в дополнительное состояние (e,v,(v,e)) и, соответственно, посылающий ((v,e),y,vy) или пустой ((v,e),vy) переход из этого дополнительного состояния. 2.2. Приоритет e-переходов (Рис. 8). Mi2=M`f2 A (2)
e:(v,e,ve)
Приоритет посылающих и пустых переходов приводит к тому, что в состоянии типа 2 вообще никогда не будут выполняться e-переходы. Однако, если такие переходы просто удалить, то состояние перестанет быть рецептивным. Поэтому, как и в случае 1.1, для каждого состояния v типа 2 добавляется дополнительное состояние (v,e); посылающий (v,y,v`y) или пустой (v,v`y) переход из v заменяется на e-переход в дополнительное состояние (e,v,(v,e)) и, соответственно, посылающий ((v,e),y,vy) или пустой ((v,e),vy) переход из этого дополнительного состояния. 3. Смешанное состояние общего вида. 3.1. Императивный автомат. 3.1.1. Равный приоритет e-переходов и посылающих, и пустых переходов (Рис. 10). Mi3 A
e:(v,e,ve)
(3)
x:(v,x,vx)
x:(v,x,vx)
e:(v,e,ve) e:(v,e,(v,e))+ ((v,e)y,vy)
e:(v,e,ve) e:(v,y,vy)
Рис. 8
Рис. 10 21
22
Аналогично случаю 2.1, для каждого состояния v типа 3 добавляется дополнительное состояние (v,e); посылающий (v,y,v`y) или пустой (v,v`y) переход из v заменяется на e-переход в дополнительное состояние (e,v,(v,e)) и, соответственно, посылающий ((v,e),y,vy) или пустой ((v,e),vy) переход из этого дополнительного состояния. 3.1.2. Приоритет e-переходов (Рис. 11). Mi2 A (3) x:(v,x,vx)
x:(v,x,vx)
e:(v,e,ve)
e:(v,e,ve)
e:(v,e,ve) e:(v,y,vy)
Аналогично случаю 2.2, приоритет e-переходов приводит к тому, что в состоянии типа 3 вообще никогда не будут выполняться посылающие и пустые переходы, поэтому их можно удалить. 3.1.3. Приоритет посылающих и пустых переходов (Рис. 12). Mi1 A
x:(v,x,vx)
x:(v,x,vx) e:(v,e,(v,e))+((v,e),y,vy)
e:(v,y,vy)
e:(v,e,ve) e:(v,e,(v,e))+ ((v,e),y,vy) Рис. 13
Рис. 11
(3)
3.2. Факультативный автомат. 3.2.1. Равный приоритет e-переходов и посылающих, и пустых переходов (Рис. 13). M`f3 A x:(v,x,(v,x))+ ((v,x),vx) x:(v,x,vx) (3) x:(v,x,(v,x))+ x:(v,y,vy) ((v,x),y,(vy,x))
Аналогично случаю 1.2, для каждого состояния v типа 3 добавляется дополнительное состояние (v,e); посылающий (v,y,v`y) или пустой (v,v`y) переход из v заменяется на e-переход в дополнительное состояние (e,v,(v,e)) и, соответственно, посылающий ((v,e),y,vy) или пустой ((v,e),vy) переход из этого дополнительного состояния. Затем в моделирующий автомат добавляются дополнительные состояния вида (v,x) для состояний v∈V и непустых стимулов x∈X. Для каждого основного состояния v типа 3 и допустимого в нем непустого стимула x добавляется принимающий переход (v,x,(v,x)). В каждом дополнительном состоянии (v,x) определяются посылающие ((v,x),y,(v`,x)) и пустые ((v,x),(v`,x)) переходы тогда и только тогда, когда в моделируемом автомате есть переходы, соответственно, (v,y,v`) и (v,v`), кроме того, определяется пустой переход ((v,x),v`) тогда и только тогда, когда в моделируемом автомате есть переход (v,x,v`). 3.2.2. Приоритет e-переходов (Рис. 14). M`f2 A (3) x:(v,x,(v,x))+ ((v,x),vx) x:(v,x,(v,x))+ ((v,x),y,(vy,x))
x:(v,x,vx) x:(v,y,vy)
Рис. 12 Приоритет посылающих и пустых переходов приводит к тому, что в состоянии типа 3 вообще никогда не будут выполняться e-переходы. Удаляя e-переходы, получаем случай 1.1 и применяем соответствующее преобразование.
23
e:(v,e,ve)
e:(v,e,ve) Рис. 14
Приоритет e-переходов приводит к тому, что в состоянии типа 3 при пустом головном стимуле не будут выполняться посылающие и пустые переходы; эти переходы могут выполняться только при непустом и допустимом головном стимуле. Поэтому делаем аналогично случаю 3.2.1, но только посылающий или 24
пустой переход из основного состояния типа 3 не заменяется на e-переход в дополнительное состояние, и, соответственно, посылающий или пустой переход из этого дополнительного состояния, а просто удаляется. В моделирующий автомат добавляются дополнительные состояния вида (v,x) для состояний v∈V и непустых стимулов x∈X. Для каждого основного состояния v типа 3 и допустимого в нем непустого стимула x добавляется принимающий переход (v,x,(v,x)). В каждом дополнительном состоянии (v,x) определяются посылающие ((v,x),y,(v`,x)) и пустые ((v,x),(v`,x)) переходы тогда и только тогда, когда в моделируемом автомате есть переходы, соответственно, (v,y,v`) и (v,v`), кроме того, определяется пустой переход ((v,x),v`) тогда и только тогда, когда в моделируемом автомате есть переход (v,x,v`). Посылающие и пустые переходы из основных состояний типа 3 удаляются. 3.2.3. Приоритет посылающих и пустых переходов (рис. 15). M`f1 A x:(v,x,(v,x))+ ((v,x),vx) x:(v,x,(v,x))+ ((v,x),y,(vy,x))
x:(v,x,vx) x:(v,y,vy) e:(v,y,vy)
e:(v,e,(v,e))+ ((v,e),y,vy)
2.4. Три класса автоматов и словарных функций В этом разделе мы рассмотрим три класса автоматов: 1) класс Mi0=АОР императивных автоматов без e-переходов (автоматы с отложенными реакциями), 2) класс Mf0=IOSM факультативных автоматов без e-переходов (автоматы вводавывода), 3) пересечение этих классов - класс A0 автоматов без смешанных состояний и e-переходов. Мы покажем, что класс АОР моделирует класс A и, тем самым, эквивалентен классу всех асинхронных автоматов W[АОР]=W[M], класс IOSM этим свойством не обладает, то есть, W[IOSM]⊂W[M], а класс A0 не моделирует класс IOSM, W[A0]⊂W[IOSM], и, тем более, класс АОР, то есть, является самым узким классом в смысле словарной функции.
2.4.1. Автоматы с отложенными реакциями (АОР) – императивные автоматы без e-переходов Сначала мы рассмотрим специальный подкласс A1⊂A автоматов без смешанных состояний и без таких принимающих состояний, в которых определены только eпереходы (такие состояния будем называть e-состояниями), то есть, в каждом принимающем состоянии определен хотя бы один принимающий переход по непустому допустимому стимулу. Теорема о e-состояниях: Класс A моделируется своим подклассом A1 и, тем самым, они эквивалентны W[A]=W[A1]. Доказательство: Для доказательства достаточно рассмотреть моделирование поведения автомата класса A в e-состоянии (Рис.16), поскольку в остальных состояниях автоматы классов A и A1 ведут себя одинаково. A A1
Рис. 15 Приоритет посылающих и пустых переходов приводит к тому, что в состоянии типа 3 при пустом головном стимуле не будут выполняться e-переходы; тем более они не будут выполняться при непустом головном стимуле. Поэтому делаем аналогично случаю 3.2.1, но только e-переходы из основных состояний типа 3 удаляем. В моделирующий автомат добавляются дополнительные состояний вида (v,x) для состояний v∈V и непустых стимулов x∈X. Для каждого основного состояния v типа 3 и допустимого в нем непустого стимула x добавляется принимающий переход (v,x,(v,x)). В каждом дополнительном состоянии (v,x) определяются посылающие ((v,x),y,(v`,x)) и пустые ((v,x),(v`,x)) переходы тогда и только тогда, когда в моделируемом автомате есть переходы, соответственно, (v,y,v`) и (v,v`), кроме того, определяется пустой переход ((v,x),v`) тогда и только тогда, когда в моделируемом автомате есть переход (v,x,v`). Удаляются e-переходы из основных состояний типа 3. Теорема об автомате без смешанных состояний доказана.
25
e:(v,v1)+(v1,e,ve) e:(v,v2)+(v2,e,ve)
e:(v,e,ve)
Рис. 16 Для каждого e-состояния v добавляем два дополнительных состояния v1 и v2, и в состоянии v определяем два пустых перехода в v1 и v2. В состоянии v1 определяем принимающий переход по любому непустому стимулу x, а в состоянии v2 множество принимающих переходов по всем остальным непустым стимулам. 26
Очевидно, что в состоянии v все непустые стимулы финально недопустимы. После этого каждый e-переход (v,e,ve) заменяем на два e-перехода из состояний v1 и v2, соответственно, (v1,e,ve) и (v2,e,ve). В этом доказательстве мы неявно использовали тот факт, что алфавит стимулов состоит хотя бы из двух непустых стимулов, то есть, x1∈X и X\{x1}≠∅. Если это не так, то мы всегда можем добавить в алфавит стимулов еще два непустых стимула, один из которых будем использовать только для принимающих переходов из v1, а другой вместе с остальными стимулами из X - для принимающих переходов из v2. Понятно, что эти дополнительные стимулы не будут входить в допустимые входные слова, поэтому словарная функция не изменится. Теорема о e-состояниях доказана. Теорема об автомате с отложенными реакциями: Класс M всех асинхронных автоматов моделируется своим подклассом автоматов с отложенными реакциями АОР=Mi0 (императивные автоматы без e-переходов) и, следовательно, эквивалентен ему. Доказательство: Класс Mi0, как подкласс класса M всех асинхронных автоматов, им моделируется. Поскольку класс M всех асинхронных автоматов эквивалентен классу A, а класс A эквивалентен своему подклассу A1, нам достаточно показать, что класс A1 моделируется классом Mi0. Для моделирования автомата класса A1 автоматом класса Mi0 достаточно рассмотреть поведение автомата в принимающих состояниях, в которых определены прием как пустого стимула, так и непустых допустимых стимулов, поскольку в автоматах класса A1 нет смешанных состояний и нет e-состояний, а в принимающих состояниях без e-переходов также как в терминальных и посылающих состояниях все автоматы ведут себя одинаково. Моделирование поведения в таком состоянии тривиально: e-переходы заменяем пустыми переходами (Рис. 17). A1 Mi0 x:(v,x,vx) x:(v,x,vx) e:(v,e,ve) e:(v,ve) A1
Mi0 x:(v,x,vx) e:(v,e,ve)
x:(v,x,vx) e:(v,ve) Рис. 17
2.4.2. Автоматы ввода-вывода (IOSM) – факультативные автоматы без e-переходов Теорема об автомате ввода-вывода (IOSM): Класс M всех асинхронных автоматов не моделируется своим подклассом автоматов ввода-вывода IOSM=Mf0 (факультативные автоматы без e-переходов). Доказательство: Поскольку класс Mf0 моделируется своим подклассом M`f0, а класс M всех асинхронных автоматов моделируется подклассом A, нам достаточно показать, что существует автомат a∉A, который не моделируется классом M`f0, то есть, W[a]∉W[M`f0]. Напомним, что автомат класса M`f0 - это факультативный автомат без eпереходов, в котором совпадают допустимость и финальная допустимость стимулов. Такие автоматы обладают следующими двумя свойствами, которыми некоторые асинхронные автоматы класса A не обладают. Свойство 1: Если словарная функция автомата класса M`f0 определена на входном слове uexw, где u – конечное слово, e – пустой стимул, x – некоторый стимул (быть может, пустой), w – бесконечное слово, то она должна быть определена также на входном слове uxeω. Действительно, поскольку входные слова uexw и uxeω имеют общий начальный отрезок u, и слово uexw допустимо, ошибка неспецифицированного ввода может проявиться для слова uxeω только после выборки слова u из входной очереди при приеме стимула x в принимающем состоянии v (последующие стимулы пустые и, тем самым, всегда допустимые). Значит стимул x недопустим в состоянии v. Но тогда для слова uexw автомат после выборки слова u также может оказаться в принимающем состоянии v и примет пустой стимул e. Поскольку v – принимающее состояние и e-переходов нет, выборка пустого стимула не меняет состояние и автомат в том же состоянии v выберет недопустимый стимул x, то есть, будет зафиксирована ошибка неспецифицированного ввода и окажется, что слово uexw недопустимо. Мы пришли к противоречию и, значит, входное слово uxeω должно быть допустимо. Заметим, что требование наличия после непустого стимула x в слове uxeω только пустых стимулов существенно, поскольку может оказаться, что для любого допустимого входного слова вида uexw любое входное слово вида uxw`, допустимо только тогда, когда w`=eω. Пример приведен на Рис. 18. При X = {x,x`} единственное допустимое слово вида xw` – это слово xeω, а для всех допустимых входных слов вида uexw, u - должно быть пусто.
Теорема об автомате с отложенными реакциями доказана. Итак, мы показали, что W[Mi0]=W[A]=W[A1] и, тем самым, доказана эквивалентность всех базовых классов, кроме Mf0: W[M]=W[A]=W[A1]=W[Mi0]=W[Mi3]=W[Mi2]=W[Mi1]=W[M`f3]=W[M`f2]=W[M`f1]. 27
28
также для продолжения выполнения в случае слова uw, хотя обратное, вообще говоря, неверно. Тем самым оказывается, что любое выполнение для слова uew дает последовательность переходов (а значит, и реакций), которая возможна также для слова uw, то есть, W(uew)⊆W(uw). Отсюда непосредственно следует свойство 2. Теперь нам достаточно привести пример автомата класса A, словарная функция которого не обладала бы этим вторым свойством (Рис. 20). Здесь для X={x,x`} слово xx`eω допустимо, а слово xex`eω недопустимо.
Рис. 18 Теперь нам достаточно привести пример автомата класса A, словарная функция которого не обладала бы этим первым свойством (Рис. 19). Словарная функция автомата определена на и только на словах вида ew, начинающихся с пустого стимула, и отображает каждое такое входное слово в пустое выходное слово. Для любого непустого стимула x эта функция определена на любом слове вида exw, но не определена на слове xeω.
Рис. 20 Теорема об автомате ввода-вывода (IOSM) доказана. Рассмотренные нами два свойства словарной функции автоматов ввода-вывода (IOSM) являются необходимыми. Можно сформулировать следующую нерешенную задачу: найти свойства словарной функции, необходимые и достаточные для того, чтобы она была словарной функцией автомата вводавывода (IOSM).
2.4.3. Автоматы без смешанных состояний и e-переходов (A0)
Рис. 19 Свойство 2: Если словарная функция W автомата класса M`f0 определена на слове w, то она определена также на любом слове w`, полученном из w добавлением в произвольные места произвольного числа пустых стимулов, и W(w`)⊆W(w). Действительно, если по конечному слову u автомат может попасть в принимающее состояние v, то, поскольку в принимающем состоянии не определены e-переходы, автомат в состоянии v не сможет различить остатки входных слов, находящиеся во входной очереди в этот момент времени, отличающиеся только количеством пустых стимулов в начале. Все эти пустые стимулы будут "глотаться" принимающим состоянием. Поэтому любое возможное продолжение выполнения автомата для допустимого слова uw дает ту же последовательность переходов (а значит, и реакций), что и для слова uew, и наоборот. Если по конечному слову u автомат может попасть в смешанное состояние v, то, поскольку в смешанном состоянии автомат может сработать по посылающему или пустому переходу независимо от головного стимула, пустой головной стимул в этом случае выбирается из очереди, а непустой остается, любое продолжение выполнения автомата для бесконечного слова uew дает такую последовательность переходов (а значит, и реакций), которая возможна 29
Специальный интерес представляет класс A0 автоматов без смешанных состояний и e-переходов, вложенный, очевидно, во все остальные рассматривавшиеся выше классы автоматов. Теорема об автомате без смешанных состояний и e-переходов: Класс M`f0 не моделируется классом A0. Доказательство: Автоматы класса A0 обладают тремя особыми свойствами, которыми не обладают некоторые автоматы надкласса M`f0. Свойство 1: Если словарная функция W автомата класса A0 определена на слове w, то она определена также на любом слове w`, полученном из w вставкой или удалением конечного числа пустых стимулов, и принимает на нем то же значение W(w`)=W(w). Это непосредственно следует из того, что каждое рецептивное состояние является принимающим состоянием без e-переходов, поэтому такое состояние "глотает" все пустые стимулы. Примером автомата класса M`f0, не моделируемого классом A0 из-за нарушения свойства 1, может служить автомат на Рис. 18. Для X = {x,x`} входное слово exx`eω допустимо, а входное слово xx`eω недопустимо. Заметим, что здесь мы использовали только часть свойства 1 класса A0 - выделенную курсивом. Если использовать это свойство полностью, то можно 30
привести более простой пример автомата класса M`f0, не моделируемого классом A0 (Рис. 21). Для этого автомата допустимы как входное слово xw, так и входное слово exw, где w - произвольное бесконечное слово. Однако, для слова exw определено одно выходное слово - (y), а для слова xw - два выходных слова: пустое () и (y).
Рис. 21 Для того, чтобы определить второе свойство автоматов класса A0, введем следующие обозначения: • c≤c`, где c и c` - два слова (конечных или бесконечных) в одном алфавите, означает, что – или c конечно и является начальным отрезком c`, или они совпадают. • C≤C`, где C и C` - два множества слов (конечных или бесконечных) в одном алфавите, означает, что ∀c∈C ∃c`∈C` c≤c` и ∀c`∈C` ∃c∈C c≤c`. Будем писать C всех сериализаций вполне-допустимых в S; замкнутым по вполнедопустимости назовем такое множество S, что C<S>=S. Поскольку вместе с каждой вполне-допустимой сериализацией z∈S вполне-допустима также любая сериализация z`∈S, x-подслово которой совпадает с x-подсловом z, xz`=xz, или является его начальным отрезком xz`≤xz, нетрудно показать, что C>=C<S>. Будем называть x-подслово сериализации z вполнедопустимого замыкания C<S> максимальным, если оно конечно, но в C<S> не существует сериализации z` с большим x-подсловом xz`>xz. Тогда, очевидно, множество входных слов допустимых в S, которое мы будем обозначать w(S), совпадает с множеством всех бесконечных x-подслов и всех бесконечных продолжений максимальных конечных x-подслов сериализаций вполнедопустимого замыкания C<S>. 38
Для S=Z допустимость входного слова в Z как раз и означает, что при любом выполнении не возникнет ситуации, когда в рецептивном состоянии читается очередной стимул входного слова и для этого стимула не определено поведение автомата. Таким образом, z-множество Z является замыканием по вполнедопустимости множества допустимых сериализаций Z=С(Zall). Z-множество Z однозначно определяет автоматную словарную функцию W. Словарную функцию для z-множества Z будем обозначать W(Z): • Dom(W(Z))=w(Z)=w(Zall) – множество входных слов допустимых в Z (Zall). • ∀w∈Dom(W(Z)) W(Z)(w)={yz|z∈Z xz≤w} – множество y-подслов сериализаций z-множества, x-подслова которых совпадают с входным словом или являются его начальными отрезками. Будем говорить, что класс автоматов N строго моделируется классом автоматов N`, если Z[N]⊆Z[N`], то есть, для каждого автомата m∈N существует автомат m`∈N`, имеющий то же z-множество Z[m]=Z[m`]. Если классы автоматов N и N` взаимно строго моделируют друг друга, то есть, множества их z-множеств совпадают Z[N]=Z[N`], то будем говорить, что эти классы автоматов строго эквивалентны. Преобразования разделов 2.2-2.4 сохраняют z-множество, что легко проверяется для каждого преобразования; поэтому все доказанные выше эквивалентности классов являются также строгими эквивалентностями. Конечную или бесконечную последовательность смежных переходов (следующий переход начинается в том состоянии, в котором заканчивается предыдущий) будем называть маршрутом. (Автомату соответствует граф его состояний, в котором вершины – это состояния, а дуги, раскрашенные стимулами, реакциями или нераскрашенные – это, соответственно, принимающие, посылающие или пустые переходы; последовательности смежных переходов соответствует последовательность смежных дуг, то есть, маршрут в графе.) Маршруту P соответствует последовательность стимулов и реакций его непустых переходов, то есть, сериализация, которую будем называть zраскраской маршрута и обозначать zP; x-подслово xzP будем называть xраскраской маршрута, а y-подслово yzP - y-раскраской маршрута. Выполнению автомата для данного входного слова w соответствует маршрут, начинающийся в начальном состоянии, который мы будем называть маршрутом выполнения; множество таких маршрутов будем обозначать P(w). Маршрут допустимого выполнения будем называть допустимым маршрутом – это любой маршрут, начинающийся в начальном состоянии и непродолжаемый, то есть, либо бесконечный, либо заканчивающийся в терминальном состоянии; множество вполне-допустимых маршрутов обозначим Pall. Маршрут вполне-допустимого выполнения будем называть вполне-допустимым маршрутом; множество вполнедопустимых маршрутов обозначим P (если нужно указать автомат m, будем писать P[m]). Множество их z-раскрасок zP={zP|P∈P} будем называть zраскраской автомата. 39
Прежде всего, заметим, что для любого выполнения автомата y-раскраска маршрута выполнения совпадает с y-подсловом сериализации этого выполнения, но x-раскраска маршрута выполнения, вообще говоря, не совпадает с xподсловом сериализации выполнения, и, тем самым, z-раскраска маршрута выполнения, вообще говоря, не совпадает с сериализацией выполнения. Причина этого в том, что не всякое срабатывание автомата, изменяющее сериализацию, сопровождается переходом. Имеются три типа срабатываний при отсутствии допустимых переходов: 1) срабатывание в терминальном состоянии (автомат останавливается); 2) срабатывание в принимающем состоянии при отсутствии e-переходов и пустом головном стимуле (пустой стимул помещается в сериализацию); 3) срабатывание с фиксацией ошибки неспецифицированного ввода, когда непустой головной стимул недопустим в текущем состоянии: рецептивном – для императивных автоматов, и принимающем – для факультативных автоматов. Терминальное срабатывание не изменяет сериализацию, и для допустимых выполнений остается только второй тип срабатывания, который изменяет сериализацию, но не сопровождается переходом. Мы покажем, что можно так преобразовать автомат, сохраняя реализуемое им z-множество Z и, тем самым, словарную функцию W, чтобы таких срабатываний не было, и для такого автомата Z=zP. В следующих разделах мы рассмотрим преобразования, позволяющие перейти сначала к автоматам, в которых сериализация выполнения по допустимому входному слову совпадает с раскраской маршрута выполнения; далее – к автоматам, в которых все маршруты являются маршрутами таких выполнений, и наконец – к автоматам, в которых все маршруты имеют уникальную раскраску, то есть, каждая сериализация является раскраской только одного маршрута.
3.2. Три класса автоматов и z-множеств 3.2.1. Класс автоматов A2, в которых z-раскраска совпадает с zмножеством (каждое нетерминальное срабатывание есть переход) Рассмотрим подкласс A2⊂A автоматов без смешанных состояний, в которых нет срабатываний типа 2. Это означает, что в таком автомате в каждом принимающем состоянии определен хотя бы один e-переход и тогда каждое нетерминальное срабатывание для допустимого выполнения сопровождается переходом. Поэтому каждый допустимый маршрут как последовательность переходов взаимнооднозначно соответствует последовательности нетер-минальных срабатываний автомата, z-раскраска маршрута zP совпадает с сериализацией выполнения, а zраскраска автомата совпадает с его z-множеством Z=zP. При этом для допустимого входного слова w∈Dom(W) и маршрута выполнения P∈P(w) имеет место xzP≤w и yzP∈W(w). 40
Теорема о срабатываниях и переходах: Класс автоматов A строго моделируется своим подклассом A2. Доказательство: От срабатываний типа 2 легко избавиться, если в каждом принимающем состоянии v, в котором не определены e-переходы, добавить eпереход (v,e,v), не изменяющий состояния (петлю). Очевидно, что такие преобразования не изменяют z-множество, а получившийся автомат относится к классу A2. Теорема о срабатываниях и переходах доказана.
m∈A2
m`∈A3
Следствие: поскольку Z(A)=Z(M), A2⊂A и Z(A)⊆Z(A2), очевидно, Z(A2)=Z(M).
3.2.2. Класс автоматов A3, в которых все допустимые маршруты (сериализации) вполне-допустимы
обозначения:
В автомате класса A2, вообще говоря, не все допустимые маршруты являются вполне-допустимыми маршрутами. Рассмотрим подкласс A3⊂A2 автоматов, в которых все допустимые маршруты вполне-допустимы. Теорема о вполне-допустимых маршрутах: Класс автоматов A2 строго моделируется своим подклассом A3. Доказательство: Пусть задан автомат m=(V,v0,X,e,Y,T) класса A2; мы построим автомат m`, имеющий то же z-множество и принадлежащий классу A3. Для каждого непустого подмножества состояний H⊆V построим y-подавтомат yH, переходы которого – это все переходы, принадлежащие маршрутам в m, начинающимся в состояниях из H и содержащим только посылающие и пустые переходы, а состояния – это состояния инцидентные таким переходам (являющиеся их началами и концами). Множество H будем называть множеством входных состояний y-подавтомата yH. Через tH обозначим множество состояний y-подавтомата, являющихся принимающими в m; это множество состояний yподавтомата будем называть его множеством выходных состояний. Полученные y-подавтоматы, как подавтоматы одного автомата, имеют общие состояния и переходы. Нам нужно "расклеить" их, превратив в y-автоматы с непересекающимися множествами состояний и переходов. Поэтому для каждого y-подавтомата yH определим соответствующий y-автомат (yH,H), получающийся переименованием состояний: каждое состояние v из y-подавтомата yH в yавтомате (yH,H) обозначим как (v,H). Автомат m` строится как объединение всех y-автоматов автомата m, в которое добавлены дополнительные принимающие переходы следующим способом (Рис. 24):
41
начальное состояние m - v0 начальное состояние m` - (v0,{v0}) y-автомат входное состояние выходное состояние одновременно входное и выходное состояние Рис. 24 1) Для каждого y-подавтомата yH и каждого стимула x (пустого или непустого), допустимого в автомате m в каждом выходном состоянии y-подавтомата, определяется множество R(H,x) принимающих переходов, начинающихся в этих выходных состояниях. 2) Для множества H` концов переходов из R(H,x) рассматривается yподавтомат yH`. 42
3) Для каждого перехода (v,x,v`)∈R(H,x) в автомате m` добавим переход ((v,H),x,(v`,H`)) из выходного состояния (v,H) y-автомата (yH,H) во входное состояние (v`,H`) y-автомата (yH`,H`). 4) Начальным состоянием автомата m` объявим состояние (v0,{v0}) y-автомата (y{v0},{v0}) (соответствующий y-подавтомат порождается одним начальным состоянием {v0} автомата m). 5) После этого оставляем в автомате m` только те состояния, которые достижимы из начального состояния (v0,{v0}), и только те переходы, которые определены в достижимых состояниях. По построению видно, что автомат m` обладает всеми нужными свойствами. Теорема о допустимых маршрутах доказана. Замечание: На Рис. 24 не показаны e-петли, определенные в каждом принимающем состоянии. С учетом этих петель выделяются еще два y-автомата: (y{2,3},{2,3}) и (y{0,2,3},{0,2,3}), в которых вход совпадает с выходом, во все их состояния ведут e-переходы из всех копий принимающих состояний 0,2,3 во всех y-автоматах и во всех состояниях этих y-графов определены принимающие переходы по стимулу x во входное состояние y-графа (y{0},{0}). В этом автомате существует недопустимый бесконечный маршрут 0⎯x→1,(1⎯y2→3,3⎯x1→1)ω (этот маршрут является маршрутом выполнения только для одного слова x(x1)ω, однако это слово недопустимо, поскольку для него имеется другой маршрут выполнения 0⎯x→1,1⎯y1→2, заканчивающийся по ошибке неспецифицированного ввода: в состоянии 2 стимул x1 недопустим). Следствие: поскольку Z(A2)=Z(A)=Z(M), A3⊂A2 и Z(A2)⊆Z(A3), очевидно, Z(A3)=Z(M). Выше мы уже говорили, что поскольку автомат с некоторого момента может прекратить выборку стимулов из входной очереди, x-подслово сериализации может не совпадать со входным словом, а являться его начальным отрезком. Теперь мы можем показать, что неравенство xz<w для сериализации z выполнения по некоторому допустимому входному слову w и конечность xраскраски маршрута P∈P(w), xzP<w носят принципиальный характер. Если выполнение заканчивается в терминальном состоянии v (сериализация и маршрут конечны), то этот случай легко обойти, преобразовав автомат с сохранением словарной функции (правда, без сохранения сериализаций): для этого достаточно сделать состояние v принимающим, определив в нем переходы-петли (v,x`v) для всех стимулов x`∈X`. Однако, другой случай, когда выполнение бесконечно, но с какого-то момента проходит только через нерецептивные состояния (маршрут бесконечен), обойти не удается. Мы покажем, что для некоторых словарных функций любой реализующий их конечный автомат выбирает из входной очереди лишь конечное число стимулов для некоторых допустимых входных слов. Теорема о конечном x-подслове сериализации: Существуют такие автоматные словарные функции, что в любом конечном автомате, их реализующем, имеется вполне-допустимое выполнение с конечным x-подсловом сериализации. 43
Доказательство: Примером может служить словарная функция автомата класса A3, изображенного на Рис. 25: eω→(), e*x(e*x)neω→{yω,y*y1n}, (e*x)ω→{yω,y*y1ω}, где n=0.. – число зависимых повторений - все вхождения n в показателе степени указывают на одно и то же число повторений n, "*" – как обычно, независимое число повторений ноль или более раз.
Рис. 25 Допустим, существует автомат, реализующий эту словарную функцию, в котором все вполне-допустимые сериализации имеют бесконечные x-подслова. Тогда, очевидно, существует такой же автомат класса A3, и в нем все допустимые маршруты имеют бесконечные x-подслова. Заметим, что, согласно словарной функции, входное слово xω может быть отображено в выходное слово yω. Отсюда следует, что в автомате есть бесконечный допустимый маршрут P такой, что xzP=xω и yzP=yω. Тогда существует циклический маршрут C, все переходы которого - это принимающие переходы по стимулу x или посылающие переходы с реакцией y, причем число и тех и других в маршруте C больше нуля. Также должен существовать конечный маршрут N, начинающийся в начальном состоянии и заканчивающийся в начальном состоянии цикла C. В автомате класса A3 в принимающих состояниях определены e-переходы. Пусть такой e-переход определен в состоянии, в котором определен принимающий переход C[i], и пусть E – произвольный маршрут, начинающийся этом состоянии, содержащий только посылающие, пустые и e-переходы (не содержащий x-переходов) и бесконечный или заканчивающийся в терминальном состоянии. Рассмотрим допустимый маршрут P1=N^C^C[1..i-1]^E. В нем, очевидно, конечное ненулевое число принимающих переходов по стимулу x. Тогда, в соответствии со словарной функцией, в нем должно быть конечное число посылающих переходов по реакции y1; пусть это число равно n. Тогда рассмотрим допустимый маршрут Pn=N^Cn+2^C[1..i-1]^E. В нем, очевидно, конечное число N≥n+2 принимающих переходов по стимулу x. Очевидно, N-1>n. Тогда, в соответствии со словарной функцией, в нем должно быть N-1 посылающих переходов по реакции y1, но, поскольку C не содержит y1-переходов, маршрут Pn должен содержать столько же y1-переходов, сколько их содержит маршрут P1, то есть, n, чего не может быть, поскольку N-1>n. Мы пришли к противоречию и, тем самым, утверждение доказано. Теорема о конечном x-подслове сериализации доказана.
44
3.2.3. Класс автоматов A4 с детерминированным z-множеством
исходный порождающий граф G
Распространим понятие регулярности [7-9] на множества не только конечных, но и бесконечных слов. Пусть задан некоторый алфавит символов A. Порождающим графом будем называть граф G с выделенными начальными и конечными вершинами, некоторые дуги которого раскрашены символами из A. Маршрут в графе G имеет раскраску как последовательность раскрасок его раскрашенных дуг (нераскрашенные – пустые – дуги пропускаются). Порождающий маршрут – маршрут, начинающийся в начальной вершине и бесконечный или заканчивающийся в конечной вершине. Будем говорить, что граф G порождает множество раскрасок всех порождающих маршрутов графа. Множество слов H в алфавите A будем называть регулярным, если оно порождается некоторым конечным порождающим графом. Порождающий граф G будем называть детерминированным, если из каждой его вершины выходит не более одной дуги, раскрашенной данным символом из алфавита A. Конечный детерминированный порождающий граф будем называть нормальным, если он имеет одну начальную вершину, не имеет пустых дуг и все вершины достижимы из начальной вершины. Очевидно, в нормальном порождающем графе все порождающие маршруты имеют разные раскраски, то есть, каждое слово из порождаемого множества порождается ровно одним маршрутом. Аналогично случаю регулярных множеств конечных слов, можно сформулировать следующую теорему: Теорема о нормальном порождающем графе: Каждое регулярное множество слов порождается нормальным порождающим графом. Доказательство: Пусть задан произвольный конечный порождающий граф G; мы построим нормальный порождающий граф G`, порождающий то же множество слов. Прием его построения похож на соответствующий прием для порождающих графов регулярных множество конечных слов [7,9]. Этап 1. Прежде всего, заметим, что, если в вершине v, достижимой из какойнибудь начальной вершины, начинается маршрут, состоящий только из пустых дуг и бесконечный или заканчивающийся в конечной вершине графа G, то вершину v можно пометить как конечную без изменения порождаемого множества слов. Проделаем эту процедуру для всех таких вершин v. Этап 2. Далее вершинами графа G` объявим все непустые подмножества вершин графа G. Для каждого подмножества вершин U и каждого символ a рассмотрим конечный маршрут, начинающийся в некоторой вершине из U, все дуги которого нераскрашены, кроме одной, раскрашенной символом a. Если такие маршруты есть и H – множество их концов, то проведем дугу (U,x,H) из U в H раскрашенную символом a. Начальной вершиной графа G` объявим множество всех начальных вершин графа G. Конечными вершинами графа G` объявим все множества, содержащие хотя бы одну конечную вершину графа G. После этого удалим из G` все его вершины, недостижимые из начальной, и все инцидентные им дуги. Полученный граф является нормальным по построению (Рис. 26). 45
- начальная вершина - конечная вершина
нормальный порождающий граф G`
порождаемое множество: [2]1(21)*[2], [2]1(21)ω Рис. 26
Поскольку дуге (U,a,H) графа G` взаимно-однозначно соответствует непустое множество всех конечных маршрутов графа G, начинающихся в вершинах из U и имеющих раскраску (a), то и любому маршруту P` графа G`, начинающемуся в вершине U взаимно-однозначно соответствует непустое множество всех маршрутов графа G, начинающихся в вершинах из U и имеющих такую же раскраску, что и P`. Поскольку начальная вершина G` есть множество начальных вершин G, а конечная вершина G` содержит конечную вершину графа G (включая добавленные на этапе 1), порождающему маршруту графа G`, очевидно, взаимно-однозначно соответствует непустое множество всех порождающих маршрутов графа G, имеющих ту же раскраску. Теорема о нормальном порождающем графе доказана. В автомате класса A3 все допустимые маршруты вполне-допустимы. Поэтому, если в графе состояний такого автомата конечными вершинами объявить терминальные вершины, то такой граф является порождающим графом в объединенном алфавите стимулов (включая пустой стимул) и реакций X`∪Y, а порождаемое им регулярное множество является z-множеством автомата. Однако, в общем случае, этот порождающий граф недетерминирован, то есть, может существовать несколько разных допустимых маршрутов, имеющих одну и ту же z-раскраску. Заметим, что детерминированность графа состояний как порождающего графа вовсе не означает детерминированности автомата: все принимающие переходы, определенные в данном состоянии, отличаются стимулами и поэтому при данном головном стимуле возможен только один принимающий переход; однако, хотя все посылающие переходы, определенные в данном состоянии, отличаются реакциями, допустим любой из них и выбор посылающего перехода, то есть, посылаемой реакции, по-прежнему недетерминирован. Классом A4⊂A3 назовем подкласс, в котором все допустимые маршруты имеют уникальные z-раскраски, то есть, граф состояний которого является детерминированным порождающим графом. Будем говорить, что такие автоматы – это автоматы с детерминированным z-множеством. Более строго, следовало бы говорить о мульти-множестве сериализаций (маршрутов) – 46
множестве с повторяющимися элементами, где каждая сериализация (раскраска маршрута) повторяется столько раз, скольким выполнениям (маршрутам) она соответствует; детерминированное мультимножество – это обычное множество, где каждый элемент повторяется один раз. Теорема о детерминированном z-множестве: Каждый автомат класса A3 строго моделируется некоторым автоматом класса A4. Доказательство: Пусть задан автомат m класса A3, мы построим автомат m`, имеющий ту же z-раскраску и принадлежащий классу A4. Этап 1. Граф состояний автомата m можно рассматривать как порождающий граф, конечными вершинами которого являются терминальные состояния. Заметим, что порождающие маршруты совпадают в этом случае с допустимыми маршрутами. Для этого графа построим нормальный порождающий граф. Этап 2. В полученном графе могут появиться конечные вершины, не являющиеся терминальными. Чтобы избавиться от них, из каждой такой вершины v проведем пустую дугу в какую-нибудь терминальную вершину (если таких нет, добавим новую терминальную вершину) и объявим вершину v не конечной. Очевидно, порождаемое множество от этого не изменится, а граф останется детерминированным порождающим графом (хотя уже и не нормальным). Этап 3. В полученном графе могут быть смешанные вершины. Чтобы избавиться от них, для каждой смешанной вершины v добавим новую вершину v1 и пустую дугу (v, v1), а каждую принимающую дугу, ведущую из v, (v,x,v`), где x∈X`, заменим на принимающую дугу из v1 – (v1,x,v`). Вершина v будет теперь посылающей, а вершина v1 – принимающей (Рис. 27). Раскраски маршрутов, очевидно, не изменились (добавленные пустые дуги не участвуют в раскраске маршрута) и граф остался детерминированным порождающим графом.
⇒ Рис. 27 Этот граф будем считать графом состояний автомата m`. По построению он относится к классу A2 (нет смешанных состояний и в каждом принимающем состоянии определен e-переход, поскольку так было в m). По построению, множествам всех одинаково раскрашенных допустимых маршрутов в m взаимнооднозначно соответствуют так же раскрашенные допустимые маршруты в m`, то есть, Zall[m`]= Zall[m]. Поскольку m относится к классу A3, в нем все допустимые маршруты вполне-допустимы Z[m]=C=Zall[m], поэтому Z[m`]=C=С=Zall[m`] и Z[m`]=Z[m], то есть, автомат m` тоже относится к классу A3 и имеет то же z-множество, что m. Из детерминизма порождающего графа следует детерминированность z-множества в m`, то есть, m` относится к классу A4. 47
Теорема о детерминированном z-множестве доказана.
3.3. Автоматные множества сериализаций, распознающие и отвергающие автоматы. Множество S сериализаций будем называть автоматным, если оно является zмножеством некоторого автомата. Выше уже показано, что автоматное множество регулярно, и для того, чтобы регулярное множество было автоматным, нужно, чтобы оно было замкнуто по вполне-допустимости C<S> = S и любой начальный отрезок сериализации, продолжаемый в ней стимулом, мог быть также продолжен пустым стимулом (допустимость пустых стимулов во всех рецептивных состояниях). Таким образом, мы имеем следующую теорему. Теорема об автоматности множества сериализаций: Необходимым и достаточным условием автоматности множества S сериализаций является выполнение следующих трех требований: • Регулярность: Множество S регулярно. • Допустимость x-подслов: Все x-подслова сериализаций из S допустимы в S, что эквивалентно замкнутости S по вполне-допустимости C<S> = S. • Допустимость пустого стимула: Для любой сериализации z∈S любой ее начальный отрезок uprev или как p2->next, а переменная c – как p1->next или как p2->prev.
3. Реализация метода маскировки В данном разделе мы рассмотрим более детально круг вопросов, связанных с реализацией предложенного метода маскировки ММ. В качестве среды реализации используется интегрированная среда Poirot. Напомним основные обозначения, введённые ранее. Инструкции, составляющие тело функции, находятся в массиве instr, индексируемом от 0 и до Ninstr-1, где Ninstr – общее количество инструкций в теле функции. Первая инструкция в этом массиве – инструкция FUNC – пролог функции в представлении MIF, последняя инструкция – инструкция END – эпилог функции. Пусть B – массив базовых блоков этой функции, пусть для каждого базового блока i succ[i] – множество следующих за ним базовых блоков, а pred[i] – множество предшествующих ему базовых блоков, first[i] – номер первой инструкции в массиве instr, принадлежащей базовому блоку i, last[i] – номер последней инструкции в массиве instr, принадлежащей базовому блоку i, nbinstr[i] – количество инструкций в базовом блоке i. Информация о доминировании представлена для каждого блока i номером его непосредственного доминатора idom[i] и номером его непосредственного постдоминатора ipdom[i]. Информация о потоке данных программы представлена в виде ud- и duмножеств. Для аргумента j инструкции с номером i в теле функции ud[i,j] – это множество пар , в которых может модифицироваться переменная, и которые достигают данной точки функции. С другой стороны du[i,j] – это множество пар , в которых может использоваться переменная, и которые достижимы из данной точки функции. В ud- и du-множествах также отражается собранная информация об алиасах. Для сбора информации об алиасах можно использовать понятие абстрактной области памяти. Абстрактная область памяти – именованная ячейка, доступ к которой возможен из программы одним или несколькими способами. Множество абстрактных ячеек памяти – вся память, с которой может манипулировать программа, с точки зрения алгоритма анализа алиасов. От детальности множества абстрактных ячеек памяти зависит точность выявленных указателей. С другой стороны, чем детальнее множество абстрактных ячеек памяти, тем больше ресурсов требуется для выполнения анализа алиасов. Простейшее по структуре множество абстрактных ячеек памяти включает в себя имена всех локальных и глобальных переменных, а 100
также специальный символ anon, обозначающий динамическую память. Здесь не делается попытки детализации структурных и массивовых типов, различения различных рекурсивных вызовов одной и той же функции, а также детализации структуры данных в динамической области. Для каждой переменной указательного типа поддерживается множество абстрактных ячеек памяти, на которые может указывать данная переменная. Если переменная имеет кратный указательный тип, глубина разыменования указателя может быть ограничена. Обработка множества АЯП для объектов структурных и массивовых типов зависит от детальности множества АЯП. В простейшем случае, когда поля структур и элементы массивов не различаются, объект структурного или массивового типа считается указателем, если он содержит хотя бы одно поле указательного типа. Множество АЯП, на которые может указывать такой объект получается объединением всех множеств АЯП, на которые могут указывать поля структуры или элементы массива. Информация об алиасах вычисляется с помощью стандартных алгоритмов анализа алиасов, например, описанных в [16]. После того, как для каждого указателя и для каждой точки программы вычислено множество абстрактных ячеек памяти, на которые он может указывать, эта информация переносится в ud- и du-множества. Например, если некоторая переменная v присутствует в множестве абстрактных ячеек памяти указателя p, то чтение по указателю p включается в du-цепочку переменной v, если последняя инструкция достижима из точки присваивания. В результате анализа алиасов может оказаться, что точности алгоритма недостаточно, и что множество абстрактных ячеек памяти, адресуемых некоторым указателем в некоторой точке программы, состоит из всех абстрактных ячеек памяти. Другую сложность представляют вызовы функций. Для выявления влияния функции на своё окружение требуется межпроцедурный анализ, являющийся весьма трудоёмким. Поэтому желательно ограничиться минимальным консервативным анализом, который исходит из следующих предположений: • Любая функция читает и изменяет все глобальные переменные. • Любая функция пытается разыменовывать любой указатель, переданный ей в качестве параметра. • После выполнения любой функции все глобальные указатели могут указывать на любые глобальные объекты, любые локальные объекты, упомянутые среди абстрактных ячеек памяти указателейпараметров, и на область динамической памяти. • Любая функция модифицирует все абстрактные ячейки памяти, на которые могут указывать указатели, переданные функции в качестве параметра. • Если среди таких абстрактных ячеек памяти есть локальные переменные указательного типа, то после выполнения функции они могут указывать на любой глобальный объект, любой локальный 101
объект, упомянутый среди абстрактных ячеек памяти указателейпараметров функции, и на область динамической памяти. • Если функция возвращает значение указательного типа, это значение может указывать на любой глобальный объект, любой локальный объект, упомянутый среди абстрактных ячеек памяти указателейпараметров функции, и на область динамической памяти. Современные языки содержат средства, позволяющие при объявлении функции уточнить степень влияния этой функции на окружение программы. К таким средствам относятся, например, квалификаторы типа const и restrict языка Си. Указанные выше правила определения побочного эффекта функции отражаются на вычислении du- и ud-множеств в случае вызова функции. Дальнейшие шаги метода ММ работают с du- и ud-цепочками и не анализируют множества абстрактных ячеек памяти. Метод ММ может использовать информацию о частотах выполнения дуг графа потока управления функции, полученную в результате профилирования. Каждой дуге графа потока управления ставится в соответствие число прохождений по ней. Поскольку каждая дуга графа потока управления однозначно идентифицируется парой номеров базовых блоков откуда она выходит и куда входит, предположим, что все частоты прохождения дуг хранятся в двумерном массиве efreq. Число efreq[i,j] равно количеству прохождений дуги B[i]->B[j]. Если такой дуги в графе потока управления не существует, положим число прохождений равным нулю. Пусть также bfreqin[i ] = ∑ efreq[ j , i ] , то есть равно общему количеству входов в базовый j∈ pred [i ]
блок i, а bfreqout[i ] =
∑ efreq[i, j ] , то есть равно общему количеству выходов
j∈succ[i ]
из базового блока i. Мы будем предполагать, что для всех базовых блоков, кроме ENTRY и EXIT выполняется bfreqin[i ] = bfreqout[i ] = bfreq[i ] , то есть, функция никогда не завершается в обход блока EXIT и никогда не получает управление в обход блока ENTRY.
4. Теоретическое обоснование устойчивости метода Настоящий раздел посвящён анализу устойчивости предложенного метода маскировки. Предварительно дадим некоторые вспомогательные определения и теоремы. Пусть Σ = {0,1} . Пусть poly (n) – произвольный многочлен от переменной n. Определение 1. Пусть f : Σ m → Σ n , пусть m = poly (n) . f называется односторонней функцией, если для любого полиномиального вероятностного алгоритма A и для любого x ∈ Σ m выполняется соотношение 102
P{ A( f ( x )) = x}
neg, где e – выражение, соответствующее u. 3. u ∨ v , где u, v – булевские выражения. Такому выражению соответствует выражение указательного типа e->max[e == f], где e соответствует u, а f – v. 4. u ∧ v , где u, v – булевские выражения. Такому выражению соответствует выражение указательного типа e->min[e == f], где e соответствует u, а f – v. Таким образом, каждому булевскому выражению u мы сопоставили выражение указательного типа e. Поскольку задача определения u ≡ true NP-полна, то и задача определения e == Ptrue также NP-полна. Непрозрачному предикату f соответствует выражение указательного типа f, также являющееся непрозрачным предикатом. ■ Теорема 4. Если булевские непрозрачные предикаты существуют, то и непрозрачные предикаты, построенные над массивами, существуют. Доказательство. Пусть е – непрозрачный предикат над указателями, построенный, как показано в предыдущей теореме. Поставим ему в соответствие массив целого типа a из 10 элементов, заполненный следующим образом: int a[10] = { 5, 0, 0, 5, 0, 0, 0, 5, 5, 5 }; Указательному значению Pfalse соответствует целое значение 0, а указательному значению Ptrue – целое значение 5. Тогда выражения непрозрачного предиката, построенного на указателях, заменяются на индексные выражения по следующим правилам: 1. 2. 3. 4.
Рис. 9. Схема построения непрозрачного предиката из указателей.
105
106
Переменная pi заменяется на переменную qi целого типа, которая может принимать значения из множества {0,5}. Выражение e->neg заменяется на выражение a[b], где b – индексное выражение, соответствующее e. Выражение e->min[f] заменяется на выражение a[b + 1 + c], где b – индексное выражение, соответствующее e, а c – индексное выражение, соответствующее f. Выражение e->max[f] заменяется на выражение \V{a[b + 3 + c]}, где b – индексное выражение, соответствующее e, а c – индексное выражение, соответствующее f. ■
Определение 6. Пусть f : Σ m → Σ n . Пусть x = ( x1 , K , x m ) , y = ( y1 , K , y n ) , y = f (x) . Пусть
{1,K, n}
I ∈2
. Множество I – это множество индексов
интересующих нас компонент y . Переменная x k называется существенной относительно множества I, если существуют такие x1,K, xk −1 , xk +1 ,K, xm ∈ Σ $ и такая j∈I , что выполняется условие f j ( x1 , K , x k −1 ,0, x k +1 , K , x m ) ≠ f j ( x1 , K , x k −1 ,1, x k +1 , K , x m ) . Теорема 5. Пусть даны m, n, f : Σ m → Σ n , I ∉ 2{1,K,n} , k. Задача проверки
определить принадлежит ли vi множеству V in . Далее за полиномиальное время проверяется, что | Win |≤ p . Для доказательства NP-полноты покажем, как задача СУЩМНОЖ сводится к данной задаче. Пусть f – булевская функция f : Σ m → Σ n . Предположим для определённости, что f записана в виде КНФ. Для определённости будем считать, что x1 = v1 , K , x m = v m – переменные, используемые при вычислении функции, а y1 = vm +1, K , yn = v{m + n} – переменные, получающие своё значение. Пусть требуется проверить существенность переменной x k относительно
существенности переменной x k относительно множества I (СУЩМНОЖ) NP-
множества I.
полна. Доказательство. Доказательство принадлежности задачи к классу NP аналогично доказательству теоремы 1. Для доказательства NP-полноты заметим, что задача СУЩ является частным случаем данной задачи, если мы выберем I = {1, K , n} .
Введём m − 1 новую переменную z1 , K , z m −1 следующим образом: каждое
Пусть V = {v1 ,K , v k } – множество переменных замаскированной программы. Предположим, что базовый блок представляет собой вычисление булевской функции f : Σ m → Σ n . Пусть Vin ⊆ V , | Vin |= m – переменные, значения которых используются при вычислении f, а Vout ⊆ V , | Vout |= n – переменные, которые получают новые значения в результате вычисления. Если для некоторой переменной v ∈ Vin и v ∈ Vout , при вычислении используется старое значение переменной. Пусть Wout ⊆ Vout – множество «существенных» переменных на выходе из базового блока (например, это могут быть переменные, значения которых печатаются, или переменные, значения которых интересны нам по другой причине). Определим задачу анализа зависимостей по данным (ЗАВ) как задачу нахождения минимального множества переменных Win ⊆ Vin такого, что переменные из множества Vin − Win несущественны относительно Wout .
Если переменная x k существенна для f, то переменные x k , z1 , K , z m −1 окажутся
Данной оптимизационной задаче соответствует задача проверки свойств ЗАВ: дано множество булевских переменных V = {v1 ,K , v k } , булевская функция f : Σ m → Σ n над переменными из Vin , подмножество Wout ⊆ Vout , число p
( 0 ≤ p ≤ k ). Существует ли множество Win ⊆ Vin , | Win |≤ p переменные Vin − Win несущественны относительно Wout .
такое, что
Теорема 6. Задача ЗАВ NP-полна. Доказательство. Принадлежность задачи классу NP следует из того, что для каждого i ( 1 ≤ i ≤ k ) можем найти решение задачи СУЩМНОЖ, то есть
107
вхождение
xk
в
формулу
для
вычисления
f
заменим
выражением
x k ∨ z1 ∨ K ∨ z m −1 , а выражение x k – на выражение x k ∨ z1 ∨ K ∨ z m−1 . В
результате получим функцию f1 : Σ 2 m−1 → Σ n , которая также записана в КНФ. существенными для f1 . Если переменная x k несущественная для f, то все переменные x k , z1 , K , z m −1 несущественны для f1 . С другой стороны, если хотя бы одна переменная из множества {x k , z1 , K , z m−1} окажется несущественной в f1 , то и все переменные этого множества будут несущественными. В таком случае пусть p = m − 1 . Тогда, если задача ЗАВ для функции f 1 , множества переменных I и значения p даёт ответ «да», отсюда следует, что все переменные x k , z1 , K , z m −1 несущественны, а если ответ «нет», то все эти переменные существенны. Таким образом задача СУЩМНОЖ сводится к задаче ЗАВ, что показывает NPполноту последней. ■ Рассмотрим оптимизационную задачу ЗАВ. Она состоит в нахождении такого Win ⊆ Vin , что p =| Win | минимально. Из NP-полноты задачи проверки свойств следует NP-трудность оптимизационной задачи. Теорема 7. Если P ≠ NP , то для любого ρ > 1 не существует полиномиального ρ-приближённого алгоритма решения оптимизационной задачи ЗАВ. Доказательство. Пусть существует такое ρ > 1 , что существует полиномиально-ограниченный алгоритм A, который находит множество существенных переменных WinA такое, что p A =| WinA |≤ ρ ⋅ p ≤ n , где p – оптимальное решение. Очевидно, 0 ≤ p ≤ p A ≤ ρ ⋅ p ≤ n . 108
Рассмотрим следующую реализацию задачи СУЩ. Пусть f – булевская функция f : Σ m → Σ n . Предположим для определённости, что f записана в виде КНФ. Для определённости будем считать, что x1 = v1 , K , x m = v m – переменные, используемые при вычислении функции, а y1 = v m +1 , K , y n = v{m + n} – переменные, получающие своё значение. Пусть тре-буется существенность переменной x k относительно множества I.
проверить
Пусть [x] – минимальное целое число, не меньшее x. Введём l = m ⋅ [ ρ ] новую переменную z1 , K , z l следующим образом: каждое вхождение x k в формулу для вычисления f заменим на выражение x k ∨ z1 ∨ K ∨ z l , а выражение x k – на выражение x k ∨ z1 ∨ K ∨ z l . В результате получим функцию f1 : Σ m+l → Σ n , которая также записана в КНФ. Обозначим через Win0 оптимальное решение оптимизационной задачи ЗАВ для формулы f, а через Win1 – оптимальное решение для формулы f 1 . Обозначим WinA решение, найденное алгоритмом A для
f1 .
Пусть x k – существенная переменная. Тогда Win0 таково, что 1 ≤| Win0 |≤ m , Win1 таково, l
+ 1 ≤| WinA
что
l + 1 ≤| Win1 |≤ l ⋅ m ,
WinA
а
удовлетворяет
неравенству
|≤ l ⋅ m .
Пусть x k – несущественная переменная. Тогда Win0 таково, что 0 ≤| Win0 |≤ m − 1 , Win1
таково,
что
0 ≤| Win1 |≤ m − 1 ,
а
WinA
удовлетворяет
неравенству
0 ≤| WinA |≤ ρ ⋅ (m − 1) .
Заметим, что ρ ⋅ (m − 1) < l + 1 = m ⋅ [ ρ ] + 1 . В зависимости от | WinA | , полученного полиномиальным ρ-приближённым алгоритмом A мы можем определить, является ли x k существенной переменной или нет. Следовательно, P = NP . ■ Определение 7. Назовём «мёртвыми» все инструкции, которые относятся к вычислению несущественных переменных. Из доказанного выше немедленно следует, что задача выявления мёртвого кода в программе, состоящей из одного базового блока, NP-полна, и, более того, для любого ρ > 1 не существует ρ-приближённого полиномиального алгоритма выявления мёртвого кода. Переменные произвольных целых типов могут рассматриваться как набор переменных булевского типа. Например, переменная типа int может рассматриваться как 32 булевские переменные, для доступа к которым используются битовые операции. 109
5. Практическое обоснование устойчивости метода Устойчивость замаскированной программы к автоматическому анализу обосновывается следующими наблюдениями: • Многие методы статического анализа потоков данных не поддерживают анализ массивов с точностью до элемента. Для таких методов анализа все обращения к массиву локальных переменных будут равноправны, что приведёт к обнаружению ложных зависимостей по данным. • Для выявления зависимостей по данным между переменными глобального контекста требуется межпроцедурный анализ программы. При наличии большого числа глобальных переменных (как существенных, так и несущественных) и большого числа функции, глобальный анализ окажется либо неточным, либо будет требовать слишком много ресурсов. • То же самое замечание справедливо и для анализа указателей в область динамической памяти. Существующие методы анализа либо неточны, либо неприменимы к программам большого размера. Устойчивость замаскированной программы к ручному анализу обосновывается следующими соображениями: • Полустатический анализ (трассировка) замаскированной программы не позволяет в ней выявить явных закономерностей, таких как никогда не выполняющиеся дуги графа потока управления или регу-лярно выполняющиеся блоки, как диспетчер. Отсутствие явных статистических закономерностей делает полустатический анализ значительно менее эффективным, чем в случаях, рассмотренных в работе [8]. • Инструкции, обеспечивающие устойчивость замаскированной функции, распределены по всем базовым блокам функции, а не сконцентрированы на небольшом участке, как в схеме диспетчера. Поэтому демаскировка требует анализа всей функции, а не какой-то её части. • Большой размер замаскированных функций даже для относительно небольших функций исходной программы является трудным (если преодолимым) препятствием для ручного анализа. • Каждое преобразование, составляющее метод маскировки, параметризуемо в широких пределах (как правило, случайным образом). Знание, извлечённое в результате анализа одной замаскированной функции, может быть только отчасти применено к анализу другой замаскированной функции. • Граф потока управления имеет такую структуру, что его визуализация может дать неудовлетворительный результат. Алгоритмы визуализации могут отобразить граф потока управления таким образом, что это только затруднит понимание, либо вообще не смогут отобразить такой граф. Приведённые здесь рассуждения, конечно, не заменяют формальных доказательств утверждений о трудности демаскировки. Однако следует заметить, что используемый в настоящее время подход, заключающийся в 110
сведении какой-либо вычислительно-трудной задачи к задаче демаскировки программы, позволяет делать утверждения о трудности демаскировки методами статического анализа лишь в худшем случае. Кроме того, в настоящее время не существует математического аппарата, пригодного для оценки сложности полустатического и динамического анализа программ, который имеет существенную эвристическую компоненту.
6. Пример применения метода В качестве примера применения предложенного метода маскировки мы выбрали небольшую программу, которая решает задачу о 8 ферзях. Текст этой программы приведён на рис. 10. #include <stdio.h> static int up[15], down[15], rows[8], x[8]; static void print(void) { int k; for (k = 0; k < 8; k++) printf("%c ", x[k]+'1'); printf("\n"); } static void queens(int c) { int r; for (r = 0; r < 8; r++) if (rows[r] && up[r-c+7] && down[r+c]) { rows[r] = up[r-c+7] = down[r+c] = 0; x[c] = r; if (c == 7) print(); else queens(c + 1); rows[r] = up[r-c+7] = down[r+c] = 1; } } int main(void) { int i; for (i = 0; i < 15; i++) up[i] = down[i] = 1; for (i = 0; i < 8; i++) rows[i] = 1; queens(0); return 0; }
Рис. 10. Программа, решающая задачу о «8 ферзях».
Для маскировки мы выберем основную функцию queens этой программы. Граф потока управления функции queens приведён на рис. 11.
Рис. 11. Граф потока управления функции queens.
Результат маскировки функции queens приведён ниже. static void queens(int c)
111
112
{
goto L102; L101: q[7] = (q[7] + 2); if (q[7] 5); if ((v3)[q[9]] == 0) goto L111; if ((v7)[((q[9] - c) + 7)] != 0) goto L112; if (q[1] != 0) goto L111; if (q[4] > 1; goto L127; L128: q[12] = q[11]+q[2]-19; q[11] = q[11] % q[12]; L111: if (q[q[11]+4] >= 8) goto L45; q[3] = q[10]; q[q[11]+2] = ((q[8] + q[7]) + 1); q[9] = (q[10] + 1); q[1] = ((q[1] + c) + 2); q[q[11]+4] = (q[10] + 2); q[7] = ((7 + q[q[11]+2]) - q[1]); if ((v3)[q[3]] == 0) goto L94; q[4] = ((v8)[q[3]] + (v2)[((q[3] - c) + 7)]); if ((v7)[((q[3] - c) + 7)] == 0) goto L94; if (q[7] < 0) goto L96; if (q[7] Данной схеме DTD соответствует структурная схема (T,E,A,p,a,r), где: T≅{#PCDATA} E≅{{Product, product}, {Name, name}, {Developer, developer}, {Summary, summary} ,{Description, description },{Para, para },{List, list}, {Item, item}, {Link, link}} (здесь и далее тип элемента представляется как пара – {имя, Идентификатор}) A≅{(URL, CDATA, Required,url)} p: p(product)= (name, developer?, summary?, description?) p(name)= p(Developer)=p(Summary)= #PCDATA p(description)= (para | list)+ p(para)=p(Item) = (#PCDATA | link)* p(list)= Item+ p(link)= ε a: 196
a(link)={URL} a(product)=a(name)=...=a(list) ≅{} r=product Таким образом, можно установить, что при отображении в структурную схему каждому имени элемента в DTD соответствует уникальный тип элемента. Множество T состоит из типа #PCDATA (Термин PCDATA обозначает произвольный набор символов, интерпретируемый синтаксическим анализатором как текстовый узел). Каждому атрибуту соответствует свой тип атрибута, значения которого устанавливаются согласно свойствам типа атрибута в DTD. Наконец, отображение p задается исходя из регулярных выражений, определяющих структуру элемента DTD. Однако, стоит отметить, что ограничения целостности, которые могут присутствовать в DTD (атрибуты типа ID или IDREF) никоим образом не отображаются на структурную схему. Ограничения целостности мы обсудим в последнем разделе работы. Заметим, что в зависимости от регулярного выражения, соответствующего элементам их типы можно классифицировать следующим образом: элементы пустого содержания : p(e) ∈ {ε}, элементы, содержащие данные : p(e) ∈ reg(T)/{ε}, элементы элементного содержания: p(e) ∈ reg(id(E))/ {ε}, элементы смешанного содержания : p(e) ∈ reg({id(E),T})/{ reg(E)∪ reg(T)} В нашем примере, link – это элемент пустого содержания, name, developer, summary – элементы содержащие данные, product, description и list – элементного содержания, и наконец para и item – смешанного. Стоит заметить, что структурным схемам вида (T,E,A,p,a,r) однозначно соответствуют регулярные грамматики деревьев [13], если положить следующее: множество F и id(Е) являются нетерминальными символами грамматики, где F – множество типов текстовых узлов, id(E) – множество уникальных идентификаторов типов элементов; T и name(E) – терминалы грамматики, где name(E) – множество имен элементов; Отображение p(e) заменяется правилом продукции одного из следующих двух видов: x → a r, где x∈ id(E), a∈ name(E), r∈ reg({E,F}) или x → a ε,где x∈ F, a∈T. В следующем разделе мы опишем классы регулярных грамматик и их соответствие языкам спецификаций схем. Следующие определения описывают понятие валидируемости XML документа. Здесь и далее XML документ рассматривается в рамках модели XML, представленной в первой главе. 197
Определение 5 (Интерпретация). Интерпретация I XML документа D в терминах структурной схемы S=(T,E,A,p,a,r) – это набор отображений I=(φ,ϕ,σ), где: φ – это отображение ED, -множества элементов документа, на множество E; ϕ - это отображение AD, -множества атрибутов документа на множество A; σ - это отображение TD, - множества текстовых узлов документа на множество T. Также должны выполняться следующие условия: (согласование имен элементов) Пусть name – функция, ставящая в соответствие узлу документа его имя. Тогда ∀e∈ ED: name(e)= name (φ(e)); (согласование имен и значений атрибутов) Пусть value– функция, ставящая в соответствие узлу документа его значение. Тогда ∀a∈ AD: name(a)= name (ϕ (a)) , value(a) ∈dom(ϕ (a)), где dom(x) – это домен принимаемых значений типа атрибута; (согласование текстовых узлов) ∀t∈ TD: value(t) ∈σ (t) (согласование атрибутов с элементами) Пусть Ae={ai} i=[0,..,ne] – множество атрибутов элемента е. Тогда ∀e∈ ED: ∀i ∈ [0,.., ne] ϕ (ai) ∈a(φ(e)); (согласование обязательных атрибутов) φ-1(es) – множество элементов документа D, которые отображаются в тип элемента es. Также пусть R(es) – это подмножество a(es), в которое входят те и только те типы атрибутов, у которых проставлен идентификатор обязательности. Тогда ∀es∈E ∀as∈ R(es) ∀e∈φ1 (es) ∃a∈ Ae : ϕ(a)= as; (согласование корневого элемента) Для rD – корневого элемента документа D : φ( rD)=r; (согласование содержания элемента) Пусть Ce = [e0,..,en] – есть упорядоченная последовательность элементов и текстовых узлов, вложенных в e. Тогда ∀e∈ ED: I(e0),.., I(en) |= p(φ(e)), где I(ei) – это одно из двух отображений {φ,σ} (в зависимости от типа узла). Определение 6 (Валидность). Документ D является валидным документом для структурной схемы S (удовлетворяет схеме S), если существует интерпретация I в терминах S (Обозначается D|=S). Данное определение является ключевым для всего дальнейшего рассмотрения. Введем следующее обозначение: DB(S) – множество всех документов XML, удовлетворяющих данной схеме. Утверждение 1 (Корректность валидности). Пусть D – схема, выраженная на языке спецификации DTD и S – соответствующая ей структурная схема. 198
Тогда DB(D)⊆DB(S). Если схема D не содержит ограничений целостности, тогда DB(D)=DB(S). Для доказательства утверждения достаточно использовать свойства отображения схем DTD в структурные схемы (они очевидно следуют из примера 3). Аналогичные утверждения можно сформулировать и доказать для других языков спецификации схем. Заметим, что далеко не всегда существует единственная интерпретация одного и того же документа. Нижеследующий пример демонстрирует случай множественной интерпретации одного и того же документа. Пример 4. На Рис. 1 представлена структурная схема и документ XML.
Рис. 1. а) структурная схема; б) документ Документ XML содержит три элемента: A, B и C. Исходя из определения интерпретации, отображение I должно ставить в соответствие каждому элементу тип элемента из множества Е с таким же именем, как и у элемента. Поэтому в любой интерпретации элементу A соответствует тип a, элементу С тип с. А вот для элемента B существует два разных типа в которые он мог бы отображаться b1 и b Достаточно легко убедиться, что в обоих случаях будут выполняться условия интерпретации. Определение 7 (Тривиальные схемы). Структурная схема называется тривиальной, если существует и притом единственный XML документ, валидный для данной схемы. Утверждение 2 (Существование тривиальной схемы). Для любого XML документа существует тривиальная структурная схема, для которой данный документ валиден. Для доказательства утверждения достаточно воспользоваться индукцией по глубине документа XML – максимальному расстоянию от корня дерева XML до листа. База индукции при n= В этом случае документ XML должен иметь следующий вид (представление в терминах модели XML [1]) – Рис. 2.
199
Рис 2. XML документ глубины 1 Как видно из рисунка, все узлы дерева помимо корня являются листами. Для формирования структурной схемы, необходимо выполнить следующие действия: 1) Множество E формируется следующим образом: для каждого узла типа «элемент», мы создаем отдельный тип элемента. 2) Множество A формируется следующим образом: для каждого узла типа «атрибут», мы создаем отдельный тип атрибута. Доменный тип состоит из одного значения – значения данного узла в документе. 3) Множество T формируется следующим образом: для каждого текстового узла в документе мы создаем отдельный домен, состоящий только из одного значения. 4) Отображение a задается по следующим правилам: для любого типа элемента e – множество a(e) состоит из типов атрибутов, соответствующих атрибутам того элемента XML, который задавал e. 5) Отображение e задается по следующим правилам: для любого типа элемента e – p(e) – это выражение вида (e0,..,en) где ei это либо тип элемента, либо домен, задаваемый i-м дочерним узлом того элемента XML, который задавал e. 6) Тип элемента r (корневой тип) задается корневым элементом дерева XML. Легко убедиться, что исходный документ удовлетворяет данной схеме. Также любой XML документ, удовлетворяющий данной схеме, совпадает с исходным документом. То есть схема является тривиальной. Индуктивный переход осуществляется следующим образом. Пусть утверждение доказано для документа, максимальная глубина которого равна n. Пусть у нас есть документ XML глубины n+1. В терминах XML модели, его можно представить в виде дерева глубины n+1. Рассмотрим множество поддеревьев, с корнями в дочерних узлах корневого документа исходного дерева. Их максимальная глубина не превышает n. По предположению индукции им ставятся в соответствие тривиальные схемы. Общая схема формируется путем объединения множеств E,T,A каждой из этих тривиальных 200
схем и продлением отображений a и p . Затем мы формируем еще один тип элемента r, соответствующий корню исходного XML документа, и продляем отображения a и p на него. Отображение a(r) возвращает множество атрибутов корневого элемента, а p(r)=(r0,..,rn), где ri – корневой тип элемента тривиальной схемы, порожденный i-м узлом. Способ создания тривиальной схемы, использованный в утверждении 2, задает инъективное отображение множества документов XML на множество схем. Этот результат используется в работе [15] для реализации алгоритмов трансляции выражений алгебры управления структурными схемами в выражения языка запроса к данным XML. Легко показать, что все домены из множества T – доменных типов тривиальной схемы содержат в точности одно значение. Лемма 1 (Достаточное условие тривиальности). Любая схема S=(T,E,A,p,a,r) такая, что для любого типа элементов e, регулярное выражение p(e) имеет вид r1,..,rn, где ri есть символы базового алфавита, является тривиальной или пустой схемы.
3. Классы регулярных грамматик В этом разделе мы приводим классификацию структурных схем. Данный метод заимствован из работы [13], где он используется для классификации грамматик деревьев. Определение 8 (Локальные структурные схемы). Структурная схема называется локальной, если не существует двух типов элементов с одинаковым именем. Структурная схема из примера 3 является локальной, в то время как схема из примера 4 не является таковой. Следующее утверждение выполняется для локальных схем. Утверждение 3 (Единственность интерпретации). Пусть S=(T,E,A,p,a,r) локальная структурная схема и XML документ D валиден для S. Пусть также любые два домена из множества Т не пересекаются и для любого типа элемента e, мультимножество имен типов атрибутов из множества a(e) содержит только уникальные значения. Тогда существует, и, притом единственная интерпретация документа D в терминах S. Существование интерпретации следует из самой формулировки утверждения. Для доказательства единственности воспользуемся формулировкой интерпретации. Из правила согласования имён элементов, и локальности схемы следует, что в любой интерпретации каждый элемент документа XML должен отображаться на один и тот же тип элемента, так как имена всех типов уникальны. Из того, что любые два домена не пересекаются и из свойства согласования текстовых узлов следует, что в любой интерпретации каждый узел документа XML должен отображаться на один и тот же домен. Таким 201
образом, достаточно проверить, что отображение атрибутов сохраняется в любой интерпретации. Это следует из свойств согласования атрибутов с элементами, согласования имен и значений атрибутов и из того, что для любого типа элемента e, мультимножество имен типов атрибутов из множества a(e) содержит только уникальные значения. Прежде чем описать следующий класс структурных схем, приведем следующее определение, относящееся к регулярным выражениям: Определение 9 (Допустимые символы). Пусть r- регулярное выражение над множеством M. Тогда ΔM(r) – это множество, содержащее все элементы из M, которые присутствуют в записи регулярного выражения. Например, если E={0,1,2}, то ΔM((0*,1*))= {0,1} Теорема 2 (Критерий допустимости). Пусть r- регулярное выражение над E. Тогда
∀e∈E: e∈ΔM(r) ⇔ ∃ s=[e0,..,ei-1,e,ei+1,..,en]: s|=r Определение 10 (Однотипные структурные схемы). Структурная схема S=(T,E,A,p,a,r) называется однотипной, если для любого типа элемента e, все типы элемента из множества ΔE(p(e)) обладают разными именами. Определение 11 (Ограничено-однотипные структурные схемы). Структурная схема S=(T,E,A,p,a,r) называется ограниченно-однотипной, если для любого типа элемента e, выполняется следующее условие: ∀s1=(e0,..,en), ∀ s2=( e’0,..,e’m), где s1|=p(e) и s2|=p(e), и ∀ i: ∀j Определение 19 (Конъюнктивно-множественные регулярные выражения). Конъюнктивно-множественные (к.-м.) регулярные выражения над множеством E (regKM(E))определяются следующим образом: 1) ε - к.-м. регулярное выражение, где ε обозначает «пустой список». 2) ∀e ∈ E: e- к.-м. регулярное выражение. 3) Если r1 – к.-м. регулярное выражение, то (r1), r1*- к.-м. регулярные выражения. 4) Если r1 и r2– к.-м. регулярные выражения, то r1, r2 - к.-м. регулярные выражения. Определение 20 (Первая нормальная форма). Схема S=(T,E,A,p,a,r) представлена в первой нормальной форме (эквивалентная форма), если : ∀e ∈ E p(e)=r0|..|rn , где ∀i ri ∈ regKM({id(E),T}) Teoрема 5 (Существование первой нормальной формы). Для любой схемы S=(T,E,A,p,a,r) существует схема эквивалентная ей, которая представлена в первой нормальной форме. Для доказательства этой теоремы следует воспользоваться следствием 1 из теоремы 3. Пусть e – некий элемент схемы S=(T,E,A,p,a,r). Соответственно p(e) – регулярное выражение. Используя эквивалентные преобразования регулярных выражений r?≅r|ε (3.1.2) и r+≅r*,r (3.1.3) мы приходим к регулярному выражению, соответствующему исходному, но не содержащему операций ? и +. После чего следует воспользоваться преобразованиями (r1| r2),r3≅ ( r1, r3)|( r1, r2) (3.1.6) и (r1| r2)* ≅ ( r1*, r2*)* (3.1.8), после которых 208
операция конкатенации (“|”) «поднимается». Таким образом, для любого типа элемента e, p(e) преобразуется в выражение p’(e) вида r0|..|rn, где ∀i ri ∈ regKM({id(E),T}). В силу следствия 1 новая схема S’=(T,E,A,p’,a,r), представленная в первой нормальной форме, эквивалентна схеме S. Следует заметить, что для регулярных выражений с использованием операции позитивного замыкания (“+”) вместо операции Клини (“*”)теорема о существовании нормальной формы также верна. Определение 19’ (Конъюнктивно-множественные регулярные выражения). Конъюнктивно-множественные (к.-м.) регулярные выражения над множеством E (regKM(E))определяются следующим образом: 1) ε - к.-м. регулярное выражение, где ε обозначает «пустой список»; 2) ∀e ∈ E: e- к.-м. регулярное выражение; 3) Если r1 – к.-м. регулярное выражение, то (r1), r1+- к.-м. регулярные выражения. Если r1 и r2 – к.-м. регулярные выражения, то r1, r2 – к.-м. регулярные выражения. Принимая альтернативное определение конъюнктивно-множественных регулярных выражений, доказательство теоремы 5 частично меняется. Так, вместо преобразования r+≅r*,r используется r*≅r+|ε (3.1.9). А вместо преобразования (r1| r2)* ≅ ( r1*, r2*)* для поднятия конкатенации применяется (r1|r2)+ ≅ ( r1+,r2+)+|( r2+, r1+)+| r1+| r2+|( r1+, r2+)+,r1+|( r2+, r1+),r2+ (3.1.17) Пример 6. Приведем к первой форме регулярное выражение: преобразования:
r0|..|rn , где ∀i ri ∈ regKM({id(E),T}) следующее ((b|c)?,(f?,b*)*), используя эквивалентные
(b|c)?,(f?,b*)*≅(b|c|ε),((f|ε),b*)*≅(b|c|ε),((f,b*)|(b*))*≅(b|c|ε),((f,b*)*,(b**))*≅ (b|c|ε),((f,b*)*,b*)*≅(b|c|ε),((f,b*)*)*≅(b|c|ε),(f,b*)*≅b,(f,b*)*| c,(f,b*)*| (f,b*)*.
5.2. Вторая нормальная форма Определение 21 (Конъюнктивные регулярные выражения). Конъюнктивные (к.) регулярные выражения над множеством E (regK(E))определяются следующим образом: 1) ε - регулярное выражение, где ε обозначает «пустой список»; 2) ∀e ∈ E: e- к. регулярное выражение; 3) Если r1 – к. регулярное выражение, то (r1)-к. регулярные выражения; 4) Если r1 и r2– к. регулярные выражения, то r1, r2 - тоже к. регулярное выражение; 5) Если r =(e0,..,en) , где ∀i : ei∈ E, то r* и r+ - к. регулярные выражения. Определение 22 (Вторая нормальная форма). Схема S=(T,E,A,p,a,r) представлена во второй нормальной форме (слабо-эквивалентная нормальная форма), если: 209
∀e ∈ E p(e)=r0|..|rn , где ∀i ri ∈ regK(E) Teoрема 6 (Существование второй нормальной формы). Для любой схемы S=(T,E,A,p,a,r) существует схема слабо-эквивалентная ей, представленная во второй нормальной форме. Для доказательства этой теоремы, необходимо воспользоваться результатами Теоремы 5. Для исходной схемы S существует эквивалентная схема S’, структурные ограничения которой имеют вид r0|..|rn , где ∀i ri ∈ regKM(E). Далее, для каждого ri мы воспользуемся преобразованием (r1*, r2)*≈ ε| r1*, r2+ (3.2.2) для уменьшения вложенных операторов * и +. После чего, если выражение r2 содержит операцию *, то воспользуемся преобразованием (3.1.3) для замены оператора r2+ на r2*,r Таким образом, используя индукцию по длине регулярного выражения и по глубине «вложенности» операций * и +, приходим к доказательству теоремы. Используя преобразования (3.2.1) и (3.1.11)-(3.1.16) можно добиться существенного упрощения выходной формы. Пример 7. Приведем регулярное выражение из предыдущего примера ко второй нормальной форме. (b|c)?,(f?,b*)*≅b,(f,b*)*| c,(f,b*)*| (f,b*)*≈(b|c|ε)(b*f+|ε)≈b+f+|b|cb*f+|c|b*f+|ε≈ b|cb*f+|c|b*f+|ε (в последнем переходе использовалось эквивалентное преобразование r*|r+≅r*).
5.3. Третья нормальная форма Определение 23 (Простые регулярные выражения). Простые (п.) регулярные выражения над множеством E (regS(E))определяются следующим образом: 1) ε -п. регулярное выражение, где ε обозначает «пустой список»; 2) ∀e ∈ E: e- п. регулярное выражение; 3) Если r1 и r2– п. регулярные выражения, то r1, r2 - тоже п. регулярное выражение; 4) Если r =e , где e∈ E, то r* ,r? r+ - п. регулярные выражения. Определение 24 (Третья нормальная форма). Схема S=(T,E,A,p,a,r) представлена во третьей нормальной форме (простая нормальная форма), если: ∀e ∈ E p(e)=r , где r ∈ regS(E) Teoрема 7 (Существование третьей нормальной формы). Для любой схемы S=(T,E,A,p,a,r) существует схема, являющаяся ее упрощением, и представленная в третьей нормальной форме. Для доказательства этой теоремы следует воспользоваться упрощающими преобразованиями для построения новой структурной схемы, являющейся упрощением исходной схемы и представленной в третьей нормальной форме. Для доказательства того, что такая схема существует необходимо воспользоваться индукцией по длине регулярного выражения. 210
Пример 8. Рассмотрим регулярное выражение из примера 7. (b|c)?,(f?,b*)*→(b?,c?)?,f?*,b**→b??,c??,f?*,b**→b?,c?,f*,b*→b*,c?,f* В отличие от первой и второй нормальных форм, для третьей нормальной формы можно сформулировать и доказать теорему единственности. Пусть на множестве E введено отношение порядка. Тогда, определим простые упорядоченные регулярные выражения следующим образом. Определение 25 (Простые упорядоченные регулярные выражения). Простые упорядоченные (п. у.) регулярные выражения над множеством E (regSO(E))определяются следующим образом: 1) ε -п. у. регулярное выражение, где ε обозначает «пустой список»; 2) ∀e ∈ E: e- п. у. регулярное выражение; 3) Если r =e , где e∈ E, то r* ,r? r+ - п. у. регулярные выражения; 4) Если r1 и r2– п. регулярные выражения, и ∀a1,a2 ∈E, таких, что ∃s1= [e0,..,ei-1,a1,ei+1,..,en], s2= [e’0,..,e’i-1,a2,e’i+1,..,e’n] s1|=r1, и s2|=r2 верно, что e1<e2, то r1, r2 - тоже п. у. регулярное выражение. Определение 24’ (Третья нормальная форма). Схема S=(T,E,A,p,a,r) с заданным отношением порядка на множестве E представлена в третьей нормальной форме (простая нормальная форма), если: ∀e ∈ E p(e)=r , где r ∈ regSO(E) Если не существует двух типов элементов с одинаковым именем, то отношение порядка на множестве E может соответствовать лексикографическому порядку на множестве имен элементов. Teoрема 8 (Существование и единственность третьей нормальной формы). Для любой схемы S=(T,E,A,p,a,r), такой, что на множестве Е задано отношение порядка, существует и единственная схема S’=(T,E,A,p’,a,r) , представленная в третьей нормальной форме, являющаяся ее упрощением.
6. Применение Нормальных форм В этом разделе мы приводим краткий обзор способов применения нормальных форм при решении типичных задач управления данными. Валидация XML документов. Валидация XML документов является одним из наиболее распространенных средств управления XML документами. Валидация документов используется при создании XML-СУБД, обмене сообщениями, трансформации XML документов. Одна из основных проблем при валидации документа заключается в том, что до сих пор не существует единого стандарта для XML схем: схемы могут быть выражены на языках DTD, XML Schema, Relax NG, и т.д. Однако на сегодняшний день существует ряд исследований, ориентированных на создание универсального валидатора. В этих работах схемы представляются в виде регулярных грамматик деревьев, аналогичных структурным схемам. Основная часть алгоритмов валидации – разбор списка потомков – заключается в следующем: определить 211
удовлетворяет ли упорядоченный список потомков данного элемента его модели содержания (структурному ограничению). Преобразование схем к первой нормальной форме, как впрочем, и применение эквивалентных преобразований имеют следующее значение для алгоритмов валидации: 1) После преобразования к 1НФ операции ? и + устраняются, что позволяет воспользоваться алгоритмами валидации «классических» регулярных выражений, определяемых как замыкание операций “*”, ”|”, ”,” над базовым алфавитом. 2) Все операции конкатенации (“|”) становятся внешними, что сильно структурирует модель содержания. Это приводит к упрощению алгоритма разбора списка потомков. Сопоставление схем. Задача сопоставления схем заключается в поиске эквивалентных частей в разных схемах. Решение этой проблемы применяется для интеграции данных. В текущее время ведутся исследования по автоматическому поиску зависимостей [16]. Методы автоматического сопоставления схем можно классифицировать следующим образом [16]: - Поиск в схемах/поиск в данных. Алгоритмы сопоставления схем могут исследовать зависимости только в схемах или зависимости по удовлетворяющим XML-документам. - Элементный/структурный поиск. Поиск зависимостей может применяться либо к отдельным элементам, либо к структурам (фактически, учитываются или нет структурные ограничения). - Лингвистический/логический поиск. Поиск зависимостей осуществляется по лингвистическому принципу (например, по именам элементов) или по семантическим ограничениям (например, по типам данным). В первую очередь, приведение схем к нормальным формам оказывает влияние на элементный лингвистический поиск. Приведение схем к 3НФ с заданным отношением порядка существенно упрощает поиск зависимостей и фактически сводит задачу к поиску изоморфных поддеревьев в деревьях с именованными узлами и с ребрами, размеченными «*», «+» и «?». Подробнее способы сопоставления схем будут описаны в следующей главе. Трансляция моделей. Одна из основных задач, встречающихся при создании систем хранения, управления и интеграции данных, заключается в трансляции моделей, в терминах которых экземпляры данных предоставляются, в термины «единой» модели данных. Так, несмотря на то, что XML и языки запросов к XML-данным завоёвывают в последнее время всё большую популярность, потребность хранения XML данных в «традиционных» СУБД и, соответственно, необходимость трансляции до сих пор остаётся. Обосновано это тем, что многолетний опыт, накопленный при изучении и реализациях реляционных и объектно-ориентированных СУБД невозможно игнорировать. 212
Рассмотрим основные виды трансляции данных, определенных в терминах модели XML.
6.1. XML->Relational Одним из основных направлений исследования методов трансляции моделей является трансляция XML-модели данных в реляционную [9,10]. Отличительными особенностями реляционной модели данных являются: - отсутствие упорядоченности кортежей и атрибутов, - трехуровневая модель (отношение-кортеж- атрибут), в отличие от произвольной глубины XML схем, - отсутствие атрибутов, имеющих своим значением множество, - отсутствие рекурсии. Существует различные методы автоматического представления XML документов в реляционных СУБД: - Хранение XML- данных в BLOB. - Модельно-ориентированная трансляция. Данный вид трансляции не зависит от структурных ограничений, определенных в схеме схемы, а целиком опирается на свойства модели данных XML [20]. - Трансляция, ориентированная на данные. Данные алгоритмы трансляции оперируют с XML-данными, не представленными никакой схемой [19]. На начальном этапе трансляции производится вывод схемы, представляющей XML-данные. - Трансляция с оценкой эффективности. Алгоритм трансляции, представленный в работе [18], анализирует способ трансляции XMLданных таким образом, чтобы запросы, предопределенные приложением, выполнялись наиболее эффективно. - Структурно-ориентированная трансляция. Эта трансляция опирается на информацию, полученную из XML-схемы. В алгоритмах этого типа [9,10] используются структурные ограничения, явно присутствующие в схеме, а также выводятся неявные ограничения, исследуемые в процессе анализа схемы. Проведенные исследования [9,10], касающиеся проблемы структурноориентированной трансляции из XML в реляционную модель выявили ряд возникающих трудностей и показали методы решения: 1) Наличие оператора конкатенации в модели содержания. Например, пусть у нас есть определение модели содержания элемента . Переводя в реляционную модель, наиболее близким отображением будет таблица r с двумя полями: a и b. Однако эта схема не будет отражать тот факт, что в элементе r может встретиться либо a либо b. Поэтому необходимо добавить семантическое ограничение: «если значение в поле a непустое, то значение в поле b должно быть пустым и наоборот». Если есть вложенные конкатенации (то есть конкатенации не на самом верхнем 213
уровне регулярного выражения), мы должны использовать 1НФ для вынесения конкатенаций на самый верхний уровень. 2) Наличие оператора Клини (*). Если в модели содержания какого-то узла встречается другой элемент с оператором * (), то в этом случае для элемента придется создавать отдельное отношение. Если же структура содержит вложенные операторы * (
6.2. XML->Semistructured Другим направлением трансляции XML является трансляция в полуструктурированные и объектно-ориентированные модели. Существенное отличие этих моделей от реляционной заключается в том что, данные представляются в виде ориентированного графа с именованными узлами. Последнее свойство, как правило, снимает необходимость использования 2НФ и 3НФ. Поэтому, в общем случае транслируется схема, приведенная к 1НФ или непосредственно исходная схема. Например, для полуструктурированной модели данных YAT [14] мы использовали представление структурных схем в 1НФ, в силу особенностей данной модели (отсутствие операторов + и ? и наличие оператора | с ограниченными свойствами)[15].
6.3. Relational -> XML В работе [21] перечислены основные методы автоматизации представления реляционных данных в терминах модели данных XML: - Плоская трансляция. Данный подход является наиболее тривиальным способом отображения схемы реляционной базы данных в XML-схему. Трансляция задается следующим образом: 1. Имя отношения переходит в элемент с таким же именем. Содержимое корневого элемента состоит из произвольного набора элементов, имена которых соответствуют именам отношения в базе данных. 2. Каждому отношению базы данных ставится в соответствие тип элемента, имя которого совпадает с именем отношения. Множество типов атрибутов, относящихся к данному типу элемента, соответствуют 214
паре {тип домена, имя атрибута} из заголовка отношения. - Вложенная трансляция (Nesting-Based Translation). Основной недостаток плоской трансляции заключается в том, что при создании XML-схемы не используются такая структурная возможность для моделирования XML, как наличие повторяющихся подэлементов. Вложенная трансляция устраняет этот недостаток. В работе [22] показано, каким образом достигается вложенная трансляция для отношений, представленных в 3НФ. - Трансляция с использованием «зависимостей по включению». Термин «зависимость по включению» используется в теории баз данных [21] как обобщение внешних ключей. Использование трансляции такого типа [21] позволяет вкладывать элементы, построенные из разных отношений друг в друга, исходя из информации о внешних ключах отношений и прочих зависимостей по включению. Если у отношения существует внешний ключ «на себя», получаемая схема XML будет рекурсивной. Дополнительную информацию об этих и прочих видах трансляции из модели XML в другие модели и наоборот, можно получить в работе [21].
7. Ограничения целостности XML В последнем разделе главы мы опишем различные виды ограничений целостности для XML-данных. Эти исследования, направленные на систематизацию логических способов задания ограничений целостности, были проведены в работах [8,12]. Итак, пусть S=(T,E,A,p,a,r) – Структурная схема, D- произвольный XMLдокумент, валидируемый S. Рассмотрим следующие логические выражения, являющиеся определениями ограничений целостности над схемой S. Определение 26 (Ограничение ключа). Ограничением ключа λ над схемой S=(T,E,A,p,a,r) называется логическое выражение вида K(e)→e, где e∈E, K(e)⊆a(e). Определение 27 (Документ удовлетворяет ограничению ключа). XMLдокумент D, валидируемый схемой S=(T,E,A,p,a,r) удовлетворяет ограничению ключа λ=K(e)→e, если для любой интерпретации I=(φ,ϕ,σ) выполняется следующее условие: ∀x,y∈φ-1(e):
I (x.l = y.l) →x≡y
l∈K(e)
где x.l – это прообраз типа атрибута l, являющийся атрибутом элемента x. Под равенством атрибутов в документе, здесь и далее, подразумевается равенство значений. 215
Пример 9.
Рис. 3. Пример документа XML. На Рис. 3 представлена документ XML, удовлетворяющий следующей структурной схеме: T≅{a} E≅{{a, A}, {b, B}} A≅{(C,c, CDATA, Required), (D,d, CDATA, Required)} p:p(a)= (b*) p(b)= ε a:a(b)={C,D} a(a)={} r=a. Из утверждения 3 следует, что существует единственная интерпретация документа в терминах этой схемы. Рассмотрим следующее ограничение ключа λ= {C}→B. Существует два элемента c именем b, у которых значения атрибута c совпадают. Следовательно, документ не удовлетворяет данному ограничению ключа. Однако тот же самый документ удовлетворяет другому ограничению ключа: {С,D}→B. Определение 28 (Ограничение включения). Ограничением включения λ над схемой S=(T,E,A,p,a,r) называется логическое выражение вида L1(e1)→ L2(e2) , где e1,e2∈E, L1и L2 упорядоченные множества, такие что L1⊆a(e1), L2⊆a(e2), | L1|=| L2|. Определение 29 ( документ удовлетворяет ограничению включения). XMLдокумент D, валидируемый схемой S=(T,E,A,p,a,r) удовлетворяет ограничению включения λ= L1(e1)→ L2(e2), если для любой интерпретации I=(φ,ϕ,σ) выполняется следующее условие: ∀x∈φ-1(e1) ∃ y∈φ-1(e2):
I (x.i = y.i)
i =[1,|L1 | ]
где x.i и y.i – это прообразы i-х по порядку типов атрибута из упорядоченных множеств L1(e1) и L2(e2) , являющихся атрибутами элементов x и y соответственно. Пример 10. Рассмотрим структурную схему и XML-документ из предыдущего примера. Приведенный XML-документ удовлетворяет следующему ограничению включения: λ={C}B →{D}B. 216
Определение 30 (Ограничение внешнего ключа). Ограничением включения λ над схемой S=(T,E,A,p,a,r) называется комбинация ограничения включения L1(e1)→ L2(e2) и ограничения ключа L2(e2) → e. Определение 31 (Документ удовлетворяет ограничению внешнего ключа). XML-документ D, валидируемый схемой S=(T,E,A,p,a,r) удовлетворяет ограничению внешнего ключа λ= L1(e1)→ L2(e2); L2(e2) → e2, если он удовлетворяет обоим ограничениям целостности, составляющим ограничение внешнего ключа для любой интерпретации. После того, как мы определили логические выражения, предназначенные для формулирования ограничений целостности, мы можем сформулировать определения, соответствующие формальным определениям из раздела 1.6 (определение 1.4-1.7). Определение 32 (Схема данных XML). Схема данных XML – это пара (S,E), где S – это структурная схема, а E- множество ограничений целостности над S, сформулированных в виде логических выражений следующего вида – ограничение ключа, ограничение включения, ограничение внешнего ключа. Определение 33 (Валидируемость документа XML). XML-документ D валидируется схемой (S,E), если D|=S и D удовлетворяет всем ограничениям целостности из E.
8. Заключение Основной целью данной работы является изучение свойств схем данных XMLдокументов. В работе представлено формальное определение структурных схем и изучены методы преобразования схем-экземпляров, обладающих свойством сохранения той или иной семантики. Также в работе представлены нормальные формы структурных ограничений и доказаны теоремы существования нормальных форм для произвольной структурной схемы. Как уже было показано выше, в большинстве исследований, касающихся проблем управления данными и моделями XML тем или иным образом можно установить класс семантических правил, которыми можно пренебречь для эффективности реализации. Нормальные формы схем как раз и являются способом приведения схемы к более простому виду с потерей части семантики. В заключительной части работы мы описываем способы поддержки ограничений целостности. В данный момент нами разработаны алгоритмы преобразования схем DTD и Relax NG в структурные схемы с последующим приведением к нормальным формам. На следующем этапе мы планируем расширить список поддерживаемых языков спецификаций схем (XDR, XML Schema). Затем мы планируем перейти к более детальному изучению способов применения нормальных форм схем на практике.
217
Литература 1. Extensible Markup Language (XML) 0 (Second Edition) W3C Recommendation 6 October 2000. http://www.w3.org/TR/2000/REC-xml-20001006 2. Бумфрей Ф. , Диренцо О. И др. XML:Новые перспективы WWW. М.:ДМК 2000 3. Bourret R. XML and Databases, http://www.rpbourret.com/xml/XMLAndDatabases.htm 4. Suciu, D. Semistructured Data and XML. In Proc. of the Int. Conf. on Foundations of Data Organization. 1998. 5. H. S. Thompson, D. Beech, M. Maloney, and N.Mendelsohn (Eds). XML Schema Part 1: Structures, W3C Recommendation, May 200http://www.w3.org/TR/xmlschema-1/. 6. J. Clark and M. Murata (Eds). “RELAX NG Tutorial”.OASIS Working Draft, Jun. 200 http://www.oasisopen.org/committees/relax-ng/tutorial.html. 7. Microsoft. XML Schema Developer’s guide Internet document, May 2000 http://msdn.microsoft.com/xml/XMLGuide/schema-overwiew.asp 8. W. Fan and L. Libkin. On XML integrity constraints in the presence of dtds. In Proc. ACM PODS, 200 9. J. Shanmugasundaram, K. Tufte, G. He, C. Zhang, D. DeWitt, and J. Naughton. “Relational Databases for Querying XML Documents: Limitations and Opportunities”. In VLDB, Edinburgh, Scotland, Sep. 1999. 10. Murali Mani, Dongwon Lee, XML to Relational Conversion using Theory of Regular Tree Grammars , Proceedings of the 28th VLDB Conference,Hong Kong, China, 2002 11. D.Florescu, D. Kossmann, Storing and Querying XML Data Using RDBMS , IEEE Data Eng. Bulletin, 22(3):27-34, Sep 1999 12. W. Fan and J. Simeon. "Integrity Constraints for XML". In ACM PODS, Dallas, TX, May 2000. 13. M. Murata, D. Lee, and M. Mani. Taxonomy of XML Schema Languages using Formal Language Theory. In Extreme Markup Languages, Montreal, Canada, 2001 14. S. Cluet et al. "Your mediator needs data conversion!." In Proc. of the ACM SIGMOD Conf. on Management of Data, Washington, USA, pp. 177--188, 1997. 15. L. Novak Mediation system implementation based on specification of XML schema integration: generic approach. To be appeared 16. E. Rahm, and P.A. Bernstein. A Survey of Approaches to Automatic Schema Matching. VLDB Journal 10(4):334-350. Dec. 200 17. Dongwon Lee, Wesley W. Chu.Comparative Analysisof Six XML Schema Languages. SIGMOD Record 29(3): 76-87 (2000). 18. P. Bohannon, J. Freire, P. Roy, and J. Simeon. “From XML Schema to Relations: A Cost-Based Approach to XML Storage”. In IEEE ICDE, San Jose, CA, Feb. 200 19. A. Deutsch, M. F. Fernandez, and D. Suciu. “Storing Semistructured Data with STORED”. In ACM SIGMOD, Philadephia, PA, Jun.1998. 20. T. Shimura, M. Yoshikawa, and S. Uemura. “Storage and Retrieval of XML Documents using Object-Relational Databases”. In Int’l Conf. on Database and Expert Systems Applications (DEXA), pp. 206–217,Florence, Italy, Aug. 1999. 21. Dongwon Lee, Murali Mani, Frank Chiu, Wesley W. Chu, “NeT and CoT: Translating Relational Schemas to XML Schemas using Semantic Constraints “,CIKM, 2002 22. D. Lee, M. Mani, F. Chiu, and W. W. Chu., “Nesting-based Relational-to-XML Schema Translation”. In Int’l Workshop on the Web and Databases (WebDB), Santa Barbara, CA, May 2001.
218
Автоматическая генерация графических пользовательских интерфейсов доступа к интегрированным данным на основе диаграмм классов UML∗ Д.Р. Ширяев
1. Введение Система BizQuery [1], разрабатываемая группой MODIS ИСП РАН, позволяет интегрировать разнородные источники данных. В системе применяется подход виртуальный интеграции. При виртуальной интеграции данные из различных источников приводятся к одной схеме, и пользователь “видит” данные в терминах этой схемы. При этом внутри интеграционной системы данные не хранятся. Для выполнения запроса система выделяет из исходного запроса подзапросы к источникам, и после выполнения этих частичных запросов в интеграционной системе происходит соединение полученных результатов. Запросы к системе можно формулировать на одном из двух языках запросов XQuery [2]и UQL [3]. Запросы на XQuery формулируются в терминах XML [4], а запросы на UQL – в терминах UML-модели [5]. Для удобной работы с интегрированными данными требуется обеспечить высокоуровневый доступ к ним в терминах предметной области. Для представления предметной области хорошо подходят и широко используются диаграммы классов UML – простое, мощное и выразительное средство для представления сущностей предметной области и связей между ними. Как было установлено при выполнении проекта BizQuery, информации, содержащейся в диаграмме классов UML, оказывается достаточно для построения высокоуровневого интерфейса доступа к интегрированным данным. Очевидно, что строить интерфейс вручную каждый раз для новой предметной области проблематично. В проекте BizQuery был предложен подход, при котором графические пользовательские интерфейсы (Graphic User Interfaces GUI) автоматически строятся по диаграмме классов UML-модели. Затем работа пользователя с данными производится в терминах предметной области,
∗
Работа частично поддерживалась грантом РФФИ 02-07-90300-в 219
понятных пользователю. При этом на каждом шаге навигации по модели интерфейс динамически перестраивается. В системе BizQuery за обеспечение взаимодействий с пользователями отвечает компонент Frontend. Этот компонент Frontend позволяет строить три различных вида интерфейсов: Form Generator (Forms, FG), Catalog Generator (Catalogs, CG) и GraphicMap (GM). Forms и Graphic Map являются декларативными интерфейсами, а Catalogs – навигационным. Используя декларативный интерфейс, пользователь формирует запрос путем композиции ограничений на значения атрибутов классов модели, и получает результат в виде экземпляров классов модели, удовлетворяющих наложенным ограничениям. С другой стороны, используя навигационный интерфейс, пользователь может получать все экземпляры заданного класса модели с последующей возможностью перехода по связям от данного класса к другим классам. Связи между классами определяются в диаграмме классов UML-модели. В графическом интерфейсе Forms пользователь выбирает класс, экземпляры которого он хочет получить (целевой класс), и формирует ограничения на значения атрибутов этого класса, а возможно, и на значения атрибутов классов, которые с ним связаны. В результате пользователь получает все экземпляры целевого класса, удовлетворяющие установленным ограничениям. В графическом интерфейсе Catalogs пользователь также выбирает класс, экземпляры которого он хочет получить (целевой класс). При этом пользователь получает все экземпляры данного класса. После этого можно получить все экземпляры одного из классов, связанных с данным. Таким образом, используя связи между классами, определенными в диаграмме классов UML-модели, пользователь может осуществлять “навигацию” по интегрированным данным. Важной особенностью интерфейсов Forms и Catalogs возможность их настройки в соответствии с потребностями пользователей. Пользователь может сам решить, как должен выглядеть его интерфейс, и написать соответствующий XSL-стиль. При использовании графического интерфейса Graphic Map пользователь видит всю диаграмму классов предметной области, может выбрать целевой класс и определить условия, которым должны удовлетворять интересующие его объекты целевого класса и объекты классов, связанных с целевым.
2. Генерация интерфейсов Первый этап. Подготовка UML-модели, соответствующей данной предметной области. 1. После обсуждения всех аспектов предметной области в среде Rational Rose [8] строится диаграмма класcов UML-модели (Рис. 1), соответствующая данной предметной области. 2. Диаграмма класcов UML-модели преобразуется в XMI-представление [9]. (Чтобы обеспечить возможность данного преобразования, было установлено 220
дополнение к Rational Rose «UnisysRoseXMLTools»). XMI-представления UMLмоделей, соответствующие различным предметным областям, сохраняются в репозитории BizQuery. mail mail_from : String mail_to : Str ing mail_date : String r ef_item : String
+catgraph
category name : String id_category : Integer
To Users Custom Styles
it em +mailbox 1..*
+refitem 1..* +items 1..*
+itemCategories
id : Integer featured : String location : String quantity : Float name : String pay_type : String shipping : String ref_region : String
Web Server
XSL Translator
1..* +itemref
Authorizer
1..* +categorie s
auction +persons
quantity : Integer type : String
1..*
person id_person : Integer name : String emailaddress : String phone : String street : String city : String province : String zipcode : Integer country : String homepage : String creditcard : String education : String income : Integer gender : String business : String age : Integer
Rubricator Catalog Generator
closed_auction
+seller
price : Float date : String
+watc hes
+personref
bid date : String time : String incr eas e : String id : Integer
Graphic Map
open_auction
+buyer +theperson
Form Generator
GML
initial : String res erve : Strin g cur rent : String priv acy : String start : String end : String id : String
FormsDTD
+bidder
GML Generator Dispatcher
1..*
Request Manager
Рис. 1. Диаграмма классов UML-модели.
Поток данных
Второй этап. Динамическая генерация интерфейсов по заранее построенным XMI-представлениям диаграмм классов. Процесс динамической генерации и использования интерфейсов показан на Рис. 2.
Поток команд
XMI
BQNet Client (SOAP) BQNet Interface
To Kernel Рис. 2. Динамическая генерация и работа графических интерфейсов компонента Frontend системы BizQuery.
221
222
2.1. Основные модули компонента Frontend системы BizQuery WebServer– поддерживает взаимодействия компонента Frontend системы BizQuery с пользователями. При реализации компонента Frontend использовался веб-сервер Jakarta Tomcat 3.3.1 Authorizer – модуль для авторизации пользователя. В форме авторизации вводится регистрационное имя пользователя и его пароль. Rubricator –обращается к ядру и получает дерево UML-моделей, доступных пользователю в соответствии с авторизацией. Пользователь выбирает UMLмодель, соответствующую интересующей его предметной области. Dispatcher – модуль, в котором загружается форма со списком классов выбранной метамодели. Из этого списка пользователь выбирает целевой класс. Также пользователь выбирает один из трёх интерфейсов (Forms, Catalogs и GraphicMap), в котором он будет работать. BQNet Client SOAP [11] – SOAP клиент для связи с ядром системы BizQuery. Catalog Generator – основной компонент интерфейса Catalogs. Form Generator – основной компонент интерфейса Forms. Graphic Map – основной компонент интерфейса GM. Request Manager – принимает UQL-запрос и через BQNet Client передаёт его ядру, получает результат запроса и передаёт его XSLT процессору для отображения. XSLT Translator [6] – используется для различных XSL преобразований в компоненте Frontend системы BizQuery, в том числе: • преобразует DOM (Document Object Model) [7] представление формы в HTML для отображения через Web Server; • преобразует XML файл результатов запроса в HTML для отображения через Web Server.
3. Сценарии динамической генерации и работы графических интерфейсов компонента Frontend системы BizQuery 1.
Пользователь через Web Server загружает Authorizer, вводит логин и пароль.
2.
Загружается Rubricator, через BQNet Client обращается к ядру и получает дерево UML-моделей, доступных пользователю в соответствии с авторизацией.
3.
Пользователь выбирает UML-модель, соответствующую интересующей его предметной области, эта модель загружается с сервера в виде заранее построенного XMI [9] представления диаграммы классов UML и переводится в специальное внутреннее представление на основе хэштаблиц. 223
4.
Загружается Dispatcher. Из списка классов выбранной UML-модели пользователь выбирает целевой класс. Кроме того, пользователь выбирает один из трёх интерфейсов (Forms, Catalogs, GraphicMap), который собирается использовать. Если выбран интерфейс Forms: 5f. По внутреннему представлению в соответствии с Forms DTD (см. приложение 1) строится DOM-представление выбранной метамодели. 6f. По DOM с учетом одного из стилей Custom Styles с помощью XSLT строится форма, соответствующая текущему классу, т.е. классу, информация о котором отображается в форме в данный момент (рис. 3). Первым текущим классом является целевой класс. 7f. Заполняется форма, соответствующая текущему классу. При переходе по связи сохраняется информация о заполненных значениях атрибутов текущего класса, имя связи, по которой происходит переход на другой класс, меняется текущий класс и осуществляется перестройка формы. В строку UQL-запроса добавляется запись. 8f. При нажатии кнопки Submit строится запрос и передаётся модулю Request Manager. 9f. Request Manager через BQNet Client передаёт запрос ядру и получает от него результат запроса. В соответствии с одним из стилей Custom Styles с помощью XSLT результат преобразуется в HTML и передаётся пользователю. Если выбран интерфейс Catalogs: 5c. Catalog Generator формирует запрос на выдачу всех экземпляров текущего класса и отдаёт его модулю Request Manager. Первым текущим классом является выбранный в Dispatcher целевой класс. 6с. Request Manager через BQNet Client передаёт запрос ядру, получает результат запроса, и отдаёт его модулю Catalog Generator. 7с. Catalog Generator, с помощью XSLT в соответствии со специальным стилем преобразует результат в XML документ, соответствующий Catalog DTD (см. приложение 2.) Это делается для того, чтобы пользователям было более удобно писать свои стили для преобразования результата в HTML. 8c. Далее с помощью XSLT в соответствии с одним из Custom Styles результат преобразуется в HTML и передаётся пользователю. Если количество выдаваемых экземпляров текущего класса велико, то они выдаются порциями. Для получения следующей порции достаточно нажать Next Portion. 7с. При каждом переходе по связи меняется текущий класс, строится запрос, производится обращение к модулю Request Manager, и всё повторяется, начиная с пункта 6с. Если выбран интерфейс Graphic Map:
224
5g. Из Dispatcher загружается апплет интерфейса GM, строящийся на основе специального внутреннего представления выбранной UML-модели и заранее сгенерированного gml-файла (см. приложение 3). 6g. Пользователь, осуществляя навигацию по метамодели, генерирует запрос, и далее, также как и в интерфейсе Forms, получает результат запроса.
Внизу формы расположены 3 кнопки: • `submit` – строит UQL запрос, и получает результат запроса, • `back` – возвращает к предыдущему классу, стирает последний критерий из запроса, • `reset` – стирает введённые значения атрибутов.
4. Полученные в результате генерации графические пользовательские интерфейсы
4.2. Интерфейс Catalogs
4.1. Интерфейс Forms Интерфейс Forms является наиболее привычным для пользователей. Пользователь заполняет формы в терминах предметной области и получает интересующую его информацию опять же в терминах предметной области. Внешний вид этого интерфейса зависит от используемого XSL стиля. Приведем пример формы, построенной с использованием стиля по умолчанию. В правой части формы (Рис. 3) находится информация о текущем классе (current business class) и список атрибутов текущего класса. Ограничения на текущий класс накладываются путём заполнения полей атрибутов.
Внешний вид этого интерфейса также зависит от используемого XSL стиля. Приведем пример интерфейса, построенного с использованием стиля по умолчанию (Рис. 4). В окне интерфейса Catalogs пользователь получает все экземпляры текущего класса. Если экземпляров много, то они выдаются порциями. Для получения следующей порции экземпляров необходимо нажать “Next Portion”. Каждый экземпляр класса представлен в виде отдельной таблицы. В левой части таблицы изображены атрибуты классов, а в правой части ссылки на связанные классы. Ссылка содержит имя роли и имя целевого класса. Экземпляры можно фильтровать по имени класса или по значению атрибутов. В процессе навигации по каталогам строится запрос, отправляется на сервер, и результаты запроса отображаются в том же окне.
Рис.3. Интерфейс Forms. В левой части формы располагается список классов, с которыми есть связи у текущего класса. В этом списке два столбца: имя роли связи и имя класса, к которому идет данная связь в соответствии с метамоделью. По одной из связей можно перейти к соответствующему классу. Рис. 4. Интерфейс Catalogs 225
226
4.3. Интерфейс Graphic Map Graphic Map – оригинальный графический интерфейс, в котором предметная область представляется в виде, схожем с диаграммой классов UML модели, но более удобном, компактном и понятном для конечных пользователей.
4.3.1. Представление GM Классы UML-модели распределены по боксам. Бокс – это графический объект карты, представляющий собой прямоугольник с закладками. Каждой закладке в боксе соответствует один класс UML-модели. При этом классы, объединенные в одно дерево наследования, размещаются в одном общем боксе. В каждый момент времени один из классов бокса является активным. При выборе определенной закладки бокса соответствующий класс становится активным. Между боксами карты могут иметься связи разных типов (кроме наследования), соответствующие связям диаграммы классов UML между соответствующими классами, содержащимися в боксах. Таким образом, каждое дерево наследования помещается в отдельный бокс, куда попадает главный родитель этого дерева вместе со всеми наследниками. В частном случае, если класс не принадлежит никакому дереву наследования, то он попадает в отдельный бокс один. С каждым классом модели может быть связан рисунок.
4.3.2. Расположение GM Окно браузера делится на 4 фрейма (Рис. 5). Центральный фрейм содержит графическое представление UML-модели. В правом фрейме находятся атрибуты текущего класса с текстовыми полями для ввода значений атрибутов. В левом нижнем фрейме собираются критерии для поиска. В правом нижнем фрейме находится дерево наследования текущего бокса. Вверху фрейма расположены инструменты для формулировки запроса.
5. Заключение В данной статье рассмотрены основные аспекты автоматической генерации GUI на основе диаграммы классов UML модели. Все идеи, описанные в этой статье, были реализованы в рамках компонента Frontend системы BizQuery, над которой работает наша группа MODIS [1]. Тестирование и использование системы показало удобство и эффективность разработанного подхода. Рассмотренной в данной статье темой также занимаются исследователи группы различных университетов мира, что подчёркивает ее актуальность. Появляются также первые коммерческие продукты, например Polen Ecompanion Software[10]. Литература 1. Система BizQuery http://www.ispras.ru/groups/modis/bizquery.html 2. XQuery 1.0: An XML Query Language http://www.w3.org/TR/xquery/ 3. UQL: A Query Language on Integrated Data in Terms of UML (in Russian, English) Maxim Grinev, Sergey Kuznetsov Programming and Computer Software, Vol. 28, No. 4, 2002, pp. 189-196. 4. Extensible Markup Language (XML) 1.0 (Second Edition) http://www.w3.org/TR/RECxml 5. Unified Modeling Language (UML), version 1.4 http://www.omg.org/technology/documents/formal/uml.htm 6. XSL Transformations (XSLT) Version 1.0 http://www.w3.org/TR/xslt 7. Document Object Model (DOM) http://www.w3.org/DOM/ 8. Rational Rose documentaion http://www.rational.com/ 9. XML Metadata Interchange (XMI), version 1.2 http://www.omg.org/technology/documents/formal/xmi.htm 10. Pollen UML-GUI Designer http://www.e-companionsoftware.com 11. Simple Object Access Protocol (SOAP) 1.1 http://www.w3.org/TR/SOAP/
Приложение 1. Описание Forms DTD. Forms.DTD
Рис. 5. Интерфейс Graphic Map. 227
228
model (class+)> class (attribute*, link*)> attribute EMPTY> link (multiplicity*)> multiplicity EMPTY> class name ID #REQUIRED selected (yes |no) #REQUIRED attribute type (integer | double | string | date) name CDATA #REQUIRED label CDATA #REQUIRED> link
#REQUIRED
roleName CDATA #IMPLIED name CDATA #REQUIRED type (association | aggregation | composition | inheritance) #REQUIRED targetClass IDREF #REQUIRED> Элемент model является тэгом верхнего уровня XML документа, соответствующего Forms DTD. Он содержит внутри себя информацию о метамодели, определяемой данным документом. Элементы class, attribute и link соответствуют понятиям класс, атрибут и связь в диаграмме классов UML модели. Элемент class содержит следующие атрибуты: • name – имя класса, • selected – атрибут для определения текущего класса. Для текущего класса значение атрибута ”yes”, иначе - “no”. Элемент attribute содержит следующие атрибуты: • type – тип атрибута. Значение должно быть одним из нижеследующих: integer, double, string или date, • name– имя атрибута. Имя атрибута должно иметь следующий формат: ИмяКласса.ИмяАтрибута, • label – имя атрибута, которое отображается в форме. Элемент link содержит следующие атрибуты: • roleName – имя роли связи, • name – имя связи. Тэг link содержит элемент multiplicity. Элемент multiplicity описывает, сколько сущностей класса, к которому идёт связь, могут соответствовать элементу текущего класса. Содержание тэгов lower и upper описывает соответственно максимальное и минимальное возможные значения возможного количества классов.
Приложение 2. Описание Catalog DTD.
Верхним элементом документа является элемент result. В этом элементе содержатся экземпляры классов UML модели, полученные в результате запроса. Описание экземпляра класса содержится в элементе classinstanse. Этот элемент содержит следующие атрибуты: cname - имя класса, ID- идентификатор экземпляра. Также элемент classinstanse содержит элементы attribute и reference. Элемент attribute имеет атрибут ‘aname’ – имя атрибута. Элемент reference содержит следующие атрибуты: Type – тип связи. Значение должно быть одним из нижеследующих: association, aggregation, composition, inheritance, rolename – имя роли связи. Элемент reference содержит элемент class. Элемент class содержит атрибут cname – имя класса, на который ссылается связь.
Приложение 3. Описание GML <element map (box*, link*)> <element box (tab+)> <element tab (reference*)> 229
230
active (yes|no) #REQUIRED> <element reference empty> <element link (turn*)> <element turn empty> Элемент map содержит информацию о всей графической карте. Элемент box описывает box. Элемент link описывает линию на карте, представляющую определенную связь между классами. Элемент reference описывает ссылку от данного класса на другой класс (важно направление) и также ссылается на тэг link по id, который описывает отображение данной связи на карте. Элемент turn определяет координаты точки перегиба линии на карте. Определения графической карты (GML) ссылаются на объекты XMI по идентификаторам: • Элемент tab содержит атрибут-ссылку по id на соответствующий класс UML модели в файле XMI. • Элемент reference содержит атрибут-ссылку по id на соответствующую ссылку UML модели в файле XMI.
231
232