Технология Веб-ИРБИС — различия между версиями
Sokv (обсуждение | вклад) (→Фрейм как язык разметки) |
Sokv (обсуждение | вклад) (→Обработка фреймов) |
||
Строка 288: | Строка 288: | ||
Предусмотрен '''''упрощённый синтаксис вставки на языке форматирования''''': | Предусмотрен '''''упрощённый синтаксис вставки на языке форматирования''''': | ||
<?!if p(v2225) then 'true' fi ?> | <?!if p(v2225) then 'true' fi ?> | ||
+ | |||
+ | ===Постобработка=== | ||
+ | |||
+ | Перед передачей результата выполнения фрейма клиенту происходит замена сочетаний символов | ||
+ | <.> | ||
+ | на символ двойной кавычки | ||
+ | " | ||
===Пример последовательности действий Веб-шлюза ИРБИС при формировании веб-страницы в ответ на запрос=== | ===Пример последовательности действий Веб-шлюза ИРБИС при формировании веб-страницы в ответ на запрос=== |
Версия 19:44, 18 марта 2016
Технология Веб-ИРБИС служит для создания Веб-приложений для работы с базами данных ИРБИС.
Данная технология реализована в виде одноимённого программного продукта – Веб-ИРБИС.
Содержание
Веб-шлюз ИРБИС
Программный модуль Веб-шлюз ИРБИС обеспечивает обработку клиентских запросов.
Веб-шлюз ИРБИС является шлюзом CGI.
Запрос может осуществляться по методу POST или GET.
Общая схема работы Веб-шлюза ИРБИС
Последовательность операций шлюза:
- Чтение параметров INI файла
- Препроцессинг
- Формальный контроль правильности параметров
- Интерпретация поискового запроса
- Авторизация
- Выполнение скрипта защиты
- Повторная авторизация
- Выполнение поиска
- Формирование ответа (объединение и обработка фреймов)
- Определение HTTP заголовков на основе INI файла
- Возврат ответа
В случае возникновения ошибки выполнения или превышения времени обработки запроса шлюз возвращает ошибку (error.html).
Препроцессинг
Скрипт-защита
Формат скрипта защиты выполняет две функции: 1) проверку поступивших параметров запроса и защиту от взлома 2) обработку и дополнение параметров.
Первая строка, сформированная форматом срипт-защиты, определяет общий результат – если это 0 или файлом не было возвращено никаких значений – скрипт-защита определила ошибку, если результат 1 или файлом были возвращены другие ненулевые значения – ошибки нет. В первом случае шлюз возвращает error.html, в последнем случае шлюз читает остальные строки формата и изменяет параметры запроса на новые.
Например, строка ‘SCRIPT_DONE=YES’/ задаёт параметру SCRIPT_DONE значение YES.
Авторизация пользователя
Авторизация даёт возможность заказывать литературу, просматривать формуляр и редактировать корзину заказов.
Для авторизации используется база RDR. Авторизация происходит по идентификатору и, если в пользовательском запросе задан параметр Z21FLAGID=1, – по фамилии. После авторизации шлюз выполняет шифрование идентификатора, и зашифрованный идентификатор передаётся при переходе по страницам.
Инициализация параметров
После поступления клиентского запроса осуществляется инициализация параметров веб-шлюза на основе параметров CGI.
Обрабатываемый шлюзом набор параметров определяется конфигурационным файлом Веб-шлюза ИРБИС.
Эти параметры доступны в контексте фреймов.
Параметры используются, в том числе, для отслеживания состояния веб-страницы. В ответ на HTTP-запрос клиента (обычно – в генерируемую html-страницу, передаваемую клиенту) может включить набор пользовательских параметров вместе с их значениями, полученными в запросе, для чего есть специальная команда.
Отслеживание состояния осуществляется с использованием следующих этапов: 1) данные передаются на веб-шлюз в виде параметров запроса; 2) веб-шлюз передаёт данные вместе со сформированной страницей в скрытых полях форм HTML.
Выполнение команды
Затем шлюз переходит к выполнению команды. Команда соответствует переданному параметру C21COM.
В контексте выполнения команды используются полученные параметры.
Для каждой команды есть набор основных параметров, логика использования которых предопределена самим веб-шлюзом.
К основным параметрам шлюза относятся:
- C21COM – команда, которую должен выполнить веб-шлюз.
- I21DBN – имя профиля. Веб-шлюз ИРБИС в соответствии с именем профиля определяет набор фреймов, из которых составит ответ клиенту. Веб-шлюз ИРБИС ищет названия фреймов в файле irbis_server.ini в секции, название которой соответствует значению параметра I21DBN (подробнее в разделе Роль фреймов в работе веб-шлюза ИРБИС).
- P21DBN – имя базы данных.
- Z21ID – значение параметра авторизации.
Кроме основных, есть пользовательские параметры – все остальные параметры.
Особенность пользовательских параметров в том, что их набор и использование полностью могут быть определены (переопределены) пользователями системы ИРБИС:
- Определение параметров даётся в конфигурационном файле Веб-шлюза ИРБИС.
- Параметры доступны в виде виртуальных полей на языке форматирования в контексте фреймов.
Ответ веб-шлюза ИРБИС клиенту
Порядок формирования ответа веб-шлюза ИРБИС клиенту зависит от команды.
Ответ с использованием фреймов
Для команд, представленных в таблице, осуществляется генерация ответа с использованием технологии выбора и обработки фреймов.
Обычно это динамически формируемая веб-страница.
Таблица. Команды веб-шлюза ИРБИС.
|
Выбор набора фреймов зависит от: команды (параметр C21COM) и профиля (параметр I21DBN).
Возможные наборы фреймов предварительно сконфигурированы и указаны в конфигурационном файле irbis_server.ini.
Откуда шлюз и считывает нужный набор, в зависимости от параметров (C21COM и I21DBN).
Каждой команде веб-шлюза ИРБИС соответствует имя параметра в файле irbis_server.ini (см. таблицу Команды веб-шлюза ИРБИС).
Отправка клиенту ресурсного файла
Для команд, представленных в таблице, отправка клиенту ресурсного файла.
Таблица. Команды веб-шлюза ИРБИС.
|
Команда поиска – S
Пример поиска всех страниц одного текста PDF
Здесь мы предполагаем, что:
- Работаем в контексте базы данных IBIS.
- Поисковое выражение TXT=2__$ позволяет найти все страницы файла 2.pdf.
Чтобы создать произвольный запрос, не связанный с существующим функционалом системы, можно создать новый профиль EXAMPLE1. Для этого в конфигурационном файле веб-шлюза ИРБИС irbis server.ini нужно добавить секцию EXAMPLE1
[EXAMPLE1] FRAMES=C:\irbis\irbis_plus\IRBIS64\DATAI\frames_15_plus\FullText\ ShowFrames= SearchFrames=RESULT DBNAME=IBIS
где значение параметра FRAMES должно соответствовать местонахождению фреймов.
Для команды поиска порядок формирования ответа определяется параметром SearchFrames. И запись
SearchFrames=RESULT
означает, что при формировании Веб-шлюзом ответа на команду поиска не участвуют фреймы, участвует только формат, который будет указан в запросе.
В качестве этого формата предлагается создать файл example1.pft со следующим содержимым
mfn,/,
Этот формат выводит список MFN найденных записей.
Теперь всё готово, чтобы выполнить запрос
http://localhost:8080/cgi-bin/irbis64r_15_plus/cgiirbis_64_ft.exe?C21COM=S&P21DBN=IBIS&I21DBN=EXAMPLE1&S21All=%3C.%3ETXT%3D2__%24%3C.%3E&S21FMT=example1&USES21ALL=1&SEARCH_IN_FULL_TEXT=1&Z21FLAGID=0&Z21ID=111
В основных полях мы указываем команду поиска (S), базу данных IBIS, профиль EXAMPLE1, идентификатор пользователя.
Поле S21All содержит запрос на языке запросов ИРБИС. Если его декодировать из кодировки URL, то он будет выглядеть так
S21All=<.>TXT=2__$<.>
где точка в угловых скобках заменяет двойную кавычку, являющуюся ограничителем запроса в языке запросов ИРБИС, то есть указанный запрос следует читать как
"TXT=2__$"
Формат вывода найденных записей, который предлагалось подготовить выше, указан в параметре S21FMT, без расширения.
Результатом выполнения этого запроса будет обещанный список mfn, например
0000000002 0000000006 0000000013 0000000018
Можно усложнить запрос, ограничив вывод порцией из 2 результатов, начиная со 2-го (параметры S21CNR и S21STN)
http://localhost:8080/cgi-bin/irbis64r_15_plus/cgiirbis_64_ft.exe?C21COM=S&P21DBN=IBIS&I21DBN=EXAMPLE1&S21All=%3C.%3ETXT%3D2__%24%3C.%3E&S21FMT=example1&USES21ALL=1&SEARCH_IN_FULL_TEXT=1&Z21FLAGID=0&Z21ID=111&S21CNR=2&S21STN=2
Результатом будет
0000000006 0000000013
Можно усложнить формат вывода найденных записей example1.pft, добавив информацию о количестве найденных, а также введённых порционных ограничениях
mfn,'; кол-во найденных = ',v1001,'; с какого номера начать = ',v2223,'; размер порции = ',v2224,/,
где 1001, 2223 и 2224 – виртуальные поля, в которые шлюз помещает данные в соответствии с таблицей виртуальных полей шлюза.
Все данные, которые шлюз принял в виде параметров, попадают в виртуальные поля в соответствии правилами, заданными в файле irbis_server.ini. Например, параметру S21CNR соответствует метка 2224, параметру S21STN – 2223.
Результатом будет
0000000006; кол-во найденных = 4; с какого номера начать = 2; размер порции = 2 0000000013; кол-во найденных = 4; с какого номера начать = 2; размер порции = 2
В последнем примере количество найденных и данные о порции повторяются с каждым результатом поиска, что является избыточным.
Такой избыточности позволяют избежать применение фреймов.
Создадим файл example1.frm (его местоположение должно соответствовать параметру FRAMES в профиле) со следующим содержимым
Вывод через фрейм... <?! 'кол-во найденных = ',v1001,'; с какого номера начать = ',v2223,'; размер порции = ',v2224,/, ?>
Чтобы задействовать этот фрейм, в описании профиля можно изменить значение параметра SearchFrames следующим образом:
SearchFrames=example1.frm,RESULT
что следует понимать так, что шлюз вернёт результат выполнения команды поиска, составленный из:
- результата выполнения фрейма example1.frm
- результатов работы формата, который отработает для каждого результата поиска (обозначается словом RESULT).
Кроме того, чтобы измежать дублирующихся данных, в example1.pft оставим только вывод MFN:
mfn,/,
Результатом будет
Вывод через фрейм... кол-во найденных = 4; с какого номера начать = 2; размер порции = 2 0000000006 0000000013
Команда показа терминов словаря – T
Пример команды показа терминов словаря
http://localhost:8080/cgi-bin/irbis64r_15_plus/cgiirbis_64_ft.exe?Z21ID=1500323880383212&SEARCH_IN_FULL_TEXT=1&T21CNR=10&C21COM=T&T21PRF=KT=&I21DBN=IBIS&T21TRM=a&
где:
- C21COM=T определяет команду,
- I21DBN=IBIS базу данных,
- Z21ID=1500323880383212 идентификатор читателя в зашифрованном виде,
- T21PRF=KT= префикс словаря,
- T21TRM=a – требование терминов, начинающихся на a.
Пример возврата:
A20040830ARUSY|1 A20041017ABELY|1 A20041118ARUSY|1 A2H|2 A540|9 A54001|7 A550UTILIZATION|1 AACDEMY|1 AASL|2 AASLPUBSANDJOURNALS|2
Добавление пользовательского параметра
Добавление пользовательского параметра осуществляется в несколько шагов:
- добавление пользовательского параметра в файл инициализации шлюза irbis_server.ini
- Необходимо добавить описание нового пользовательского параметра в настроечный файл irbis_server.ini, задав имя и метку параметра. Для этого в секции [PARAMETRS] используются параметры ini файла PARNAME_ и PARTAG_ (не стоит путать термины пользовательские параметры веб-шлюза и параметры ini файла), где вместо знака подчёркивания ставится номер пользовательского параметра по порядку, например:
PARNAME2=C21COM PARTAG2=2222
- В этом примере мы видим описание второго по порядку из определённых в секции [PARAMETRS] параметров: имя параметра C21COM, метка параметра 2222. Имя и метка параметров должны быть уникальными. После того как описание пользовательского параметра добавлено необходимо изменить значение параметра PARCOUNT в секции [PARAMETRS], его значение должно быть равно порядковому номеру последнего описания пользовательского параметра.
- Примечание: обратите внимание, что в файле irbis_server.ini хранятся описания не только пользовательских параметров, а присутствует также описания предустановленных параметров.
- использование в файлах .frm команд <!FORMAT=INSERT_ALL_PARAMETERS> и <!FORMAT=INSERT_ALL_PARAMETERS_IN_QUERY>
- Команда <!FORMAT=INSERT_ALL_PARAMETERS> обеспечивает вставку в код HTML-страницы всех непустых переданных веб-шлюзу параметров в виде скрытых элементов формы, например:
<input type="hidden" name="PARAM_NAME" value="PARAM_VALUE">
- Команда <!FORMAT=INSERT_ALL_PARAMETERS_IN_QUERY> вставляет в код HTML-страницы гиперссылку, содержащую все переданные веб-шлюзу параметры.
Система команд Веб-шлюза ИРБИС
Система команд Веб-шлюза ИРБИС позволяет задать собственный набор фреймов и порядок их объединения для каждой задачи. Для разных задач предусмотрены разные команды, например: для страницы приглашения к поиску, результата поиска, отбора записей в корзину заказов и т.д.
Обработка фреймов
В общем случае, веб-страница формируется путём объединения (склеивания) следующих частей:
- заголовочной и подвальной частей, формируемых при помощи фреймов и
- тела страницы, формируемого при помощи формата, который отрабатывает на наборе записей базы данных (соответствующих запросу пользователя).
Фрейм как язык разметки
Фрейм представляет собой текстовый файл, содержимое которого передаётся клиенту (в веб браузер), который также может содержать вставки, которые будут обработаны определённым образом перед передачей клиенту.
Предусмотрены вставки следующих видов:
- вставка на языке форматирования ИРБИС,
- вложенный фрейм.
Вставка на языке форматирования обозначается следующим образом
<!FORMAT
Пример:
<!FORMAT=if v3409='' then 'value=""' else 'value=','"',v3409,'"',fi>
Примечание: если вставка на языке форматирования содержит символы, кодирующиеся в UTF-8 более чем одним байтом (например, кириллицу), то формат обязательно должен начинаться с восклицательного знака. Это связано с тем, что формат в кодировке UTF-8 должен предваряться восклицательным знаком, а все фреймы храняться именно в кодировке UTF-8.
Пример:
<!FORMAT=!if (v3400='') then if (val(v1001) > 1) then '<tr><td></td><td><input name="SEARCHIN" type="checkbox"><span style="padding-left : 10px;padding-right : 10px;vertical-align : 15%;font-size:13px;font-family:sans-serif;">в найденном</span></td></tr>' else '<input type="hidden" name="SEARCHIN" value="">' fi else '<input type="hidden" name="SEARCHIN" value="">' fi>
Пример вложенного фрейма:
<!FORMAT=if &uf('IMAIN,SHOW_DUBLIN_CORE,0') <> '0' then /'<!FILE=Dublin_Core.frm>' fi>
Предусмотрен упрощённый синтаксис вставки на языке форматирования:
<?!if p(v2225) then 'true' fi ?>
Постобработка
Перед передачей результата выполнения фрейма клиенту происходит замена сочетаний символов
<.>
на символ двойной кавычки
"
Пример последовательности действий Веб-шлюза ИРБИС при формировании веб-страницы в ответ на запрос
Веб-шлюз ИРБИС при получении команд F, S, T, Z, R выполняет следующую последовательность действий:
- Веб-шлюз получил запрос. Запрос содержит параметры C21COM, I21DBN и другие.
- В файле irbis_server.ini веб-шлюз находит секцию, имя которой соответствует значению параметра I21DBN. Иными словами: с одной стороны, в качестве значения параметра I21DBN указывается имя профиля, с другой стороны, для каждого профиля в файле irbis_server.ini должна содержаться секция, имя которой совпадает с именем профиля.
- В указанной секции файла irbis_server.ini веб-шлюз находит значение параметра, соответствующего указанной в параметре C21COM команде (см. таблицу Команды веб-шлюза ИРБИС). Полученное значение должно представлять собой список фреймов.
- Фреймы обрабатываются, и результат, представляющий собой HTML-страницу, отправляется клиенту в качестве ответа.
Примеры перехода пользователя по страницам Веб-ИРБИС
Пример запроса начальной страницы:
http://localhost:8080/cgi-bin/irbis64r_15_plus/cgiirbis_64_ft.exe?C21COM=F&I21DBN=IBIS_FULLTEXT&P21DBN=IBIS&Z21ID=&S21CNR=5
где указаны:
- команда шлюза F (показ страницы)
- имя профиля IBIS_FULLTEXT
- база данных IBIS
- авторизация не осуществлялась
Параметр S21CNR не обязателен.
При авторизации запрос приобретает следующий вид
http://localhost:8080/cgi-bin/irbis64r_15_plus/cgiirbis_64_ft.exe?I21DBN=AUTHOR&C21COM=F&P21DBN=IBIS&Z21FLAGID=1&Z21FAMILY=%D0%B1%D1%80%D0%BE%D0%B4%D0%BE%D0%B2%D1%81%D0%BA%D0%B8%D0%B9&Z21ID=111
где указаны:
- команда шлюза F (показ страницы)
- имя профиля AUTHOR
- база данных IBIS
- параметры авторизации: Z21FLAGID, фамилия читателя Z21FAMILY и идентификатор читателя Z21ID
При поиске по слову "библиотека" запрос приобретает следующий вид
http://localhost:8080/cgi-bin/irbis64r_15_plus/cgiirbis_64_ft.exe?Z21ID=1704320195313012&I21DBN=IBIS_fulltext&SEARCH_STRING=%D0%B1%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA%D0%B0&FT_REQUEST=&FT_S21STR=%D0%B1%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA%D0%B0&SEARCHIN=&USES21ALL=1&FT_PARAMS=&FT_DISTANCE=&S21CNR=5&C21COM1=%D0%98%D1%81%D0%BA%D0%B0%D1%82%D1%8C&FT_RESTRICT=&AVT_S21STR=&AVT_S21P03=A%3D&AVT_S21P02=1&AVT_S21LOG=1&NAME_S21STR=&NAME_S21P03=T%3D&NAME_S21P02=1&NAME_S21LOG=1&UDC_S21STR=&UDC_S21P03=U%3D&UDC_S21P02=0&UDC_S21LOG=1&IZD_S21STR=&IZD_S21P03=M%3D&IZD_S21P02=1&IZD_S21LOG=1&DAT_S21P06=&DAT_S21P07=&DAT_S21P03=G%3D&DAT_S21P02=1&DAT_S21LOG=5&P21DBN=IBIS&FT_S21LOG=4&FT_S21P03=K%3D&FT_S21P01=3&S21STN=1&S21REF=10&S21FMT=briefHTML_ft&C21COM=S&S21COLORTERMS=1&FT_PREFIX=KT%3D
где указаны:
- команда шлюза S (поиск)
- имя профиля IBIS_FULLTEXT
- база данных IBIS
- параметры авторизации: Z21ID
- текущий запрос SEARCH_STRING и предыдущий запрос FT_S21STR (одинаковые)
- USES21ALL=1 (использовать параметр S21ALL, применяется в поиске связных)
- S21CNR=5 (порция при показе найденных)
- S21REF=10 (для правильного формирования ссылок на страницы с результатами поиска)
- C21COM1
- FT_PREFIX
- S21FMT=briefHTML_ft
- AVT_S21P03=A%3D
- AVT_S21P02=1
- AVT_S21LOG=1
- NAME_S21P03=T%3D
- NAME_S21P02=1
- NAME_S21LOG=1
- UDC_S21P03=U%3D
- UDC_S21P02=0
- UDC_S21LOG=1
- IZD_S21P03=M%3D
- IZD_S21P02=1
- IZD_S21LOG=1
- DAT_S21P03=G%3D
- DAT_S21P02=1
- DAT_S21LOG=5
- P21DBN=IBIS
- FT_S21LOG=4
- FT_S21P03=K%3D
- FT_S21P01=3
- S21STN=1
- S21COLORTERMS=1
Ссылки
См. также: