Технология Веб-ИРБИС — различия между версиями

Материал из Wikipedia
Перейти к: навигация, поиск
(Обработка фреймов)
 
(не показаны 23 промежуточные версии этого же участника)
Строка 9: Строка 9:
 
''Веб-шлюз ИРБИС'' является шлюзом CGI.
 
''Веб-шлюз ИРБИС'' является шлюзом CGI.
  
===Запрос к Веб-шлюзу ИРБИС и ответ клиенту===
+
Запрос может осуществляться по методу POST или GET.
 +
 
 +
===Общая схема работы Веб-шлюза ИРБИС===
 +
 
 +
Последовательность операций шлюза:
 +
* Чтение параметров INI файла
 +
* Препроцессинг
 +
** Формальный контроль правильности параметров
 +
** Интерпретация поискового запроса
 +
** Авторизация
 +
** Выполнение скрипта защиты
 +
** Повторная авторизация
 +
* Выполнение поиска
 +
* Формирование ответа (объединение и обработка фреймов)
 +
* Определение HTTP заголовков на основе INI файла
 +
* Возврат ответа
 +
 
 +
В случае возникновения ошибки выполнения или превышения времени обработки запроса шлюз возвращает ошибку (error.html).
 +
 
 +
====Препроцессинг====
 +
 
 +
=====Скрипт-защита=====
 +
 
 +
Формат скрипта защиты выполняет две функции: 1) проверку поступивших параметров запроса и защиту от взлома 2) обработку и дополнение параметров.
 +
 
 +
Первая строка, сформированная форматом срипт-защиты, определяет общий результат – если это 0 или файлом не было возвращено никаких значений – скрипт-защита определила ошибку, если результат 1 или файлом были возвращены другие ненулевые значения – ошибки нет. В первом случае шлюз возвращает error.html, в последнем случае шлюз читает остальные строки формата и изменяет параметры запроса на новые.
 +
 
 +
Например, строка ‘SCRIPT_DONE=YES’/ задаёт параметру SCRIPT_DONE значение YES.
 +
 
 +
=====Авторизация пользователя=====
  
Запрос может осуществляться по методу POST или GET.
+
Авторизация даёт возможность заказывать литературу, просматривать формуляр и редактировать корзину заказов.
 +
 
 +
Для авторизации используется база RDR. Авторизация происходит по идентификатору и, если в пользовательском запросе задан параметр Z21FLAGID=1, – по фамилии. После авторизации шлюз выполняет шифрование идентификатора, и зашифрованный идентификатор передаётся при переходе по страницам.
 +
 
 +
====Инициализация параметров====
 +
 
 +
После поступления клиентского запроса осуществляется инициализация параметров веб-шлюза на основе параметров CGI.
 +
 
 +
Обрабатываемый шлюзом набор параметров определяется конфигурационным файлом Веб-шлюза ИРБИС.
  
В соответствии со стандартом CGI Веб-шлюз ИРБИС 64 получает из запроса набор параметров.
+
Эти параметры доступны в контексте фреймов.
  
В зависимости от полученных параметров шлюз формирует ответ, который может быть как страницей HTML, так и файлом.
+
Параметры используются, в том числе, для отслеживания состояния веб-страницы. В ответ на HTTP-запрос клиента (обычно – в генерируемую html-страницу, передаваемую клиенту) может включить набор пользовательских параметров вместе с их значениями, полученными в запросе, для чего есть специальная команда.
  
===Параметры Веб-шлюза ИРБИС===
+
Отслеживание состояния осуществляется с использованием следующих этапов: 1) данные передаются на веб-шлюз в виде параметров запроса; 2) веб-шлюз передаёт данные вместе со сформированной страницей в скрытых полях форм HTML.
  
Параметры делятся на ''предустановленные'' и ''пользовательские''.
+
====Выполнение команды====
  
====Предустановленные параметры шлюза====
+
Затем шлюз переходит к выполнению команды. Команда соответствует переданному параметру C21COM.
  
Предустановленные параметры могут использоваться для взаимодействия с шлюзом только по оговоренной методике. Набор предустановленных параметров, а также методика их использования предопределяются в процессе разработки системы ИРБИС. Параметры перечислены в таблице, там же описана методика их использования.
+
В контексте выполнения команды используются полученные параметры.
  
