API поисковой машины: XML файл результатов поиска

Что такое XML

Формат

XML результаты и реляционные СУБД

Что такое XML

язык XML - современный промышленный стандарт для хранения и обмена данными.

XML для разработчиков-профессионалов .NET: подробнее

XML для разработчиков-профессионалов .NET

Если Вы еще не знакомы с форматом XML - самое время начать его изучение. Конечно, весь объем материала, который скрывается за парой слов 'формат XML' огромен, но совсем не обязательно освоить его сразу весь. Для понимания парадигмы обмена структурированной информацией посредством текстовых файлов достаточно иметь минимальное представление о формате HTML - он отдаленно напоминает (но не является подмножеством, скорее это двоюродные братья) XML. Поисковая машина FAIND - простой пример использования данного формата для передачи информации между слабо связанными частями программы (см. описание .NET компонента, а также примеры программ). 

Сфера применения языка XML растет очень быстро благодаря его стандартизации. К примеру, офисный пакет MS Office содержит полноценную поддержку для этого формата, благодаря чему можно, к примеру, базу данных (схема+данные) выгрузить в XML файл (плюс файл XSD - это уже детали) и загрузить эту базу в MS Access 2003. Текстовый процессор OpenOffice также хранит документы в XML.

Ознакомится с оригинальным стандартом (нормативными материалами) можно на веб-сайте консорциума W3C. Перевод на русский язык для стандарта 1.0 можно почитать на нашем сайте, хотя для первого знакомства с языком XML рекомендуем все-таки купить и поизучать нормальную книгу, так как описание XML в изложение W3C слишком тяжелое.

Формат XML файла результатов поиска

Во избежание проблем с кодировками xml-файл формируется в utf-8.

Корневой узел - <dataroot>.

Сразу замечу, что в целях прозрачной совместимости с реляционным представлением результатов (см. sql-интерфейс) имена веток и узлов даны в верхнем регистре. Язык SQL нечувствителен к регистру, но по сложившейся традиции имена таблиц пишутся большими буквами. Чтобы не было проблем с загрузкой данных из XML в реляционную модель в тех случаях, когда СУБД все-таки различает регистр (случай встроенного SQL движка среды .NET), было решено именовать структурные элементы большими буквами.

Информация о запросе записывается в ветке QUERY (сам запрос - где и когда исполнен), PATTERN (паттерн запроса).

Каждая успешная фиксация контекста добавляет ветку <HIT>...</HIT>. Это самая полезная ветка. В ней записывается имя файла, местонахождение файла (обычно это имя архива, в котором находится файл), формат файла, сведения о достоверности фиксации, другая информация.

Кроме того, для каждой успешной фиксации может быть сформировано несколько записей в таблице FIX_COLUMN - именованные опорные точки (если Вы знакомы с регулярными выражениями - это примерно то же самое, что и подвыражения).

Общая статистика поиска записывается в таблицу STATISTICS.

  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<dataroot>

 

- <QUERY> в этой ветке - описание запроса
  <Q_ID>159016158</Q_ID> присвоенный уникальный ключ
  <Q_TEXT>child.txt -sample девочка -listfiles:xml res.xml</Q_TEXT> текст запроса
  <Q_HOST>SOLARIX</Q_HOST> имя хоста, на котором исполнен запрос
  <Q_DATE>16-01-2005</Q_DATE> дата исполнения запроса
  <Q_TIME>10:38:38</Q_TIME> время начала исполнения запроса
  </QUERY>

 

- <PATTERN> в этой ветке (их может быть несколько) - описание паттерна запроса
  <P_ID>1</P_ID> уникальный id
  <P_NAME>$0</P_NAME> присвоенное имя
  <P_CONTENT>девочка</P_CONTENT> текст паттерна
  </PATTERN>

 

- <HIT> в этой ветке - описание очередной успешной фиксации паттерна
  <HIT_ID>1</HIT_ID> уникальный id
  <HIT_P_ID>1</HIT_P_ID> для какого паттерна
  <HIT_DOC_FILE>CHILD.TXT</HIT_DOC_FILE> имя файла с текстом
  <HIT_LOCATION /> где размещается файл (если в архиве, то имя архива)
  <HIT_FORMAT>text/plain ascii cp=866</HIT_FORMAT> описание формата файла
  <HIT_DOWNLOAD /> в каком файле сохранен (для загруженных из интернета)
  <HIT_REL>1.00</HIT_REL> достоверность фиксации
  <HIT_PLAIN_CONTEXT>. - Что такое педикулез ? - спросила девочка . - У тебя голова не чешется ?</HIT_PLAIN_CONTEXT>  контекст фиксации - только текст
  <HIT_HTML_CONTEXT>.&nbsp;<br> -&nbsp;Что&nbsp;такое&nbsp;педикулез&nbsp;?&nbsp;<br> -&nbsp;спросила&nbsp;<b>девочка</b>&nbsp;.&nbsp;<br> -&nbsp;У&nbsp;тебя&nbsp;голова&nbsp;не&nbsp;чешется&nbsp;?&nbsp;</HIT_HTML_CONTEXT> контекст фиксации - с HTML разметкой для выделения опорных точек
    <HIT_FILESIZE>10000</HIT_FILESIZE> размер файла в байтах
  
<HIT_FILEMODIF>01-JUL-2005 13:00:01</HIT_FILEMODIF> дата и время последнего изменения
</HIT>

 

- <STATISTICS> ветка для общей информации об исполнении запроса
  <ST_Q_ID>159016158</ST_Q_ID> для какого запроса
  <ST_HITS>1</ST_HITS> общее число успешных фиксаций
  <ST_FILES>1</ST_FILES> просмотрено файлов
  <ST_FOLDERS>0</ST_FOLDERS> просмотрено каталогов
  <ST_PACKS>0</ST_PACKS> просмотрено архивов
  <ST_SITES>0</ST_SITES> просмотрено сайтов
  <ST_URIS>0</ST_URIS> скачано документов из интернета
  <ST_PIPES>0</ST_PIPES> просмотрено именованных каналов и сокетов
  </STATISTICS>

 

  </dataroot>

 

 

XML результаты и реляционные СУБД

Внутренняя структура данных в XML файле специально сделана так, чтобы однозначно отображаться на реляционную модель баз данных. Другими словами, сформированный XML легко загружается в схему БД в виде нескольких таблиц (QUERY, PATTERN, HIT, FIX_COLUMN, STATISTICS).

К примеру, рассмотрим загрузку в СУБД MS Access 2003. Это наиболее простой и доступный способ, так как Access входит в состав MS Office и очень широко распространен.


Итак, получен файл результатов. Пусть это будет res.xml. Запускаем MS Access. Создаем новую базу (Файл-Создать-Новая база данных). Получаем пустую базу. Импортируем в нее данные из XML (Файл-Внешние данные-Импорт).

Получается схема с несколькими таблицами.

Далее средствами Access'а можно делать запросы, формировать отчеты - мы не будем на этом останавливаться.

 

Загружать результаты поиска в БД можно и без XML файла - см. описание SQL-интерфейса поисковой машины.

Где скачать поисковую систему и SDK

Скачать SDK поисковой системы с примерами и другие компоненты можно здесь поисковая система

изменено 16-Aug-11