К основным достоинствам разработки приложений на стороне веб-сервера в форме сценариев можно отнести следующие:
· поскольку сценарии не компилируются а интерпретируются, то ошибки в сценарии вызовут только диагностическое сообщение, но не приведут к дестабилизации веб-сервера или операционной системы.
· лучшие выразительные возможности. Язык сценариев как правило имеет собственный проблемно-ориентированный набор команд, и одна строка сценария может делать то же, что несколько десятков строк на традиционном языке. Как следствие, на этом языке может писать программист низкой квалификации.
· Поддержка кроссплатформенности.
Поскольку сценарии интерпретируются из исходного кода динамически при каждом исполнении, они выполняются обычно значительно медленнее готовых программ, транслированных в машинный код на этапе компиляции.
В плане быстродействия сценарные языки можно разделить на:
· Языки динамического разбора (например, command.com). Интерпретатор считывает инструкции из файла программы минимально требующимися блоками, и исполняет эти блоки, не читая дальнейший код.
· Предварительно компилируемые (например Perl). Вначале считывается вся программа, затем компилируется либо в машинный код, либо в один из внутренних форматов, после чего получившийся код исполняется.
В рассмотрим кратко наиболее известные языки разработки сценариев для веб- приложений.
Python — высокоуровневый язык программирования общего назначения с акцентом на производительность и читаемость кода. Язык Python сочетает в себе минимализм синтаксиса ядра и большой объем полезных функций в стандартной библиотеке.
Python поддерживает структурную, объектно-ориентированную, функциональную, императивную и аспектно-ориентированную парадигмы.
· Его основные архитектурные черты:
· динамическая типизация
· автоматическое управление памятью
· полная интроспекция
· механизм обработки исключений
· поддержка многопоточных вычислений
· удобные высокоуровневые структуры данных
Код в Python организовывается в функции и классы, которые могут объединяться в модули (которые в свою очередь могут быть объединены в пакеты).
Для всех основных платформ Python имеет поддержку характерных для данной платформы технологий (например, Microsoft COM/DCOM). Cуществует даже специальная версия Python для виртуальной машины Java - Jython, что позволяет интерпретатору выполняться на любой системе, поддерживающей Java, при этом классы Java могут непосредственно использоваться из Питона и даже быть написанными на Python. Несколько проектов обеспечивают интеграцию с платформой Microsoft.NET, основные из которых - IronPython и Python.Net.
Стандартная библиотека Python имеет средства для работы со многими сетевыми протоколами и форматами интернета, например, модули для написания HTTP-серверов и клиентов, для разбора и создания почтовых сообщений, для работы с XML и т. п. Набор модулей для работы с операционной системой позволяет писать кросс-платформенные приложения. Существуют также модули для работы с регулярными выражениями, текстовыми кодировками, мультимедийными форматами, криптографическими протоколами, архивами, сериализации данных, поддержка юнит-тестирования и др.
Помимо стандартной библиотеки существует множество библиотек, предоставляющих интерфейс ко всем системным вызовам на разных платформах; Имеется большое количество прикладных библиотек для Python в самых разных областях (веб, базы данных, обработка изображений, обработка текста, численные методы, приложения операционной системы и т. д.).
Ruby — интерпретируемый язык высокого уровня для быстрого и удобного объектно-ориентированного программирования. Ruby обладает независимой от операционной системы реализацией многопоточности, строгой динамической типизацией, "сборщиком мусора" и многими другими возможностями. Многие особенности синтаксиса и семантики языка Perl заимствованы в Ruby.
Первая общедоступная версия Ruby появилась в 1995 г.
Ruby - полностью объектно-ориентированный язык:
· Все данные являются объектами, в отличие от многих других языков, где существуют примитивные типы.
· Каждая функция является методом.
· Переменные Ruby содержат не сами объекты, а ссылки на них.
· Присваивание - это не передача значения, а копирование ссылки на объект.
· В Ruby можно добавлять методы не только в любые классы, но и в любые объекты. Например, можно добавить к некоторой строке произвольный метод.
Массивы в Ruby могут автоматически изменять размер, могут содержать любые элементы и язык предоставляет мощные средства для их обработки.
Ruby поставляется с большой стандартной библиотекой. Это, прежде всего, библиотеки для работы с различными сетевыми протоколами на стороне сервера и клиента, средства для работы с различными форматами представления данных (XML, XSLT, YAML, PDF, RSS, CSV, WSDL). Также есть библиотеки для работы с архивами, датами, кодировками, матрицами, средства для системного администрирования, распределенных вычислений, поддержки многопоточности и т. д.
В языке Ruby также реализован простой и удобный механизм для расширения языка с помощью библиотек, написанных на Си, позволяющий легко разрабатывать дополнительные библиотеки. Для унифицированного доступа к базам данных разработана библиотека Ruby DBI.
К недостаткам интерпретатора Ruby можно отнести следующие:
Невысокая скорость работы.
· Отсутствие поддержки потоков операционной системы (для Unix-подобных операционных систем есть поддержка процессов ОС), есть в экспериментальной версии 1.9.
· Отсутствие встроенной поддержки юникода (возможна работа с использованием дополнительных библиотек, есть в экспериментальной версии 1.9).
· Отсутствие компиляции в байткод. (При этом есть возможность компилировать Ruby в Java и .NET байткод, используя компилятор JRuby и Ruby.NET). В экспериментальную версию 2.0 входит виртуальная машина YARV, компилирующая Ruby в байткод и существенно ускоряющая исполнение.
ASP (Active Server Pages) — технология, разработанная компанией Microsoft, позволяющая легко создавать приложения для Веб.
Программирование на ASP дает разработчикам доступ к интерфейсу программирования приложений Internet Information Server с помощью языка сценариев VBScript и JScript.
ASP работает на платформе операционных систем линии Windows NT и на веб-сервере Microsoft IIS.
Архитектура ASP представлена ниже.
Рис. 8.1.
Файлы ASP представляют собой сценарии, интерпретируемые по мере поступления запросов. ISAPI-расширение ASP.DLL связано в IIS с расширениями файлов .asp или .asa.
Порядок обработки таких файлов выглядит следующим образом:
· ASP.DLL просматривает файлы с указанными расширениями на наличие тегов, обозначающих внедренный код для выполнения на сервер и передает найденный код в Windows Script Host (WSH).
· WSH выполняет этот код и возвращает результат файлу ASP.DLL.
· ASP.DLL передает IIS этот результат и содержимое самого файла ASP.
· IIS возвращает ответ клиенту, от которого поступил запрос.
Рассмотрим основы синтаксиса ASP.
IIS различает код, выполняющийся на сервере, и содержимое, отправляемое клиенту с помощью ASP.DLL, анализируя файл ASP на наличие начального "<%" и конечного "%>" тегов и выполняя код, расположенный между ними, с помощью WSH.
Рассмотрим пример:
<% Language=VBScript %>
<HTML>
<BODY>
<%
Response.Write("<p>Hello world!</p>")
%>
</BODY>
</HTML>
В примере первая строка кода <% Language=VBScript %> сообщает о необходимости использовать интерпретатор языка VBScript. Для вставки строки в документ был использован метод Write стандартного объекта Response.
Событие веб-запроса в ASP обрабатывается с помощью следующих объектов:
· Response. Используется для записи данных в запрос HTTP, возвращаемый клиенту.
· Application. Содержит параметры и конфигурации по настройке работы ASP для данного веб-сайта.
· Request. Хранит содержимое HTTP-запроса и обеспечивает вспомогательные функции для обработки данных HTTP-запроса.
· Server. Содержит информацию о веб-сервере, веб-сайте, а также обеспечивает поддержку вызывающей программы.
· Session. Представляет собой состояние заданного веб-сеанса с заданным хостом клиентом.
Для веб-сервера IIS (Internet Information Server). был разработан специальный программный интерфейс для создания приложений расширяющих стандартные возможности веб-сервера.
ISAPI (Internet Server Application Programming Interface) – многозвенный API для IIS.
ISAPI также реализован в виде модуля mod_isapi для веб-сервера Apache. Таким образом, серверные приложения, разработанные для MS IIS могут также выполняться в Apache и других веб-серверах.
В противоположность CGI - ISAPI-приложение загружается в том же адресном пространстве, что и веб-сервер IIS. Это позволяет повысить производительность приложений благодаря сокращению издержек на запуск отдельных процессов. Однако сбой ISAPI-приложения может привести к неустойчивой работе самого веб-сервера. В 6-ой версии IIS имеется возможность запуска приложений в рамках отдельного процесса.
ISAPI включает в себя 2 компоненты: расширения и фильтры.
Таким образом, все многообразие разрабатываемых ISAPI-приложений сводится только к этим двум типам. И фильтры и расширения компилируются в DLL файлы динамически запускаемые веб-сервером.
ISAPI приложения могут разрабатываться с помощью любых языков, поддерживающих экспорт стандартных С-функций, например С, С++, Delphi. Для разработки имеется ограниченное число библиотек для разработки ISAPI приложений, например Intraweb-компоненты Delphi Pascal, специальные MFC-классы, специальная С++ библиотека серверных технологий ATL.
К наиболее важным особенностям ISAPI-расширений можно отнести следующие:
· ISAPI-расширения имеют доступ ко всем функциональным возможностям IIS.
· Реализуются в виде DLL-модулей, загружаемых в пространстве процесса, контролируемого IIS.
· Клиенты могут обращаться к ISAPI-расширениям также как к статическим HTML страницам.
· ISAPI-расширения могут быть ассоциированы с отдельными расширениями файлов, с целыми каталогами или сайтами.
ISAPI-фильтры необходимы для изменения или совершенствования функциональности IIS. Они обычно работают с IIS-сервером и фильтруют каждый запрос. Фильтры применяются для анализа и модификации входящих и исходящих потоков данных.
Фильтры также как и расширения реализуются в виде DLL файлов.
Обычно ISAPI-фильтры используются для решения следующих задач:
· Изменение данных в запросе клиента (URL или заголовков).
· Управление отображением URL в физические файлы.
· Управление именами и паролями пользователей при анонимной или базовой аутентификации.
· Анализ и модификация запросов по завершении аутентификации.
· Модификация ответа веб-сервера.
· Ведение журналов и анализ трафика.
· Реализация собственной аутентификации.
· Управление шифрацией и сжатием.
Стоит отметить, что существуют реализации в виде ISAPI-расширений для таких инструментальных средств как:
· ASP (Active Server Pages )
· ASP.NET
· ColdFusion
· Perl ISAPI (Perlis)
· PHP
HTML: достоинства и недостатки. XML: достоинства и недостатки. Технологии, использующие XML. Синтаксические правила построения XML-документа. Структура XML-документа.
В 1986 году, задолго до того, как идея создания сети Веб была воплощена в жизнь, универсальный стандартизированный язык разметки SGML (Standardized Generalized Markup Language) был утвержден в качестве международного стандарта (ISO 8879) определения языков разметки, хотя SGML существовал еще с конца шестидесятых. Он использовался для того, чтобы описывать языки разметки, предоставляя при этом автору возможность давать формальные определения каждому элементу и атрибуту языка.
Язык HTML первоначально был всего лишь одним из SGML-приложений. Он описывал правила, по которым должна быть подготовлена информация для World Wide Web. Таким образом, язык HTML - это набор предписаний SGML, сформулированных в виде определения типа документа (DTD), объясняющих, что именно обозначают тэги и элементы. Схема DTD для языка HTML хранится в веб-браузере.
К недостаткам языка HTML можно отнести следующие:
· HTML имеет фиксированный набор тэгов. Нельзя создавать свои тэги, понятные другим пользователям.
· HTML - это исключительно технология представления данных. HTML не несет информации о значении содержания, заключенного в тэгах.
· HTML - "плоский" язык. Значимость тэгов в нем не определена, поэтому с его помощью нельзя описать иерархию данных.
· В качестве платформы для приложений используются браузеры. HTML не обладает достаточной мощью для создания веб-приложений на том уровне, к которому в настоящее время стремятся веб-разработчики. Например, на языке HTML невозможно разработать приложение для профессиональной обработки и поиска документов.
· Большие объемы трафика сети. Существующие HTML-документы, используемые как приложения, перегружают Интернет большими объемами трафика в системах клиент-сервер. Примером может служить пересылка по сети большого по объему документа, в то время как необходима только небольшая часть этого документа.
Таким образом, с одной стороны, язык HTML является очень удобным средством разметки документов для использования в веб, а с другой - документ, размеченный в HTML, имеет мало информации о своем содержании. Если тот или иной документ несет достаточно полную информацию о своем содержании, появляется возможность сравнительно легко провести автоматическую обобщенную обработку и поиск в файле, хранящем документ. Язык SGML позволяет сохранять информацию о содержании документа, однако вследствие особой сложности он никогда не использовался так широко, как HTML.
Группа экспертов по языку SGML, возглавляемая Джоном Боузэком (Jon Bosak) из компании Sun Microsystems, приступила к работе по созданию подмножества языка SGML, которое могло бы быть принято Web-сообществом. Решено было удалить многие несущественные возможности SGML. Перестроенный таким образом язык назвали XML. Упрощенный вариант оказался значительно более доступным, чем оригинал, его спецификации занимали всего 26 страниц по сравнению с более чем 500 страницами спецификаций SGML.
Рассмотрим более детально структуру и особенности этого языка.
XML (eXtensible Markup Language) - рекомендованный W3C язык разметки. XML - текстовый формат, предназначенный для хранения структурированных данных, для обмена информацией между программами, а также для создания на его основе специализированных языков разметки. XML является упрощенным подмножеством языка SGML.
Язык XML имеет следующие достоинства:
· Это человеко-ориентированный формат документа, он понятен как человеку, так и компьютеру.
· Поддерживает Юникод.
· В формате XML могут быть описаны основные структуры данных - такие как записи, списки и деревья.
· Это самодокументируемый формат, который описывает структуру и имена полей также как и значения полей.
· Имеет строго определенный синтаксис и требования к анализу, что позволяет ему оставаться простым, эффективным и непротиворечивым.
· Широко используется для хранения и обработки документов;
· Это формат, основанный на международных стандартах;
· Иерархическая структура XML подходит для описания практически любых типов документов;
· Представляет собой простой текст, свободный от лицензирования и каких-либо ограничений;
· Не зависит от платформы;
· Является подмножеством SGML, для которого накоплен большой опыт работы и созданы специализированные приложения
К известным недостаткам языка можно отнести следующие:
· Синтаксис XML избыточен.
· Размер XML документа существенно больше бинарного представления тех же данных (порядка 10 раз).
· Размер XML документа существенно больше, чем документа в альтернативных текстовых форматах передачи данных (например JSON, YAML) и особенно в форматах данных, оптимизированных для конкретного случая использования.
· Избыточность XML может повлиять на эффективность приложения. Возрастает стоимость хранения, обработки и передачи данных.
· Для большого количества задач не нужна вся мощь синтаксиса XML, и можно использовать значительно более простые и производительные решения.
· Пространства имен XML сложно использовать и их сложно реализовывать в XML парсерах.
· XML не содержит встроенной в язык поддержки типов данных. В нем нет понятий "целых чисел", "строк", "дат", "булевых значений" и т. д.
· Иерархическая модель данных, предлагаемая XML, ограничена по сравнению с реляционной моделью и объектно-ориентированными графами.
Вообще говоря, XML можно рассматривать не только как новый язык разметки, но и как основу для целого семейства технологий:
XML Технические рекомендации об использовании XML
DTD Определение типа документа (схема)
XDR Формат XML Reduced (схема Microsoft)
XSD Определение схемы XML (схемы W3C)
Пространство имен Метод определения имен элементов и атрибутов
XPath Язык путей XML
XLink Язык ссылок XML
XPointer Язык указателей XML
DOM API для объектной модели документа
SAX Простой API для XML
XSL Расширяемый язык таблиц стилей
XSL-FO Объекты форматирования XSL
XSLT Язык преобразований XSL
XInclude Синтаксис XML Include
XBase Синтаксис XML Base URI
По-сути, XML служит метаязыком для описания структуры других языков. Взаимосвязь между SGML, XML, HTML и некоторыми другими языками показана на следующей диаграмме:
Важным отличием XML от HTML является то большое внимание, которое уделяется контролю за тем, насколько точно соблюдаются правила языка при разметке документов. В зависимости от этого принято выделять правильно построенные и действительные XML документы.
Документ XML считается правильно построенным, если он соответствует всем синтаксическим правилам XML.
Проверка действительности документа предполагает выполнение следующих действий:
· Проверка использования только заданного набора дескрипторов.
· Проверка полного соответствия порядка следования элементов и атрибутов содержанию документа или определенным правилам.
· Контроль типов данных (достигается при использовании соответствующей схемы).
· Контроль целостности данных для обеспечения оптимального обмена информацией через Веб с помощью транзакций.
Рассмотрим теперь основные синтаксические правила построения XML документов.
· XML документ содержит один и только один корневой элемент, содержащий все остальные элементы
· Дочерние элементы, содержащиеся в корневом элементе, должны быть правильно вложены.
· Имена элементов подчиняются правилам:
· Имя начинается с буквы, знака подчеркивания или двоеточия.
· После первого символа в имени могут быть буквы, цифры, знаки переноса, подчеркивания, точка или двоеточие.
· Имена не могут начинаться с буквосочетания XML.
XML документ имеет следующую структуру :
· Первая строка XML документа называется объявлением XML. Это необязательная строка, указывающая версию стандарта XML (обычно это 1.0). Также здесь может быть указана кодировка символов и внешние зависимости.
· Комментарий может быть размещен в любом месте дерева. XML комментарии размещаются внутри пары тегов <!-- и заканчиваются -->. Два знака дефис (--) не могут быть применены ни в какой части внутри комментария.
· Остальная часть этого XML-документа состоит из вложенных элементов, некоторые из которых имеют атрибуты и содержимое.
· Элемент обычно состоит из открывающего и закрывающего тегов, обрамляющих текст и другие элементы.
· Открывающий тег состоит из имени элемента в угловых скобках;
· Закрывающий тег состоит из того же имени в угловых скобках, но перед именем еще добавляется косая черта.
· Содержимым элемента называется все, что расположено между открывающим и закрывающим тегами, включая текст и другие (вложенные) элементы.
· Кроме содержания у элемента могут быть атрибуты - пары имя=значение, добавляемые внутрь открывающего тега после названия элемента.
· Значения атрибутов всегда заключаются в кавычки (одинарные или двойные), одно и то же имя атрибута не может встречаться дважды в одном элементе.
· Не рекомендуется использовать разные типы кавычек для значений атрибутов одного тега.
· Для обозначения элемента без содержания, называемого пустым элементом, необходимо применять особую форму записи, состоящую из одного тега, в котором после имени элемента ставится косая черта "/".
К сожалению, описанные выше правила позволяют контролировать только формальную правильность XML документа, но не содержательную. Для решения второй задачи используются так называемые схемы.
Схема четко определяет имя и структуру корневого элемента, включая спецификацию всех его дочерних элементов. Программист может задать, какие элементы и в каком количестве обязательны, а какие – необязательны. Схема также определяет, какие элементы содержат атрибуты, допустимые значения этих атрибутов, в т.ч. значения по умолчанию.
Чаще всего для описания схемы используются следующие спецификации:
· DTD (Document Type Definition) - язык определения типа документов.
· XDR (XML Data Reduced) – диалект XML, разработанный Майкрософт.
· XSD (язык определения схем XML) – рекомендована консорциумом W3C.
XML документ отличается от HTML документа также и тем, как он отображается в веб-браузере. Без использования CSS или XSL XML-документ отображается как простой текст в большинстве веб-браузеров. Некоторые веб-браузеры, такие как Internet Explorer, Mozilla и Firefox отображают структуру документа в виде дерева, позволяя сворачивать и разворачивать узлы с помощью нажатий клавиши мыши.
Наиболее распространены три способа преобразования XML-документа в отображаемый пользователю вид:
· Применение стилей CSS.
· Применение преобразования XSLT.
· Написание на каком-либо языке программирования обработчика XML-документа.
6. Лекция: Языки описания cхем XML
DTD схемы. Недостатки DTD схем. XDR схемы. Элементы и атрибуты XDR схем.
Идея создания собственных тэгов, имеющих специальное значение и помогающих описать содержание документа, сама по себе просто замечательна. Но если каждый пользователь может создавать свои собственные описания, каким образом их распознавать? С этой целью в спецификации XML для описания подобных "самодеятельных" тэгов используются схемы. Они необходимы для того, чтобы:
· описать, что именно является разметкой;
· описать точно, что означает разметка.
Наиболее известными языками описания схем являются следующие:
· DTD (Document Type Definition) - язык определения типа документов, который первоначально использовался в качестве язык описания структуры SGML-документа.
· XDR (XML Data Reduced) – диалект схемы XML, разработанный Microsoft, который поддерживался в Internet Explorer 4 и 5 версий.
· XML Schema или просто XSD (язык определения схем XML) – рекомендация консорциума W3C с 2001 года.
Рассмотрим подробнее первые два из них. Третий язык описания схем рассматривается в лабораторной работе 11.