=====Основные параметры шлюза=====
+
Для каждой команды есть набор '''основных параметров''', логика использования которых предопределена самим веб-шлюзом.
  
 +
К основным параметрам шлюза относятся:
 
* <tt>C21COM</tt> – команда, которую должен выполнить веб-шлюз.
 
* <tt>C21COM</tt> – команда, которую должен выполнить веб-шлюз.
 
* <tt>I21DBN</tt> – имя [[Профили|профиля]]. Веб-шлюз ИРБИС в соответствии с именем профиля определяет набор [[Фреймы|фреймов]], из которых составит ответ клиенту. Веб-шлюз ИРБИС ищет названия фреймов в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файле irbis_server.ini]] в секции, название которой соответствует значению параметра <tt>I21DBN</tt> (подробнее в разделе [[#Роль фреймов в работе веб-шлюза ИРБИС|Роль фреймов в работе веб-шлюза ИРБИС]]).
 
* <tt>I21DBN</tt> – имя [[Профили|профиля]]. Веб-шлюз ИРБИС в соответствии с именем профиля определяет набор [[Фреймы|фреймов]], из которых составит ответ клиенту. Веб-шлюз ИРБИС ищет названия фреймов в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файле irbis_server.ini]] в секции, название которой соответствует значению параметра <tt>I21DBN</tt> (подробнее в разделе [[#Роль фреймов в работе веб-шлюза ИРБИС|Роль фреймов в работе веб-шлюза ИРБИС]]).
Строка 32: Строка 70:
 
* <tt>Z21ID</tt> – значение параметра авторизации.
 
* <tt>Z21ID</tt> – значение параметра авторизации.
  
====Система команд Веб-шлюза ИРБИС====
+
Кроме '''основных''', есть '''пользовательские параметры''' – все остальные параметры.
 +
 
 +
Особенность пользовательских параметров в том, что их набор и использование полностью могут быть определены (переопределены) пользователями системы ИРБИС:
 +
* Определение параметров даётся в конфигурационном файле Веб-шлюза ИРБИС.
 +
* Параметры доступны в виде виртуальных полей на языке форматирования в контексте фреймов.
 +
 
 +
====Ответ веб-шлюза ИРБИС клиенту====
  
Система ''команд'' Веб-шлюза ИРБИС позволяет задать собственный набор фреймов и порядок их объединения для каждой задачи. Для разных задач предусмотрены разные команды, например: для страницы приглашения к поиску, результата поиска, отбора записей в корзину заказов и т.д.
+
Порядок формирования ответа веб-шлюза ИРБИС клиенту зависит от команды.
  
Набор команд задаётся в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файле irbis_server.ini]] в контексте базы данных.
+
=====Ответ с использованием фреймов=====
  
То есть, для разных баз данных могут быть настроены разные наборы команд и фреймы.
+
Для команд, представленных в таблице, осуществляется генерация ответа с использованием технологии выбора и обработки фреймов.
  
Имена фреймов веб-шлюз ИРБИС считывает из файла <tt>irbis_server.ini</tt>. Каждой команде веб-шлюза ИРБИС соответствует имя параметра в файле <tt>irbis_server.ini</tt> (см. таблицу ''Команды веб-шлюза ИРБИС'').
+
Обычно это динамически формируемая веб-страница.
  
 
'''Таблица.''' Команды веб-шлюза ИРБИС.
 
'''Таблица.''' Команды веб-шлюза ИРБИС.
Строка 57: Строка 101:
 
   |-
 
   |-
 
   |'''R'''||'''''запись''''' – команда редактуры записей||RecUpdateFrames
 
   |'''R'''||'''''запись''''' – команда редактуры записей||RecUpdateFrames
 +
|}
 +
|}
 +
 +
Выбор набора фреймов зависит от: команды (параметр C21COM) и профиля (параметр I21DBN).
 +
 +
Возможные наборы фреймов предварительно сконфигурированы и указаны в конфигурационном файле <tt>irbis_server.ini</tt>.
 +
 +
Откуда шлюз и считывает нужный набор, в зависимости от параметров (C21COM и I21DBN).
 +
 +
