xml parser

Парсер XML

Парсер xml — это по сути програмный анализатор (синтаксический разборщик) xml документа. Задача парсера — прочитать документ с данными и как-то его представить пользователю (например, чтобы его можно было внести в базу данных или модифицировать).

В XML на сегодня есть 2 подхода к разбору документа: SAX и DOM. Дополнительно информацию о них ищите на сайте через форму поиска.

SAX — Simle API of XML, простой api для работы с xml файлами, довольно примитивный, но зато быстрый.

DOM — Document Object Model. На сегодня самый распространенный и продвинутый.

DOM парсер

На входе получает какой-то документ с данными, а на выходе выдает дерево объектов.

Когда мы работаем с xml, к нам в парсер могут приходить совершенно разные документы. И иногда бывает документ не для нас, и просто обработать его dom парсером будет неправильно (документ может быть неполным, не все указано, не та структура, некорректные данные). И нам надо отсеять все это на этапе обработки, т.е. т.н. валидация документа. Т.е. надо определить грамматику входящего xml документа.

И поэтому разработчики пошли по принципу декларативности: пусть парсер сам проверяет документ. Т.е. парсеру описывается набор правил, как должно быть, а он должен проверять, насколько данный документ похож, как должно быть. Среди таких описаний выделяют DTD. Рассмотрим ниже.

Описания DTD — Document Type Definition (определения типов документов)

DTD — это набор сокращений, некий язык описания (подобно xml), который позволяет указать, какие тэги мы ждем, т.е. какие элементы в нашем документе должны быть, сколько раз они имеют право повторяться, какие атрибуты должны быть у элементов, какие атрибуты обязательные и необязательные, какие сущности могут использоваться.

Сущность — это некая константа. Есть ‘встроенные’ константы — <, >, & — они заменяют запрещенные в xml символы. И есть расширяемые сущности, например, ©,  . Свои собственные сущности можно определить так:

<!ENTITY today "Septemer 24, 2012">
<!ENTITY company "RUSAL">
//вызов этих сущностей
<?xml version="1.0"?>
<TEXT>
   Сегодня &today;
   Информация о &company;
</TEXT>

Описание DTD на сегодня устарело, редко где применяется, но поскольку его еще можно встретить, знать его синтаксис лишним не будет:

<!DOCTYPE pricelist [
<!ELEMENT pricelist (book+)>
<!ELEMENT book (title,author+,price)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT price (#PCDATA)>
]>
<pricelist>
   <book>
      <title>Название</title>
      <author>Автор</author>
      <price>123</price>
   </book>
</pricelist>

В этом примере, мы объяснили анализатору, как должно быть, описали грамматику. Вместо #PCDATA подставляются наши данные по книгам.

Т.е. DTD — это набор правил для вашего анализатора, в котором сообщается, как выглядит ваш документ.

Но как сказать анализатору, что документ нужно проверять по нашему описанию (например, как в листинкг выше)? Есть 2 способа:

  • Декларативный — см. пример листинга выше. При этом анализируемый документ называется ‘самодостаточный’ (standalone), т.е. у него есть и DTD, и сами данные. Такие документы используют очень редко, т.к. они много весят.
  • Программный. Здесь нет самого DTD, есть только ссылка на него + наши данные. Но в реальности никакой файл по ссылке не загружается, это только команда браузеру переключиться в другой режим работы. Пример:
<!DOCTYPE books SYSTEM "http://phpmove.ru/books.dtd">
<book>
      <title>Название</title>
      <author>Автор</author>
      <price>123</price>
   </book>

Самое главное назначение DTD — валидация, т.е. проверка документа на соответствие стандарту. Когда документ достаточно сложный, перед преобразованием его надо бы проверить.




Добавить комментарий

Ваш e-mail не будет опубликован.