Области применения, или волшебная палочка о двух концах
Пользователь, знающий об XML только по рекламным воплям, может удивиться, но XML можно применять не везде. XML-документы обычно длиннее замещаемых ими бинарных форматов. Они требуют большей полосы пропускания сети, больше места для хранения, и уж точно больших затрат процессорного времени. Разбор XML медленнее, чем разбор оптимизированных бинарных форматов, да к тому же требует больше памяти (особенно если учесть, что бинарные форматы можно сохранять и загружать в виде, пригодном для немедленного использования). Но у XML есть несколько важных достоинств:
- XML позволяет разработчику создать собственную разметку структуры хранимой информации.
- Разбор XML хорошо стандартизирован и реализован большим количеством производителей ПО, что позволяет извлечь информацию из XML-документов практически повсеместно.
- В стандарт XML включена поддержка кодовых страниц Unicode, что упрощает создание многоязычных документов.
- Приложения могут использовать XML-парсеры для проверки структуры документов, а при использовании схем – и типов данных. Это может значительно упростить разбор строго структурированных документов, снимая с программиста задачу проверки правильности документа.
- XML – это текстовый формат, то есть читаемый, легко документируемый и, иногда, более простой в отладке. Хотя на сегодня отладочные средства для ряда XML-технологий пребывают в зачаточном состоянии.
- Для работы с XML создано множество средств на самых разных платформах, что делает использование XML более простым по сравнению с бинарными форматами при обмене сложными информационными потоками.
- XML-документы могут использовать значительную часть инфраструктуры, созданной для HTML, включая протокол HTTP и броузеры.
Теоретически XML может использоваться в любых приложениях, которым нужна структурированная информация – от сложных систем с гигантскими объемами передаваемой информации до обычных "однокомпьютерных" программ, использующих этот язык для описания или хранения служебной информации. При внимательном взгляде на окружающий нас информационный мир можно выделить множество задач, связанных с созданием и обработкой структурированной информации, для решения которых может использоваться XML:
- На базе XML создана технология SOAP, позволяющая осуществлять программные вызовы методов объектов через HTTP в текстовом формате. Говоря коротко, это один из вариантов маршалинга, но не в компактную бинарную форму, а в текстовый формат с большим количеством метаинформации. Это может показаться бредом, но в условиях набитого брандмауэрами Интернета это единственный способ вызывать методы объектов.
- При разработке сложных информационных систем, с большим количеством приложений, связанных потоками информации и самой различной структурой. В этом случае XML-документы выполняют роль универсального формата для обмена информацией между отдельными компонентами большой программы. На сегодня на первый план выходит технология WebServices, использующая XML и SOAP для предоставления программных сервисов в Интернет.
- Язык XML позволяет описывать данные произвольного типа, в том числе и специализированную информацию, например химические, математические, физические формулы, медицинские рецепты, нотные записи и т.д. Это означает, что XML может служить мощным дополнением к HTML для представления в Web "нестандартной" информации. Вряд ли XML полностью заменит собой HTML, но он наверняка сможет упростить жизнь разработчикам и администраторам крупных сайтов.
- XML-документы могут использоваться в качестве промежуточного формата данных в трехзвенных системах. Обычно схема взаимодействия между серверами приложений и баз данных зависит от конкретной СУБД и диалекта SQL, используемого для доступа к данным. Если же результаты запроса будут представлены в некотором универсальном текстовом формате, то звено СУБД, как таковое, станет "прозрачным" для приложения. Микрософт пошел на совершенно сумасшедший шаг, и для новой версии ADO в качестве формата хранения так называемых DataSet-ов избрал именно XML, аргументируя это не менее сумасшедшим образом.
- Из спецификаций XLink и Xpointer родилась вполне пристойная спецификация XPath (см. ниже), позволяющая создавать краткие и эффективные запросы к структуре документа, ссылаясь как на отдельные элементы документа, так и на их группы с учетом вложенности и значений атрибутов.
- Использование стилевых таблиц (XSL/XSLT) позволяет упростить изменение структуры и преобразование XML- документов, или их преобразование в формат HTML.
- XML может использоваться в обычных приложениях для хранения и обработки структурированных данных в едином формате. Например, как было сказано выше, в XML можно сериализовать состояние объектов или хранить документы, как в новых версиях средств разработки фирм Borland и Микрософт.
На практике примеры использования XML не столь многочисленны, поскольку для хранения и обработки больших объемов информации традиционно используются СУБД, более эффективные для этой задачи. Большая же часть Web-сайтов обходится форматом HTML и скриптами, поскольку ни в чем другом не нуждается.
Преимущества перед БД
В качестве средства хранения данных XML действительно располагает некоторыми преимуществами перед традиционными РСУБД (впрочем, и множеством недостатков тоже). Скорее всего, отказываясь в свое время от иерархического представления данных, отцы-основатели реляционной модели БД не подозревали, что наступит время, когда такое представление окажется необходимым. Как известно, иерархическая модель была одной из первых моделей БД. Единственной альтернативой ей была сетевая модель. Сетевая модель – это модель графов, как известно, не имеющая высокопроизводительных алгоритмов. Иерархическая же позволяла достаточно легко реализовать производительные СУБД. Когда была предложена реляционная модель, многие поддались на достаточно абстрактные рассуждения о её неоспоримых преимуществах. В качестве главных рекламных лозунгов звучало следующее – полностью систематизированная модель, имеющая хорошее математическое основание и четкие алгоритмы. В отличие от иерархической модели, она гипотетически позволяла стоить модели данных любой сложности, а язык SQL, придуманный специально для этой модели, окончательно определил её победу. Однако ни программист, ни, тем более, нормальный человек не думают понятиями реляционной алгебры. Да и конкретные реализации серверов столкнулись с тем, что красивые и эффективные математические методы не так просто превратить в эффективные и быстрые алгоритмы. Даже сегодня, через несколько десятков лет после появления концепции реляционной модели БД, серверы, обладающие эффективным и быстрым оптимизатором запросов, можно пересчитать по пальцам одной руки. Теперь, с покупкой IBM фирмы Informix, их станет еще меньше. В программировании же незаметно появилась объектно-ориентированная парадигма. Она оказалось удобна в практическом применении, и не требовала сложных алгоритмов обработки. Что перечислять достоинства этого подхода – сейчас почти все средства разработки стали объектно-ориентированными.
Если вдуматься, объектно-ориентированное представление данных является ничем иным, как деревом, но со ссылками на другие объекты. Получается дурацкая ситуация – программист, работая с объектами, данные вынужден по-прежнему хранить в реляционной модели. Несоответствие налицо. Поэтому XML со своим представлением данных, похожим на ООП, подвернулся как нельзя кстати. Усилия, затраченные на проработку концепции данных в XML, привели к тому, что сейчас XML-представление данных превосходит то, что сейчас называют "объектно-ориентированными" и "объектно-реляционными" СУБД. По логике вещей, в ближайшие несколько лет должны появиться СУБД, в качестве представления (но не хранения!) данных использующие парадигму XML.
В качестве преимущества XML можно рассматривать и текстовое представление информации. XML-файл можно редактировать с помощью любого текстового редактора – от Notepad до Emacs. Данные, хранящиеся в виде XML, как правило, доступны для человеческого понимания без преобразования. Это положение в корне отличается от бинарного представления данных, требующего программной трансформации в пригодный для использования человеком вид. Разумеется, хранение информации в текстовом виде более расточительно (как с точки зрения объема, так и по требуемым для обработки ресурсам), чем бинарное. Но зачастую удобство использования стоит затрачиваемых ресурсов. Следует заметить, что XML хранит только данные и элементы, определяющие их структуру. Представление этих данных может быть любым, оно полностью отдается на откуп разработчику (подробнее об этом будет рассказано ниже).
Если же вспомнить эталонный пример внесения мусора в документ – я имею в виду HTML-документы, создаваемые MS Office – то станет ясно, что HTML-документ с помощью несложных ухищрений можно раздуть до размеров двух исходных документов Word. Из-за наличия большого количества форматирования реальное содержание HTML-документа может составлять всего несколько процентов от общего объема документа. В таких условиях сокращение размера документа (особенно с учетом пораженных сложным букетом хворей отечественных линий связи) действительно имеет значение. Кстати, о документах. Структура документов, как правило, достаточно сложна, и их хранение в РСУБД – непростая задача. Многие системы документооборота хранят документы, не разбирая их – в том виде, как они поступили в систему. В то же время практически все документы имеют некоторую объектную структуру, что позволяет хранить их в XML-формате. Причем к таким документам можно применять программные алгоритмы, из них можно выбирать нужную информацию, основываясь на жестких критериях, задаваемых тегами, программно изменять их или конвертировать. У документа появляется функциональность, ранее присущая только программным объектам и СУБД.
Есть и еще один момент, важный для разработчика. Сложное форматирование, неизбежно присутствующее в HTML-документе, может стать препятствием для обмена данными и их программной обработки. Кроме этого, сама структура HTML-документов не слишком подходит для хранения и описания данных, этот язык изначально не планировалось использовать в этих целях, и в нем практически отсутствуют механизмы для этого.
XML же довольно критичен к синтаксису (по сравнению с HTML), но безразличен, когда речь заходит об определении значений элементов в XML-документах. Если HTML – это один словарь, в смысле - набор заранее определенных значений (тег <b> значит одно и то же для любого броузера), то в XML можно либо выбрать готовый словарь из уже существующих, либо создать собственный, наиболее точно соответствующий потребностям вашего предприятия или проекта. Создать и описать такой словарь, или пространство имен XML, позволяют схемы и определения типов документов (DTD).
Такой подход требует совершенно другой архитектуры броузеров, чем HTML-броузеры. Разработчик не может полагаться на способность броузера разобраться в смысле разметки и способе ее интерпретации. Современные броузеры могут выводить XML-документы, но, боже, как же погано это выглядит! Без использования соответствующих шаблонов XSL Transformations (XSLT) такой вариант просмотра годится исключительно для служебных (диагностических или отладочных) целей. Пользователю (тем паче заказчику) этого показывать нельзя.
Кроме этого, как уже говорилось выше, реальное содержание сильно уступает в размерах посылаемому броузеру HTML-документу. Было бы очень здорово передавать клиенту только данные в формате XML, а само форматирование осуществлять уже в броузере! XSLT позволяет сделать это, но пока имеются серьезные проблемы совместимости броузеров.
К сожалению, продвижение XML и связанных с ним технологий не избежало обычных в таком случае перегибов. Практически любую вновь появляющуюся технологию продвигающие ее фирмы и организации стремятся объявить (см. начало статьи) всемогущей панацеей, лечащей всё, включая проблему последней мили и головную боль. Этим грешит практически любая крупная софтверная фирма. Так было с Java, так сейчас обстоят дела с Linux. Но действительность, к сожалению, часто вносит свои коррективы. Все изложенные выше достоинства XML несомненны, но и недостатков хватает.
Сама концепция хранения данных в текстовом виде далеко не универсальна. Прежде всего, далеко не все типы данных можно (и имеет смысл) хранить в текстовом виде. Кроме всего прочего, текстовое представление (мягко говоря) не повышает производительности. При заверениях некоторых вполне уважаемых средств массовой информации в том, что работа через XML, например, с SQL Server, быстрее, чем традиционный обмен бинарными данными, так и хочется спросить – "Как вы измеряли?". Если и впрямь спросить, выясняется, что никак. Переписали пресс-релиз, и успокоились.
XML, как и любое другое средство или технологию, нужно использовать разумно, то есть там, где это действительно необходимо. Например, не стоит бежать переделывать работающее приложение или Web-сайт на XML. Но если вам потребовалось сериализовать какой-то объект или сохранить документ, не стоит изобретать собственный формат и писать не универсальный разбор – проще воспользоваться XML-технологиями.
Рассмотрим некоторые из них.
Способы обработки XML
С точки зрения разработчика, XML-парсеры – это мост между XML-документами, выглядящими как длинные цепочки байтов, и приложениями, обрабатывающими этот XML. Практически все приложения, работающие с XML, построены на базе парсеров.
Парсер отвечает за разбор синтаксиса XML и, если нужно, за проверку соответствия содержания документа правилам и ограничениям, накладываемым DTD или XML-схемой. Приложение должно понимать, как обрабатывать или отображать информацию. Приложение изолировано от деталей XML-документа, а создатели документа могут использовать ненужные приложению детали в своих целях. Создатель документа по-прежнему должен предоставлять приложению корректно структурированную информацию, но это можно делать, используя стандартные средства вместо создания новых интерфейсов для каждой нового действия.
28 Серверные технологии разработки Web сайтов. Язык PHP
Стандарт CGI
Круг задач, решаемых Web -сервером, ограничен. В основном он сводится к поддержке НТТР -взаимодействия и доставке клиенту Web -документов. Любые "нестандартные" действия реализуются с помощью специальной программы, которая взаимодействует с веб-сервером и клиентом. Это взаимодействие подчиняется определенным правилам.
Основной набор таких правил - стандарт CGI ( CommonGatewayInterface - интерфейс общего шлюза), который определяет порядок запуска программы на компьютере-сервере, способы передачи программе параметров и доставки результатов ее выполнения клиенту. Программа, написанная по правилам CGI, называется CGI -сценарием ( script CGI ), хотя это не означает, что на сервере не может выполняться двоичный файл.
Благодаря этому интерфейсу для разработки приложений можно использовать любой язык программирования, который располагает средствами взаимодействия со стандартными устройствами ввода/вывода. Такими возможностями обладают также сценарии для встроенных командных интерпретаторов операционных систем.
Выполнение любой программы (в том числе CGI -сценария) можно условно разделить на пять этапов.
1. Запуск программы.
2. Инициализация и чтение выходных данных.
3. Обработка данных.
4. Вывод результатов выполнения.
5. Завершение программы.
Различия между CGI -сценарием и консольным приложением касаются первого, второго и четвертого этапов выполнения.
Каждый раз, когда веб-сервер получает запрос от клиента, он анализирует содержимое запроса и возвращает соответствующий ответ:
· Если запрос содержит указание на файл, находящийся на жестком диске, то сервер возвращает в составе ответа этот файл ;
· Если запрос содержит указание на программу и необходимые для нее аргументы, то сервер исполняет программу и результат ее работы возвращает клиенту.
CGI определяет:
· каким образом информация о сервере и запросе клиента передается программе в форме аргументов и переменных окружения ;
· каким образом программа может передавать назад дополнительную информацию о результатах (например о типе данных) в форме заголовков ответа сервера.
В подавляющем большинстве случаев запуск CGI -сценария осуществляется щелчком на кнопке Submit, сформированной с помощью дескриптора <inputтyре = "submit"> , который находится на HTML -странице между <form> и </form> . Не зная назначения атрибутов action и method, невозможно понять, как происходит вызов программы и передача параметров.
Значением атрибута action дескриптора <form> является URL файла, содержащего код CGI -сценария. Так, приведенное ниже выражение означает, что файл с кодом CGI -сценария находится на сервере www.myhp.edu в каталоге cgi-bin в файле script.рl.
<form action="http://www.myhp.edu/cgi-bin/script.pl" method="post">Сценарии
К основным достоинствам разработки приложений на стороне веб-сервера в форме сценариев можно отнести следующие:
· поскольку сценарии не компилируются а интерпретируются, то ошибки в сценарии вызовут только диагностическое сообщение, но не приведут к дестабилизации веб-сервера или операционной системы.
· лучшие выразительные возможности. Язык сценариев как правило имеет собственный проблемно-ориентированный набор команд, и одна строка сценария может делать то же, что несколько десятков строк на традиционном языке. Как следствие, на этом языке может писать программист низкой квалификации.
· Поддержка кроссплатформенности.
Поскольку сценарии интерпретируются из исходного кода динамически при каждом исполнении, они выполняются обычно значительно медленнее готовых программ, транслированных в машинный код на этапе компиляции.
В плане быстродействия сценарные языки можно разделить на:
· Языки динамического разбора (например command.com ). Интерпретатор считывает инструкции из файла программы минимально требующимися блоками, и исполняет эти блоки, не читая дальнейший код.
· Предварительно компилируемые (например Perl ). Вначале считывается вся программа, затем компилируется либо в машинный код, либо в один из внутренних форматов, после чего получившийся код исполняется.
Наиболее распространенными языками разработки серверных сценариев являются Perl, PHP, ASP, Ruby, Python.
ASP
ASP (ActiveServerPages) - технология, разработанная компанией Microsoft, позволяющая легко создавать приложения для Веб.
Программирование на ASP дает разработчикам доступ к интерфейсу программирования приложений InternetInformationServerс помощью языка сценариев VBScript и JScript.
ASP работает на платформе операционных систем линии Windows NT и на веб-сервере Microsoft IIS.
Файлы ASP представляют собой сценарии, интерпретируемые по мере поступления запросов. ISAPI -расширение ASP.DLL связано в IIS с расширениями файлов .asp или .asa.
Порядок обработки таких файлов выглядит следующим образом:
· ASP.DLL просматривает файлы с указанными расширениями на наличие тегов, обозначающих внедренный код для выполнения на сервер и передает найденный код в WindowsScriptHost (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. Представляет собой состояние заданного веб-сеанса с заданным хостом клиентом.
ISAPI
Для веб-сервера IIS (InternetInformationServer) . был разработан специальный программный интерфейс для создания приложений расширяющих стандартные возможности веб-сервера.
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 (ActiveServerPages )
· ASP.NET
· ColdFusion
· Perl ISAPI (Perlis)
· PHP
· PHP (/pi:.eɪtʃ.pi:/ англ. PHP: HypertextPreprocessor — «PHP: препроцессор гипертекста»; первоначально PersonalHomePageTools[7] — «Инструменты для создания персональных веб-страниц») — скриптовый язык[8] общего назначения, интенсивно применяемый для разработки веб-приложений. В настоящее время поддерживается подавляющим большинством хостинг-провайдеров и является одним из лидеров среди языков, применяющихся для создания динамических веб-сайтов[9].
· Язык и его интерпретатор (ZendEngine) разрабатываются группой энтузиастов в рамках проекта с открытым кодом[10]. Проект распространяется под собственной лицензией, несовместимой с GNU GPL.
В области веб-программирования, в частности серверной части, PHP — один из популярных сценарных языков (наряду с JSP, Perl и языками, используемыми в ASP.NET).
Популярность в области построения веб-сайтов определяется наличием большого набора встроенных средств для разработки веб-приложений[11]. Основные из них:
· автоматическое извлечение POST и GET-параметров, а также переменных окружения веб-сервера в предопределённые массивы;
· взаимодействие с большим количеством различных систем управления базами данных (MySQL, MySQLi, SQLite, PostgreSQL, Oracle (OCI8), Oracle, Microsoft SQL Server, Sybase, ODBC, mSQL, IBM DB2, Cloudscape и ApacheDerby, Informix, Ovrimos SQL, LotusNotes, DB++, DBM, dBase, DBX, FrontBase, FilePro, Ingres II, SESAM, Firebird / InterBase, ParadoxFileAccess, MaxDB, Интерфейс PDO);
· автоматизированная отправка HTTP-заголовков;
· работа с HTTP-авторизацией;
· работа с cookies и сессиями;
· работа с локальными и удалёнными файлами, сокетами;
· обработка файлов, загружаемых на сервер;
· работа с XForms.
В настоящее время PHP используется сотнями тысяч разработчиков. Согласно рейтингу корпорации TIOBE, базирующемся на данных поисковых систем, в мае 2016 года PHP находился на 6 месте среди языков программирования[9]. К крупнейшим сайтам, использующим PHP, относятся Facebook, Wikipedia и др.
Входит в LAMP — распространённый набор программного обеспечения для создания и хостинга веб-сайтов (Linux, Apache, MySQL, PHP).
Хотя PHP и не слишком распространён в данной области, его можно использовать и для создания GUI-приложений.
Для создания кроссплатформенных приложений служат пакеты PHP-GTK и PHP-Qt, представляющие собой обёртки для соответствующих популярных библиотек виджетов. Также существует среда разработки кроссплатформенных приложений DevelNext[12].
Для создания графических приложений для Windows существуют свободные пакеты WinBinder (написан на Си, фактически — обёртка для WinAPI), PQBuilder (написан на PHP с использованием библиотеки PHPQt5), а также предшественник DevelNext — среда быстрой разработки DevelStudio[13].
Кроме этого существует реализация PHP для .NET/Mono — Phalanger и для JVM — JPHP, результатом компиляции PHP-кода в Phalanger может быть любое .NET-приложение, в то же время JPHP поддерживает расширение Swing, почти полностью портированное из среды Java.