Каждой команде веб-шлюза ИРБИС соответствует имя параметра в файле <tt>irbis_server.ini</tt> (см. таблицу ''Команды веб-шлюза ИРБИС'').
 +
 +
=====Отправка клиенту ресурсного файла=====
 +
 +
Для команд, представленных в таблице, отправка клиенту ресурсного файла.
 +
 +
'''Таблица.''' Команды веб-шлюза ИРБИС.
 +
{|
 +
|
 +
{| class="standard"
 +
  !Значение параметра <tt>C21COM</tt>||Описание команды
 
   |-
 
   |-
   |'''E'''||'''''экспорт''''' – команда выгрузки записей||
+
   |'''E'''||'''''экспорт''''' – команда выгрузки записей
 
   |-
 
   |-
   |'''2'''||'''''файл''''' – команда чтения внешнего объекта||
+
   |'''2'''||'''''файл''''' – команда чтения внешнего объекта
 
   |-
 
   |-
   |'''4'''||'''''скачать''''' – команда заимствования записи||
+
   |'''4'''||'''''скачать''''' – команда заимствования записи
 
  |}
 
  |}
 
|}
 
|}
  
При составлении ответа на команды '''E''', '''2''', '''4''' шлюз не использует фреймы. Поэтому в таблице ''Команды веб-шлюза ИРБИС'' отсутствует соответствующий параметр в <tt>irbis_server.ini</tt>. В случае этих команд ответ шлюза клиенту не является HTML-страницей.
+
===Команда поиска – S===
 +
 
 +
'''Пример поиска всех страниц одного текста PDF'''
 +
 
 +
Здесь мы предполагаем, что:
 +
* Работаем в контексте базы данных IBIS.
 +
* Поисковое выражение <tt>TXT=2__$</tt> позволяет найти все страницы файла <tt>2.pdf</tt>.
 +
 
 +
Чтобы создать произвольный запрос, не связанный с существующим функционалом системы, можно создать новый профиль EXAMPLE1. Для этого в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|конфигурационном файле веб-шлюза ИРБИС 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
 +
означает, что при формировании Веб-шлюзом ответа на команду поиска не участвуют фреймы, участвует только формат, который будет указан в запросе.
 +
 
 +
В качестве этого формата предлагается создать файл '''<tt>example1.pft</tt>''' со следующим содержимым
 +
<nowiki>mfn,/,</nowiki>
 +
Этот формат выводит список 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, то он будет выглядеть так
 +
<nowiki>S21All=<.>TXT=2__$<.></nowiki>
 +
где, в соответствии с правилами работы веб-шлюза, точка в угловых скобках заменяет двойную кавычку. Таким образом, указанный запрос следует читать как
 +
"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
 +
 
 +
Можно усложнить формат вывода найденных записей '''<tt>example1.pft</tt>''', добавив информацию о количестве найденных, а также введённых порционных ограничениях
 +
<nowiki>mfn,'; кол-во найденных = ',v1001,'; с какого номера начать = ',v2223,'; размер порции = ',v2224,/,</nowiki>
 +
где 1001, 2223 и 2224 – виртуальные поля, в которые шлюз помещает данные в соответствии с [[таблицей виртуальных полей шлюза]].
 +
 
 +
Все данные, которые шлюз принял в виде параметров, попадают в виртуальные поля в соответствии правилами, заданными в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файле 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).
 +
 
 +
Кроме того, чтобы измежать дублирующихся данных, в '''<tt>example1.pft</tt>''' оставим только вывод MFN:
 +
mfn,/,
 +
 
 +
Результатом будет
 +
Вывод через фрейм... кол-во найденных = 4; с какого номера начать = 2; размер порции = 2
 +
0000000006
 +
0000000013
 +
 
 +
===Команда показа терминов словаря – T===
  
 
'''Пример команды показа терминов словаря'''
 
'''Пример команды показа терминов словаря'''
Строка 72: Строка 218:
 
  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&
 
  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&
  
где при помощи параметра <tt>T21TRM=a</tt> указывается требование терминов словаря, начинающихся на <tt>a</tt>.
+
где:
 +
* <tt>C21COM=T</tt> определяет команду,
 +
