Диссертация (1090660), страница 15
Текст из файла (страница 15)
Оноопределяет, каким образом должен обрабатываться набор. Значением свойства можетбыть явно заданный метод обработки, или же значение брать значение “@input”, которое говорит о том, что режим доступа будет задан из запроса. Это позволяет создаватьгибкие локации, которые могут выполнять обработку схожих данных разными способами. Например, можно реализовать редактирование или создание новых статей наресурсе при помощи одной локации.Прием данных в проекте BlockSet реализован следующим образом: данные модифицирующих запросов могут быть приняты только методом POST, в то время какидемпотентные данные клиент может передавать как методом POST, так и методомGET.
В случае, если одинаковые данные передаются обоими методами, конфликт разрешается с помощью системы приоритетов (рис. 2.3): если модифицирующие данныебыли обнаружены в запросе, то искать идемпотентные данные мы будем уже среди89GET-данных. Если модифицирующих данных не было, то сначала будет произведенпоиск информации идемпотентного запроса среди POST данных и, только в случае,если там ничего не было обнаружено, будет произведен поиск среди GET-данных.НачалоНетДаЕсть ли динамическиеданные локации?НетДаМодифицирующийзапрос и не пустойPOST?Загрузка данныхметодом POSTДаНетЕсть данныеидемпотентногозапроса?КонецНетДаGET не пустойЗагрузкаидемпотентныхданных методом GETНетДаPOST не пустой,данные этим методомзагружались ранее?Загрузка данныхметодом POST какидемпотентныхРисунок 2.3.
Схема приёма данных различными методамиТаким образом, решается главная проблема – при помощи блоков осуществляетсяавтоматическая проверка получаемых значений. А заранее построенная модель данных позволяет принимать значения, только для определенных блоков, что исключаетвозможность инъекции в другие сущности и их атрибуты. Данный подход способствует масштабируемости проекта в целом, т.к. при создании новых локаций не нужнобудет каждый раз заново определять правила обработки запросов, достаточно лишьуказать каким блокам информацию от каких запросов принимать.902.8Разработка алгоритмов взаимодействия с шаблонизатором2.8.1Алгоритм получения данных от интерпретатораПосле того, как интерпретатор закончит исполнять логику работы приложения, всевыходные данные будут переданы в шаблонизатор, который, в свою очередь, на основе них и прилагаемого шаблона выстроит конечный документ.
Шаблон представляетсобой заготовку для документа, в котором вместо основного контента присутствуютспециаилизированные вставки, представляющие собой простейшие алгоритмическиеконструкции и переменные. Вместо переменных подставляются нужные данные. Вседанные, передаваемые в шаблонизатор имеют строго заданную структуру.Изначально интерпретатор BlockSet настроен на использование шаблонизатораCTPP2 и поддерживает весь его функционал. Выборка экземпляров набора хранитсяв переменной с именем соответствующего набора (из атрибута "name"). Для обращения к экземпляру набора используется итеративная конструкция foreach. Обращениек значению блока каждого экземпляра происходит через точку, разделяющую набори блок: "имя_набора.имя_блока".
Также, если у блока существуют дополнительныехарактеристики, передаваемые в шаблонизатор, они также могут быть получены путём добавления точки и имени соответствующего параметра в конец указанной выше конструкции. Такие характеристики отмечены словом «шаблон» в графе «областьприменения» в таблицах 2.6, 2.8, 2.9.Существуютвшаблонизатор.такжеспециальныеКаждаяхарактеристикихарактеристика«имя_набора.имя_характеристики»,чтовхранитсяцеломнабора,впередаваемыеследующемповторяетформатформате:хране-ния индивидуальных значений блока. Если указан атрибут alias, то вместо«имя_набора.имя_характеристики» будет подставлено значение атрибута. Списокдополнительных характеристик набора представлен в таблице 2.11.2.8.2Алгоритм обработки ошибок валидации данныхОдной из важнейших функций любого Web-приложения является не столько получение данных, сколько их валидация, т.е. проверка правильности их ввода.
В случаевозникновения каких-либо ошибок, необходимо обеспечить обратную связь с пользо-91Таблица 2.11. Перечень дополнительных характеристик набора,передаваемых в шаблонизаторИмя характеристикиcurrentPagelastPagepageLimittotalerrorОписаниеТекущая страница списка экземпляров набора.Последняя страница списка экземпляров набора.Количество экземпляров набора на странице.Общее количество экземпляров набора в выборке.Код ошибки (если ошибки нет, равен 0), возникшей в результате какого-либо действия с набором. Подробнее см. 2.8.2.вателем. Для этого код ошибки передаётся в шаблонизатор, где может быть использован в шаблоне по своему усмотрению.Как правило, шаблонизаторы поддерживают простейшие алгоритмические конструкции: циклы и ветвления.
Поддерживает их и встроенный в проект шаблонизаторCTPP2. Так, используя эти конструкции, становится возможным вывести необходимые сообщения об ошибках ввода на основе соответствующих кодов ошибок. Кодошибки возвращается как для всего набора (табл. 2.12), так и для отдельного блока(табл. 2.13). К примеру, конструкция article.error будет ссылаться на глобальную ошибку набора article. А конструкция article.description.error будет ссылаться на ошибку при заполнении блока description набора article.Таблица 2.12.
Перечень ошибок, возвращаемых для набораКодошибки01030313299ОписаниеНет ошибки.Один или несколько блоков обязательны для заполнения и незаполнены, либо заполнены не верно.Нет доступа к набору.Нет доступа к набору на чтение.Нет доступа к набору на запись.Глобальная ошибка интерпретатора.92Таблица 2.13. Перечень ошибок, возвращаемых для отдельного блокаКодошибки01020212223303132404142434445465099ОписаниеОшибки нетПоле блока обязательно для заполнения, но не заполнено.Поле блока заполнено неверно/неправильный проверочный код.Введено слишком малое число/ранняя дата.Введено слишком большое число/поздняя дата/длинная строка.Введённый E-Mail или IP находится в чёрном списке/введёнслишком слабый пароль.Нет доступа к блоку.Нет доступа к данному блоку на чтение.Нет доступа к данному блоку на запись.Загружаемый файл некорректен (Ошибки, начинающиеся на 4xотносятся к файловым блокам).Загружаемый файл имеет слишком большой размер.Файл был загружен только частично.Формат загружаемого файла не соответствует ни одному из допустимых.
Проверка производится как по расширению, так ипо внутренней структуре и заголовкам.Слишком большой документ с точки зрения здравого смысла (большое изображение, видеоролик, длинная аудиозапись).Также возвращается для архивов при обнаружении в них ZIPбомбы.Не удалось преобразовать файл, согласно правилам трансформации, указанным в свойствах BML-документа.В загружаемом файле обнаружен вирус.Блок, в который производится запись, задействован в динамической подстановке URL у локации, а записываемое значениеможет создавать двусмысленность по отношению к другим локациям.Глобальная ошибка интерпретатора.932.9Разработка критерия оптимальности выбора релевантного объекта в задаче динамической маршрутизации Web-адресов, идентифицируемых шаблономЗадача поиска мощности множества регулярного выражения носит как научный,так и прикладной характер и связана с такими научными областями, как формальныеязыки и конечные автоматы.
Основоположником регулярных языков по праву считается американский математик Стивен Коул Клини [32], разработавший теоретическуюбазу регулярных языков и внесший большой вклад в теорию конечных автоматов.Первое практическое внедрение в информационные технологии регулярных выражений произвел пионер компьютерной науки, американский ученый Кен Томпсон [65].Вопрос поиска мощности множества (или, в терминах авторов, «размера») регулярного выражения широко рассматривался Германом Грубером и Маркусом Хольцером[21].На данный момент нет точного алгоритма, позволяющего вычислить все возможные комбинации регулярного выражения. Перед нами стоит задача разработать алгоритм, способный посчитать приблизительную мощность множества с возможнымиограничениями, удовлетворяющими условию практической задачи.Практической составляющей задачи имеется сущность, уникальным идентификатором которой служит шаблон – регулярное выражение.
На вход подается специальная строка, сопоставляемая с каждым шаблоном для идентификации объекта. Сущность представляет собой динамическую Web-страницу, а входная строка – пользовательский адрес URL. Задача рассматривает случай, когда входная строка подпадаетпод несколько шаблонов и сводится к разрешению данного противоречия. При возникновении противоречий между шаблонами системе необходимо проставить приоритеты каждого из них, чтобы выбрать наиболее подходящий. Таким приоритетомбудет служить некий коэффициент, характеризующий мощность множества каждогоиз шаблонов. Под мощностью множества регулярного выражения в настоящей работе понимается результат подсчета всех возможных комбинаций в заданном шаблоне[102].Для решения задачи требуется классифицировать теоретическую базу, необходимую для исследования.
Для начала рассмотрим основные представления одного из94вариантов класса формальных языков – регулярные языки. Они могут быть выраженырегулярными множествами (выражениями), а также конечными автоматами [82].Для каждого множества можно найти регулярное выражение, обозначающее этомножество. Согласно классификации Хомского [12] регулярные языки относятся ктретьему типу грамматик, а значит, по теореме Клини [59] могут быть выражены спомощью конечных автоматов.Конечные автоматы очень хороши при обнаружении шаблонов и могут подсчитатьколичество символов, но лишь до заранее известного предела. Они не обладают памятью и не способны сравнивать одну часть с другой. Например, конечный автоматв состоянии определить, что во входном слове по крайней мере 5 символов «C», ноне может сравнивать количества символов «A» и «B», поскольку не имеет счетчика.
Ключевой фактор этой особенности – при работе с автоматом мы заранее знаемнужное нам число символов «C» [43]. Иначе говоря, конечные автоматы описываютповедение регулярного языка в соответствии с заданным шаблоном, но не более того.В разрабатываемом проекте регулярные выражения используются для роутинга(маршрутизации) динамических Web-страниц пользователя. Прежде чем говорить осамой задаче, скажем, что на данный момент по роутингу URL существует большоеколичество различных решений [17, 18, 55]. В представленной работе рассматривается вариант максимальной автоматизации задачи на основе критерия оптимальности.Критерием оптимальности нашего регулярного выражения служит его мощностьмножества как результат подсчета всех возможных комбинаций в заданном шаблоне.Требуется построить математический аппарат для нахождения этой мощности [92].Рассмотрим следующие аспекты его построения:– упрощение регулярного выражения;– алгоритм вычисления мощности множества;– алгоритм вычисления мощности в пересекаемых множествах.2.9.1Алгоритм упрощения регулярного выраженияБудем использовать следующие правила упрощения исходного регулярного выражения: Условие избыточности.