Выбор технологии парсера
В качестве инструмента программирования парсера выступает скриптовый язык PHP. PHP (англ. Hypertext Preprocessor – препроцессор гипертекста) – это широко используемый язык сценариев общего назначения с открытым исходным кодом. Этот язык был специально разработан для написания web-приложений (сценариев), исполняющихся на Web-сервере [3].
Использование языка программирования РНР обусловлен следующими характеристиками:
простотой;
эффективностью;
безопасностью;
гибкостью.
Также PHP обладает довольно широким набором методов парсинга.
Парсинг (англ. parsing) – это автоматизированный сбор всего содержимого или конкретных данных с какого-либо сайта или сервиса. Скрипт или программа, занимающаяся, непосредственно, сбором, анализом и преобразованием требуемой информации называется парсером [8].
Любой парсер состоит из трех частей, которые отвечают за три отдельных процесса:
Получение информации в исходном виде;
Извлечение и преобразование данных;
Генерация результата.
Основными инструментами парсинга, которые предлагает PHP являются:
объектная модель Документа (DOM);
интерфейс Simple API for XML (SAX);
парсер SimpleXML;
парсер XPath;
регулярные выражения (regular expressions).
Базовыми понятиями при работе с текстом источника обрабатываемой информации являются XML и HTML.
HTML (англ. Hypertext Markup Language – язык разметки гипертекста) – это стандартный язык разметки документов во Всемирной паутине.
XML (англ. eXtensible Markup Language – расширяемый язык разметки) – рекомендованный Консорциумом Всемирной паутины язык разметки, фактически представляющий собой свод общих синтаксических правил. XML – текстовый формат, предназначенный для хранения структурированных данных, для обмена информацией между программами, а также для создания на его основе более специализированных языков разметки (например, XHTML) [2].
Наиболее общей задачей обработки XML является именно разбор XML-документа, т.е. парсинг. Он включает в себя чтение XML-документа для определения его структуры и содержимого [9].
При разработке программы Парсера расписания была выбрана ориентация на один формат HTML по следующим причинам:
текст в формате HTML, в отличие от XML, может содержать незакрытые теги, как, например, широко используемый тег переноса строки <br> в HTML;
в XML значения атрибутов обязательно должны быть заключены в кавычки, а HTML допускает возможность использования атрибутов без кавычек;
помимо этого, HTML является старейшим форматом текста в web-пространстве и также поддерживается абсолютно всеми браузерами.
Вывод: данный формат является более универсальным и независимым форматом текстовых данных, к тому же текст любого другого формата легко преобразовать в формат HTML.
Большинство из выше указанных парсеров предназначены для работы именно с XML. Среди их прочих неудобств для данного программного обеспечения можно отметить следующие:
DOM строит в памяти дерево XML-документа, следовательно, если документ действительно большой, дерево DOM может требовать большого объема памяти;
дерево DOM содержит множество объектов, представляющих содержимое исходного XML-документа, следовательно, если требуется лишь часть документа, создание этих объектов вызывает необоснованное усложнение кода;
парсер DOM должен построить полное дерево DOM прежде, чем код сможет работать с ним, следовательно, при разборе большого XML-документа, можно получить значительную задержку, ожидая, пока парсер закончит работу;
парсер SAX разработан с меньшими требованиями к объему памяти, но он перекладывает больше работы на программиста;
события SAX не сохраняют состояние, т.е. нельзя посмотреть на отдельное событие SAX и вычислить его содержимое;
парсеры SimpleXML и XPath значительно облегчает работу с XML-файлами по сравнению с DOM и SAX, но в нашем случае они не подходит, так как требуют наличия определенных тегов в структуре текста.
Регулярные выражения – это специальный язык для работы с текстом. Причём подчас одна строчка с их использованием может заменить несколько страниц обычного кода. С помощью регулярных выражений можно эффективно искать фрагменты текста любой сложности, заменять одни вхождения на другие.
Основа регулярного выражения – шаблон. С его помощью мы описываем формат нужного нам фрагмента текста, а затем либо проверяем, подходит ли текст под шаблон, либо вырезаем одно или несколько вхождений шаблона, либо заменяем на какой-либо текст [7].
Регулярные выражения являются более простым методом, предлагаемым языком PHP, для достижения поставленных нами целей по сравнению с XML-парсерами. Регулярные выражения характеризуются отсутствием необходимости использования усложненных инструментов, занимающихся разборкой структуры текста или основанных на большом количестве внутренних методов, и большей эффективностью, чем поэтапный разбор и выборка текстовых фрагментов посредством других функций работы с символами.