* <tt>I21DBN=IBIS</tt> базу данных,
 +
* <tt>Z21ID=1500323880383212</tt> идентификатор читателя в зашифрованном виде,
 +
* <tt>T21PRF=KT=</tt> префикс словаря,
 +
* <tt>T21TRM=a</tt> требование терминов, начинающихся на <tt>a</tt>.
  
 
Пример возврата:
 
Пример возврата:
Строка 86: Строка 237:
 
  AASLPUBSANDJOURNALS|2
 
  AASLPUBSANDJOURNALS|2
  
====Пользовательские параметры====
+
===Добавление пользовательского параметра===
 
 
Пользовательские параметры отличаются тем, что веб-шлюз ИРБИС может выполнять с ними следующие действия:
 
* при получении HTTP-запроса шлюз принимает данные, переданные ему с помощью пользовательских параметров;
 
* в свой ответ на HTTP-запрос клиента (обычно – в генерируемую html-страницу, передаваемую клиенту) может включить набор пользовательских параметров вместе с их значениями, полученными в запросе.
 
Количество пользовательских параметров и их назначение может определяться в процессе внедрения и конфигурирования ИРБИС 64.
 
 
 
=====Применение пользовательских параметров для передачи данных между веб-страницами=====
 
 
 
Пользовательские параметры позволяют передавать данные при переходе между веб-страницами, сгенерированными Веб-шлюзом ИРБИС 64. Процесс передачи данных происходит в два этапа: 1) данные передаются на веб-шлюз в виде параметров запроса; 2) веб-шлюз передаёт данные вместе со сформированной страницей в скрытых полях форм HTML.
 
 
 
=====Добавление пользовательского параметра=====
 
  
 
Добавление пользовательского параметра осуществляется в несколько шагов:
 
Добавление пользовательского параметра осуществляется в несколько шагов:
Строка 111: Строка 251:
 
: Команда <tt><!FORMAT=INSERT_ALL_PARAMETERS_IN_QUERY></tt> вставляет в код HTML-страницы гиперссылку, содержащую все переданные веб-шлюзу параметры.
 
: Команда <tt><!FORMAT=INSERT_ALL_PARAMETERS_IN_QUERY></tt> вставляет в код HTML-страницы гиперссылку, содержащую все переданные веб-шлюзу параметры.
  
===Формирование веб-страницы===
+
===Система команд Веб-шлюза ИРБИС===
  
====Фреймы====
+
Система ''команд'' Веб-шлюза ИРБИС позволяет задать собственный набор фреймов и порядок их объединения для каждой задачи. Для разных задач предусмотрены разные команды, например: для страницы приглашения к поиску, результата поиска, отбора записей в корзину заказов и т.д.
  
В общем случае, веб-страница формируется путём объединения (''склеивания'') следующих частей:
+
==Обработка фреймов==
* ''заголовочной'' и ''подвальной'' частей, формируемых при помощи ''фреймов'' и
 
