Введение
Язык SmokeDoc Script (SDS) предназначен для обработки типовых текстовых документов с
целью извлечения из них требуемых фрагментов текста.
Обрабатываемый документ проходит через цепочку директив и фильтров. Цепочка определяется директивой LocationMatch <ereg>. Цепочка применяется если имя документа подходит под регулярное выражение <ereg>. Один документ может быть обработан только одной цепочкой. Перед началом обработки содержимое документа помещается в переменную @body. После из этой переменной могут быть извлечены фрагменты и помещены в другие переменные с помощью фильтров. Фильтры могут изменять содержимое переменных, удалять переменные или добавлять новые. Несколько переменных в контейнере могут иметь одно название, в этом случае, если применить директиву к переменной с именем, например, varname, то эта директива будет применена ко всем переменным с таким именем.
Основные
| Документ | локальный или сетевой типовой текстовый файл: Web-страница, RSS-лента, партнерский фид, CVS, XML, SQL и др. |
| Директива | предопределенная функция языка SDS |
| Фильтр | предопределенный макрос для обработки текстовых данных |
| Цепочка | набор директив и фильтров |
| Контейнер | общее хранилище переменных |
| Группа | извлекаемые данные могут размещены в разных группы, что позволяет более эффективно их экспортировать. |
Обозн
| [] | значение в квадратных скобках необязательно. |
| # | начало комментария. |
| \t | табуляция, определяет вложенность директив. |
Перем
Все переменные содержатся в хранилище, называемом контейнер, и бывают двух типов:
- Обычные переменные. Переменных такого типа с одинаковым именем можно поместить в контейнер сколько угодно.
- Сингл-переменные. Можно поместить только одну переменную с некоторым именем в контейнер. Если в контейнере уже есть сингл-переменная с некоторым именем, то при помещении в контейнер сингл-переменной с таким же именем, новая переменная заменит старую. Имена сингл-переменных начинаются со знака $.
Имена переменных не чувствительны к регистру, могут состоять из латинских букв, цифр, тире и знака подчеркивания. В начале имени могут быть символы @ и $.
Пример прогр
Этот пример демонстрирует, как можно извлечь данные из RSS ленты.
LocationMatch #.#
# Получаем записи
Filter Search @body WithParams pattern=#<item>(.+)</item>#Uuis name=items index=1
# Проходимся по всем записям
Foreach items As $item
# Выбираем данные по каждой из записей
Filter Search $item WithParams pattern=#<title>(.+)</title>#Uuis name=item_title index=1
Filter Search $item WithParams pattern=#<link>(.+)</link>#Uuis name=item_link index=1
Filter Search $item WithParams pattern=#<pubDate>(.+)</pubDate>#Uuis name=item_date index=1
Filter Search $item WithParams pattern=#<dc:creator>(.+)</dc:creator>#Uuis name=item_author index=1
Filter Search $item WithParams pattern=#<category>(.+)</category>#Uuis name=item_category index=1
Filter Search $item WithParams pattern=#<description>(.+)</description>#Uuis name=item_description index=1
Filter Search $item WithParams pattern=#<content:encoded>(.+)</content:encoded>#Uuis name=item_content index=1
# Раскодируем сущности
Filter Html item_title item_link item_author WithParams direction=decode
# Удаляем тег CDATA
Filter Replace item_category item_description item_content WithParams search=#^<\!\[CDATA\[# regexp=true
Filter Replace item_category item_description item_content WithParams search=#\]\]>$# regexp=true
MakeArray item_cats item_category
# Создаем элемент
MakeItem entry title=item_title link=item_link date=item_date author=item_author category=item_cats shortbody=item_description longbody=item_content
# Удаляем временные переменные
Unset ^item_
#Dump entry
StoreItem entry
| SmokeDoc Script Reference | Стандартные директивы |
