Прайс-листы.
С помощью технологии Alex возможно решение такой задачи: занесение в базу данных цен на товары определенных категорий из прайс-листов на Web-страницах. Настройка при этом заключается в создании банка шаблонов, отражающего строение типичных прайс-листов.
Вот фрагмент прайс-листа, содержащий цифровые фотоаппараты:
| Название |
Цена |
| Olympus C-2000zoom |
870 |
| Olympus C-1400XL |
780 |
| Agfa ePhoto CL50 |
700 |
| Agfa ePhoto CL30 |
470 |
| Agfa ePhoto 1680 |
730 |
| Canon PowerShot A50 |
440 |
На первый взгляд, прайс-лист устроен довольно просто: таблица, в одной колонке которой — название товара, в другой — цена. Какие шаблоны нужны для того, чтобы прайс-лист в формате HTML можно было опознать как прайс-лист и занести в базу данных? Прежде всего, необходимы шаблоны [Товар] и [Цена]. И если [Цена] может быть устроена довольно просто:
где «число» — это предопределенный системный шаблон,
то название товара — более сложная конструкция, которая может включать категорию товара («цифровой фотоаппарат»), название фирмы-производителя («Agfa»), марку товара («ePhoto 1680»), а часто — и некоторые характеристики товара.
Итак, определим название товара так:
| [Товар] = |
| |
|
([Категория]) ([Производитель]) [Марка] ([Характеристики])
| |
Круглые скобки обозначают опциональность элементов шаблона.
Строка прайс-листа может иметь следующий вид:
| [Прайс-строка] = |
| |
|
[Товар] [Разделитель] [Цена] . |
где [Разделитель] — это вспомогательный шаблон, который позволяет учитывать различные способы отделения одного поля от другого, а . — произвольный контекст.
Наконец, сам прайс-лист — это множество строк, первая строка — заголовок:
| [Прайс-лист] = |
| |
|
[Первая строка] [Прайс-строка]= |
Здесь = — это признак повторения произвольное число раз.
Первую строку можно определить так:
| [Первая строка] = |
| |
|
[Заголовок товара] [Разделитель] [Заголовок цены] (.) |
Шаблоны [Производитель], [Категория] и т.д. заполняются уже названиями конкретных производителей, категорий. Определив таким образом всего 12 шаблонов, связанных со структурой прайс-листа, и наполняя шаблоны нижнего уровня, мы можем найти все традиционные прайс-листы, независимо от их стиля и способа кодирования в HTML, и занести их в базу данных уже в нормализованном виде. Такой подход аналогичен восприятию человека — человек выделяет базовые структурные элементы, абстрагируясь от способов реализации этой структуры.
Выше мы рассмотрели довольно простой случай. Однако на практике встречаются и такие строки прайса:
Compaq Armada M700 470006-459 PIII-850/20GB/128MB/14.1″ TFT/DVD/LAN/W98
Здесь в одной строке приведены все значимые характеристики товара (ноутбука). Для того, чтобы эти свойства выделить в отдельные поля, потребуется чуть больше работы (порядка 20 шаблонов). Вот пример устройства шаблона Размер экрана:
| [Размер экрана] = |
| |
|
[число]» |
|
[число]» |
|
[число](_)tft |
После создания таких шаблонов каждой строке в прайсе мы получим заполненной такую структуру:
| CD-привод |
DVD |
| Диск |
20 |
| Марка |
Armada |
| Модификация |
M700 |
| ОС |
W98 |
| Память |
128 |
| Производитель |
Compaq |
| Размер экрана |
14.1 |
| Сетевая карта |
Есть |
| Тип процессора |
PIII |
| Частота процессора |
850 |
Таким образом, прайс-лист может быть преобразован в таблицу с параметрами товаров. Создание банка шаблонов для качественного покрытия данной категории товаров (ноутбуки) занимает несколько часов в визуальной оболочке Алекс.