* ''тела'' страницы, формируемого при помощи [[Язык форматирования системы ИРБИС#Понятие формата|''формата'']], который отрабатывает на наборе записей базы данных (соответствующих запросу пользователя).
 
  
=====Фрейм как язык разметки=====
+
В общем случае, веб-страница формируется путём объединения (''склеивания''):
 +
* Нескольких ''фреймов'' (соответствующий список ''фреймов'' задаётся в профиле для каждой команды). Список может не содержать ни одного фрейма.
 +
* Результата [[Язык форматирования системы ИРБИС#Понятие формата|''форматирования'']] записей, найденных в соответствии запросу пользователя, базы данных, заданной в профиле. Формат задаётся параметром шлюза <tt>S21FMT</tt>. Результат форматирования вставляется в месте, указанном словом <tt>RESULT</tt> в списке ''фреймов'' заданном в профиле. Слово может отсутствовать в списке.
 +
* В случае команды ''запись'' слово <tt>RESULT</tt> соответствует моменту, в который будет выполнена запись. Если опустить слово <tt>RESULT</tt>, то запись не будет выполнена.
 +
 
 +
===Контекст фрейма===
 +
 
 +
Контекст фрейма - запись читателя, осуществившего вход в систему.
 +
 
 +
===Фрейм как язык разметки===
  
 
Фрейм представляет собой текстовый файл, содержимое которого передаётся клиенту (в веб браузер), который также может содержать вставки, которые будут обработаны определённым образом перед передачей клиенту.
 
Фрейм представляет собой текстовый файл, содержимое которого передаётся клиенту (в веб браузер), который также может содержать вставки, которые будут обработаны определённым образом перед передачей клиенту.
Строка 135: Строка 282:
 
  <nowiki><!FORMAT=if v3409='' then 'value=""' else 'value=','"',v3409,'"',fi></nowiki>
 
  <nowiki><!FORMAT=if v3409='' then 'value=""' else 'value=','"',v3409,'"',fi></nowiki>
  
Если вставка на языке форматирования содержит символы, кодирующиеся в UTF-8 более чем одним байтом (например, кириллицу), то формат обязательно должен начинаться с восклицательного знака. Это связано с тем, что формат в кодировке UTF-8 должен предваряться восклицательным знаком, а все фреймы храняться именно в кодировке UTF-8.
+
''Примечание: если вставка на языке форматирования содержит символы, кодирующиеся в UTF-8 более чем одним байтом (например, кириллицу), то формат обязательно должен начинаться с восклицательного знака. Это связано с тем, что формат в кодировке UTF-8 [[Язык форматирования системы ИРБИС#Кодировка|должен предваряться восклицательным знаком]], а все фреймы храняться именно в кодировке UTF-8.''
  
 
'''Пример:'''
 
'''Пример:'''
Строка 141: Строка 288:
 
  <nowiki><!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></nowiki>
 
  <nowiki><!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></nowiki>
  
Пример вложенного фрейма:
+
'''Пример вложенного фрейма:'''
  
 
  <!FORMAT=if &uf('IMAIN,SHOW_DUBLIN_CORE,0') <> '0' then /'<!FILE=Dublin_Core.frm>' fi>
 
  <!FORMAT=if &uf('IMAIN,SHOW_DUBLIN_CORE,0') <> '0' then /'<!FILE=Dublin_Core.frm>' fi>
  
====Пример последовательности действий Веб-шлюза ИРБИС при формировании веб-страницы в ответ на запрос====
+
Предусмотрен '''''упрощённый синтаксис вставки на языке форматирования''''':
 +
<?!if p(v2225) then 'true' fi ?>
 +
 
 +
===Постобработка===
 +
 
 +
Перед передачей результата выполнения фрейма клиенту происходит подстановка значений вместо следующих обозначений
 +
 
 +
'''Таблица.''' Таблица подстановок во время постобработки.
 +
{|
 +
|
 +
{| class="standard"
 +
  !Что заменяется||На что заменяется
 +
  |-
 +
  |<tt><--HTTP_PATH--></tt>||корневая директория шлюза (htdocs)
 +
  |-
 +
  |<tt><--CGI_PATH--></tt>||путь к шлюзу, включая его имя cgiirbis_64_ft.exe
 +
|}
 +
|}
 +
 
 +
===Пример последовательности действий Веб-шлюза ИРБИС при формировании веб-страницы в ответ на запрос===
  
 
Веб-шлюз ИРБИС при получении команд '''F''', '''S''', '''T''', '''Z''', '''R''' выполняет следующую последовательность действий:
 
Веб-шлюз ИРБИС при получении команд '''F''', '''S''', '''T''', '''Z''', '''R''' выполняет следующую последовательность действий:
Строка 153: Строка 319:
 
* Фреймы обрабатываются, и результат, представляющий собой HTML-страницу, отправляется клиенту в качестве ответа.
 
* Фреймы обрабатываются, и результат, представляющий собой HTML-страницу, отправляется клиенту в качестве ответа.
  
====Примеры перехода пользователя по страницам Веб-ИРБИС====
+
===Примеры перехода пользователя по страницам Веб-ИРБИС===
  
 
Пример запроса начальной страницы:
 
Пример запроса начальной страницы:
Строка 222: Строка 388:
 
* [[Настройка и обслуживание Веб-ИРБИС]]
 
* [[Настройка и обслуживание Веб-ИРБИС]]
 
* [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini]]
 
* [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini]]
 +
* [[Язык форматирования системы ИРБИС]]
 +
* [[Язык запросов ИРБИС]]
  
 
[[Категория:Технология Веб-ИРБИС]]
 
[[Категория:Технология Веб-ИРБИС]]
 
[[Категория:ИРБИС 64]]
 
[[Категория:ИРБИС 64]]

Текущая версия на 14:00, 27 января 2017

Технология Веб-ИРБИС служит для создания Веб-приложений для работы с базами данных ИРБИС.

Данная технология реализована в виде одноимённого программного продукта – Веб-ИРБИС.

Веб-шлюз ИРБИС

Программный модуль Веб-шлюз ИРБИС обеспечивает обработку клиентских запросов.

Веб-шлюз ИРБИС является шлюзом 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 Описание команды Соответствующий параметр в irbis_server.ini
F показ – команда показа страницы ShowFrames
S поиск – команда выполнения и показа результатов поиска SearchFrames
T словарь – команда показа терминов словаря DictionryFrames
Z заказ – команда отбора записей в корзину заказов ZakazFrames
R запись – команда редактуры записей RecUpdateFrames

Выбор набора фреймов зависит от: команды (параметр C21COM) и профиля (параметр I21DBN).

Возможные наборы фреймов предварительно сконфигурированы и указаны в конфигурационном файле irbis_server.ini.

Откуда шлюз и считывает нужный набор, в зависимости от параметров (C21COM и I21DBN).

Каждой команде веб-шлюза ИРБИС соответствует имя параметра в файле irbis_server.ini (см. таблицу Команды веб-шлюза ИРБИС).

Отправка клиенту ресурсного файла

Для команд, представленных в таблице, отправка клиенту ресурсного файла.

Таблица. Команды веб-шлюза ИРБИС.

Значение параметра C21COM Описание команды
E экспорт – команда выгрузки записей
2 файл – команда чтения внешнего объекта
4 скачать – команда заимствования записи

Команда поиска – 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, задав имя и метку параметра. Для этого в секции [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-страницы гиперссылку, содержащую все переданные веб-шлюзу параметры.

Система команд Веб-шлюза ИРБИС

Система команд Веб-шлюза ИРБИС позволяет задать собственный набор фреймов и порядок их объединения для каждой задачи. Для разных задач предусмотрены разные команды, например: для страницы приглашения к поиску, результата поиска, отбора записей в корзину заказов и т.д.

Обработка фреймов

В общем случае, веб-страница формируется путём объединения (склеивания):

  • Нескольких фреймов (соответствующий список фреймов задаётся в профиле для каждой команды). Список может не содержать ни одного фрейма.
  • Результата форматирования записей, найденных в соответствии запросу пользователя, базы данных, заданной в профиле. Формат задаётся параметром шлюза S21FMT. Результат форматирования вставляется в месте, указанном словом RESULT в списке фреймов заданном в профиле. Слово может отсутствовать в списке.
  • В случае команды запись слово RESULT соответствует моменту, в который будет выполнена запись. Если опустить слово RESULT, то запись не будет выполнена.

Контекст фрейма

Контекст фрейма - запись читателя, осуществившего вход в систему.

Фрейм как язык разметки

Фрейм представляет собой текстовый файл, содержимое которого передаётся клиенту (в веб браузер), который также может содержать вставки, которые будут обработаны определённым образом перед передачей клиенту.

Предусмотрены вставки следующих видов:

  • вставка на языке форматирования ИРБИС,
  • вложенный фрейм.

Вставка на языке форматирования обозначается следующим образом

<!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 ?>

Постобработка

Перед передачей результата выполнения фрейма клиенту происходит подстановка значений вместо следующих обозначений

Таблица. Таблица подстановок во время постобработки.

Что заменяется На что заменяется
<--HTTP_PATH--> корневая директория шлюза (htdocs)
<--CGI_PATH--> путь к шлюзу, включая его имя cgiirbis_64_ft.exe

Пример последовательности действий Веб-шлюза ИРБИС при формировании веб-страницы в ответ на запрос

Веб-шлюз ИРБИС при получении команд 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

Ссылки

См. также: