http://wiki.elnit.org/api.php?action=feedcontributions&user=Sokv&feedformat=atomWikipedia - Вклад участника [ru]2024-03-29T08:16:18ZВклад участникаMediaWiki 1.27.5http://wiki.elnit.org/index.php?title=%D0%AF%D0%B7%D1%8B%D0%BA_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%98%D0%A0%D0%91%D0%98%D0%A1&diff=2468Язык форматирования системы ИРБИС2017-06-30T13:56:42Z<p>Sokv: /* Выполнение файла формата */</p>
<hr />
<div>'''''Язык форматирования''''' ИРБИС – язык манипулирования данными в контексте [[Базы данных ИРБИС#Модель баз данных ИРБИС|''записи'']] базы данных, представляет собой средство, с помощью которого осуществляется разнообразное представление данных для многих операций и функций системы, в частности, для показа и печати документов, для создания словарей, для импорта/экспорта данных, для формально-логического контроля и т.д.<br />
<br />
==Общие сведения==<br />
<br />
===История появления===<br />
<br />
Язык форматирования системы ИРБИС базируется на языке форматирования системы CDS/ISIS (ЮНЕСКО).<br />
<br />
===Понятие формата===<br />
<br />
'''''Форматом''''' называют совокупность инструкций (команд, функций и т.п.), записанных на языке форматирования.<br />
<br />
Формат может быть выполнен в контексте ''записи'' базы данных, и результатом выполнения является текстовое (строковое) значение, которое затем может использоваться системой ИРБИС для выполнения определенных функций.<br />
<br />
===Файл формата===<br />
<br />
'''''Файл формата''''' – основная структурная единица, служащая для организации программного кода на языке форматирования. Представляет собой текстовый файл с расширением [[Файлы ИРБИС#Файлы форматов ИРБИС|<tt>.pft</tt>]], содержащий '''формат'''.<br />
<br />
===Начало знакомства с языком форматирования ИРБИС===<br />
<br />
Для понимания языка форматирования необходимо быть знакомым с такими понятиями как:<br />
* поле данных – структурная единица документа (записи), имеющая числовую идентификацию (метку поля) и содержащая один элемент описания (например, первый индивидуальный автор, основное заглавие и т.д.);<br />
* подполе – структурная единица поля, которая определяется двумя символами, предшествующими собственно данным подполя: первый из этих символов знак ^, второй символ может быть латинской буквой (прописные и строчные не различаются) или цифрой и называется разделителем подполя.<br />
<br />
Для новичков может показаться, что некоторые форматы являются очень сложными для понимания. Однако, все форматы, даже громоздкие, состоят по сути из довольно простых команд или функций, разделенных запятыми или пробелами. Кажущаяся сложность связана с тем, что формат может состоять из многих таких команд. В связи с этим, ключом к пониманию форматов является последовательный анализ всех присутствующих в них команд.<br />
<br />
Обрабатывая формат, система работает с тремя объектами: запись (документ) базы данных, собственно формат и рабочая область, в которой размещаются выходные данные. Команды выполняются последовательно в порядке их представления в формате. Одни из команд порождают выходные данные (например, значения полей данных), другие - инициируют некоторые действия (например, переход на другую строку, создание нескольких пустых строк и т.д.). Создаваемые данные запоминаются в рабочей области в виде текстовых строк, которые затем передаются для последующей обработки, например, для печати.<br />
<br />
Все команды форматирования могут вводиться прописными или строчными буквами или их комбинацией.<br />
В форматах могут присутствовать комментарии. Признаком начала комментария является комбинация символов /*. В качестве комментария принимается часть строки от признака начала комментария до конца строки.<br />
<br />
==Выполнение формата==<br />
<br />
===Форматёр===<br />
<br />
''Форматёр'' – программный модуль, реализующий набор функций для обработки данных с использованием языка форматирования.<br />
<br />
В системе ИРБИС 64 присутствует несколько реализаций форматёра:<br />
* серверный форматёр – [[IRBIS64.dll#Функции форматёра|входит в библиотеку <tt>IRBIS64.dll</tt>]],<br />
* клиентский форматёр – включён в код клиентских приложений.<br />
<br />
Клиентский форматёр используется клиентскими приложениями.<br />
<br />
Серверный форматёр используется:<br />
* серверным [[АРМ Администратор]],<br />
* в некоторых случаях клиентское приложение передаёт формат на исполнение серверному форматёру, при этом взаимодействие осуществляется через [[TCP/IP сервер ИРБИС 64|сервер ИРБИС]].<br />
<br />
===Контекст форматёра===<br />
<br />
Значения глобальных переменных хранятся в конкретном запущенном экземпляре форматёра. Таким образом, область видимости переменных оказывается в непосредственной связи с экземпляром форматёра:<br />
* В рамках одного экземпляра форматёра значения глобальных переменных, инициализированные в одном формате, доступны в другом формате.<br />
* В разных экземплярах форматёра – собственные наборы глобальных переменных.<br />
<br />
Например:<br />
* В серверном [[АРМ Администратор]] с момента запуска и до закрытия приложения будет использоваться один экземпляр форматёра, соответственно для всех выполняемых данным АРМ форматов будет один набор глобальных переменных.<br />
* Для любого клиентского АРМ будет использоваться один экземпляр клиентского форматёра.<br />
* В тех случаях, когда клиентское АРМ передаёт форматы на исполнение серверному форматёру, запросы на исполнение форматов могут выполняться разными экземплярами форматёра.<br />
<br />
Таким образом, в контексте выполнения формата нельзя рассчитывать на то, что до присвоения глобальным переменным каких либо значений они будут пустыми.<br />
<br />
==Кодировка==<br />
<br />
Формат может начинаться с маркера кодировки UTF-8, в качестве данного маркера служит восклицательный знак.<br />
<br />
Если формат начинается с восклицательного знака, то система ИРБИС при чтении данного формата будет использовать кодировку UTF-8, в противном случае Windows-1251.<br />
<br />
Этот же механизм используется и при [[Технология Веб-ИРБИС#Фрейм как язык разметки|вставке формата внутри фрейма]].<br />
<br />
==Запись в базе данных, используемая в примерах==<br />
<br />
Если не оговорено противное, то все примеры по форматированию в последующих разделах ссылаются на запись, приведенную ниже. Эта запись присутствует в базе данных IBIS, поставляемой в дистрибутивном варианте системы в качестве учебной.<br />
<br />
'''MFN: 34'''<br />
600: ^AСухой П.О.^Bо нем<br />
215: ^a383^cил.24л<br />
920: PAZK<br />
999: 0000000<br />
907: ^A19941123^bdsm<br />
964: 78.09.19<br />
10: ^a5-203-01472-8^dЦ.договор.<br />
101: rus<br />
102: RU<br />
900: ^b05^c22<br />
210: ^cВоенное изд-во^aМ.^d1993<br />
700: ^aКузьмина^bЛ.М.<br />
675: 623.746<br />
675: 623.746(092) Сухой П.О.<br />
908: К89<br />
903: 623.746/К89-239165<br />
910: ^A0^BЭ93-18430^C19930830^Dхр<br />
910: ^A2^Dхр<br />
200: ^aКонструктор Сухой. Люди и самолеты<br />
<br />
==Инструкции языка форматирования==<br />
<br />
===Базовые команды вывода===<br />
<br />
Команды вывода полей – это команды, используемые для извлечения из записи и вывода конкретного поля или подполя. Имеется [[#Команда вывода MFN|специальная команда для извлечения и вывода номера записи MFN]], хотя, строго говоря, MFN не является полем (MFN не имеет метки).<br />
<br />
====Команда вывода поля====<br />
<br />
Для указания на необходимость вывода поля из записи необходимо записать букву '''V''', за которой должна следовать метка поля. Это может быть прописная или строчная буква. Ниже приведены примеры применения данной команды.<br />
<br />
{| class="standard"<br />
!Формат||Выходные данные<br />
|-<br />
|<tt>v210</tt>||<tt>^cВоенное изд-во^aМ.^d1993</tt><br />
|-<br />
|<tt>v200</tt>||<tt>aКонструктор Сухой. Люди и самолеты</tt><br />
|-<br />
|<tt>v700</tt>||<tt>^aКузьмина^bЛ.М.</tt><br />
|-<br />
|<tt>v600</tt>||<tt>^AСухой П.О.^Bо нем</tt><br />
|}<br />
<br />
====Команда вывода подполя====<br />
<br />
Для вывода конкретного подполя из данного поля следует добавить соответствующий разделитель подполей к метке поля. Заметим, что можно использовать специальный разделитель подполей ^* для вывода первого подполя, если оно есть. В этом случае, первому подполю необязательно должен предшествовать его разделитель. Разделитель подполей может быть прописной или строчной буквой (обязательно латинской).<br />
<br />
{| class="standard"<br />
!Формат||Выходные данные<br />
|-<br />
|<tt>v210^с</tt>||<tt>Военное изд-во</tt><br />
|-<br />
|<tt>v200^a</tt>||<tt>Конструктор Сухой. Люди и самолеты</tt><br />
|-<br />
|<tt>v700^a</tt>||<tt>Кузьмина</tt><br />
|-<br />
|<tt>v600^*</tt>||<tt>Сухой П.О.</tt><br />
|}<br />
<br />
====Вывод фрагмента поля или подполя====<br />
<br />
В некоторых случаях может возникнуть необходимость вывести часть поля, которая не является подполем, особенно тогда, когда поле имеет фиксированный формат (например, запись даты в виде ГГГГММДД). Это можно сделать командой смещение/длина, размещаемой сразу за командой вывода поля или подполя, к которому команда применяется.<br />
<br />
Эта команда имеет вид:<br />
*<смещение>.<длина><br />
где:<br />
* *<смещение> указывает позицию первого символа фрагмента, который должен быть извлечен из поля или подполя (позиции символов нумеруются с нуля, т.е. первый символ находится в позиции 0, второй - в позиции 1 и т.д.); если смещение не указано, то оно считается равным 0;<br />
* .<длина> указывает количество извлекаемых символов. Если длина опущена, то извлекается все поле (подполе) до конца, начиная с символа, указанного в смещении.<br />
<br />
Ниже приведены примеры использования команды по отношению к записи, которая в качестве поля с меткой 1 содержит значение<br />
<tt>88-Nov-05</tt>.<br />
<br />
{| class="standard"<br />
!Формат||Выходные данные<br />
|-<br />
|<tt>v1*3.3</tt>||<tt>Nov</tt><br />
|-<br />
|<tt>v1.2</tt>||<tt>88</tt><br />
|-<br />
|<tt>v1*7</tt>||<tt>05</tt><br />
|-<br />
|<tt>v1*7,v1*2.4</tt>||<tt>05-Nov</tt><br />
|-<br />
|<tt>v1*7,v1*2.5,v1.2</tt>||<tt>05-Nov-88</tt><br />
|-<br />
|<tt>v210.3</tt>||<tt>^cВ</tt><br />
|-<br />
|<tt>v210^c.3</tt>||<tt>Вое</tt><br />
|}<br />
<br />
Обратите внимание на различные способы манипулирования полями с подполями в последних двух примерах. Если производится ссылка на поле целиком (например, v210), то нулевое смещение указывает на первую фактическую позицию поля (включая возможные разделители, стоящие в начале), а при ссылке на подполе (например, v210^с) нулевое смещение указывает на первый символ данных, стоящий после разделителя подполей.<br />
<br />
====Команда вывода MFN====<br />
<br />
Для вывода номера записи в файле документов служит команда MFN, формат которой:<br />
MFN<br />
или<br />
MFN(d)<br />
где d – количество выводимых на экран цифр. Если параметр (d) опущен, то по умолчанию предполагается 6 цифр. Ниже приводятся примеры использования данной команды.<br />
<br />
{| class="standard"<br />
!Формат||Выходные данные<br />
|-<br />
|<tt>MFN</tt>||<tt>000034</tt><br />
|-<br />
|<tt>MFN(3)</tt>||<tt>034</tt><br />
|-<br />
|<tt>MFN(2)</tt>||<tt>34</tt><br />
|-<br />
|<tt>MFN(1)</tt>||<tt>3</tt><br />
|}<br />
<br />
Заметим, что для подавления в MFN впереди стоящих нулей можно использовать [[Функции языка форматирования ИРБИС#Функция F(выр-1, выр-2, выр-3)|функцию F]].<br />
<br />
====Строковый литерал====<br />
<br />
Строковый литерал – это строка символов, заключенная в соответствующие ограничители.<br />
<br />
В языке форматирования используются строковые литералы трех видов: '''''Безусловный литерал''''', '''''Повторяющийся литерал''''' и '''''Условный литерал'''''.<br />
<br />
'''''Безусловный литерал''''' языка форматирования – самый простой в применении вид литералов, похожий на строковые литералы многих языков программирования.<br />
<br />
'''''Повторяющийся литерал''''' и '''''Условный литерал''''' используются только в качестве составной части соответствующей команды форматирования текста, и описаны в других разделах.<br />
<br />
Безусловный литерал заключается в одинарные кавычки, например:<br />
'Краткое содержание'<br />
или<br />
'Заголовок'<br />
<br />
Литерал не должен содержать ограничителей литерала. Например, безусловный литерал не может содержать одинарную кавычку (хотя может содержать двойные кавычки и/или вертикальные черты).<br />
<br />
Литералы подвергаются преобразованию в прописные буквы, если расположены после соответствующей [[#Команды режима вывода|команды режима вывода]].<br />
<br />
===Команды форматирования===<br />
<br />
====Команды режима вывода====<br />
<br />
Система может выводить данные в трех различных режимах: '''''режим проверки''''', '''''режим заголовка''''', '''''режим данных'''''.<br />
<br />
В '''''режиме проверки''''' поля выводятся в том виде, в каком они хранятся в записи. При этом система не обеспечивает никаких разделителей между полями или экземплярами повторяющихся полей. Пользователь должен обеспечить адекватное разделение полей с помощью команд размещения, литералов или повторяющихся групп. Режим обычно используется для вывода записей с целью проверки правильности введенных данных.<br />
<br />
'''''Режим заголовка''''' обычно используется для печати заголовков при выводе указателей и таблиц. Все управляющие символы, введенные вместе с данными, такие как разделители терминов (< и >) игнорируются (за исключением указанных ниже случаев), а разделители подполей заменяются знаками пунктуации.<br />
<br />
'''''Режим данных''''' похож на режим заголовка, но дополнительно после каждого поля автоматически ставится точка (.), за которой следуют два пробела (или просто два пробела, если поле заканчивается каким-либо знаком пунктуации). Отметим, однако, что эта автоматическая пунктуация подавляется, если за командой вывода поля следует [[#Литералы|суффикс-литерал]].<br />
<br />
Когда система форматирует поле, содержащее подполе, в режимах заголовка или данных, она автоматически заменяет имеющиеся разделители подполей знаками пунктуации (при этом разделитель первого подполя, если он имеется, всегда игнорируется). Специальная комбинация символов "><" заме-няется на "; " (а отдельные символы “<” и “>” подавляются), обеспечивая простой способ форматирования полей, содержащих перечень ключевых фраз, заключенных в угловые скобки. Таблица стандартного замещения разделителей подполей выглядит так:<br />
* ^a замещается на "; " <br />
* от ^b до ^i замещается на ", "<br />
* все другие замещаются на ". "<br />
<br />
Команды режима вывода представляются в виде <tt>Mmc</tt>, где:<br />
* М – признак команды режима вывода.<br />
* m следующим образом определяет режим вывода:<br />
** Р режим проверки;<br />
** H режим заголовка;<br />
** D режим данных.<br />
* с – определяет необходимость преобразования букв в прописные:<br />
** U буквы преобразуются в прописные;<br />
** L буквы преобразованию не подвергаются.<br />
<br />
Команда режима вывода может появляться в формате столько раз, сколько это нужно и действует до следующей команды режима вывода. По умолчанию система использует команду MPL. Ниже приведены примеры использования команды.<br />
<br />
{| class="standard"<br />
!Формат||Выходные данные<br />
|-<br />
|<tt>mpl,v200</tt>||<tt>^aКонструктор Сухой. Люди и самолеты</tt><br />
|-<br />
|<tt>mhl,v200</tt>||<tt>Конструктор Сухой. Люди и самолеты</tt><br />
|-<br />
|<tt>mdl,v200</tt>||<tt>Конструктор Сухой. Люди и самолеты.</tt><br />
|-<br />
|<tt>mdu,v200</tt>||<tt>КОНСТРУКТОР СУХОЙ. ЛЮДИ И САМОЛЕТЫ.</tt><br />
|-<br />
|<tt>mpl,v210</tt>||<tt>^cВоенное изд-во^aМ.^d1993</tt><br />
|-<br />
|<tt>mdl,v210</tt>||<tt>Военное изд-во; М., 1993.</tt><br />
|}<br />
<br />
====Команды вывода новой строки, пробелов, табуляции====<br />
<br />
В языке форматирования имеются следующие команды для форматирования ''плоского'' текста при помощи новых строк, пробелов, табуляции:<br />
* '''<tt>Xn</tt>''' – вставляет <tt>n</tt> пробелов;<br />
* '''<tt>Cn</tt>''' – табуляция в позицию <tt>n</tt>;<br />
* '''<tt>/</tt>''' – переход на новую строку, если предыдущая строка не была пустой;<br />
* '''<tt>#</tt>''' – безусловный переход на новую строку;<br />
* '''<tt>%</tt>''' – удаляет пустые строки (если они есть).<br />
<br />
Команда <tt>/</tt> приводит к размещению последующих данных с начала следующей строки. Подряд расположенные команды <tt>/</tt> эквивалентны одной команде <tt>/</tt>. Команда <tt>/</tt> никогда не создает пустых строк.<br />
<br />
Команда <tt>#</tt> выполняет те же действия, что и <tt>/</tt>, но переход на новую строку является безусловным.<br />
<br />
Можно использовать комбинацию <tt>/#</tt> для создания одной (и только одной) пустой строки. Комбинация <tt>##</tt> может привести к созданию одной или двух пустых строк в зависимости от того, была ли пустой текущая строка перед выполнением первой команды <tt>#</tt>.<br />
<br />
Использование команды <tt>#</tt> может вызвать затруднение в тех случаях, когда выбираемое поле оказывается пустым. Эта ситуация хорошо иллюстрируется на следующем примере:<br />
/#V10/#V20/#V30<br />
Если все поля присутствуют в документе, то в результате поля <tt>10</tt>, <tt>20</tt>, и <tt>30</tt> будут располагаться с начала строк и каждому будет предшествовать одна пустая строка. Однако, если поле <tt>20</tt> в документе отсутствует, то между <tt>10</tt> и <tt>30</tt> полями будут вставлены две пустые строки. Это может оказаться нежелательным, если действительно требуется, чтобы между полями была пропущена именно одна пустая строка, независимо от наличия или отсутствия некоторых полей. Таким образом, приведенный выше формат не приведет к желаемому результату.<br />
<br />
Эту проблему решает команда <tt>%</tt>. Ее действие заключается в подавлении всех последовательно расположенных пустых строк, если они имеются, между текущей строкой и последней непустой строкой. Таким образом, формат<br />
%##V10%##V20%##V30 ...<br />
приведет к созданию одной и только одной пустой строки между каждым полем, независимо от их наличия или отсутствия в документе.<br />
<br />
Команду <tt>Сn</tt> имеет смысл применять только в случае использования моноширинных шрифтов. Команды <tt>/</tt> <tt>#</tt> <tt>%</tt> не применимы в случае использования в форматах показа средств RTF или HTML. Команды <tt>Сn</tt> и <tt>Xn</tt> не работают в [[HTML-форматах]].<br />
<br />
====Форматирование текста при помощи повторяющихся и условных литералов====<br />
<br />
'''''Условный литерал''''' определяет текст, который будет выведен только в случае присутствия в записи соответствующего ему поля/подполя. Если поле является повторяющимся, то текст будет выведен только один раз, независимо от количества экземпляров поля/подполя. Условные литералы заключаются в двойные кавычки, например:<br />
"Заглавие: "<br />
<br />
'''''Повторяющийся литерал''''' определяет текст, который будет выведен только в случае присутствия в записи соответствующего ему поля или подполя. Однако, если поле повторяющееся, литерал будет выводиться для каждого экземпляра поля/подполя. Ограничителем для повторяющихся литералов служит символ вертикальной черты:<br />
|Автор: |<br />
<br />
Условные и/или повторяющиеся литералы связываются с полем или подполем своим расположением в формате. Литералы, предшествующие команде вывода поля/подполя, называемые '''''префикс-литералами''''', выводятся перед содержимым поля/подполя, в то время, как литералы, следующие за командой вывода поля/подполя, называемые '''''суффикс-литералами''''', выводятся после содержимого поля/подполя.<br />
<br />
Если за повторяющимся префикс-литералом непосредственно следует знак '''<tt>+</tt>''' (например, '''<tt>|xxx|+</tt>'''), то он будет выведен перед каждым, кроме первого, экземпляром поля/подполя.<br />
<br />
Если повторяющемуся суффикс-литералу непосредственно предшествует знак '''<tt>+</tt>''' (например, '''<tt>+|xxx|</tt>'''), то он будет выведен после каждого, кроме последнего, экземпляра поля/подполя.<br />
<br />
С полем/подполем может быть связан более чем один литерал. В этом случае различные литералы должны подчиняться следующим правилам и порядку:<br />
* '''префикс-литералы:'''<br />
** Один или более условных префикс-литералов. За условным префикс-литералом могут следовать другие условные префикс-литералы, команды вертикального и горизонтального размещения, и/или команды режима вывода. Все команды между первым условным префикс-литералом и соответствующей ему командой вывода поля/подполя становятся условными и будут выполнены только при наличии поля/подполя, иначе они игнорируются.<br />
** Один и только один повторяющийся префикс-литерал. Если такой литерал есть, то он должен непосредственно предшествовать соответствующей ему команде вывода поля/подполя.<br />
* '''суффикс-литералы:'''<br />
** Один и только один повторяющийся суффикс-литерал. Если такой литерал есть, то он должен следовать непосредственно за соответствующей ему командой вывода поля/подполя.<br />
** Один и только один условный суффикс-литерал. Если такой литерал есть, то он должен следовать непосредственно за повторяющимся суффикс-литералом или связанной с ним командой вывода поля/подполя.<br />
**Суффикс-литералы не должны разделяться запятыми и не должно быть запятой между командами вывода поля/подполя и первым суффикс-литералом, так как запятая обозначает конец суффикс-литералов, связанных с данной командой вывода поля/подполя.<br />
<br />
'''''Пустые литералы''''' – литералы нулевой длины, такие, как <tt>""</tt> или <tt>||</tt> вполне допустимы и могут использоваться, как префикс-литералы для обеспечения условного вертикального размещения или как суффикс-литералы для временного подавления автоматической пунктуации, которая обеспечивается в режиме данных.<br />
<br />
Примеры различных типов литералов:<br />
<br />
{| class="standard"<br />
!Формат||Выходные данные<br />
|-<br />
|<tt>'MFN:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;',mfn(3)</tt>||<tt>MFN:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;034</tt><br />
|-<br />
|<tt>mdl,"Заглавие: "v200</tt>||<tt>Заглавие: Конструктор Сухой. Люди и самолеты.</tt><br />
|-<br />
|<tt>v675</tt>||<tt>623.746623.746(092) Сухой П.О.</tt><br />
|-<br />
|<tt><nowiki>v675|; |</nowiki></tt>||<tt>623.746; 623.746(092) Сухой П.О.;</tt><br />
|-<br />
|<tt><nowiki>v675+|; |</nowiki></tt>||<tt>623.746; 623.746(092) Сухой П.О.</tt><br />
|-<br />
|<tt>|; |v675</tt>||<tt>; 623.746; 623.746(092) Сухой П.О.</tt><br />
|-<br />
|<tt>|; |+v675</tt>||<tt>623.746; 623.746(092) Сухой П.О.</tt><br />
|-<br />
|<tt><nowiki>"УДК"/v675+|; |</nowiki></tt>||<tt>УДК<br />623.746; 623.746(092) Сухой П.О.</tt><br />
|-<br />
|<tt>|(|v675|)|</tt>||<tt>(623.746)(623.746(092) Сухой П.О.)</tt><br />
|-<br />
|<tt><nowiki>"(УДК: ",v675+|; |")"</nowiki></tt>||<tt>(УДК: 623.746; 623.746(092) Сухой П.О.)</tt><br />
|-<br />
|<tt>mdl,v210</tt>||<tt>Военное изд-во; М., 1993.</tt><br />
|-<br />
|<tt>mdl,v210""</tt>||<tt>Военное изд-во; М., 1993</tt><br />
|}<br />
<br />
====Команды фиктивного вывода поля====<br />
<br />
Команда фиктивного вывода поля реализует условный вывод литералов в зависимости от наличия или отсутствия данного поля или подполя без вывода содержимого самого поля. Задаются они следующим образом: '''<tt>Dt</tt>''' или '''<tt>Dt^x</tt>''' или '''<tt>Nt</tt>''' или '''<tt>Nt^x</tt>''', где:<br />
* '''<tt>D</tt>''' указывает, что все соответствующие ей условные литералы должны выводиться только при наличии поля,<br />
* '''<tt>N</tt>''' указывает, что они должны выводиться только при отсутствии поля;<br />
* '''<tt>t</tt>''' метка поля, управляющего выводом литералов;<br />
* '''<tt>^x</tt>''' необязательный код разделителя подполя. Если он приведен, то это означает, что вывод литералов зависит от наличия или отсутствия определенного подполя (отметим, что отсутствие поля говорит и об отсутствии подполей в этом поле).<br />
<br />
Обычно команде фиктивного вывода поля предшествует, по крайней мере, один условный префикс-литерал (который может быть пустым), за которым могут следовать один или более других условных префикс-литералов, команды вертикального и горизонтального размещения и/или команды режима вывода. Команда фиктивного вывода поля не может иметь суффикс-литералов.<br />
<br />
Несколько примеров использования этих команд:<br />
<br />
{| class="standard"<br />
!Формат||Выходные данные<br />
|-<br />
|<tt>"(Отсут.)"n700,v700</tt>||<tt>Конструктор Сухой. Люди и самолеты</tt><br />
|-<br />
|<tt><nowiki>"(Отсут.)"n80,v80+|; |</nowiki></tt>||<tt>(Отсут.)</tt><br />
|-<br />
|<tt>"[нет даты]"n907^А,V907^A</tt>||<tt>19941123</tt><br />
|-<br />
|<tt>"[нет сведений]"n911,v911</tt>||<tt>[нет сведений]</tt><br />
|}<br />
<br />
===Выражения===<br />
<br />
Язык форматирования позволяет вычислять значения и/или сравнивать значения с помощью выражений. Выражения построены таким образом, что при их вычислении возвращается значение. Таким значением может быть строка символов (например, содержимое поля или литерал), тогда выражение называется строковым, либо число, тогда выражение называется числовым, либо логическое значение (истина или ложь), тогда выражение называется логическим. В системе также имеется набор функций, которые, на основе задаваемых аргументов, выполняют некоторые специфические действия и возвращают значения. Функции, возвращающие в качестве значения число, называются числовыми функциями, возвращающие строку символов - строковыми функциями, а возвращающие логическое значение - логическими функциями. Только строковые функции могут использоваться непосредственно в качестве команд форматирования. Числовые выражения могут использоваться либо в логических выражениях, либо в качестве аргументов функций. Логические выражения и логические функции могут использоваться только в контексте [[#Команда IF|команды IF]].<br />
<br />
====Числовые выражения====<br />
<br />
'''''Числовое выражение''''' формируется из операндов, которые имеют числовое значение, и [[Операторы языка форматирования ИРБИС#Арифметические операторы|арифметических операторов]] ('''<tt>+</tt>''', '''<tt>-</tt>''', '''<tt>*</tt>''', '''<tt>/</tt>''').<br />
<br />
В качестве операндов в числовых выражениях могут выступать: '''''числовые константы''''', '''''числовые функции''''', [[#Команда вывода MFN|команда вывода номера записи MFN]], числовые выражения.<br />
<br />
'''''Числовые константы''''' могут быть представлены в виде целых чисел, чисел с десятичной точкой, например <tt>5</tt>, <tt>18</tt>, <tt>98.65</tt>, или чисел в '''''экспоненциальной форме''''', например, <tt>1.5Е5</tt>, обозначающее 1.5 умноженное на 10 в 5-ой степени, т.е. 150000. Числа могут быть со знаком или без.<br />
<br />
[[#Числовые функции|'''''Числовые функции''''' рассматриваются в отдельной главе]]. Пример числовой функции <tt>val(v10)</tt>.<br />
<br />
Числовые выражения при использовании их в качестве операндов должны быть заключены в круглые скобки, например:<br />
(val(v20)-5)<br />
<br />
Отметим, что поскольку команды вывода полей (например, v10 или v10^a) дают текстовые строки, они не могут использоваться в качестве операндов числовых выражений. Однако, для преобразования содержимого поля или подполя в числовое значение может быть использована [[Функции языка форматирования ИРБИС#Функция VAL(формат)|функция VAL]].<br />
<br />
Аналогичным образом, числовое выражение не может быть непосредственно выведено на экран или печать, а должно быть предварительно преобразовано в строку символов с помощью [[Функции языка форматирования ИРБИС#Функция F(выр-1, выр-2, выр-3)|функции F]].<br />
<br />
Ниже приведены примеры числовых выражений. Предполагается, что MFN=10, v1^a=10, v1^b=20 и v2=30.<br />
<br />
{| class="standard"<br />
!Выражение||Значение<br />
|-<br />
|<tt>0.155е+3</tt>||<tt>155</tt><br />
|-<br />
|<tt>1е-3</tt>||<tt>0.001</tt><br />
|-<br />
|<tt>2*3+9</tt>||<tt>15</tt><br />
|-<br />
|<tt>2*(3+9)</tt>||<tt>24</tt><br />
|-<br />
|<tt>10-(4*(2-1))</tt>||<tt>6</tt><br />
|-<br />
|<tt>15*0.001</tt>||<tt>0.015</tt><br />
|-<br />
|<tt>mfn+100</tt>||<tt>110</tt><br />
|-<br />
|<tt>val(v2)+val(v1^a)*7.5</tt>||<tt>105</tt><br />
|-<br />
|<tt>(val(v1^a)-val(v1^b))/100</tt>||<tt>-0.1</tt><br />
|}<br />
<br />
====Строковые выражения====<br />
<br />
'''''Строковым выражением''''' являются:<br />
* [[#Строковый литерал|Безусловный литерал]], например <tt>'некоторый текст'</tt>.<br />
* [[#Команды вывода полей|Команда вывода поля/подполя]], которая может включать [[#Вывод фрагмента поля или подполя|команду смещение/длина]], например <tt>v26^c*2.2</tt>.<br />
* [[Функции языка форматирования ИРБИС#Строковые функции|Строковая функция]], например <tt>S(v24,v25,v26)</tt>.<br />
<br />
====Логические выражения====<br />
<br />
'''''Логическое выражение''''' формируется из операндов, которые могут принимать одно из двух значений, '''истина''' или '''ложь''', и [[Операторы языка форматирования ИРБИС#Логические операторы|логических операторов]] ('''NOT''', '''AND''', '''OR'''). Логические выражения используются для вычисления истинности одного или более условий.<br />
<br />
Операндами логического выражения могут быть:<br />
* [[Операторы языка форматирования ИРБИС#Операторы отношения и выражения отношения|Выражения отношения]] – сравнивают два числовых или строковых значения и определяют, удовлетворяют ли они отношению, строятся на основе [[Операторы языка форматирования ИРБИС#Операторы отношения и выражения отношения|операторов отношения]] ('''<tt>=</tt>''', '''<tt><></tt>''', '''<tt><</tt>''', '''<tt><=</tt>''', '''<tt>></tt>''', '''<tt>>=</tt>''', '''<tt>:</tt>'''). Например <tt>mfn&nbsp;<&nbsp;10</tt>.<br />
* [[Функции языка форматирования ИРБИС#Логические функции|Логические функции]], например <tt>p(v24)</tt>.<br />
* Логические выражения.<br />
<br />
Примеры логических выражений:<br />
{| class="standard"<br />
!Выражение||Значение<br />
|-<br />
|<tt>mfn=34</tt>||<tt>Истина</tt><br />
|-<br />
|<tt>not mfn=34</tt>||<tt>Ложь</tt><br />
|-<br />
|<tt>not (not mfn=34)</tt>||<tt>Истина</tt><br />
|-<br />
|<tt>v20 = 'люди'</tt>||<tt>Ложь</tt><br />
|-<br />
|<tt>v200 : 'люди'</tt>||<tt>Истина</tt><br />
|-<br />
|<tt>v200 : 'ЛЮДИ'</tt>||<tt>Истина</tt><br />
|-<br />
|<tt>v210^c.6 = 'Военное'</tt>||<tt>Ложь</tt><br />
|-<br />
|<tt>v210^c.7 = 'Военное'</tt>||<tt>Истина</tt><br />
|-<br />
|<tt>(v200 : 'люди') AND (v210^c.7= 'Военное')</tt>||<tt>Истина</tt><br />
|}<br />
<br />
===Функции===<br />
<br />
'''''Функция''''' вычисляет ''значение'' (называемое '''''значением функции''''' или '''''возвращаемым значением'''''), которое затем подставляется вместо функции при вычислении выражения.<br />
<br />
Функции могут иметь один или более ''аргументов'', которые необходимо задать для вычисления функции. Аргументы заключаются в скобки и разделяются запятыми.<br />
<br />
Аргументы могут быть следующих трех типов: [[#Понятие формата|формат]], [[#Числовые выражения|числовое выражение]], [[#Команды вывода полей|команда вывода поля]].<br />
<br />
Аргументом функции может быть произвольный формат, который может содержать любую разрешенную команду за исключением [[Функции языка форматирования ИРБИС#Функция REF(выражение, формат)|функции REF]], в которой формат так же используется в качестве аргумента. Функции передается не сам формат, а текст, полученный в результате вычисления формата.<br />
<br />
При использовании числового выражения в качестве аргумента функции, оно сначала вычисляется, и затем вычисленное значение передается функции.<br />
<br />
В качестве аргумента могут быть команды вывода поля или подполя. Не допускается использовать в команде спецификацию смещение/длина.<br />
<br />
Список функций с их описанием приведён в статье '''[[Функции языка форматирования ИРБИС]]'''.<br />
<br />
===Форматные выходы. UNIFOR===<br />
<br />
'''''Форматные выходы''''' – вид функций, реализованных на основе определённой технологии вне рамок языка форматирования, и предназначенных для выполнения таких операций по форматированию, которые не могут быть выполнены с помощью собственно языка форматирования. Технология '''''форматных выходов''''' подразумевает реализацию определённого стандартного интерфейса передачи данных для таких функций и возврата значений. В рамках языка форматирования '''''форматные выходы''''' являются строковыми функциями с форматом в качестве аргумента.<br />
<br />
Форматные выходы имеют следующий синтаксис в языке форматирования:<br />
&имя(формат)<br />
где:<br />
* '''<tt>&</tt>''' – идентификатор вызова форматного выхода,<br />
* '''<tt>имя</tt>''' – имя форматного выхода,<br />
* '''<tt>формат</tt>''' – аргумент.<br />
<br />
К использованию предлагается [[UNIFOR|форматный выход UNIFOR]], реализующий множество функций вне базовых рамок языка форматирования.<br />
<br />
===Команда IF===<br />
<br />
Команда '''IF''' предоставляет возможность строить контекстно-зависимые форматы, то есть форматы, способные изменять выходные значения в зависимости от содержимого форматируемой записи.<br />
<br />
Команда '''IF''' записывается следующим образом:<br />
'''IF''' '''''условие''''' '''THEN''' '''''формат-1''''' '''ELSE''' '''''формат-2''''' '''FI'''<br />
где:<br />
* '''''Условие''''' – [[#Логические выражения|логическое выражение]],<br />
* '''''формат-1''''' – формат, который вычисляется в том и только том случае, когда значением логического выражения является '''истина''',<br />
* '''''формат-2''''' – формат, который вычисляется в том и только том случае, когда значением логического выражения является '''ложь'''.<br />
<br />
Фраза '''ELSE''' '''''формат-2''''' не является обязательной, и может быть опущена. Ключевые слова '''IF''', '''THEN''' и '''FI''' обязательны всегда. '''''Формат-1''''' может быть опущен, если присутствует предложение '''ELSE''' (то есть если условие истинно, то ничего не будет выведено). Таким образом, команда '''IF''' может также принимать одну из следующих дополнительных форм:<br />
'''IF ''условие'' THEN ''формат-1'' FI'''<br />
'''IF ''условие'' THEN ELSE ''формат-2'' FI'''<br />
<br />
Поскольку нет никаких ограничений на команды, которые можно использовать в '''''формате-1''''' и '''''формате-2''''', то команды '''IF''' могут быть вложены друг в друга любое количество раз. Ключевое слово '''FI''', в таком случае, должно закрывать каждую команду '''IF''' (можно рассматривать '''IF''' и '''FI''' как пару скобок). Например:<br />
if p(v1) then v24 else if p(v2) and a(v3) then v5 fi fi<br />
<br />
Команда '''IF''' особенно полезна для создания обобщенных форматов в интегрированных базах данных, которые содержат различные типы записей. В этом случае надо иметь различные метки для каждого типа записи (должно быть поле, содержащее код, идентифицирующий тип записи). Таким образом, проверяя тип документа с помощью команды '''IF''', можно порождать в одном формате специфическое форматирование записей каждого типа.<br />
<br />
===Повторяющиеся группы===<br />
<br />
====Определение повторяющейся группы====<br />
<br />
Повторяющаяся группа состоит из набора команд форматирования, заключенных в круглые скобки. Смысл этих команд обычный, за исключением того, что обработка повторяющихся полей производится особым образом.<br />
<br />
Чтобы понять концепцию повторяющейся группы, надо, прежде всего, знать, каким образом система работает с повторяющимися полями. При отсутствии каких-либо дополнительных указаний система трактует все экземпляры (в том порядке, в котором они находятся в записи) как единую строку текста.<br />
<br />
Повторяющаяся группа изменяет порядок обработки системой экземпляров повторяющихся полей таким образом, что происходит последовательная обработка отдельно каждого экземпляра повторяющегося поля.<br />
<br />
Когда система обнаруживает скобку, открывающую повторяющуюся группу, происходит следующее:<br />
# Счетчик экземпляров (повторений) устанавливается в единицу.<br />
# Заключенный в скобки формат обрабатывается таким образом, что команды вывода полей выводят только те экземпляры повторяющихся полей, которые соответствуют текущему значению счетчика экземпляров.<br />
# Если в процессе текущего просмотра всей повторяющейся группы ничего не выводится (то есть в пределах группы больше не оказалось экземпляров повторяющегося поля), то процесс обработки повторяющейся группы завершается. В противном случае значение счетчика экземпляров увеличивается на 1 и повторяется выполнение шагов 2 и 3.<br />
<br />
Отметим еще раз, что все команды форматирования внутри повторяющейся группы обрабатываются последовательно экземпляр за экземпляром (как объяснялось выше), включая, таким образом, и поля, указываемые в команде IF, выражениях и функциях, а также строковых функциях, используемых как команды. Поэтому нежелательно использовать безусловные литералы в повторяющейся группе. И если все же безусловные литералы используются, то они будут выдаваться на один раз больше, чем это надо.<br />
<br />
====Использование повторяющейся группы====<br />
<br />
В подавляющем большинстве случаев для правильной обработки повторяющихся полей достаточно использование простых команд форматирования, таких, например, как команда режима вывода или повторяющихся литералов, как это показано ниже:<br />
{| class="standard"<br />
!Формат||Выходные данные<br />
|-<br />
|<tt>mpl,v70</tt>||<tt>Grieve, B.J.Went, F.W.</tt><br />
|-<br />
|<tt>mdl,v70</tt>||<tt>Grieve, B.J. Went, F.W.</tt><br />
|-<br />
|<tt><nowiki>v70+|; |</nowiki></tt>||<tt>Grieve, B.J.; Went, F.W.</tt><br />
|}<br />
<br />
Однако, возможны случаи, когда появляется необходимость отформатировать повторяющиеся поля другим способом. Например, иногда необходимо форматировать каждый экземпляр поля с новой строки, чего можно достигнуть только с использованием повторяющейся группы, как это показано ниже:<br />
{| class="standard"<br />
!Формат||Выходные данные<br />
|-<br />
|<tt>v675/v200^a</tt>||<tt>623.746623.746(092) Сухой П.О.<br>Конструктор Сухой. Люди и самолеты</tt><br />
|-<br />
|<tt>(v675/),v200^a</tt>||<tt>623.746<br>623.746(092) Сухой П.О.<br>Конструктор Сухой. Люди и самолеты</tt><br />
|}<br />
<br />
В первом случае команда перехода на новую строку (/) выполняется после форматирования всех экземпляров поля 675, а во втором случае она выполняется после каждого экземпляра поля.<br />
<br />
Пример ниже иллюстрирует использование повторяющихся полей с подполями (предполагается, что запись содержит два экземпляра поля 20). В первом формате использование повторяющейся группы дает возможность вывести различные подполя каждого экземпляра повторяющегося поля в виде таблицы. Второй формат аналогичен первому, но не содержит повторяющейся группы.<br />
<br />
Если нужно вывести литерал перед данными, создаваемыми повторяющейся группой, то можно использовать безусловный или условный литерал. Отметим, однако, что условный литерал должен быть связан с командой вывода поля (повторяющаяся группа не является командой вывода поля). Для этой цели необходимо использовать команды фиктивного вывода поля.<br />
<br />
Содержимое записи:<br />
210 ^aNew York^сMcGraw Hill^d1988<br />
210 ^aLondon^cAcademic Press^d1975<br />
Формат 1:<br />
/(v210^a,c11,v210^c,c30,v210^d/)<br />
Вывод:<br />
New York McGraw Hill 1988<br />
London Academic Press 1975<br />
Формат 2:<br />
/v210^a,c11,v210^c,c30,v210^d/<br />
Вывод:<br />
New YorkLondon<br />
McGraw HillAcademic Press<br />
19881975<br />
<br />
Для избежания недоразумений, связанных с тонкостями использования повторяющейся группы, рекомендуется воспользоваться следующим типовым примером:<br />
(if p(v20) then ... fi)<br />
где вместо троеточия следует поставить свои команды, которые будут выполнены на каждое повторение поля 20.<br />
<br />
Если существуют дополнительные условия на вывод, то их также следует помещать в тело условного оператора в приведённом типовом примере.<br />
<br />
Например, вывод всех повторений, кроме первого, можно сделать так:<br />
(if p(v20) then if &uf('+90') <> '1' then ... fi fi)<br />
<br />
Повторяющиеся группы не могут быть вложенными (то есть повторяющаяся группа не может содержать другую повторяющуюся группу), за исключением случая, когда внутренняя группа содержится в аргументе формата функции REF. Так, например, допустимым является следующий формат:<br />
(v10,ref(val(v20),v10,(v20,v30)))<br />
<br />
но приведенный ниже формат является недопустимым, что вызовет сообщение об ошибке:<br />
(v10,(v20,v30))<br />
<br />
Использование повторяющейся группы является обязательным в следующих случаях:<br />
* Использование повторяющегося поля в качестве аргумента функции L.<br />
* Первый аргумент функции REF ссылается на повторяющееся поле.<br />
<br />
Также нужно учитывать возможность употребления повторяющейся группы, когда повторяющееся поле используется в логическом выражении команды IF.<br />
<br />
===Глобальные переменные===<br />
<br />
Для записи и чтения глобальных переменных предназначены [[UNIFOR#Функции для работы с глобальными переменными|специальные форматные выходы]].<br />
<br />
Для вывода значения глобальной переменной предназначена команда '''g''', после которой должен быть записан номер глобальной переменной.<br />
<br />
Например, команда<br />
g1<br />
выводит значение первой глобальной переменной.<br />
<br />
Команда '''g''' в некоторых случаях может служить краткой альтернативой форматным выходам для чтения глобальных переменных.<br />
<br />
Об области видимости глобальных переменных см. в [[#Контекст форматёра|подразделе ''Контекст форматёра'']].<br />
<br />
==Возможности организации программного кода на языке форматирования==<br />
<br />
Возможности ''выполнения файла формата'' и ''вложения формата'' позволяют организовывать код в соответствии с принципами модульности.<br />
<br />
===Выполнение файла формата===<br />
<br />
Возможность выполнения файла формата реализована с помощью [[UNIFOR|форматного выхода <tt>&uf('6…</tt>]].<br />
<br />
Выполнение файла формата происходит динамически, когда доходит очередь до данной инструкции.<br />
<br />
Только с помощью выполнения файла формата возможно вложенное использование повторяющихся групп. Для этого внутри повторяющейся группы выполнить файл формата, содержащий повторяющуюся группу.<br />
<br />
О строгих ограничениях вложенности неизвестно, но исходя из практики типовая рекомендация следующая: не рекомендуется более чем тройная вложенность выполнения файла формата.<br />
<br />
===Вложенный формат===<br />
<br />
В качестве ссылки на вложенный формат используется имя файла формата без расширения, обозначенное символами ASCII с кодами <tt>1C</tt> (File Separator) и <tt>1D</tt> (Group Separator). <tt>1C</tt> указывают непосредственно перед именем формата, а <tt>1D</tt> – непосредственно после.<br />
<br />
Обозначение вложения формата нарушает концепцию файла формата как текстового файла, который возможно набрать с клавиатуры. Предполагается, что возможностью вложения формата удобно пользоваться из Редактора форматов.<br />
<br />
Особенности выполнения файла формата:<br />
* до начала выполнения инструкция формата, вместо ссылок на файлы вложенных форматов вставляется их содержимое.<br />
<br />
Следствием упомянутой особенности является то, что рекурсивное вложение формата неизбежно повлечёт ошибку, так как вставка вложенного формата будет происходить до тех пор, пока не закончится память.<br />
<br />
==Использование команд (тэгов) RTF и HTML==<br />
<br />
В форматах допускается использование команд RTF, обеспечивающих представление неплоских текстов, содержащих шрифтовые выделения, горизонтальную и вертикальную верстку и т.п. Форматы, в которых используются команды RTF, называются RTF-форматы.<br />
<br />
Команды RTF вводятся в формат в виде литералов.<br />
<br />
Если предполагается, что формат будет содержать RTF команды, то он должен быть целиком заключен в фигурные скобки:<br />
'{'формат '}'<br />
<br />
Все команды RTF начинаются с символа \ (обратный слеш).<br />
<br />
Любая команда RTF должна заканчиваться знаком пробела, или непосредственно за ней может следовать другая команда RTF.<br />
Перечень основных команд RTF:<br />
{| class="standard"<br />
!Команда||Назначение<br />
|-<br />
|<tt>\par</tt>||Начало нового параграфа (абзаца)<br />
|-<br />
|<tt>\liNNN</tt>||Левый отступ для всех строк параграфа – NNN (в пунктах)<br />
|-<br />
|<tt>\riNNN</tt>||Правый отступ для всех строк параграфа – NNN (в пунктах)<br />
|-<br />
|<tt>\fiNNN</tt>||Левый отступ для первой строки параграфа – NNN (в пунктах)<br />
|-<br />
|<tt>\pard</tt>||Начало форматирования нового абзаца, все предыдущие команды форматирования параграфа отменяются<br />
|-<br />
|<tt>\fsNNN</tt>||Размер шрифта – NNN (удвоенный размер в пунктах)<br />
|-<br />
|<tt>\ul \ul0</tt>||Начало и конец подчеркивания<br />
|-<br />
|<tt>\i \i0</tt>||Начало и конец курсива<br />
|-<br />
|<tt>\b \b0</tt>||Начало и конец жирности<br />
|-<br />
|<tt>\tab</tt>||Табуляция<br />
|-<br />
|<tt>\qr</tt>||Правое выравнивание строк<br />
|-<br />
|<tt>\ql</tt>||Левое выравнивание строк<br />
|-<br />
|<tt>\qc</tt>||Цетральное выравнивание строк<br />
|-<br />
|<tt>\qj</tt>||Равномерное выравнивание строк<br />
|-<br />
|<tt>\page</tt>||Переход на новую страницу<br />
|-<br />
|<tt>\txNNN</tt>||Позиция табуляция – NNN (в пунктах)<br />
|}<br />
<br />
В форматах, содержащих команды RTF, неприменимы [[#Команды горизонтального и вертикального размещения|команды вертикальной верстки]].<br />
<br />
В форматах показа могут использоваться HTML-теги в качестве альтернативы RTF-командам. Совместное использование RTF-команд и HTML-тегов недопустимо.<br />
<br />
Форматы, в которых используются HTML-теги, называются HTML-форматы.<br />
<br />
HTML-теги вводятся в формат в виде литералов.<br />
<br />
Если требуется явно определить формат как HTML-формат, необходимо в самом начале формата указать фиктивный тэг:<br />
'</>'<br />
<br />
В форматах, содержащих HTML-теги, неприменимы [[#Команды горизонтального и вертикального размещения|команды вертикальной верстки, а также команды Xn и Cn]].<br />
<br />
Предлагаются дополнительные возможности при адресации ресурсов ИРБИС в тегах <A HREF=…> и <IMG SRC=…>:<br />
<A HREF="IRBIS:N,описание_ссылки"><br />
где:<br />
* N – число, обозначающее вид ссылки. Принимает значения 0, 1, 2, 3.<br />
** Для значений 0, 1, 2 – структура и смысл ссылок аналогичен ссылкам, формируемым с помощью форматного выхода &unifor(‘+I..). Важное замечание: форматный выход &unifor(‘+I..) ПРИМЕНИМ ТОЛЬКО В RTF-форматах (т.е. в форматах с HTML-тэгами он не применим).<br />
** Значение 3 определяет ссылку на внешний объект через относительную адресацию в рамках системы ИРБИС:<br />
<A HREF="IRBIS:3,path,dbname,filename"><br />
где:<br />
* path – определяет относительный путь к внешнему объекту в рамках ИР-БИС и принимает значения: 0 – основная директория системы (для ИРБИС32 – та, где находятся исполняемые модули; для ИРБИС64 – та, где находятся ис-полняемые модули сервера); 1 – общая директория баз данных (по умолчанию \DATAI); 10 – директория конкретной БД;<br />
* dbname – имя БД (имеет смысл только при path=10). По умолчанию – предполагается текущая БД;<br />
* filename – имя файла внешнего объекта.<br />
<br />
<IMG SRC="IRBIS:path,dbname,filename"><br />
где параметры path, dbname, filename имеют тот же смысл, что указано выше, и определяют ссылку на графический ресурс (картинку) в рамках ИРБИС.<br />
<br />
Реализуется специальная возможность для отображения штрих-кодов в HTML-форматах, а именно:<br />
<IMG SRC="IRBIS:!!ШТРИХ_КОД!!"><br />
<br />
==Форматы для формально-логического контроля (ФЛК)==<br />
<br />
Для формально-логического контроля данных (как на уровне поля, так и документа в целом) применяются специальные форматы. Форматы для ФЛК используются следующим образом:<br />
* форматированию подвергается контролируемый документ;<br />
* первый символ результата форматирования определяет результат ФЛК, а именно:<br />
** 0 – означает положительный результат контроля;<br />
** 1 – означает отрицательный результат и обнаруженные ошибки считаются непреодолимыми, т.е. подлежат обязательному устранению;<br />
** 2 – означает отрицательный результат, но при этом ошибки считаются преодолимыми, т.е. их можно не исправлять.<br />
* остальной результат форматирования (начиная со второго символа) в случае отрицательного контроля выдается пользователю в качестве сообщения.<br />
<br />
Собственно форматы ФЛК, как правило, содержат команды IF. Многочисленные примеры таких форматов находятся в директории БД IBIS.<br />
<br />
==Форматы с переменными метками==<br />
<br />
В некоторых режимах работы системы применяются форматы, в которых используются, так называемые, переменные метки (например, при вводе данных через словарь – т.н. форматы для переноса данных). [[Сценарии поиска#Поиски по словарю|Исходным для таких форматов обязательно является термин словаря.]]<br />
<br />
Переменные метки обозначаются в таких форматах в виде *** (три символа ''звёздочка''). Форматы с переменными метками используются следующим образом:<br />
* Определяется первая [[Таблица выбора полей#ТВП для инвертированного файла|индексная ссылка]] для исходного термина: а именно, соответствующие номер документа (MFN), метка поля (TAG) и повторение (OCC).<br />
* Все переменные метки в формате заменяются на значение найденной метки поля (TAG) и форматированию подвергается документ с найденным номером (MFN).<br />
* В качестве результата форматирования берется строка с номером OCC (нумерация начинается с 1). Если нет строки с таким номером, результатом форматирования является пустая строка.<br />
<br />
Примеры форматов с переменными метками находятся в директории БД IBIS.<br />
<br />
==Ссылки==<br />
<br />
См. также:<br />
* [[Базы данных ИРБИС]]<br />
* [[Операторы языка форматирования ИРБИС]]<br />
* [[Функции языка форматирования ИРБИС]]<br />
* [[UNIFOR]]<br />
* <tt>[[IRBIS64.dll]]</tt><br />
* [[Язык запросов ИРБИС]]<br />
<br />
Источники информации:<br />
* [[Общее описание системы ИРБИС64]]<br />
<br />
[[Категория:Язык форматирования системы ИРБИС]]<br />
[[Категория:Анонсированные статьи]]</div>Sokvhttp://wiki.elnit.org/index.php?title=%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F_%D0%92%D0%B5%D0%B1-%D0%98%D0%A0%D0%91%D0%98%D0%A1&diff=2467Технология Веб-ИРБИС2017-01-27T11:00:21Z<p>Sokv: /* Обработка фреймов */</p>
<hr />
<div>Технология '''''Веб-ИРБИС''''' служит для создания Веб-приложений для работы с базами данных ИРБИС.<br />
<br />
Данная технология реализована в виде одноимённого [[Веб-ИРБИС|'''''программного продукта – Веб-ИРБИС''''']].<br />
<br />
==Веб-шлюз ИРБИС==<br />
<br />
Программный модуль ''Веб-шлюз ИРБИС'' обеспечивает обработку клиентских запросов.<br />
<br />
''Веб-шлюз ИРБИС'' является шлюзом CGI.<br />
<br />
Запрос может осуществляться по методу POST или GET.<br />
<br />
===Общая схема работы Веб-шлюза ИРБИС===<br />
<br />
Последовательность операций шлюза:<br />
* Чтение параметров INI файла<br />
* Препроцессинг<br />
** Формальный контроль правильности параметров<br />
** Интерпретация поискового запроса<br />
** Авторизация<br />
** Выполнение скрипта защиты<br />
** Повторная авторизация<br />
* Выполнение поиска<br />
* Формирование ответа (объединение и обработка фреймов)<br />
* Определение HTTP заголовков на основе INI файла<br />
* Возврат ответа<br />
<br />
В случае возникновения ошибки выполнения или превышения времени обработки запроса шлюз возвращает ошибку (error.html).<br />
<br />
====Препроцессинг====<br />
<br />
=====Скрипт-защита=====<br />
<br />
Формат скрипта защиты выполняет две функции: 1) проверку поступивших параметров запроса и защиту от взлома 2) обработку и дополнение параметров.<br />
<br />
Первая строка, сформированная форматом срипт-защиты, определяет общий результат – если это 0 или файлом не было возвращено никаких значений – скрипт-защита определила ошибку, если результат 1 или файлом были возвращены другие ненулевые значения – ошибки нет. В первом случае шлюз возвращает error.html, в последнем случае шлюз читает остальные строки формата и изменяет параметры запроса на новые.<br />
<br />
Например, строка ‘SCRIPT_DONE=YES’/ задаёт параметру SCRIPT_DONE значение YES.<br />
<br />
=====Авторизация пользователя=====<br />
<br />
Авторизация даёт возможность заказывать литературу, просматривать формуляр и редактировать корзину заказов.<br />
<br />
Для авторизации используется база RDR. Авторизация происходит по идентификатору и, если в пользовательском запросе задан параметр Z21FLAGID=1, – по фамилии. После авторизации шлюз выполняет шифрование идентификатора, и зашифрованный идентификатор передаётся при переходе по страницам.<br />
<br />
====Инициализация параметров====<br />
<br />
После поступления клиентского запроса осуществляется инициализация параметров веб-шлюза на основе параметров CGI.<br />
<br />
Обрабатываемый шлюзом набор параметров определяется конфигурационным файлом Веб-шлюза ИРБИС.<br />
<br />
Эти параметры доступны в контексте фреймов.<br />
<br />
Параметры используются, в том числе, для отслеживания состояния веб-страницы. В ответ на HTTP-запрос клиента (обычно – в генерируемую html-страницу, передаваемую клиенту) может включить набор пользовательских параметров вместе с их значениями, полученными в запросе, для чего есть специальная команда.<br />
<br />
Отслеживание состояния осуществляется с использованием следующих этапов: 1) данные передаются на веб-шлюз в виде параметров запроса; 2) веб-шлюз передаёт данные вместе со сформированной страницей в скрытых полях форм HTML.<br />
<br />
====Выполнение команды====<br />
<br />
Затем шлюз переходит к выполнению команды. Команда соответствует переданному параметру C21COM.<br />
<br />
В контексте выполнения команды используются полученные параметры.<br />
<br />
Для каждой команды есть набор '''основных параметров''', логика использования которых предопределена самим веб-шлюзом.<br />
<br />
К основным параметрам шлюза относятся:<br />
* <tt>C21COM</tt> – команда, которую должен выполнить веб-шлюз.<br />
* <tt>I21DBN</tt> – имя [[Профили|профиля]]. Веб-шлюз ИРБИС в соответствии с именем профиля определяет набор [[Фреймы|фреймов]], из которых составит ответ клиенту. Веб-шлюз ИРБИС ищет названия фреймов в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файле irbis_server.ini]] в секции, название которой соответствует значению параметра <tt>I21DBN</tt> (подробнее в разделе [[#Роль фреймов в работе веб-шлюза ИРБИС|Роль фреймов в работе веб-шлюза ИРБИС]]).<br />
* <tt>P21DBN</tt> – имя базы данных.<br />
* <tt>Z21ID</tt> – значение параметра авторизации.<br />
<br />
Кроме '''основных''', есть '''пользовательские параметры''' – все остальные параметры.<br />
<br />
Особенность пользовательских параметров в том, что их набор и использование полностью могут быть определены (переопределены) пользователями системы ИРБИС:<br />
* Определение параметров даётся в конфигурационном файле Веб-шлюза ИРБИС.<br />
* Параметры доступны в виде виртуальных полей на языке форматирования в контексте фреймов.<br />
<br />
====Ответ веб-шлюза ИРБИС клиенту====<br />
<br />
Порядок формирования ответа веб-шлюза ИРБИС клиенту зависит от команды.<br />
<br />
=====Ответ с использованием фреймов=====<br />
<br />
Для команд, представленных в таблице, осуществляется генерация ответа с использованием технологии выбора и обработки фреймов.<br />
<br />
Обычно это динамически формируемая веб-страница.<br />
<br />
'''Таблица.''' Команды веб-шлюза ИРБИС.<br />
{|<br />
|<br />
{| class="standard"<br />
!Значение параметра <tt>C21COM</tt>||Описание команды||Соответствующий параметр в <tt>irbis_server.ini</tt><br />
|-<br />
|'''F'''||'''''показ''''' – команда показа страницы||ShowFrames<br />
|-<br />
|'''S'''||'''''поиск''''' – команда выполнения и показа результатов поиска||SearchFrames<br />
|-<br />
|'''T'''||'''''словарь''''' – команда показа терминов словаря||DictionryFrames<br />
|-<br />
|'''Z'''||'''''заказ''''' – команда отбора записей в корзину заказов||ZakazFrames<br />
|-<br />
|'''R'''||'''''запись''''' – команда редактуры записей||RecUpdateFrames<br />
|}<br />
|}<br />
<br />
Выбор набора фреймов зависит от: команды (параметр C21COM) и профиля (параметр I21DBN).<br />
<br />
Возможные наборы фреймов предварительно сконфигурированы и указаны в конфигурационном файле <tt>irbis_server.ini</tt>.<br />
<br />
Откуда шлюз и считывает нужный набор, в зависимости от параметров (C21COM и I21DBN).<br />
<br />
Каждой команде веб-шлюза ИРБИС соответствует имя параметра в файле <tt>irbis_server.ini</tt> (см. таблицу ''Команды веб-шлюза ИРБИС'').<br />
<br />
=====Отправка клиенту ресурсного файла=====<br />
<br />
Для команд, представленных в таблице, отправка клиенту ресурсного файла.<br />
<br />
'''Таблица.''' Команды веб-шлюза ИРБИС.<br />
{|<br />
|<br />
{| class="standard"<br />
!Значение параметра <tt>C21COM</tt>||Описание команды<br />
|-<br />
|'''E'''||'''''экспорт''''' – команда выгрузки записей<br />
|-<br />
|'''2'''||'''''файл''''' – команда чтения внешнего объекта<br />
|-<br />
|'''4'''||'''''скачать''''' – команда заимствования записи<br />
|}<br />
|}<br />
<br />
===Команда поиска – S===<br />
<br />
'''Пример поиска всех страниц одного текста PDF'''<br />
<br />
Здесь мы предполагаем, что:<br />
* Работаем в контексте базы данных IBIS.<br />
* Поисковое выражение <tt>TXT=2__$</tt> позволяет найти все страницы файла <tt>2.pdf</tt>.<br />
<br />
Чтобы создать произвольный запрос, не связанный с существующим функционалом системы, можно создать новый профиль EXAMPLE1. Для этого в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|конфигурационном файле веб-шлюза ИРБИС irbis server.ini]] нужно добавить секцию EXAMPLE1<br />
[EXAMPLE1]<br />
FRAMES=C:\irbis\irbis_plus\IRBIS64\DATAI\frames_15_plus\FullText\<br />
ShowFrames=<br />
SearchFrames=RESULT<br />
DBNAME=IBIS<br />
где значение параметра FRAMES должно соответствовать местонахождению фреймов.<br />
<br />
Для команды поиска порядок формирования ответа определяется параметром SearchFrames. И запись<br />
SearchFrames=RESULT<br />
означает, что при формировании Веб-шлюзом ответа на команду поиска не участвуют фреймы, участвует только формат, который будет указан в запросе.<br />
<br />
В качестве этого формата предлагается создать файл '''<tt>example1.pft</tt>''' со следующим содержимым<br />
<nowiki>mfn,/,</nowiki><br />
Этот формат выводит список MFN найденных записей.<br />
<br />
Теперь всё готово, чтобы выполнить запрос<br />
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<br />
<br />
В основных полях мы указываем команду поиска (S), базу данных IBIS, профиль EXAMPLE1, идентификатор пользователя.<br />
<br />
Поле S21All содержит запрос на языке запросов ИРБИС. Если его декодировать из кодировки URL, то он будет выглядеть так<br />
<nowiki>S21All=<.>TXT=2__$<.></nowiki><br />
где, в соответствии с правилами работы веб-шлюза, точка в угловых скобках заменяет двойную кавычку. Таким образом, указанный запрос следует читать как<br />
"TXT=2__$"<br />
где двойные кавычки являются ограничителем запроса в выражении на [[Язык запросов ИРБИС|языке запросов ИРБИС]]<br />
<br />
Формат вывода найденных записей, который предлагалось подготовить выше, указан в параметре S21FMT, без расширения.<br />
<br />
Результатом выполнения этого запроса будет обещанный список mfn, например<br />
0000000002<br />
0000000006<br />
0000000013<br />
0000000018<br />
<br />
Можно усложнить запрос, ограничив вывод порцией из 2 результатов, начиная со 2-го (параметры S21CNR и S21STN)<br />
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<br />
<br />
Результатом будет<br />
0000000006<br />
0000000013<br />
<br />
Можно усложнить формат вывода найденных записей '''<tt>example1.pft</tt>''', добавив информацию о количестве найденных, а также введённых порционных ограничениях<br />
<nowiki>mfn,'; кол-во найденных = ',v1001,'; с какого номера начать = ',v2223,'; размер порции = ',v2224,/,</nowiki><br />
где 1001, 2223 и 2224 – виртуальные поля, в которые шлюз помещает данные в соответствии с [[таблицей виртуальных полей шлюза]].<br />
<br />
Все данные, которые шлюз принял в виде параметров, попадают в виртуальные поля в соответствии правилами, заданными в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файле irbis_server.ini]]. Например, параметру S21CNR соответствует метка 2224, параметру S21STN – 2223.<br />
<br />
Результатом будет<br />
0000000006; кол-во найденных = 4; с какого номера начать = 2; размер порции = 2<br />
0000000013; кол-во найденных = 4; с какого номера начать = 2; размер порции = 2<br />
<br />
В последнем примере количество найденных и данные о порции повторяются с каждым результатом поиска, что является избыточным.<br />
<br />
Такой избыточности позволяют избежать применение [[фреймов]].<br />
<br />
Создадим файл example1.frm (его местоположение должно соответствовать параметру FRAMES в профиле) со следующим содержимым<br />
Вывод через фрейм... <br />
<?! 'кол-во найденных = ',v1001,'; с какого номера начать = ',v2223,'; размер порции = ',v2224,/, ?><br />
<br />
Чтобы задействовать этот фрейм, в описании профиля можно изменить значение параметра SearchFrames следующим образом:<br />
SearchFrames=example1.frm,RESULT<br />
что следует понимать так, что шлюз вернёт результат выполнения команды поиска, составленный из:<br />
* результата выполнения фрейма example1.frm<br />
* результатов работы формата, который отработает для каждого результата поиска (обозначается словом RESULT).<br />
<br />
Кроме того, чтобы измежать дублирующихся данных, в '''<tt>example1.pft</tt>''' оставим только вывод MFN:<br />
mfn,/,<br />
<br />
Результатом будет<br />
Вывод через фрейм... кол-во найденных = 4; с какого номера начать = 2; размер порции = 2<br />
0000000006<br />
0000000013<br />
<br />
===Команда показа терминов словаря – T===<br />
<br />
'''Пример команды показа терминов словаря'''<br />
<br />
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&<br />
<br />
где:<br />
* <tt>C21COM=T</tt> определяет команду,<br />
* <tt>I21DBN=IBIS</tt> базу данных,<br />
* <tt>Z21ID=1500323880383212</tt> идентификатор читателя в зашифрованном виде,<br />
* <tt>T21PRF=KT=</tt> префикс словаря,<br />
* <tt>T21TRM=a</tt> – требование терминов, начинающихся на <tt>a</tt>.<br />
<br />
Пример возврата:<br />
A20040830ARUSY|1<br />
A20041017ABELY|1<br />
A20041118ARUSY|1<br />
A2H|2<br />
A540|9<br />
A54001|7<br />
A550UTILIZATION|1<br />
AACDEMY|1<br />
AASL|2<br />
AASLPUBSANDJOURNALS|2<br />
<br />
===Добавление пользовательского параметра===<br />
<br />
Добавление пользовательского параметра осуществляется в несколько шагов:<br />
* '''добавление ''пользовательского параметра'' в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файл инициализации шлюза <tt>irbis_server.ini</tt>]]'''<br />
: Необходимо добавить описание нового ''пользовательского параметра'' в настроечный файл <tt>irbis_server.ini</tt>, задав имя и метку параметра. Для этого в секции <tt>[PARAMETRS]</tt> используются ''параметры ini файла'' <tt>PARNAME_</tt> и <tt>PARTAG_</tt> (не стоит путать термины ''пользовательские параметры'' веб-шлюза и ''параметры ini файла''), где вместо знака подчёркивания ставится номер пользовательского параметра по порядку, например:<br />
PARNAME2=C21COM<br />
PARTAG2=2222<br />
: В этом примере мы видим описание второго по порядку из определённых в секции <tt>[PARAMETRS]</tt> параметров: имя параметра <tt>C21COM</tt>, метка параметра <tt>2222</tt>. Имя и метка параметров должны быть уникальными. После того как описание ''пользовательского параметра'' добавлено необходимо изменить значение параметра <tt>PARCOUNT</tt> в секции <tt>[PARAMETRS]</tt>, его значение должно быть равно порядковому номеру последнего описания ''пользовательского параметра''.<br />
: ''Примечание:'' обратите внимание, что в файле <tt>irbis_server.ini</tt> хранятся описания не только пользовательских параметров, а присутствует также описания предустановленных параметров.<br />
* '''использование в файлах <tt>.frm</tt> команд <tt><!FORMAT=INSERT_ALL_PARAMETERS></tt> и <tt><!FORMAT=INSERT_ALL_PARAMETERS_IN_QUERY></tt>'''<br />
: Команда <tt><!FORMAT=INSERT_ALL_PARAMETERS></tt> обеспечивает вставку в код HTML-страницы всех непустых переданных веб-шлюзу параметров в виде скрытых элементов формы, например:<br />
<input type="hidden" name="PARAM_NAME" value="PARAM_VALUE"><br />
: Команда <tt><!FORMAT=INSERT_ALL_PARAMETERS_IN_QUERY></tt> вставляет в код HTML-страницы гиперссылку, содержащую все переданные веб-шлюзу параметры.<br />
<br />
===Система команд Веб-шлюза ИРБИС===<br />
<br />
Система ''команд'' Веб-шлюза ИРБИС позволяет задать собственный набор фреймов и порядок их объединения для каждой задачи. Для разных задач предусмотрены разные команды, например: для страницы приглашения к поиску, результата поиска, отбора записей в корзину заказов и т.д.<br />
<br />
==Обработка фреймов==<br />
<br />
В общем случае, веб-страница формируется путём объединения (''склеивания''):<br />
* Нескольких ''фреймов'' (соответствующий список ''фреймов'' задаётся в профиле для каждой команды). Список может не содержать ни одного фрейма.<br />
* Результата [[Язык форматирования системы ИРБИС#Понятие формата|''форматирования'']] записей, найденных в соответствии запросу пользователя, базы данных, заданной в профиле. Формат задаётся параметром шлюза <tt>S21FMT</tt>. Результат форматирования вставляется в месте, указанном словом <tt>RESULT</tt> в списке ''фреймов'' заданном в профиле. Слово может отсутствовать в списке.<br />
* В случае команды ''запись'' слово <tt>RESULT</tt> соответствует моменту, в который будет выполнена запись. Если опустить слово <tt>RESULT</tt>, то запись не будет выполнена.<br />
<br />
===Контекст фрейма===<br />
<br />
Контекст фрейма - запись читателя, осуществившего вход в систему.<br />
<br />
===Фрейм как язык разметки===<br />
<br />
Фрейм представляет собой текстовый файл, содержимое которого передаётся клиенту (в веб браузер), который также может содержать вставки, которые будут обработаны определённым образом перед передачей клиенту.<br />
<br />
Предусмотрены вставки следующих видов:<br />
* вставка на языке форматирования ИРБИС,<br />
* вложенный фрейм.<br />
<br />
'''''Вставка на языке форматирования''''' обозначается следующим образом<br />
<br />
<!FORMAT<br />
<br />
'''Пример:'''<br />
<br />
<nowiki><!FORMAT=if v3409='' then 'value=""' else 'value=','"',v3409,'"',fi></nowiki><br />
<br />
''Примечание: если вставка на языке форматирования содержит символы, кодирующиеся в UTF-8 более чем одним байтом (например, кириллицу), то формат обязательно должен начинаться с восклицательного знака. Это связано с тем, что формат в кодировке UTF-8 [[Язык форматирования системы ИРБИС#Кодировка|должен предваряться восклицательным знаком]], а все фреймы храняться именно в кодировке UTF-8.''<br />
<br />
'''Пример:'''<br />
<br />
<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><br />
<br />
'''Пример вложенного фрейма:'''<br />
<br />
<!FORMAT=if &uf('IMAIN,SHOW_DUBLIN_CORE,0') <> '0' then /'<!FILE=Dublin_Core.frm>' fi><br />
<br />
Предусмотрен '''''упрощённый синтаксис вставки на языке форматирования''''':<br />
<?!if p(v2225) then 'true' fi ?><br />
<br />
===Постобработка===<br />
<br />
Перед передачей результата выполнения фрейма клиенту происходит подстановка значений вместо следующих обозначений<br />
<br />
'''Таблица.''' Таблица подстановок во время постобработки.<br />
{|<br />
|<br />
{| class="standard"<br />
!Что заменяется||На что заменяется<br />
|-<br />
|<tt><--HTTP_PATH--></tt>||корневая директория шлюза (htdocs)<br />
|-<br />
|<tt><--CGI_PATH--></tt>||путь к шлюзу, включая его имя cgiirbis_64_ft.exe<br />
|}<br />
|}<br />
<br />
===Пример последовательности действий Веб-шлюза ИРБИС при формировании веб-страницы в ответ на запрос===<br />
<br />
Веб-шлюз ИРБИС при получении команд '''F''', '''S''', '''T''', '''Z''', '''R''' выполняет следующую последовательность действий:<br />
* Веб-шлюз получил запрос. Запрос содержит параметры <tt>C21COM</tt>, <tt>I21DBN</tt> и другие.<br />
* В файле <tt>irbis_server.ini</tt> веб-шлюз находит секцию, имя которой соответствует значению параметра <tt>I21DBN</tt>. Иными словами: с одной стороны, в качестве значения параметра <tt>I21DBN</tt> указывается имя профиля, с другой стороны, для каждого профиля в файле <tt>irbis_server.ini</tt> должна содержаться секция, имя которой совпадает с именем профиля.<br />
* В указанной секции файла <tt>irbis_server.ini</tt> веб-шлюз находит значение параметра, соответствующего указанной в параметре <tt>C21COM</tt> команде (см. таблицу ''Команды веб-шлюза ИРБИС''). Полученное значение должно представлять собой список фреймов.<br />
* Фреймы обрабатываются, и результат, представляющий собой HTML-страницу, отправляется клиенту в качестве ответа.<br />
<br />
===Примеры перехода пользователя по страницам Веб-ИРБИС===<br />
<br />
Пример запроса начальной страницы:<br />
<br />
http://localhost:8080/cgi-bin/irbis64r_15_plus/cgiirbis_64_ft.exe?C21COM=F&I21DBN=IBIS_FULLTEXT&P21DBN=IBIS&Z21ID=&S21CNR=5<br />
<br />
где указаны:<br />
* команда шлюза F (''показ страницы'')<br />
* имя профиля IBIS_FULLTEXT<br />
* база данных IBIS<br />
* авторизация не осуществлялась<br />
<br />
Параметр S21CNR не обязателен.<br />
<br />
При авторизации запрос приобретает следующий вид<br />
<br />
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<br />
<br />
где указаны:<br />
* команда шлюза F (''показ страницы'')<br />
* имя профиля AUTHOR<br />
* база данных IBIS<br />
* параметры авторизации: Z21FLAGID, фамилия читателя Z21FAMILY и идентификатор читателя Z21ID<br />
<br />
При поиске по слову "библиотека" запрос приобретает следующий вид<br />
<br />
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<br />
<br />
где указаны:<br />
* команда шлюза S (''поиск'')<br />
* имя профиля IBIS_FULLTEXT<br />
* база данных IBIS<br />
* параметры авторизации: Z21ID<br />
* текущий запрос SEARCH_STRING и предыдущий запрос FT_S21STR (одинаковые)<br />
* USES21ALL=1 (использовать параметр S21ALL, применяется в поиске связных)<br />
* S21CNR=5 (порция при показе найденных)<br />
* S21REF=10 (для правильного формирования ссылок на страницы с результатами поиска)<br />
* C21COM1<br />
* FT_PREFIX<br />
* S21FMT=briefHTML_ft<br />
* AVT_S21P03=A%3D<br />
* AVT_S21P02=1<br />
* AVT_S21LOG=1<br />
* NAME_S21P03=T%3D<br />
* NAME_S21P02=1<br />
* NAME_S21LOG=1<br />
* UDC_S21P03=U%3D<br />
* UDC_S21P02=0<br />
* UDC_S21LOG=1<br />
* IZD_S21P03=M%3D<br />
* IZD_S21P02=1<br />
* IZD_S21LOG=1<br />
* DAT_S21P03=G%3D<br />
* DAT_S21P02=1<br />
* DAT_S21LOG=5<br />
* P21DBN=IBIS<br />
* FT_S21LOG=4<br />
* FT_S21P03=K%3D<br />
* FT_S21P01=3<br />
* S21STN=1<br />
* S21COLORTERMS=1<br />
<br />
==Ссылки==<br />
<br />
См. также:<br />
* [[Веб-ИРБИС]]<br />
* [[Установка Веб-шлюза Ирбис 64]]<br />
* [[Настройка и обслуживание Веб-ИРБИС]]<br />
* [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini]]<br />
* [[Язык форматирования системы ИРБИС]]<br />
* [[Язык запросов ИРБИС]]<br />
<br />
[[Категория:Технология Веб-ИРБИС]]<br />
[[Категория:ИРБИС 64]]</div>Sokvhttp://wiki.elnit.org/index.php?title=%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F_%D0%92%D0%B5%D0%B1-%D0%98%D0%A0%D0%91%D0%98%D0%A1&diff=2466Технология Веб-ИРБИС2017-01-27T10:49:02Z<p>Sokv: /* Постобработка */</p>
<hr />
<div>Технология '''''Веб-ИРБИС''''' служит для создания Веб-приложений для работы с базами данных ИРБИС.<br />
<br />
Данная технология реализована в виде одноимённого [[Веб-ИРБИС|'''''программного продукта – Веб-ИРБИС''''']].<br />
<br />
==Веб-шлюз ИРБИС==<br />
<br />
Программный модуль ''Веб-шлюз ИРБИС'' обеспечивает обработку клиентских запросов.<br />
<br />
''Веб-шлюз ИРБИС'' является шлюзом CGI.<br />
<br />
Запрос может осуществляться по методу POST или GET.<br />
<br />
===Общая схема работы Веб-шлюза ИРБИС===<br />
<br />
Последовательность операций шлюза:<br />
* Чтение параметров INI файла<br />
* Препроцессинг<br />
** Формальный контроль правильности параметров<br />
** Интерпретация поискового запроса<br />
** Авторизация<br />
** Выполнение скрипта защиты<br />
** Повторная авторизация<br />
* Выполнение поиска<br />
* Формирование ответа (объединение и обработка фреймов)<br />
* Определение HTTP заголовков на основе INI файла<br />
* Возврат ответа<br />
<br />
В случае возникновения ошибки выполнения или превышения времени обработки запроса шлюз возвращает ошибку (error.html).<br />
<br />
====Препроцессинг====<br />
<br />
=====Скрипт-защита=====<br />
<br />
Формат скрипта защиты выполняет две функции: 1) проверку поступивших параметров запроса и защиту от взлома 2) обработку и дополнение параметров.<br />
<br />
Первая строка, сформированная форматом срипт-защиты, определяет общий результат – если это 0 или файлом не было возвращено никаких значений – скрипт-защита определила ошибку, если результат 1 или файлом были возвращены другие ненулевые значения – ошибки нет. В первом случае шлюз возвращает error.html, в последнем случае шлюз читает остальные строки формата и изменяет параметры запроса на новые.<br />
<br />
Например, строка ‘SCRIPT_DONE=YES’/ задаёт параметру SCRIPT_DONE значение YES.<br />
<br />
=====Авторизация пользователя=====<br />
<br />
Авторизация даёт возможность заказывать литературу, просматривать формуляр и редактировать корзину заказов.<br />
<br />
Для авторизации используется база RDR. Авторизация происходит по идентификатору и, если в пользовательском запросе задан параметр Z21FLAGID=1, – по фамилии. После авторизации шлюз выполняет шифрование идентификатора, и зашифрованный идентификатор передаётся при переходе по страницам.<br />
<br />
====Инициализация параметров====<br />
<br />
После поступления клиентского запроса осуществляется инициализация параметров веб-шлюза на основе параметров CGI.<br />
<br />
Обрабатываемый шлюзом набор параметров определяется конфигурационным файлом Веб-шлюза ИРБИС.<br />
<br />
Эти параметры доступны в контексте фреймов.<br />
<br />
Параметры используются, в том числе, для отслеживания состояния веб-страницы. В ответ на HTTP-запрос клиента (обычно – в генерируемую html-страницу, передаваемую клиенту) может включить набор пользовательских параметров вместе с их значениями, полученными в запросе, для чего есть специальная команда.<br />
<br />
Отслеживание состояния осуществляется с использованием следующих этапов: 1) данные передаются на веб-шлюз в виде параметров запроса; 2) веб-шлюз передаёт данные вместе со сформированной страницей в скрытых полях форм HTML.<br />
<br />
====Выполнение команды====<br />
<br />
Затем шлюз переходит к выполнению команды. Команда соответствует переданному параметру C21COM.<br />
<br />
В контексте выполнения команды используются полученные параметры.<br />
<br />
Для каждой команды есть набор '''основных параметров''', логика использования которых предопределена самим веб-шлюзом.<br />
<br />
К основным параметрам шлюза относятся:<br />
* <tt>C21COM</tt> – команда, которую должен выполнить веб-шлюз.<br />
* <tt>I21DBN</tt> – имя [[Профили|профиля]]. Веб-шлюз ИРБИС в соответствии с именем профиля определяет набор [[Фреймы|фреймов]], из которых составит ответ клиенту. Веб-шлюз ИРБИС ищет названия фреймов в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файле irbis_server.ini]] в секции, название которой соответствует значению параметра <tt>I21DBN</tt> (подробнее в разделе [[#Роль фреймов в работе веб-шлюза ИРБИС|Роль фреймов в работе веб-шлюза ИРБИС]]).<br />
* <tt>P21DBN</tt> – имя базы данных.<br />
* <tt>Z21ID</tt> – значение параметра авторизации.<br />
<br />
Кроме '''основных''', есть '''пользовательские параметры''' – все остальные параметры.<br />
<br />
Особенность пользовательских параметров в том, что их набор и использование полностью могут быть определены (переопределены) пользователями системы ИРБИС:<br />
* Определение параметров даётся в конфигурационном файле Веб-шлюза ИРБИС.<br />
* Параметры доступны в виде виртуальных полей на языке форматирования в контексте фреймов.<br />
<br />
====Ответ веб-шлюза ИРБИС клиенту====<br />
<br />
Порядок формирования ответа веб-шлюза ИРБИС клиенту зависит от команды.<br />
<br />
=====Ответ с использованием фреймов=====<br />
<br />
Для команд, представленных в таблице, осуществляется генерация ответа с использованием технологии выбора и обработки фреймов.<br />
<br />
Обычно это динамически формируемая веб-страница.<br />
<br />
'''Таблица.''' Команды веб-шлюза ИРБИС.<br />
{|<br />
|<br />
{| class="standard"<br />
!Значение параметра <tt>C21COM</tt>||Описание команды||Соответствующий параметр в <tt>irbis_server.ini</tt><br />
|-<br />
|'''F'''||'''''показ''''' – команда показа страницы||ShowFrames<br />
|-<br />
|'''S'''||'''''поиск''''' – команда выполнения и показа результатов поиска||SearchFrames<br />
|-<br />
|'''T'''||'''''словарь''''' – команда показа терминов словаря||DictionryFrames<br />
|-<br />
|'''Z'''||'''''заказ''''' – команда отбора записей в корзину заказов||ZakazFrames<br />
|-<br />
|'''R'''||'''''запись''''' – команда редактуры записей||RecUpdateFrames<br />
|}<br />
|}<br />
<br />
Выбор набора фреймов зависит от: команды (параметр C21COM) и профиля (параметр I21DBN).<br />
<br />
Возможные наборы фреймов предварительно сконфигурированы и указаны в конфигурационном файле <tt>irbis_server.ini</tt>.<br />
<br />
Откуда шлюз и считывает нужный набор, в зависимости от параметров (C21COM и I21DBN).<br />
<br />
Каждой команде веб-шлюза ИРБИС соответствует имя параметра в файле <tt>irbis_server.ini</tt> (см. таблицу ''Команды веб-шлюза ИРБИС'').<br />
<br />
=====Отправка клиенту ресурсного файла=====<br />
<br />
Для команд, представленных в таблице, отправка клиенту ресурсного файла.<br />
<br />
'''Таблица.''' Команды веб-шлюза ИРБИС.<br />
{|<br />
|<br />
{| class="standard"<br />
!Значение параметра <tt>C21COM</tt>||Описание команды<br />
|-<br />
|'''E'''||'''''экспорт''''' – команда выгрузки записей<br />
|-<br />
|'''2'''||'''''файл''''' – команда чтения внешнего объекта<br />
|-<br />
|'''4'''||'''''скачать''''' – команда заимствования записи<br />
|}<br />
|}<br />
<br />
===Команда поиска – S===<br />
<br />
'''Пример поиска всех страниц одного текста PDF'''<br />
<br />
Здесь мы предполагаем, что:<br />
* Работаем в контексте базы данных IBIS.<br />
* Поисковое выражение <tt>TXT=2__$</tt> позволяет найти все страницы файла <tt>2.pdf</tt>.<br />
<br />
Чтобы создать произвольный запрос, не связанный с существующим функционалом системы, можно создать новый профиль EXAMPLE1. Для этого в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|конфигурационном файле веб-шлюза ИРБИС irbis server.ini]] нужно добавить секцию EXAMPLE1<br />
[EXAMPLE1]<br />
FRAMES=C:\irbis\irbis_plus\IRBIS64\DATAI\frames_15_plus\FullText\<br />
ShowFrames=<br />
SearchFrames=RESULT<br />
DBNAME=IBIS<br />
где значение параметра FRAMES должно соответствовать местонахождению фреймов.<br />
<br />
Для команды поиска порядок формирования ответа определяется параметром SearchFrames. И запись<br />
SearchFrames=RESULT<br />
означает, что при формировании Веб-шлюзом ответа на команду поиска не участвуют фреймы, участвует только формат, который будет указан в запросе.<br />
<br />
В качестве этого формата предлагается создать файл '''<tt>example1.pft</tt>''' со следующим содержимым<br />
<nowiki>mfn,/,</nowiki><br />
Этот формат выводит список MFN найденных записей.<br />
<br />
Теперь всё готово, чтобы выполнить запрос<br />
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<br />
<br />
В основных полях мы указываем команду поиска (S), базу данных IBIS, профиль EXAMPLE1, идентификатор пользователя.<br />
<br />
Поле S21All содержит запрос на языке запросов ИРБИС. Если его декодировать из кодировки URL, то он будет выглядеть так<br />
<nowiki>S21All=<.>TXT=2__$<.></nowiki><br />
где, в соответствии с правилами работы веб-шлюза, точка в угловых скобках заменяет двойную кавычку. Таким образом, указанный запрос следует читать как<br />
"TXT=2__$"<br />
где двойные кавычки являются ограничителем запроса в выражении на [[Язык запросов ИРБИС|языке запросов ИРБИС]]<br />
<br />
Формат вывода найденных записей, который предлагалось подготовить выше, указан в параметре S21FMT, без расширения.<br />
<br />
Результатом выполнения этого запроса будет обещанный список mfn, например<br />
0000000002<br />
0000000006<br />
0000000013<br />
0000000018<br />
<br />
Можно усложнить запрос, ограничив вывод порцией из 2 результатов, начиная со 2-го (параметры S21CNR и S21STN)<br />
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<br />
<br />
Результатом будет<br />
0000000006<br />
0000000013<br />
<br />
Можно усложнить формат вывода найденных записей '''<tt>example1.pft</tt>''', добавив информацию о количестве найденных, а также введённых порционных ограничениях<br />
<nowiki>mfn,'; кол-во найденных = ',v1001,'; с какого номера начать = ',v2223,'; размер порции = ',v2224,/,</nowiki><br />
где 1001, 2223 и 2224 – виртуальные поля, в которые шлюз помещает данные в соответствии с [[таблицей виртуальных полей шлюза]].<br />
<br />
Все данные, которые шлюз принял в виде параметров, попадают в виртуальные поля в соответствии правилами, заданными в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файле irbis_server.ini]]. Например, параметру S21CNR соответствует метка 2224, параметру S21STN – 2223.<br />
<br />
Результатом будет<br />
0000000006; кол-во найденных = 4; с какого номера начать = 2; размер порции = 2<br />
0000000013; кол-во найденных = 4; с какого номера начать = 2; размер порции = 2<br />
<br />
В последнем примере количество найденных и данные о порции повторяются с каждым результатом поиска, что является избыточным.<br />
<br />
Такой избыточности позволяют избежать применение [[фреймов]].<br />
<br />
Создадим файл example1.frm (его местоположение должно соответствовать параметру FRAMES в профиле) со следующим содержимым<br />
Вывод через фрейм... <br />
<?! 'кол-во найденных = ',v1001,'; с какого номера начать = ',v2223,'; размер порции = ',v2224,/, ?><br />
<br />
Чтобы задействовать этот фрейм, в описании профиля можно изменить значение параметра SearchFrames следующим образом:<br />
SearchFrames=example1.frm,RESULT<br />
что следует понимать так, что шлюз вернёт результат выполнения команды поиска, составленный из:<br />
* результата выполнения фрейма example1.frm<br />
* результатов работы формата, который отработает для каждого результата поиска (обозначается словом RESULT).<br />
<br />
Кроме того, чтобы измежать дублирующихся данных, в '''<tt>example1.pft</tt>''' оставим только вывод MFN:<br />
mfn,/,<br />
<br />
Результатом будет<br />
Вывод через фрейм... кол-во найденных = 4; с какого номера начать = 2; размер порции = 2<br />
0000000006<br />
0000000013<br />
<br />
===Команда показа терминов словаря – T===<br />
<br />
'''Пример команды показа терминов словаря'''<br />
<br />
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&<br />
<br />
где:<br />
* <tt>C21COM=T</tt> определяет команду,<br />
* <tt>I21DBN=IBIS</tt> базу данных,<br />
* <tt>Z21ID=1500323880383212</tt> идентификатор читателя в зашифрованном виде,<br />
* <tt>T21PRF=KT=</tt> префикс словаря,<br />
* <tt>T21TRM=a</tt> – требование терминов, начинающихся на <tt>a</tt>.<br />
<br />
Пример возврата:<br />
A20040830ARUSY|1<br />
A20041017ABELY|1<br />
A20041118ARUSY|1<br />
A2H|2<br />
A540|9<br />
A54001|7<br />
A550UTILIZATION|1<br />
AACDEMY|1<br />
AASL|2<br />
AASLPUBSANDJOURNALS|2<br />
<br />
===Добавление пользовательского параметра===<br />
<br />
Добавление пользовательского параметра осуществляется в несколько шагов:<br />
* '''добавление ''пользовательского параметра'' в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файл инициализации шлюза <tt>irbis_server.ini</tt>]]'''<br />
: Необходимо добавить описание нового ''пользовательского параметра'' в настроечный файл <tt>irbis_server.ini</tt>, задав имя и метку параметра. Для этого в секции <tt>[PARAMETRS]</tt> используются ''параметры ini файла'' <tt>PARNAME_</tt> и <tt>PARTAG_</tt> (не стоит путать термины ''пользовательские параметры'' веб-шлюза и ''параметры ini файла''), где вместо знака подчёркивания ставится номер пользовательского параметра по порядку, например:<br />
PARNAME2=C21COM<br />
PARTAG2=2222<br />
: В этом примере мы видим описание второго по порядку из определённых в секции <tt>[PARAMETRS]</tt> параметров: имя параметра <tt>C21COM</tt>, метка параметра <tt>2222</tt>. Имя и метка параметров должны быть уникальными. После того как описание ''пользовательского параметра'' добавлено необходимо изменить значение параметра <tt>PARCOUNT</tt> в секции <tt>[PARAMETRS]</tt>, его значение должно быть равно порядковому номеру последнего описания ''пользовательского параметра''.<br />
: ''Примечание:'' обратите внимание, что в файле <tt>irbis_server.ini</tt> хранятся описания не только пользовательских параметров, а присутствует также описания предустановленных параметров.<br />
* '''использование в файлах <tt>.frm</tt> команд <tt><!FORMAT=INSERT_ALL_PARAMETERS></tt> и <tt><!FORMAT=INSERT_ALL_PARAMETERS_IN_QUERY></tt>'''<br />
: Команда <tt><!FORMAT=INSERT_ALL_PARAMETERS></tt> обеспечивает вставку в код HTML-страницы всех непустых переданных веб-шлюзу параметров в виде скрытых элементов формы, например:<br />
<input type="hidden" name="PARAM_NAME" value="PARAM_VALUE"><br />
: Команда <tt><!FORMAT=INSERT_ALL_PARAMETERS_IN_QUERY></tt> вставляет в код HTML-страницы гиперссылку, содержащую все переданные веб-шлюзу параметры.<br />
<br />
===Система команд Веб-шлюза ИРБИС===<br />
<br />
Система ''команд'' Веб-шлюза ИРБИС позволяет задать собственный набор фреймов и порядок их объединения для каждой задачи. Для разных задач предусмотрены разные команды, например: для страницы приглашения к поиску, результата поиска, отбора записей в корзину заказов и т.д.<br />
<br />
==Обработка фреймов==<br />
<br />
В общем случае, веб-страница формируется путём объединения (''склеивания''):<br />
* Нескольких ''фреймов'' (соответствующий список ''фреймов'' задаётся в профиле для каждой команды). Список может не содержать ни одного фрейма.<br />
* Результата [[Язык форматирования системы ИРБИС#Понятие формата|''форматирования'']] записей, найденных в соответствии запросу пользователя, базы данных, заданной в профиле. Формат задаётся параметром шлюза <tt>S21FMT</tt>. Результат форматирования вставляется в месте, указанном словом <tt>RESULT</tt> в списке ''фреймов'' заданном в профиле. Слово может отсутствовать в списке.<br />
<br />
===Контекст фрейма===<br />
<br />
Контекст фрейма - запись читателя, осуществившего вход в систему.<br />
<br />
===Фрейм как язык разметки===<br />
<br />
Фрейм представляет собой текстовый файл, содержимое которого передаётся клиенту (в веб браузер), который также может содержать вставки, которые будут обработаны определённым образом перед передачей клиенту.<br />
<br />
Предусмотрены вставки следующих видов:<br />
* вставка на языке форматирования ИРБИС,<br />
* вложенный фрейм.<br />
<br />
'''''Вставка на языке форматирования''''' обозначается следующим образом<br />
<br />
<!FORMAT<br />
<br />
'''Пример:'''<br />
<br />
<nowiki><!FORMAT=if v3409='' then 'value=""' else 'value=','"',v3409,'"',fi></nowiki><br />
<br />
''Примечание: если вставка на языке форматирования содержит символы, кодирующиеся в UTF-8 более чем одним байтом (например, кириллицу), то формат обязательно должен начинаться с восклицательного знака. Это связано с тем, что формат в кодировке UTF-8 [[Язык форматирования системы ИРБИС#Кодировка|должен предваряться восклицательным знаком]], а все фреймы храняться именно в кодировке UTF-8.''<br />
<br />
'''Пример:'''<br />
<br />
<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><br />
<br />
'''Пример вложенного фрейма:'''<br />
<br />
<!FORMAT=if &uf('IMAIN,SHOW_DUBLIN_CORE,0') <> '0' then /'<!FILE=Dublin_Core.frm>' fi><br />
<br />
Предусмотрен '''''упрощённый синтаксис вставки на языке форматирования''''':<br />
<?!if p(v2225) then 'true' fi ?><br />
<br />
===Постобработка===<br />
<br />
Перед передачей результата выполнения фрейма клиенту происходит подстановка значений вместо следующих обозначений<br />
<br />
'''Таблица.''' Таблица подстановок во время постобработки.<br />
{|<br />
|<br />
{| class="standard"<br />
!Что заменяется||На что заменяется<br />
|-<br />
|<tt><--HTTP_PATH--></tt>||корневая директория шлюза (htdocs)<br />
|-<br />
|<tt><--CGI_PATH--></tt>||путь к шлюзу, включая его имя cgiirbis_64_ft.exe<br />
|}<br />
|}<br />
<br />
===Пример последовательности действий Веб-шлюза ИРБИС при формировании веб-страницы в ответ на запрос===<br />
<br />
Веб-шлюз ИРБИС при получении команд '''F''', '''S''', '''T''', '''Z''', '''R''' выполняет следующую последовательность действий:<br />
* Веб-шлюз получил запрос. Запрос содержит параметры <tt>C21COM</tt>, <tt>I21DBN</tt> и другие.<br />
* В файле <tt>irbis_server.ini</tt> веб-шлюз находит секцию, имя которой соответствует значению параметра <tt>I21DBN</tt>. Иными словами: с одной стороны, в качестве значения параметра <tt>I21DBN</tt> указывается имя профиля, с другой стороны, для каждого профиля в файле <tt>irbis_server.ini</tt> должна содержаться секция, имя которой совпадает с именем профиля.<br />
* В указанной секции файла <tt>irbis_server.ini</tt> веб-шлюз находит значение параметра, соответствующего указанной в параметре <tt>C21COM</tt> команде (см. таблицу ''Команды веб-шлюза ИРБИС''). Полученное значение должно представлять собой список фреймов.<br />
* Фреймы обрабатываются, и результат, представляющий собой HTML-страницу, отправляется клиенту в качестве ответа.<br />
<br />
===Примеры перехода пользователя по страницам Веб-ИРБИС===<br />
<br />
Пример запроса начальной страницы:<br />
<br />
http://localhost:8080/cgi-bin/irbis64r_15_plus/cgiirbis_64_ft.exe?C21COM=F&I21DBN=IBIS_FULLTEXT&P21DBN=IBIS&Z21ID=&S21CNR=5<br />
<br />
где указаны:<br />
* команда шлюза F (''показ страницы'')<br />
* имя профиля IBIS_FULLTEXT<br />
* база данных IBIS<br />
* авторизация не осуществлялась<br />
<br />
Параметр S21CNR не обязателен.<br />
<br />
При авторизации запрос приобретает следующий вид<br />
<br />
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<br />
<br />
где указаны:<br />
* команда шлюза F (''показ страницы'')<br />
* имя профиля AUTHOR<br />
* база данных IBIS<br />
* параметры авторизации: Z21FLAGID, фамилия читателя Z21FAMILY и идентификатор читателя Z21ID<br />
<br />
При поиске по слову "библиотека" запрос приобретает следующий вид<br />
<br />
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<br />
<br />
где указаны:<br />
* команда шлюза S (''поиск'')<br />
* имя профиля IBIS_FULLTEXT<br />
* база данных IBIS<br />
* параметры авторизации: Z21ID<br />
* текущий запрос SEARCH_STRING и предыдущий запрос FT_S21STR (одинаковые)<br />
* USES21ALL=1 (использовать параметр S21ALL, применяется в поиске связных)<br />
* S21CNR=5 (порция при показе найденных)<br />
* S21REF=10 (для правильного формирования ссылок на страницы с результатами поиска)<br />
* C21COM1<br />
* FT_PREFIX<br />
* S21FMT=briefHTML_ft<br />
* AVT_S21P03=A%3D<br />
* AVT_S21P02=1<br />
* AVT_S21LOG=1<br />
* NAME_S21P03=T%3D<br />
* NAME_S21P02=1<br />
* NAME_S21LOG=1<br />
* UDC_S21P03=U%3D<br />
* UDC_S21P02=0<br />
* UDC_S21LOG=1<br />
* IZD_S21P03=M%3D<br />
* IZD_S21P02=1<br />
* IZD_S21LOG=1<br />
* DAT_S21P03=G%3D<br />
* DAT_S21P02=1<br />
* DAT_S21LOG=5<br />
* P21DBN=IBIS<br />
* FT_S21LOG=4<br />
* FT_S21P03=K%3D<br />
* FT_S21P01=3<br />
* S21STN=1<br />
* S21COLORTERMS=1<br />
<br />
==Ссылки==<br />
<br />
См. также:<br />
* [[Веб-ИРБИС]]<br />
* [[Установка Веб-шлюза Ирбис 64]]<br />
* [[Настройка и обслуживание Веб-ИРБИС]]<br />
* [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini]]<br />
* [[Язык форматирования системы ИРБИС]]<br />
* [[Язык запросов ИРБИС]]<br />
<br />
[[Категория:Технология Веб-ИРБИС]]<br />
[[Категория:ИРБИС 64]]</div>Sokvhttp://wiki.elnit.org/index.php?title=%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F_%D0%92%D0%B5%D0%B1-%D0%98%D0%A0%D0%91%D0%98%D0%A1&diff=2465Технология Веб-ИРБИС2017-01-27T10:31:56Z<p>Sokv: /* Команда поиска – S */</p>
<hr />
<div>Технология '''''Веб-ИРБИС''''' служит для создания Веб-приложений для работы с базами данных ИРБИС.<br />
<br />
Данная технология реализована в виде одноимённого [[Веб-ИРБИС|'''''программного продукта – Веб-ИРБИС''''']].<br />
<br />
==Веб-шлюз ИРБИС==<br />
<br />
Программный модуль ''Веб-шлюз ИРБИС'' обеспечивает обработку клиентских запросов.<br />
<br />
''Веб-шлюз ИРБИС'' является шлюзом CGI.<br />
<br />
Запрос может осуществляться по методу POST или GET.<br />
<br />
===Общая схема работы Веб-шлюза ИРБИС===<br />
<br />
Последовательность операций шлюза:<br />
* Чтение параметров INI файла<br />
* Препроцессинг<br />
** Формальный контроль правильности параметров<br />
** Интерпретация поискового запроса<br />
** Авторизация<br />
** Выполнение скрипта защиты<br />
** Повторная авторизация<br />
* Выполнение поиска<br />
* Формирование ответа (объединение и обработка фреймов)<br />
* Определение HTTP заголовков на основе INI файла<br />
* Возврат ответа<br />
<br />
В случае возникновения ошибки выполнения или превышения времени обработки запроса шлюз возвращает ошибку (error.html).<br />
<br />
====Препроцессинг====<br />
<br />
=====Скрипт-защита=====<br />
<br />
Формат скрипта защиты выполняет две функции: 1) проверку поступивших параметров запроса и защиту от взлома 2) обработку и дополнение параметров.<br />
<br />
Первая строка, сформированная форматом срипт-защиты, определяет общий результат – если это 0 или файлом не было возвращено никаких значений – скрипт-защита определила ошибку, если результат 1 или файлом были возвращены другие ненулевые значения – ошибки нет. В первом случае шлюз возвращает error.html, в последнем случае шлюз читает остальные строки формата и изменяет параметры запроса на новые.<br />
<br />
Например, строка ‘SCRIPT_DONE=YES’/ задаёт параметру SCRIPT_DONE значение YES.<br />
<br />
=====Авторизация пользователя=====<br />
<br />
Авторизация даёт возможность заказывать литературу, просматривать формуляр и редактировать корзину заказов.<br />
<br />
Для авторизации используется база RDR. Авторизация происходит по идентификатору и, если в пользовательском запросе задан параметр Z21FLAGID=1, – по фамилии. После авторизации шлюз выполняет шифрование идентификатора, и зашифрованный идентификатор передаётся при переходе по страницам.<br />
<br />
====Инициализация параметров====<br />
<br />
После поступления клиентского запроса осуществляется инициализация параметров веб-шлюза на основе параметров CGI.<br />
<br />
Обрабатываемый шлюзом набор параметров определяется конфигурационным файлом Веб-шлюза ИРБИС.<br />
<br />
Эти параметры доступны в контексте фреймов.<br />
<br />
Параметры используются, в том числе, для отслеживания состояния веб-страницы. В ответ на HTTP-запрос клиента (обычно – в генерируемую html-страницу, передаваемую клиенту) может включить набор пользовательских параметров вместе с их значениями, полученными в запросе, для чего есть специальная команда.<br />
<br />
Отслеживание состояния осуществляется с использованием следующих этапов: 1) данные передаются на веб-шлюз в виде параметров запроса; 2) веб-шлюз передаёт данные вместе со сформированной страницей в скрытых полях форм HTML.<br />
<br />
====Выполнение команды====<br />
<br />
Затем шлюз переходит к выполнению команды. Команда соответствует переданному параметру C21COM.<br />
<br />
В контексте выполнения команды используются полученные параметры.<br />
<br />
Для каждой команды есть набор '''основных параметров''', логика использования которых предопределена самим веб-шлюзом.<br />
<br />
К основным параметрам шлюза относятся:<br />
* <tt>C21COM</tt> – команда, которую должен выполнить веб-шлюз.<br />
* <tt>I21DBN</tt> – имя [[Профили|профиля]]. Веб-шлюз ИРБИС в соответствии с именем профиля определяет набор [[Фреймы|фреймов]], из которых составит ответ клиенту. Веб-шлюз ИРБИС ищет названия фреймов в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файле irbis_server.ini]] в секции, название которой соответствует значению параметра <tt>I21DBN</tt> (подробнее в разделе [[#Роль фреймов в работе веб-шлюза ИРБИС|Роль фреймов в работе веб-шлюза ИРБИС]]).<br />
* <tt>P21DBN</tt> – имя базы данных.<br />
* <tt>Z21ID</tt> – значение параметра авторизации.<br />
<br />
Кроме '''основных''', есть '''пользовательские параметры''' – все остальные параметры.<br />
<br />
Особенность пользовательских параметров в том, что их набор и использование полностью могут быть определены (переопределены) пользователями системы ИРБИС:<br />
* Определение параметров даётся в конфигурационном файле Веб-шлюза ИРБИС.<br />
* Параметры доступны в виде виртуальных полей на языке форматирования в контексте фреймов.<br />
<br />
====Ответ веб-шлюза ИРБИС клиенту====<br />
<br />
Порядок формирования ответа веб-шлюза ИРБИС клиенту зависит от команды.<br />
<br />
=====Ответ с использованием фреймов=====<br />
<br />
Для команд, представленных в таблице, осуществляется генерация ответа с использованием технологии выбора и обработки фреймов.<br />
<br />
Обычно это динамически формируемая веб-страница.<br />
<br />
'''Таблица.''' Команды веб-шлюза ИРБИС.<br />
{|<br />
|<br />
{| class="standard"<br />
!Значение параметра <tt>C21COM</tt>||Описание команды||Соответствующий параметр в <tt>irbis_server.ini</tt><br />
|-<br />
|'''F'''||'''''показ''''' – команда показа страницы||ShowFrames<br />
|-<br />
|'''S'''||'''''поиск''''' – команда выполнения и показа результатов поиска||SearchFrames<br />
|-<br />
|'''T'''||'''''словарь''''' – команда показа терминов словаря||DictionryFrames<br />
|-<br />
|'''Z'''||'''''заказ''''' – команда отбора записей в корзину заказов||ZakazFrames<br />
|-<br />
|'''R'''||'''''запись''''' – команда редактуры записей||RecUpdateFrames<br />
|}<br />
|}<br />
<br />
Выбор набора фреймов зависит от: команды (параметр C21COM) и профиля (параметр I21DBN).<br />
<br />
Возможные наборы фреймов предварительно сконфигурированы и указаны в конфигурационном файле <tt>irbis_server.ini</tt>.<br />
<br />
Откуда шлюз и считывает нужный набор, в зависимости от параметров (C21COM и I21DBN).<br />
<br />
Каждой команде веб-шлюза ИРБИС соответствует имя параметра в файле <tt>irbis_server.ini</tt> (см. таблицу ''Команды веб-шлюза ИРБИС'').<br />
<br />
=====Отправка клиенту ресурсного файла=====<br />
<br />
Для команд, представленных в таблице, отправка клиенту ресурсного файла.<br />
<br />
'''Таблица.''' Команды веб-шлюза ИРБИС.<br />
{|<br />
|<br />
{| class="standard"<br />
!Значение параметра <tt>C21COM</tt>||Описание команды<br />
|-<br />
|'''E'''||'''''экспорт''''' – команда выгрузки записей<br />
|-<br />
|'''2'''||'''''файл''''' – команда чтения внешнего объекта<br />
|-<br />
|'''4'''||'''''скачать''''' – команда заимствования записи<br />
|}<br />
|}<br />
<br />
===Команда поиска – S===<br />
<br />
'''Пример поиска всех страниц одного текста PDF'''<br />
<br />
Здесь мы предполагаем, что:<br />
* Работаем в контексте базы данных IBIS.<br />
* Поисковое выражение <tt>TXT=2__$</tt> позволяет найти все страницы файла <tt>2.pdf</tt>.<br />
<br />
Чтобы создать произвольный запрос, не связанный с существующим функционалом системы, можно создать новый профиль EXAMPLE1. Для этого в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|конфигурационном файле веб-шлюза ИРБИС irbis server.ini]] нужно добавить секцию EXAMPLE1<br />
[EXAMPLE1]<br />
FRAMES=C:\irbis\irbis_plus\IRBIS64\DATAI\frames_15_plus\FullText\<br />
ShowFrames=<br />
SearchFrames=RESULT<br />
DBNAME=IBIS<br />
где значение параметра FRAMES должно соответствовать местонахождению фреймов.<br />
<br />
Для команды поиска порядок формирования ответа определяется параметром SearchFrames. И запись<br />
SearchFrames=RESULT<br />
означает, что при формировании Веб-шлюзом ответа на команду поиска не участвуют фреймы, участвует только формат, который будет указан в запросе.<br />
<br />
В качестве этого формата предлагается создать файл '''<tt>example1.pft</tt>''' со следующим содержимым<br />
<nowiki>mfn,/,</nowiki><br />
Этот формат выводит список MFN найденных записей.<br />
<br />
Теперь всё готово, чтобы выполнить запрос<br />
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<br />
<br />
В основных полях мы указываем команду поиска (S), базу данных IBIS, профиль EXAMPLE1, идентификатор пользователя.<br />
<br />
Поле S21All содержит запрос на языке запросов ИРБИС. Если его декодировать из кодировки URL, то он будет выглядеть так<br />
<nowiki>S21All=<.>TXT=2__$<.></nowiki><br />
где, в соответствии с правилами работы веб-шлюза, точка в угловых скобках заменяет двойную кавычку. Таким образом, указанный запрос следует читать как<br />
"TXT=2__$"<br />
где двойные кавычки являются ограничителем запроса в выражении на [[Язык запросов ИРБИС|языке запросов ИРБИС]]<br />
<br />
Формат вывода найденных записей, который предлагалось подготовить выше, указан в параметре S21FMT, без расширения.<br />
<br />
Результатом выполнения этого запроса будет обещанный список mfn, например<br />
0000000002<br />
0000000006<br />
0000000013<br />
0000000018<br />
<br />
Можно усложнить запрос, ограничив вывод порцией из 2 результатов, начиная со 2-го (параметры S21CNR и S21STN)<br />
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<br />
<br />
Результатом будет<br />
0000000006<br />
0000000013<br />
<br />
Можно усложнить формат вывода найденных записей '''<tt>example1.pft</tt>''', добавив информацию о количестве найденных, а также введённых порционных ограничениях<br />
<nowiki>mfn,'; кол-во найденных = ',v1001,'; с какого номера начать = ',v2223,'; размер порции = ',v2224,/,</nowiki><br />
где 1001, 2223 и 2224 – виртуальные поля, в которые шлюз помещает данные в соответствии с [[таблицей виртуальных полей шлюза]].<br />
<br />
Все данные, которые шлюз принял в виде параметров, попадают в виртуальные поля в соответствии правилами, заданными в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файле irbis_server.ini]]. Например, параметру S21CNR соответствует метка 2224, параметру S21STN – 2223.<br />
<br />
Результатом будет<br />
0000000006; кол-во найденных = 4; с какого номера начать = 2; размер порции = 2<br />
0000000013; кол-во найденных = 4; с какого номера начать = 2; размер порции = 2<br />
<br />
В последнем примере количество найденных и данные о порции повторяются с каждым результатом поиска, что является избыточным.<br />
<br />
Такой избыточности позволяют избежать применение [[фреймов]].<br />
<br />
Создадим файл example1.frm (его местоположение должно соответствовать параметру FRAMES в профиле) со следующим содержимым<br />
Вывод через фрейм... <br />
<?! 'кол-во найденных = ',v1001,'; с какого номера начать = ',v2223,'; размер порции = ',v2224,/, ?><br />
<br />
Чтобы задействовать этот фрейм, в описании профиля можно изменить значение параметра SearchFrames следующим образом:<br />
SearchFrames=example1.frm,RESULT<br />
что следует понимать так, что шлюз вернёт результат выполнения команды поиска, составленный из:<br />
* результата выполнения фрейма example1.frm<br />
* результатов работы формата, который отработает для каждого результата поиска (обозначается словом RESULT).<br />
<br />
Кроме того, чтобы измежать дублирующихся данных, в '''<tt>example1.pft</tt>''' оставим только вывод MFN:<br />
mfn,/,<br />
<br />
Результатом будет<br />
Вывод через фрейм... кол-во найденных = 4; с какого номера начать = 2; размер порции = 2<br />
0000000006<br />
0000000013<br />
<br />
===Команда показа терминов словаря – T===<br />
<br />
'''Пример команды показа терминов словаря'''<br />
<br />
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&<br />
<br />
где:<br />
* <tt>C21COM=T</tt> определяет команду,<br />
* <tt>I21DBN=IBIS</tt> базу данных,<br />
* <tt>Z21ID=1500323880383212</tt> идентификатор читателя в зашифрованном виде,<br />
* <tt>T21PRF=KT=</tt> префикс словаря,<br />
* <tt>T21TRM=a</tt> – требование терминов, начинающихся на <tt>a</tt>.<br />
<br />
Пример возврата:<br />
A20040830ARUSY|1<br />
A20041017ABELY|1<br />
A20041118ARUSY|1<br />
A2H|2<br />
A540|9<br />
A54001|7<br />
A550UTILIZATION|1<br />
AACDEMY|1<br />
AASL|2<br />
AASLPUBSANDJOURNALS|2<br />
<br />
===Добавление пользовательского параметра===<br />
<br />
Добавление пользовательского параметра осуществляется в несколько шагов:<br />
* '''добавление ''пользовательского параметра'' в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файл инициализации шлюза <tt>irbis_server.ini</tt>]]'''<br />
: Необходимо добавить описание нового ''пользовательского параметра'' в настроечный файл <tt>irbis_server.ini</tt>, задав имя и метку параметра. Для этого в секции <tt>[PARAMETRS]</tt> используются ''параметры ini файла'' <tt>PARNAME_</tt> и <tt>PARTAG_</tt> (не стоит путать термины ''пользовательские параметры'' веб-шлюза и ''параметры ini файла''), где вместо знака подчёркивания ставится номер пользовательского параметра по порядку, например:<br />
PARNAME2=C21COM<br />
PARTAG2=2222<br />
: В этом примере мы видим описание второго по порядку из определённых в секции <tt>[PARAMETRS]</tt> параметров: имя параметра <tt>C21COM</tt>, метка параметра <tt>2222</tt>. Имя и метка параметров должны быть уникальными. После того как описание ''пользовательского параметра'' добавлено необходимо изменить значение параметра <tt>PARCOUNT</tt> в секции <tt>[PARAMETRS]</tt>, его значение должно быть равно порядковому номеру последнего описания ''пользовательского параметра''.<br />
: ''Примечание:'' обратите внимание, что в файле <tt>irbis_server.ini</tt> хранятся описания не только пользовательских параметров, а присутствует также описания предустановленных параметров.<br />
* '''использование в файлах <tt>.frm</tt> команд <tt><!FORMAT=INSERT_ALL_PARAMETERS></tt> и <tt><!FORMAT=INSERT_ALL_PARAMETERS_IN_QUERY></tt>'''<br />
: Команда <tt><!FORMAT=INSERT_ALL_PARAMETERS></tt> обеспечивает вставку в код HTML-страницы всех непустых переданных веб-шлюзу параметров в виде скрытых элементов формы, например:<br />
<input type="hidden" name="PARAM_NAME" value="PARAM_VALUE"><br />
: Команда <tt><!FORMAT=INSERT_ALL_PARAMETERS_IN_QUERY></tt> вставляет в код HTML-страницы гиперссылку, содержащую все переданные веб-шлюзу параметры.<br />
<br />
===Система команд Веб-шлюза ИРБИС===<br />
<br />
Система ''команд'' Веб-шлюза ИРБИС позволяет задать собственный набор фреймов и порядок их объединения для каждой задачи. Для разных задач предусмотрены разные команды, например: для страницы приглашения к поиску, результата поиска, отбора записей в корзину заказов и т.д.<br />
<br />
==Обработка фреймов==<br />
<br />
В общем случае, веб-страница формируется путём объединения (''склеивания''):<br />
* Нескольких ''фреймов'' (соответствующий список ''фреймов'' задаётся в профиле для каждой команды). Список может не содержать ни одного фрейма.<br />
* Результата [[Язык форматирования системы ИРБИС#Понятие формата|''форматирования'']] записей, найденных в соответствии запросу пользователя, базы данных, заданной в профиле. Формат задаётся параметром шлюза <tt>S21FMT</tt>. Результат форматирования вставляется в месте, указанном словом <tt>RESULT</tt> в списке ''фреймов'' заданном в профиле. Слово может отсутствовать в списке.<br />
<br />
===Контекст фрейма===<br />
<br />
Контекст фрейма - запись читателя, осуществившего вход в систему.<br />
<br />
===Фрейм как язык разметки===<br />
<br />
Фрейм представляет собой текстовый файл, содержимое которого передаётся клиенту (в веб браузер), который также может содержать вставки, которые будут обработаны определённым образом перед передачей клиенту.<br />
<br />
Предусмотрены вставки следующих видов:<br />
* вставка на языке форматирования ИРБИС,<br />
* вложенный фрейм.<br />
<br />
'''''Вставка на языке форматирования''''' обозначается следующим образом<br />
<br />
<!FORMAT<br />
<br />
'''Пример:'''<br />
<br />
<nowiki><!FORMAT=if v3409='' then 'value=""' else 'value=','"',v3409,'"',fi></nowiki><br />
<br />
''Примечание: если вставка на языке форматирования содержит символы, кодирующиеся в UTF-8 более чем одним байтом (например, кириллицу), то формат обязательно должен начинаться с восклицательного знака. Это связано с тем, что формат в кодировке UTF-8 [[Язык форматирования системы ИРБИС#Кодировка|должен предваряться восклицательным знаком]], а все фреймы храняться именно в кодировке UTF-8.''<br />
<br />
'''Пример:'''<br />
<br />
<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><br />
<br />
'''Пример вложенного фрейма:'''<br />
<br />
<!FORMAT=if &uf('IMAIN,SHOW_DUBLIN_CORE,0') <> '0' then /'<!FILE=Dublin_Core.frm>' fi><br />
<br />
Предусмотрен '''''упрощённый синтаксис вставки на языке форматирования''''':<br />
<?!if p(v2225) then 'true' fi ?><br />
<br />
===Постобработка===<br />
<br />
Перед передачей результата выполнения фрейма клиенту происходит замена сочетаний символов<br />
<.><br />
на символ двойной кавычки<br />
"<br />
<br />
'''Таблица.''' Таблица подстановок во время постобработки.<br />
{|<br />
|<br />
{| class="standard"<br />
!Что заменяется||На что заменяется<br />
|-<br />
|<tt><.></tt>||<tt>"</tt><br />
|-<br />
|'''S'''||'''''поиск''''' – команда выполнения и показа результатов поиска<br />
|}<br />
|}<br />
<br />
===Пример последовательности действий Веб-шлюза ИРБИС при формировании веб-страницы в ответ на запрос===<br />
<br />
Веб-шлюз ИРБИС при получении команд '''F''', '''S''', '''T''', '''Z''', '''R''' выполняет следующую последовательность действий:<br />
* Веб-шлюз получил запрос. Запрос содержит параметры <tt>C21COM</tt>, <tt>I21DBN</tt> и другие.<br />
* В файле <tt>irbis_server.ini</tt> веб-шлюз находит секцию, имя которой соответствует значению параметра <tt>I21DBN</tt>. Иными словами: с одной стороны, в качестве значения параметра <tt>I21DBN</tt> указывается имя профиля, с другой стороны, для каждого профиля в файле <tt>irbis_server.ini</tt> должна содержаться секция, имя которой совпадает с именем профиля.<br />
* В указанной секции файла <tt>irbis_server.ini</tt> веб-шлюз находит значение параметра, соответствующего указанной в параметре <tt>C21COM</tt> команде (см. таблицу ''Команды веб-шлюза ИРБИС''). Полученное значение должно представлять собой список фреймов.<br />
* Фреймы обрабатываются, и результат, представляющий собой HTML-страницу, отправляется клиенту в качестве ответа.<br />
<br />
===Примеры перехода пользователя по страницам Веб-ИРБИС===<br />
<br />
Пример запроса начальной страницы:<br />
<br />
http://localhost:8080/cgi-bin/irbis64r_15_plus/cgiirbis_64_ft.exe?C21COM=F&I21DBN=IBIS_FULLTEXT&P21DBN=IBIS&Z21ID=&S21CNR=5<br />
<br />
где указаны:<br />
* команда шлюза F (''показ страницы'')<br />
* имя профиля IBIS_FULLTEXT<br />
* база данных IBIS<br />
* авторизация не осуществлялась<br />
<br />
Параметр S21CNR не обязателен.<br />
<br />
При авторизации запрос приобретает следующий вид<br />
<br />
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<br />
<br />
где указаны:<br />
* команда шлюза F (''показ страницы'')<br />
* имя профиля AUTHOR<br />
* база данных IBIS<br />
* параметры авторизации: Z21FLAGID, фамилия читателя Z21FAMILY и идентификатор читателя Z21ID<br />
<br />
При поиске по слову "библиотека" запрос приобретает следующий вид<br />
<br />
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<br />
<br />
где указаны:<br />
* команда шлюза S (''поиск'')<br />
* имя профиля IBIS_FULLTEXT<br />
* база данных IBIS<br />
* параметры авторизации: Z21ID<br />
* текущий запрос SEARCH_STRING и предыдущий запрос FT_S21STR (одинаковые)<br />
* USES21ALL=1 (использовать параметр S21ALL, применяется в поиске связных)<br />
* S21CNR=5 (порция при показе найденных)<br />
* S21REF=10 (для правильного формирования ссылок на страницы с результатами поиска)<br />
* C21COM1<br />
* FT_PREFIX<br />
* S21FMT=briefHTML_ft<br />
* AVT_S21P03=A%3D<br />
* AVT_S21P02=1<br />
* AVT_S21LOG=1<br />
* NAME_S21P03=T%3D<br />
* NAME_S21P02=1<br />
* NAME_S21LOG=1<br />
* UDC_S21P03=U%3D<br />
* UDC_S21P02=0<br />
* UDC_S21LOG=1<br />
* IZD_S21P03=M%3D<br />
* IZD_S21P02=1<br />
* IZD_S21LOG=1<br />
* DAT_S21P03=G%3D<br />
* DAT_S21P02=1<br />
* DAT_S21LOG=5<br />
* P21DBN=IBIS<br />
* FT_S21LOG=4<br />
* FT_S21P03=K%3D<br />
* FT_S21P01=3<br />
* S21STN=1<br />
* S21COLORTERMS=1<br />
<br />
==Ссылки==<br />
<br />
См. также:<br />
* [[Веб-ИРБИС]]<br />
* [[Установка Веб-шлюза Ирбис 64]]<br />
* [[Настройка и обслуживание Веб-ИРБИС]]<br />
* [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini]]<br />
* [[Язык форматирования системы ИРБИС]]<br />
* [[Язык запросов ИРБИС]]<br />
<br />
[[Категория:Технология Веб-ИРБИС]]<br />
[[Категория:ИРБИС 64]]</div>Sokvhttp://wiki.elnit.org/index.php?title=%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F_%D0%92%D0%B5%D0%B1-%D0%98%D0%A0%D0%91%D0%98%D0%A1&diff=2464Технология Веб-ИРБИС2017-01-27T10:19:47Z<p>Sokv: /* Постобработка */</p>
<hr />
<div>Технология '''''Веб-ИРБИС''''' служит для создания Веб-приложений для работы с базами данных ИРБИС.<br />
<br />
Данная технология реализована в виде одноимённого [[Веб-ИРБИС|'''''программного продукта – Веб-ИРБИС''''']].<br />
<br />
==Веб-шлюз ИРБИС==<br />
<br />
Программный модуль ''Веб-шлюз ИРБИС'' обеспечивает обработку клиентских запросов.<br />
<br />
''Веб-шлюз ИРБИС'' является шлюзом CGI.<br />
<br />
Запрос может осуществляться по методу POST или GET.<br />
<br />
===Общая схема работы Веб-шлюза ИРБИС===<br />
<br />
Последовательность операций шлюза:<br />
* Чтение параметров INI файла<br />
* Препроцессинг<br />
** Формальный контроль правильности параметров<br />
** Интерпретация поискового запроса<br />
** Авторизация<br />
** Выполнение скрипта защиты<br />
** Повторная авторизация<br />
* Выполнение поиска<br />
* Формирование ответа (объединение и обработка фреймов)<br />
* Определение HTTP заголовков на основе INI файла<br />
* Возврат ответа<br />
<br />
В случае возникновения ошибки выполнения или превышения времени обработки запроса шлюз возвращает ошибку (error.html).<br />
<br />
====Препроцессинг====<br />
<br />
=====Скрипт-защита=====<br />
<br />
Формат скрипта защиты выполняет две функции: 1) проверку поступивших параметров запроса и защиту от взлома 2) обработку и дополнение параметров.<br />
<br />
Первая строка, сформированная форматом срипт-защиты, определяет общий результат – если это 0 или файлом не было возвращено никаких значений – скрипт-защита определила ошибку, если результат 1 или файлом были возвращены другие ненулевые значения – ошибки нет. В первом случае шлюз возвращает error.html, в последнем случае шлюз читает остальные строки формата и изменяет параметры запроса на новые.<br />
<br />
Например, строка ‘SCRIPT_DONE=YES’/ задаёт параметру SCRIPT_DONE значение YES.<br />
<br />
=====Авторизация пользователя=====<br />
<br />
Авторизация даёт возможность заказывать литературу, просматривать формуляр и редактировать корзину заказов.<br />
<br />
Для авторизации используется база RDR. Авторизация происходит по идентификатору и, если в пользовательском запросе задан параметр Z21FLAGID=1, – по фамилии. После авторизации шлюз выполняет шифрование идентификатора, и зашифрованный идентификатор передаётся при переходе по страницам.<br />
<br />
====Инициализация параметров====<br />
<br />
После поступления клиентского запроса осуществляется инициализация параметров веб-шлюза на основе параметров CGI.<br />
<br />
Обрабатываемый шлюзом набор параметров определяется конфигурационным файлом Веб-шлюза ИРБИС.<br />
<br />
Эти параметры доступны в контексте фреймов.<br />
<br />
Параметры используются, в том числе, для отслеживания состояния веб-страницы. В ответ на HTTP-запрос клиента (обычно – в генерируемую html-страницу, передаваемую клиенту) может включить набор пользовательских параметров вместе с их значениями, полученными в запросе, для чего есть специальная команда.<br />
<br />
Отслеживание состояния осуществляется с использованием следующих этапов: 1) данные передаются на веб-шлюз в виде параметров запроса; 2) веб-шлюз передаёт данные вместе со сформированной страницей в скрытых полях форм HTML.<br />
<br />
====Выполнение команды====<br />
<br />
Затем шлюз переходит к выполнению команды. Команда соответствует переданному параметру C21COM.<br />
<br />
В контексте выполнения команды используются полученные параметры.<br />
<br />
Для каждой команды есть набор '''основных параметров''', логика использования которых предопределена самим веб-шлюзом.<br />
<br />
К основным параметрам шлюза относятся:<br />
* <tt>C21COM</tt> – команда, которую должен выполнить веб-шлюз.<br />
* <tt>I21DBN</tt> – имя [[Профили|профиля]]. Веб-шлюз ИРБИС в соответствии с именем профиля определяет набор [[Фреймы|фреймов]], из которых составит ответ клиенту. Веб-шлюз ИРБИС ищет названия фреймов в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файле irbis_server.ini]] в секции, название которой соответствует значению параметра <tt>I21DBN</tt> (подробнее в разделе [[#Роль фреймов в работе веб-шлюза ИРБИС|Роль фреймов в работе веб-шлюза ИРБИС]]).<br />
* <tt>P21DBN</tt> – имя базы данных.<br />
* <tt>Z21ID</tt> – значение параметра авторизации.<br />
<br />
Кроме '''основных''', есть '''пользовательские параметры''' – все остальные параметры.<br />
<br />
Особенность пользовательских параметров в том, что их набор и использование полностью могут быть определены (переопределены) пользователями системы ИРБИС:<br />
* Определение параметров даётся в конфигурационном файле Веб-шлюза ИРБИС.<br />
* Параметры доступны в виде виртуальных полей на языке форматирования в контексте фреймов.<br />
<br />
====Ответ веб-шлюза ИРБИС клиенту====<br />
<br />
Порядок формирования ответа веб-шлюза ИРБИС клиенту зависит от команды.<br />
<br />
=====Ответ с использованием фреймов=====<br />
<br />
Для команд, представленных в таблице, осуществляется генерация ответа с использованием технологии выбора и обработки фреймов.<br />
<br />
Обычно это динамически формируемая веб-страница.<br />
<br />
'''Таблица.''' Команды веб-шлюза ИРБИС.<br />
{|<br />
|<br />
{| class="standard"<br />
!Значение параметра <tt>C21COM</tt>||Описание команды||Соответствующий параметр в <tt>irbis_server.ini</tt><br />
|-<br />
|'''F'''||'''''показ''''' – команда показа страницы||ShowFrames<br />
|-<br />
|'''S'''||'''''поиск''''' – команда выполнения и показа результатов поиска||SearchFrames<br />
|-<br />
|'''T'''||'''''словарь''''' – команда показа терминов словаря||DictionryFrames<br />
|-<br />
|'''Z'''||'''''заказ''''' – команда отбора записей в корзину заказов||ZakazFrames<br />
|-<br />
|'''R'''||'''''запись''''' – команда редактуры записей||RecUpdateFrames<br />
|}<br />
|}<br />
<br />
Выбор набора фреймов зависит от: команды (параметр C21COM) и профиля (параметр I21DBN).<br />
<br />
Возможные наборы фреймов предварительно сконфигурированы и указаны в конфигурационном файле <tt>irbis_server.ini</tt>.<br />
<br />
Откуда шлюз и считывает нужный набор, в зависимости от параметров (C21COM и I21DBN).<br />
<br />
Каждой команде веб-шлюза ИРБИС соответствует имя параметра в файле <tt>irbis_server.ini</tt> (см. таблицу ''Команды веб-шлюза ИРБИС'').<br />
<br />
=====Отправка клиенту ресурсного файла=====<br />
<br />
Для команд, представленных в таблице, отправка клиенту ресурсного файла.<br />
<br />
'''Таблица.''' Команды веб-шлюза ИРБИС.<br />
{|<br />
|<br />
{| class="standard"<br />
!Значение параметра <tt>C21COM</tt>||Описание команды<br />
|-<br />
|'''E'''||'''''экспорт''''' – команда выгрузки записей<br />
|-<br />
|'''2'''||'''''файл''''' – команда чтения внешнего объекта<br />
|-<br />
|'''4'''||'''''скачать''''' – команда заимствования записи<br />
|}<br />
|}<br />
<br />
===Команда поиска – S===<br />
<br />
'''Пример поиска всех страниц одного текста PDF'''<br />
<br />
Здесь мы предполагаем, что:<br />
* Работаем в контексте базы данных IBIS.<br />
* Поисковое выражение <tt>TXT=2__$</tt> позволяет найти все страницы файла <tt>2.pdf</tt>.<br />
<br />
Чтобы создать произвольный запрос, не связанный с существующим функционалом системы, можно создать новый профиль EXAMPLE1. Для этого в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|конфигурационном файле веб-шлюза ИРБИС irbis server.ini]] нужно добавить секцию EXAMPLE1<br />
[EXAMPLE1]<br />
FRAMES=C:\irbis\irbis_plus\IRBIS64\DATAI\frames_15_plus\FullText\<br />
ShowFrames=<br />
SearchFrames=RESULT<br />
DBNAME=IBIS<br />
где значение параметра FRAMES должно соответствовать местонахождению фреймов.<br />
<br />
Для команды поиска порядок формирования ответа определяется параметром SearchFrames. И запись<br />
SearchFrames=RESULT<br />
означает, что при формировании Веб-шлюзом ответа на команду поиска не участвуют фреймы, участвует только формат, который будет указан в запросе.<br />
<br />
В качестве этого формата предлагается создать файл '''<tt>example1.pft</tt>''' со следующим содержимым<br />
<nowiki>mfn,/,</nowiki><br />
Этот формат выводит список MFN найденных записей.<br />
<br />
Теперь всё готово, чтобы выполнить запрос<br />
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<br />
<br />
В основных полях мы указываем команду поиска (S), базу данных IBIS, профиль EXAMPLE1, идентификатор пользователя.<br />
<br />
Поле S21All содержит запрос на языке запросов ИРБИС. Если его декодировать из кодировки URL, то он будет выглядеть так<br />
<nowiki>S21All=<.>TXT=2__$<.></nowiki><br />
где, в соответствии с правилами [[#Постобработка|постобработки]], точка в угловых скобках заменяет двойную кавычку. Таким образом, указанный запрос следует читать как<br />
"TXT=2__$"<br />
где двойные кавычки являются ограничителем запроса в выражении на [[Язык запросов ИРБИС|языке запросов ИРБИС]]<br />
<br />
Формат вывода найденных записей, который предлагалось подготовить выше, указан в параметре S21FMT, без расширения.<br />
<br />
Результатом выполнения этого запроса будет обещанный список mfn, например<br />
0000000002<br />
0000000006<br />
0000000013<br />
0000000018<br />
<br />
Можно усложнить запрос, ограничив вывод порцией из 2 результатов, начиная со 2-го (параметры S21CNR и S21STN)<br />
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<br />
<br />
Результатом будет<br />
0000000006<br />
0000000013<br />
<br />
Можно усложнить формат вывода найденных записей '''<tt>example1.pft</tt>''', добавив информацию о количестве найденных, а также введённых порционных ограничениях<br />
<nowiki>mfn,'; кол-во найденных = ',v1001,'; с какого номера начать = ',v2223,'; размер порции = ',v2224,/,</nowiki><br />
где 1001, 2223 и 2224 – виртуальные поля, в которые шлюз помещает данные в соответствии с [[таблицей виртуальных полей шлюза]].<br />
<br />
Все данные, которые шлюз принял в виде параметров, попадают в виртуальные поля в соответствии правилами, заданными в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файле irbis_server.ini]]. Например, параметру S21CNR соответствует метка 2224, параметру S21STN – 2223.<br />
<br />
Результатом будет<br />
0000000006; кол-во найденных = 4; с какого номера начать = 2; размер порции = 2<br />
0000000013; кол-во найденных = 4; с какого номера начать = 2; размер порции = 2<br />
<br />
В последнем примере количество найденных и данные о порции повторяются с каждым результатом поиска, что является избыточным.<br />
<br />
Такой избыточности позволяют избежать применение [[фреймов]].<br />
<br />
Создадим файл example1.frm (его местоположение должно соответствовать параметру FRAMES в профиле) со следующим содержимым<br />
Вывод через фрейм... <br />
<?! 'кол-во найденных = ',v1001,'; с какого номера начать = ',v2223,'; размер порции = ',v2224,/, ?><br />
<br />
Чтобы задействовать этот фрейм, в описании профиля можно изменить значение параметра SearchFrames следующим образом:<br />
SearchFrames=example1.frm,RESULT<br />
что следует понимать так, что шлюз вернёт результат выполнения команды поиска, составленный из:<br />
* результата выполнения фрейма example1.frm<br />
* результатов работы формата, который отработает для каждого результата поиска (обозначается словом RESULT).<br />
<br />
Кроме того, чтобы измежать дублирующихся данных, в '''<tt>example1.pft</tt>''' оставим только вывод MFN:<br />
mfn,/,<br />
<br />
Результатом будет<br />
Вывод через фрейм... кол-во найденных = 4; с какого номера начать = 2; размер порции = 2<br />
0000000006<br />
0000000013<br />
<br />
===Команда показа терминов словаря – T===<br />
<br />
'''Пример команды показа терминов словаря'''<br />
<br />
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&<br />
<br />
где:<br />
* <tt>C21COM=T</tt> определяет команду,<br />
* <tt>I21DBN=IBIS</tt> базу данных,<br />
* <tt>Z21ID=1500323880383212</tt> идентификатор читателя в зашифрованном виде,<br />
* <tt>T21PRF=KT=</tt> префикс словаря,<br />
* <tt>T21TRM=a</tt> – требование терминов, начинающихся на <tt>a</tt>.<br />
<br />
Пример возврата:<br />
A20040830ARUSY|1<br />
A20041017ABELY|1<br />
A20041118ARUSY|1<br />
A2H|2<br />
A540|9<br />
A54001|7<br />
A550UTILIZATION|1<br />
AACDEMY|1<br />
AASL|2<br />
AASLPUBSANDJOURNALS|2<br />
<br />
===Добавление пользовательского параметра===<br />
<br />
Добавление пользовательского параметра осуществляется в несколько шагов:<br />
* '''добавление ''пользовательского параметра'' в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файл инициализации шлюза <tt>irbis_server.ini</tt>]]'''<br />
: Необходимо добавить описание нового ''пользовательского параметра'' в настроечный файл <tt>irbis_server.ini</tt>, задав имя и метку параметра. Для этого в секции <tt>[PARAMETRS]</tt> используются ''параметры ini файла'' <tt>PARNAME_</tt> и <tt>PARTAG_</tt> (не стоит путать термины ''пользовательские параметры'' веб-шлюза и ''параметры ini файла''), где вместо знака подчёркивания ставится номер пользовательского параметра по порядку, например:<br />
PARNAME2=C21COM<br />
PARTAG2=2222<br />
: В этом примере мы видим описание второго по порядку из определённых в секции <tt>[PARAMETRS]</tt> параметров: имя параметра <tt>C21COM</tt>, метка параметра <tt>2222</tt>. Имя и метка параметров должны быть уникальными. После того как описание ''пользовательского параметра'' добавлено необходимо изменить значение параметра <tt>PARCOUNT</tt> в секции <tt>[PARAMETRS]</tt>, его значение должно быть равно порядковому номеру последнего описания ''пользовательского параметра''.<br />
: ''Примечание:'' обратите внимание, что в файле <tt>irbis_server.ini</tt> хранятся описания не только пользовательских параметров, а присутствует также описания предустановленных параметров.<br />
* '''использование в файлах <tt>.frm</tt> команд <tt><!FORMAT=INSERT_ALL_PARAMETERS></tt> и <tt><!FORMAT=INSERT_ALL_PARAMETERS_IN_QUERY></tt>'''<br />
: Команда <tt><!FORMAT=INSERT_ALL_PARAMETERS></tt> обеспечивает вставку в код HTML-страницы всех непустых переданных веб-шлюзу параметров в виде скрытых элементов формы, например:<br />
<input type="hidden" name="PARAM_NAME" value="PARAM_VALUE"><br />
: Команда <tt><!FORMAT=INSERT_ALL_PARAMETERS_IN_QUERY></tt> вставляет в код HTML-страницы гиперссылку, содержащую все переданные веб-шлюзу параметры.<br />
<br />
===Система команд Веб-шлюза ИРБИС===<br />
<br />
Система ''команд'' Веб-шлюза ИРБИС позволяет задать собственный набор фреймов и порядок их объединения для каждой задачи. Для разных задач предусмотрены разные команды, например: для страницы приглашения к поиску, результата поиска, отбора записей в корзину заказов и т.д.<br />
<br />
==Обработка фреймов==<br />
<br />
В общем случае, веб-страница формируется путём объединения (''склеивания''):<br />
* Нескольких ''фреймов'' (соответствующий список ''фреймов'' задаётся в профиле для каждой команды). Список может не содержать ни одного фрейма.<br />
* Результата [[Язык форматирования системы ИРБИС#Понятие формата|''форматирования'']] записей, найденных в соответствии запросу пользователя, базы данных, заданной в профиле. Формат задаётся параметром шлюза <tt>S21FMT</tt>. Результат форматирования вставляется в месте, указанном словом <tt>RESULT</tt> в списке ''фреймов'' заданном в профиле. Слово может отсутствовать в списке.<br />
<br />
===Контекст фрейма===<br />
<br />
Контекст фрейма - запись читателя, осуществившего вход в систему.<br />
<br />
===Фрейм как язык разметки===<br />
<br />
Фрейм представляет собой текстовый файл, содержимое которого передаётся клиенту (в веб браузер), который также может содержать вставки, которые будут обработаны определённым образом перед передачей клиенту.<br />
<br />
Предусмотрены вставки следующих видов:<br />
* вставка на языке форматирования ИРБИС,<br />
* вложенный фрейм.<br />
<br />
'''''Вставка на языке форматирования''''' обозначается следующим образом<br />
<br />
<!FORMAT<br />
<br />
'''Пример:'''<br />
<br />
<nowiki><!FORMAT=if v3409='' then 'value=""' else 'value=','"',v3409,'"',fi></nowiki><br />
<br />
''Примечание: если вставка на языке форматирования содержит символы, кодирующиеся в UTF-8 более чем одним байтом (например, кириллицу), то формат обязательно должен начинаться с восклицательного знака. Это связано с тем, что формат в кодировке UTF-8 [[Язык форматирования системы ИРБИС#Кодировка|должен предваряться восклицательным знаком]], а все фреймы храняться именно в кодировке UTF-8.''<br />
<br />
'''Пример:'''<br />
<br />
<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><br />
<br />
'''Пример вложенного фрейма:'''<br />
<br />
<!FORMAT=if &uf('IMAIN,SHOW_DUBLIN_CORE,0') <> '0' then /'<!FILE=Dublin_Core.frm>' fi><br />
<br />
Предусмотрен '''''упрощённый синтаксис вставки на языке форматирования''''':<br />
<?!if p(v2225) then 'true' fi ?><br />
<br />
===Постобработка===<br />
<br />
Перед передачей результата выполнения фрейма клиенту происходит замена сочетаний символов<br />
<.><br />
на символ двойной кавычки<br />
"<br />
<br />
'''Таблица.''' Таблица подстановок во время постобработки.<br />
{|<br />
|<br />
{| class="standard"<br />
!Что заменяется||На что заменяется<br />
|-<br />
|<tt><.></tt>||<tt>"</tt><br />
|-<br />
|'''S'''||'''''поиск''''' – команда выполнения и показа результатов поиска<br />
|}<br />
|}<br />
<br />
===Пример последовательности действий Веб-шлюза ИРБИС при формировании веб-страницы в ответ на запрос===<br />
<br />
Веб-шлюз ИРБИС при получении команд '''F''', '''S''', '''T''', '''Z''', '''R''' выполняет следующую последовательность действий:<br />
* Веб-шлюз получил запрос. Запрос содержит параметры <tt>C21COM</tt>, <tt>I21DBN</tt> и другие.<br />
* В файле <tt>irbis_server.ini</tt> веб-шлюз находит секцию, имя которой соответствует значению параметра <tt>I21DBN</tt>. Иными словами: с одной стороны, в качестве значения параметра <tt>I21DBN</tt> указывается имя профиля, с другой стороны, для каждого профиля в файле <tt>irbis_server.ini</tt> должна содержаться секция, имя которой совпадает с именем профиля.<br />
* В указанной секции файла <tt>irbis_server.ini</tt> веб-шлюз находит значение параметра, соответствующего указанной в параметре <tt>C21COM</tt> команде (см. таблицу ''Команды веб-шлюза ИРБИС''). Полученное значение должно представлять собой список фреймов.<br />
* Фреймы обрабатываются, и результат, представляющий собой HTML-страницу, отправляется клиенту в качестве ответа.<br />
<br />
===Примеры перехода пользователя по страницам Веб-ИРБИС===<br />
<br />
Пример запроса начальной страницы:<br />
<br />
http://localhost:8080/cgi-bin/irbis64r_15_plus/cgiirbis_64_ft.exe?C21COM=F&I21DBN=IBIS_FULLTEXT&P21DBN=IBIS&Z21ID=&S21CNR=5<br />
<br />
где указаны:<br />
* команда шлюза F (''показ страницы'')<br />
* имя профиля IBIS_FULLTEXT<br />
* база данных IBIS<br />
* авторизация не осуществлялась<br />
<br />
Параметр S21CNR не обязателен.<br />
<br />
При авторизации запрос приобретает следующий вид<br />
<br />
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<br />
<br />
где указаны:<br />
* команда шлюза F (''показ страницы'')<br />
* имя профиля AUTHOR<br />
* база данных IBIS<br />
* параметры авторизации: Z21FLAGID, фамилия читателя Z21FAMILY и идентификатор читателя Z21ID<br />
<br />
При поиске по слову "библиотека" запрос приобретает следующий вид<br />
<br />
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<br />
<br />
где указаны:<br />
* команда шлюза S (''поиск'')<br />
* имя профиля IBIS_FULLTEXT<br />
* база данных IBIS<br />
* параметры авторизации: Z21ID<br />
* текущий запрос SEARCH_STRING и предыдущий запрос FT_S21STR (одинаковые)<br />
* USES21ALL=1 (использовать параметр S21ALL, применяется в поиске связных)<br />
* S21CNR=5 (порция при показе найденных)<br />
* S21REF=10 (для правильного формирования ссылок на страницы с результатами поиска)<br />
* C21COM1<br />
* FT_PREFIX<br />
* S21FMT=briefHTML_ft<br />
* AVT_S21P03=A%3D<br />
* AVT_S21P02=1<br />
* AVT_S21LOG=1<br />
* NAME_S21P03=T%3D<br />
* NAME_S21P02=1<br />
* NAME_S21LOG=1<br />
* UDC_S21P03=U%3D<br />
* UDC_S21P02=0<br />
* UDC_S21LOG=1<br />
* IZD_S21P03=M%3D<br />
* IZD_S21P02=1<br />
* IZD_S21LOG=1<br />
* DAT_S21P03=G%3D<br />
* DAT_S21P02=1<br />
* DAT_S21LOG=5<br />
* P21DBN=IBIS<br />
* FT_S21LOG=4<br />
* FT_S21P03=K%3D<br />
* FT_S21P01=3<br />
* S21STN=1<br />
* S21COLORTERMS=1<br />
<br />
==Ссылки==<br />
<br />
См. также:<br />
* [[Веб-ИРБИС]]<br />
* [[Установка Веб-шлюза Ирбис 64]]<br />
* [[Настройка и обслуживание Веб-ИРБИС]]<br />
* [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini]]<br />
* [[Язык форматирования системы ИРБИС]]<br />
* [[Язык запросов ИРБИС]]<br />
<br />
[[Категория:Технология Веб-ИРБИС]]<br />
[[Категория:ИРБИС 64]]</div>Sokvhttp://wiki.elnit.org/index.php?title=%D0%AF%D0%B7%D1%8B%D0%BA_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%98%D0%A0%D0%91%D0%98%D0%A1&diff=2463Язык форматирования системы ИРБИС2016-09-12T17:42:00Z<p>Sokv: </p>
<hr />
<div>'''''Язык форматирования''''' ИРБИС – язык манипулирования данными в контексте [[Базы данных ИРБИС#Модель баз данных ИРБИС|''записи'']] базы данных, представляет собой средство, с помощью которого осуществляется разнообразное представление данных для многих операций и функций системы, в частности, для показа и печати документов, для создания словарей, для импорта/экспорта данных, для формально-логического контроля и т.д.<br />
<br />
==Общие сведения==<br />
<br />
===История появления===<br />
<br />
Язык форматирования системы ИРБИС базируется на языке форматирования системы CDS/ISIS (ЮНЕСКО).<br />
<br />
===Понятие формата===<br />
<br />
'''''Форматом''''' называют совокупность инструкций (команд, функций и т.п.), записанных на языке форматирования.<br />
<br />
Формат может быть выполнен в контексте ''записи'' базы данных, и результатом выполнения является текстовое (строковое) значение, которое затем может использоваться системой ИРБИС для выполнения определенных функций.<br />
<br />
===Файл формата===<br />
<br />
'''''Файл формата''''' – основная структурная единица, служащая для организации программного кода на языке форматирования. Представляет собой текстовый файл с расширением [[Файлы ИРБИС#Файлы форматов ИРБИС|<tt>.pft</tt>]], содержащий '''формат'''.<br />
<br />
===Начало знакомства с языком форматирования ИРБИС===<br />
<br />
Для понимания языка форматирования необходимо быть знакомым с такими понятиями как:<br />
* поле данных – структурная единица документа (записи), имеющая числовую идентификацию (метку поля) и содержащая один элемент описания (например, первый индивидуальный автор, основное заглавие и т.д.);<br />
* подполе – структурная единица поля, которая определяется двумя символами, предшествующими собственно данным подполя: первый из этих символов знак ^, второй символ может быть латинской буквой (прописные и строчные не различаются) или цифрой и называется разделителем подполя.<br />
<br />
Для новичков может показаться, что некоторые форматы являются очень сложными для понимания. Однако, все форматы, даже громоздкие, состоят по сути из довольно простых команд или функций, разделенных запятыми или пробелами. Кажущаяся сложность связана с тем, что формат может состоять из многих таких команд. В связи с этим, ключом к пониманию форматов является последовательный анализ всех присутствующих в них команд.<br />
<br />
Обрабатывая формат, система работает с тремя объектами: запись (документ) базы данных, собственно формат и рабочая область, в которой размещаются выходные данные. Команды выполняются последовательно в порядке их представления в формате. Одни из команд порождают выходные данные (например, значения полей данных), другие - инициируют некоторые действия (например, переход на другую строку, создание нескольких пустых строк и т.д.). Создаваемые данные запоминаются в рабочей области в виде текстовых строк, которые затем передаются для последующей обработки, например, для печати.<br />
<br />
Все команды форматирования могут вводиться прописными или строчными буквами или их комбинацией.<br />
В форматах могут присутствовать комментарии. Признаком начала комментария является комбинация символов /*. В качестве комментария принимается часть строки от признака начала комментария до конца строки.<br />
<br />
==Выполнение формата==<br />
<br />
===Форматёр===<br />
<br />
''Форматёр'' – программный модуль, реализующий набор функций для обработки данных с использованием языка форматирования.<br />
<br />
В системе ИРБИС 64 присутствует несколько реализаций форматёра:<br />
* серверный форматёр – [[IRBIS64.dll#Функции форматёра|входит в библиотеку <tt>IRBIS64.dll</tt>]],<br />
* клиентский форматёр – включён в код клиентских приложений.<br />
<br />
Клиентский форматёр используется клиентскими приложениями.<br />
<br />
Серверный форматёр используется:<br />
* серверным [[АРМ Администратор]],<br />
* в некоторых случаях клиентское приложение передаёт формат на исполнение серверному форматёру, при этом взаимодействие осуществляется через [[TCP/IP сервер ИРБИС 64|сервер ИРБИС]].<br />
<br />
===Контекст форматёра===<br />
<br />
Значения глобальных переменных хранятся в конкретном запущенном экземпляре форматёра. Таким образом, область видимости переменных оказывается в непосредственной связи с экземпляром форматёра:<br />
* В рамках одного экземпляра форматёра значения глобальных переменных, инициализированные в одном формате, доступны в другом формате.<br />
* В разных экземплярах форматёра – собственные наборы глобальных переменных.<br />
<br />
Например:<br />
* В серверном [[АРМ Администратор]] с момента запуска и до закрытия приложения будет использоваться один экземпляр форматёра, соответственно для всех выполняемых данным АРМ форматов будет один набор глобальных переменных.<br />
* Для любого клиентского АРМ будет использоваться один экземпляр клиентского форматёра.<br />
* В тех случаях, когда клиентское АРМ передаёт форматы на исполнение серверному форматёру, запросы на исполнение форматов могут выполняться разными экземплярами форматёра.<br />
<br />
Таким образом, в контексте выполнения формата нельзя рассчитывать на то, что до присвоения глобальным переменным каких либо значений они будут пустыми.<br />
<br />
==Кодировка==<br />
<br />
Формат может начинаться с маркера кодировки UTF-8, в качестве данного маркера служит восклицательный знак.<br />
<br />
Если формат начинается с восклицательного знака, то система ИРБИС при чтении данного формата будет использовать кодировку UTF-8, в противном случае Windows-1251.<br />
<br />
Этот же механизм используется и при [[Технология Веб-ИРБИС#Фрейм как язык разметки|вставке формата внутри фрейма]].<br />
<br />
==Запись в базе данных, используемая в примерах==<br />
<br />
Если не оговорено противное, то все примеры по форматированию в последующих разделах ссылаются на запись, приведенную ниже. Эта запись присутствует в базе данных IBIS, поставляемой в дистрибутивном варианте системы в качестве учебной.<br />
<br />
'''MFN: 34'''<br />
600: ^AСухой П.О.^Bо нем<br />
215: ^a383^cил.24л<br />
920: PAZK<br />
999: 0000000<br />
907: ^A19941123^bdsm<br />
964: 78.09.19<br />
10: ^a5-203-01472-8^dЦ.договор.<br />
101: rus<br />
102: RU<br />
900: ^b05^c22<br />
210: ^cВоенное изд-во^aМ.^d1993<br />
700: ^aКузьмина^bЛ.М.<br />
675: 623.746<br />
675: 623.746(092) Сухой П.О.<br />
908: К89<br />
903: 623.746/К89-239165<br />
910: ^A0^BЭ93-18430^C19930830^Dхр<br />
910: ^A2^Dхр<br />
200: ^aКонструктор Сухой. Люди и самолеты<br />
<br />
==Инструкции языка форматирования==<br />
<br />
===Базовые команды вывода===<br />
<br />
Команды вывода полей – это команды, используемые для извлечения из записи и вывода конкретного поля или подполя. Имеется [[#Команда вывода MFN|специальная команда для извлечения и вывода номера записи MFN]], хотя, строго говоря, MFN не является полем (MFN не имеет метки).<br />
<br />
====Команда вывода поля====<br />
<br />
Для указания на необходимость вывода поля из записи необходимо записать букву '''V''', за которой должна следовать метка поля. Это может быть прописная или строчная буква. Ниже приведены примеры применения данной команды.<br />
<br />
{| class="standard"<br />
!Формат||Выходные данные<br />
|-<br />
|<tt>v210</tt>||<tt>^cВоенное изд-во^aМ.^d1993</tt><br />
|-<br />
|<tt>v200</tt>||<tt>aКонструктор Сухой. Люди и самолеты</tt><br />
|-<br />
|<tt>v700</tt>||<tt>^aКузьмина^bЛ.М.</tt><br />
|-<br />
|<tt>v600</tt>||<tt>^AСухой П.О.^Bо нем</tt><br />
|}<br />
<br />
====Команда вывода подполя====<br />
<br />
Для вывода конкретного подполя из данного поля следует добавить соответствующий разделитель подполей к метке поля. Заметим, что можно использовать специальный разделитель подполей ^* для вывода первого подполя, если оно есть. В этом случае, первому подполю необязательно должен предшествовать его разделитель. Разделитель подполей может быть прописной или строчной буквой (обязательно латинской).<br />
<br />
{| class="standard"<br />
!Формат||Выходные данные<br />
|-<br />
|<tt>v210^с</tt>||<tt>Военное изд-во</tt><br />
|-<br />
|<tt>v200^a</tt>||<tt>Конструктор Сухой. Люди и самолеты</tt><br />
|-<br />
|<tt>v700^a</tt>||<tt>Кузьмина</tt><br />
|-<br />
|<tt>v600^*</tt>||<tt>Сухой П.О.</tt><br />
|}<br />
<br />
====Вывод фрагмента поля или подполя====<br />
<br />
В некоторых случаях может возникнуть необходимость вывести часть поля, которая не является подполем, особенно тогда, когда поле имеет фиксированный формат (например, запись даты в виде ГГГГММДД). Это можно сделать командой смещение/длина, размещаемой сразу за командой вывода поля или подполя, к которому команда применяется.<br />
<br />
Эта команда имеет вид:<br />
*<смещение>.<длина><br />
где:<br />
* *<смещение> указывает позицию первого символа фрагмента, который должен быть извлечен из поля или подполя (позиции символов нумеруются с нуля, т.е. первый символ находится в позиции 0, второй - в позиции 1 и т.д.); если смещение не указано, то оно считается равным 0;<br />
* .<длина> указывает количество извлекаемых символов. Если длина опущена, то извлекается все поле (подполе) до конца, начиная с символа, указанного в смещении.<br />
<br />
Ниже приведены примеры использования команды по отношению к записи, которая в качестве поля с меткой 1 содержит значение<br />
<tt>88-Nov-05</tt>.<br />
<br />
{| class="standard"<br />
!Формат||Выходные данные<br />
|-<br />
|<tt>v1*3.3</tt>||<tt>Nov</tt><br />
|-<br />
|<tt>v1.2</tt>||<tt>88</tt><br />
|-<br />
|<tt>v1*7</tt>||<tt>05</tt><br />
|-<br />
|<tt>v1*7,v1*2.4</tt>||<tt>05-Nov</tt><br />
|-<br />
|<tt>v1*7,v1*2.5,v1.2</tt>||<tt>05-Nov-88</tt><br />
|-<br />
|<tt>v210.3</tt>||<tt>^cВ</tt><br />
|-<br />
|<tt>v210^c.3</tt>||<tt>Вое</tt><br />
|}<br />
<br />
Обратите внимание на различные способы манипулирования полями с подполями в последних двух примерах. Если производится ссылка на поле целиком (например, v210), то нулевое смещение указывает на первую фактическую позицию поля (включая возможные разделители, стоящие в начале), а при ссылке на подполе (например, v210^с) нулевое смещение указывает на первый символ данных, стоящий после разделителя подполей.<br />
<br />
====Команда вывода MFN====<br />
<br />
Для вывода номера записи в файле документов служит команда MFN, формат которой:<br />
MFN<br />
или<br />
MFN(d)<br />
где d – количество выводимых на экран цифр. Если параметр (d) опущен, то по умолчанию предполагается 6 цифр. Ниже приводятся примеры использования данной команды.<br />
<br />
{| class="standard"<br />
!Формат||Выходные данные<br />
|-<br />
|<tt>MFN</tt>||<tt>000034</tt><br />
|-<br />
|<tt>MFN(3)</tt>||<tt>034</tt><br />
|-<br />
|<tt>MFN(2)</tt>||<tt>34</tt><br />
|-<br />
|<tt>MFN(1)</tt>||<tt>3</tt><br />
|}<br />
<br />
Заметим, что для подавления в MFN впереди стоящих нулей можно использовать [[Функции языка форматирования ИРБИС#Функция F(выр-1, выр-2, выр-3)|функцию F]].<br />
<br />
====Строковый литерал====<br />
<br />
Строковый литерал – это строка символов, заключенная в соответствующие ограничители.<br />
<br />
В языке форматирования используются строковые литералы трех видов: '''''Безусловный литерал''''', '''''Повторяющийся литерал''''' и '''''Условный литерал'''''.<br />
<br />
'''''Безусловный литерал''''' языка форматирования – самый простой в применении вид литералов, похожий на строковые литералы многих языков программирования.<br />
<br />
'''''Повторяющийся литерал''''' и '''''Условный литерал''''' используются только в качестве составной части соответствующей команды форматирования текста, и описаны в других разделах.<br />
<br />
Безусловный литерал заключается в одинарные кавычки, например:<br />
'Краткое содержание'<br />
или<br />
'Заголовок'<br />
<br />
Литерал не должен содержать ограничителей литерала. Например, безусловный литерал не может содержать одинарную кавычку (хотя может содержать двойные кавычки и/или вертикальные черты).<br />
<br />
Литералы подвергаются преобразованию в прописные буквы, если расположены после соответствующей [[#Команды режима вывода|команды режима вывода]].<br />
<br />
===Команды форматирования===<br />
<br />
====Команды режима вывода====<br />
<br />
Система может выводить данные в трех различных режимах: '''''режим проверки''''', '''''режим заголовка''''', '''''режим данных'''''.<br />
<br />
В '''''режиме проверки''''' поля выводятся в том виде, в каком они хранятся в записи. При этом система не обеспечивает никаких разделителей между полями или экземплярами повторяющихся полей. Пользователь должен обеспечить адекватное разделение полей с помощью команд размещения, литералов или повторяющихся групп. Режим обычно используется для вывода записей с целью проверки правильности введенных данных.<br />
<br />
'''''Режим заголовка''''' обычно используется для печати заголовков при выводе указателей и таблиц. Все управляющие символы, введенные вместе с данными, такие как разделители терминов (< и >) игнорируются (за исключением указанных ниже случаев), а разделители подполей заменяются знаками пунктуации.<br />
<br />
'''''Режим данных''''' похож на режим заголовка, но дополнительно после каждого поля автоматически ставится точка (.), за которой следуют два пробела (или просто два пробела, если поле заканчивается каким-либо знаком пунктуации). Отметим, однако, что эта автоматическая пунктуация подавляется, если за командой вывода поля следует [[#Литералы|суффикс-литерал]].<br />
<br />
Когда система форматирует поле, содержащее подполе, в режимах заголовка или данных, она автоматически заменяет имеющиеся разделители подполей знаками пунктуации (при этом разделитель первого подполя, если он имеется, всегда игнорируется). Специальная комбинация символов "><" заме-няется на "; " (а отдельные символы “<” и “>” подавляются), обеспечивая простой способ форматирования полей, содержащих перечень ключевых фраз, заключенных в угловые скобки. Таблица стандартного замещения разделителей подполей выглядит так:<br />
* ^a замещается на "; " <br />
* от ^b до ^i замещается на ", "<br />
* все другие замещаются на ". "<br />
<br />
Команды режима вывода представляются в виде <tt>Mmc</tt>, где:<br />
* М – признак команды режима вывода.<br />
* m следующим образом определяет режим вывода:<br />
** Р режим проверки;<br />
** H режим заголовка;<br />
** D режим данных.<br />
* с – определяет необходимость преобразования букв в прописные:<br />
** U буквы преобразуются в прописные;<br />
** L буквы преобразованию не подвергаются.<br />
<br />
Команда режима вывода может появляться в формате столько раз, сколько это нужно и действует до следующей команды режима вывода. По умолчанию система использует команду MPL. Ниже приведены примеры использования команды.<br />
<br />
{| class="standard"<br />
!Формат||Выходные данные<br />
|-<br />
|<tt>mpl,v200</tt>||<tt>^aКонструктор Сухой. Люди и самолеты</tt><br />
|-<br />
|<tt>mhl,v200</tt>||<tt>Конструктор Сухой. Люди и самолеты</tt><br />
|-<br />
|<tt>mdl,v200</tt>||<tt>Конструктор Сухой. Люди и самолеты.</tt><br />
|-<br />
|<tt>mdu,v200</tt>||<tt>КОНСТРУКТОР СУХОЙ. ЛЮДИ И САМОЛЕТЫ.</tt><br />
|-<br />
|<tt>mpl,v210</tt>||<tt>^cВоенное изд-во^aМ.^d1993</tt><br />
|-<br />
|<tt>mdl,v210</tt>||<tt>Военное изд-во; М., 1993.</tt><br />
|}<br />
<br />
====Команды вывода новой строки, пробелов, табуляции====<br />
<br />
В языке форматирования имеются следующие команды для форматирования ''плоского'' текста при помощи новых строк, пробелов, табуляции:<br />
* '''<tt>Xn</tt>''' – вставляет <tt>n</tt> пробелов;<br />
* '''<tt>Cn</tt>''' – табуляция в позицию <tt>n</tt>;<br />
* '''<tt>/</tt>''' – переход на новую строку, если предыдущая строка не была пустой;<br />
* '''<tt>#</tt>''' – безусловный переход на новую строку;<br />
* '''<tt>%</tt>''' – удаляет пустые строки (если они есть).<br />
<br />
Команда <tt>/</tt> приводит к размещению последующих данных с начала следующей строки. Подряд расположенные команды <tt>/</tt> эквивалентны одной команде <tt>/</tt>. Команда <tt>/</tt> никогда не создает пустых строк.<br />
<br />
Команда <tt>#</tt> выполняет те же действия, что и <tt>/</tt>, но переход на новую строку является безусловным.<br />
<br />
Можно использовать комбинацию <tt>/#</tt> для создания одной (и только одной) пустой строки. Комбинация <tt>##</tt> может привести к созданию одной или двух пустых строк в зависимости от того, была ли пустой текущая строка перед выполнением первой команды <tt>#</tt>.<br />
<br />
Использование команды <tt>#</tt> может вызвать затруднение в тех случаях, когда выбираемое поле оказывается пустым. Эта ситуация хорошо иллюстрируется на следующем примере:<br />
/#V10/#V20/#V30<br />
Если все поля присутствуют в документе, то в результате поля <tt>10</tt>, <tt>20</tt>, и <tt>30</tt> будут располагаться с начала строк и каждому будет предшествовать одна пустая строка. Однако, если поле <tt>20</tt> в документе отсутствует, то между <tt>10</tt> и <tt>30</tt> полями будут вставлены две пустые строки. Это может оказаться нежелательным, если действительно требуется, чтобы между полями была пропущена именно одна пустая строка, независимо от наличия или отсутствия некоторых полей. Таким образом, приведенный выше формат не приведет к желаемому результату.<br />
<br />
Эту проблему решает команда <tt>%</tt>. Ее действие заключается в подавлении всех последовательно расположенных пустых строк, если они имеются, между текущей строкой и последней непустой строкой. Таким образом, формат<br />
%##V10%##V20%##V30 ...<br />
приведет к созданию одной и только одной пустой строки между каждым полем, независимо от их наличия или отсутствия в документе.<br />
<br />
Команду <tt>Сn</tt> имеет смысл применять только в случае использования моноширинных шрифтов. Команды <tt>/</tt> <tt>#</tt> <tt>%</tt> не применимы в случае использования в форматах показа средств RTF или HTML. Команды <tt>Сn</tt> и <tt>Xn</tt> не работают в [[HTML-форматах]].<br />
<br />
====Форматирование текста при помощи повторяющихся и условных литералов====<br />
<br />
'''''Условный литерал''''' определяет текст, который будет выведен только в случае присутствия в записи соответствующего ему поля/подполя. Если поле является повторяющимся, то текст будет выведен только один раз, независимо от количества экземпляров поля/подполя. Условные литералы заключаются в двойные кавычки, например:<br />
"Заглавие: "<br />
<br />
'''''Повторяющийся литерал''''' определяет текст, который будет выведен только в случае присутствия в записи соответствующего ему поля или подполя. Однако, если поле повторяющееся, литерал будет выводиться для каждого экземпляра поля/подполя. Ограничителем для повторяющихся литералов служит символ вертикальной черты:<br />
|Автор: |<br />
<br />
Условные и/или повторяющиеся литералы связываются с полем или подполем своим расположением в формате. Литералы, предшествующие команде вывода поля/подполя, называемые '''''префикс-литералами''''', выводятся перед содержимым поля/подполя, в то время, как литералы, следующие за командой вывода поля/подполя, называемые '''''суффикс-литералами''''', выводятся после содержимого поля/подполя.<br />
<br />
Если за повторяющимся префикс-литералом непосредственно следует знак '''<tt>+</tt>''' (например, '''<tt>|xxx|+</tt>'''), то он будет выведен перед каждым, кроме первого, экземпляром поля/подполя.<br />
<br />
Если повторяющемуся суффикс-литералу непосредственно предшествует знак '''<tt>+</tt>''' (например, '''<tt>+|xxx|</tt>'''), то он будет выведен после каждого, кроме последнего, экземпляра поля/подполя.<br />
<br />
С полем/подполем может быть связан более чем один литерал. В этом случае различные литералы должны подчиняться следующим правилам и порядку:<br />
* '''префикс-литералы:'''<br />
** Один или более условных префикс-литералов. За условным префикс-литералом могут следовать другие условные префикс-литералы, команды вертикального и горизонтального размещения, и/или команды режима вывода. Все команды между первым условным префикс-литералом и соответствующей ему командой вывода поля/подполя становятся условными и будут выполнены только при наличии поля/подполя, иначе они игнорируются.<br />
** Один и только один повторяющийся префикс-литерал. Если такой литерал есть, то он должен непосредственно предшествовать соответствующей ему команде вывода поля/подполя.<br />
* '''суффикс-литералы:'''<br />
** Один и только один повторяющийся суффикс-литерал. Если такой литерал есть, то он должен следовать непосредственно за соответствующей ему командой вывода поля/подполя.<br />
** Один и только один условный суффикс-литерал. Если такой литерал есть, то он должен следовать непосредственно за повторяющимся суффикс-литералом или связанной с ним командой вывода поля/подполя.<br />
**Суффикс-литералы не должны разделяться запятыми и не должно быть запятой между командами вывода поля/подполя и первым суффикс-литералом, так как запятая обозначает конец суффикс-литералов, связанных с данной командой вывода поля/подполя.<br />
<br />
'''''Пустые литералы''''' – литералы нулевой длины, такие, как <tt>""</tt> или <tt>||</tt> вполне допустимы и могут использоваться, как префикс-литералы для обеспечения условного вертикального размещения или как суффикс-литералы для временного подавления автоматической пунктуации, которая обеспечивается в режиме данных.<br />
<br />
Примеры различных типов литералов:<br />
<br />
{| class="standard"<br />
!Формат||Выходные данные<br />
|-<br />
|<tt>'MFN:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;',mfn(3)</tt>||<tt>MFN:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;034</tt><br />
|-<br />
|<tt>mdl,"Заглавие: "v200</tt>||<tt>Заглавие: Конструктор Сухой. Люди и самолеты.</tt><br />
|-<br />
|<tt>v675</tt>||<tt>623.746623.746(092) Сухой П.О.</tt><br />
|-<br />
|<tt><nowiki>v675|; |</nowiki></tt>||<tt>623.746; 623.746(092) Сухой П.О.;</tt><br />
|-<br />
|<tt><nowiki>v675+|; |</nowiki></tt>||<tt>623.746; 623.746(092) Сухой П.О.</tt><br />
|-<br />
|<tt>|; |v675</tt>||<tt>; 623.746; 623.746(092) Сухой П.О.</tt><br />
|-<br />
|<tt>|; |+v675</tt>||<tt>623.746; 623.746(092) Сухой П.О.</tt><br />
|-<br />
|<tt><nowiki>"УДК"/v675+|; |</nowiki></tt>||<tt>УДК<br />623.746; 623.746(092) Сухой П.О.</tt><br />
|-<br />
|<tt>|(|v675|)|</tt>||<tt>(623.746)(623.746(092) Сухой П.О.)</tt><br />
|-<br />
|<tt><nowiki>"(УДК: ",v675+|; |")"</nowiki></tt>||<tt>(УДК: 623.746; 623.746(092) Сухой П.О.)</tt><br />
|-<br />
|<tt>mdl,v210</tt>||<tt>Военное изд-во; М., 1993.</tt><br />
|-<br />
|<tt>mdl,v210""</tt>||<tt>Военное изд-во; М., 1993</tt><br />
|}<br />
<br />
====Команды фиктивного вывода поля====<br />
<br />
Команда фиктивного вывода поля реализует условный вывод литералов в зависимости от наличия или отсутствия данного поля или подполя без вывода содержимого самого поля. Задаются они следующим образом: '''<tt>Dt</tt>''' или '''<tt>Dt^x</tt>''' или '''<tt>Nt</tt>''' или '''<tt>Nt^x</tt>''', где:<br />
* '''<tt>D</tt>''' указывает, что все соответствующие ей условные литералы должны выводиться только при наличии поля,<br />
* '''<tt>N</tt>''' указывает, что они должны выводиться только при отсутствии поля;<br />
* '''<tt>t</tt>''' метка поля, управляющего выводом литералов;<br />
* '''<tt>^x</tt>''' необязательный код разделителя подполя. Если он приведен, то это означает, что вывод литералов зависит от наличия или отсутствия определенного подполя (отметим, что отсутствие поля говорит и об отсутствии подполей в этом поле).<br />
<br />
Обычно команде фиктивного вывода поля предшествует, по крайней мере, один условный префикс-литерал (который может быть пустым), за которым могут следовать один или более других условных префикс-литералов, команды вертикального и горизонтального размещения и/или команды режима вывода. Команда фиктивного вывода поля не может иметь суффикс-литералов.<br />
<br />
Несколько примеров использования этих команд:<br />
<br />
{| class="standard"<br />
!Формат||Выходные данные<br />
|-<br />
|<tt>"(Отсут.)"n700,v700</tt>||<tt>Конструктор Сухой. Люди и самолеты</tt><br />
|-<br />
|<tt><nowiki>"(Отсут.)"n80,v80+|; |</nowiki></tt>||<tt>(Отсут.)</tt><br />
|-<br />
|<tt>"[нет даты]"n907^А,V907^A</tt>||<tt>19941123</tt><br />
|-<br />
|<tt>"[нет сведений]"n911,v911</tt>||<tt>[нет сведений]</tt><br />
|}<br />
<br />
===Выражения===<br />
<br />
Язык форматирования позволяет вычислять значения и/или сравнивать значения с помощью выражений. Выражения построены таким образом, что при их вычислении возвращается значение. Таким значением может быть строка символов (например, содержимое поля или литерал), тогда выражение называется строковым, либо число, тогда выражение называется числовым, либо логическое значение (истина или ложь), тогда выражение называется логическим. В системе также имеется набор функций, которые, на основе задаваемых аргументов, выполняют некоторые специфические действия и возвращают значения. Функции, возвращающие в качестве значения число, называются числовыми функциями, возвращающие строку символов - строковыми функциями, а возвращающие логическое значение - логическими функциями. Только строковые функции могут использоваться непосредственно в качестве команд форматирования. Числовые выражения могут использоваться либо в логических выражениях, либо в качестве аргументов функций. Логические выражения и логические функции могут использоваться только в контексте [[#Команда IF|команды IF]].<br />
<br />
====Числовые выражения====<br />
<br />
'''''Числовое выражение''''' формируется из операндов, которые имеют числовое значение, и [[Операторы языка форматирования ИРБИС#Арифметические операторы|арифметических операторов]] ('''<tt>+</tt>''', '''<tt>-</tt>''', '''<tt>*</tt>''', '''<tt>/</tt>''').<br />
<br />
В качестве операндов в числовых выражениях могут выступать: '''''числовые константы''''', '''''числовые функции''''', [[#Команда вывода MFN|команда вывода номера записи MFN]], числовые выражения.<br />
<br />
'''''Числовые константы''''' могут быть представлены в виде целых чисел, чисел с десятичной точкой, например <tt>5</tt>, <tt>18</tt>, <tt>98.65</tt>, или чисел в '''''экспоненциальной форме''''', например, <tt>1.5Е5</tt>, обозначающее 1.5 умноженное на 10 в 5-ой степени, т.е. 150000. Числа могут быть со знаком или без.<br />
<br />
[[#Числовые функции|'''''Числовые функции''''' рассматриваются в отдельной главе]]. Пример числовой функции <tt>val(v10)</tt>.<br />
<br />
Числовые выражения при использовании их в качестве операндов должны быть заключены в круглые скобки, например:<br />
(val(v20)-5)<br />
<br />
Отметим, что поскольку команды вывода полей (например, v10 или v10^a) дают текстовые строки, они не могут использоваться в качестве операндов числовых выражений. Однако, для преобразования содержимого поля или подполя в числовое значение может быть использована [[Функции языка форматирования ИРБИС#Функция VAL(формат)|функция VAL]].<br />
<br />
Аналогичным образом, числовое выражение не может быть непосредственно выведено на экран или печать, а должно быть предварительно преобразовано в строку символов с помощью [[Функции языка форматирования ИРБИС#Функция F(выр-1, выр-2, выр-3)|функции F]].<br />
<br />
Ниже приведены примеры числовых выражений. Предполагается, что MFN=10, v1^a=10, v1^b=20 и v2=30.<br />
<br />
{| class="standard"<br />
!Выражение||Значение<br />
|-<br />
|<tt>0.155е+3</tt>||<tt>155</tt><br />
|-<br />
|<tt>1е-3</tt>||<tt>0.001</tt><br />
|-<br />
|<tt>2*3+9</tt>||<tt>15</tt><br />
|-<br />
|<tt>2*(3+9)</tt>||<tt>24</tt><br />
|-<br />
|<tt>10-(4*(2-1))</tt>||<tt>6</tt><br />
|-<br />
|<tt>15*0.001</tt>||<tt>0.015</tt><br />
|-<br />
|<tt>mfn+100</tt>||<tt>110</tt><br />
|-<br />
|<tt>val(v2)+val(v1^a)*7.5</tt>||<tt>105</tt><br />
|-<br />
|<tt>(val(v1^a)-val(v1^b))/100</tt>||<tt>-0.1</tt><br />
|}<br />
<br />
====Строковые выражения====<br />
<br />
'''''Строковым выражением''''' являются:<br />
* [[#Строковый литерал|Безусловный литерал]], например <tt>'некоторый текст'</tt>.<br />
* [[#Команды вывода полей|Команда вывода поля/подполя]], которая может включать [[#Вывод фрагмента поля или подполя|команду смещение/длина]], например <tt>v26^c*2.2</tt>.<br />
* [[Функции языка форматирования ИРБИС#Строковые функции|Строковая функция]], например <tt>S(v24,v25,v26)</tt>.<br />
<br />
====Логические выражения====<br />
<br />
'''''Логическое выражение''''' формируется из операндов, которые могут принимать одно из двух значений, '''истина''' или '''ложь''', и [[Операторы языка форматирования ИРБИС#Логические операторы|логических операторов]] ('''NOT''', '''AND''', '''OR'''). Логические выражения используются для вычисления истинности одного или более условий.<br />
<br />
Операндами логического выражения могут быть:<br />
* [[Операторы языка форматирования ИРБИС#Операторы отношения и выражения отношения|Выражения отношения]] – сравнивают два числовых или строковых значения и определяют, удовлетворяют ли они отношению, строятся на основе [[Операторы языка форматирования ИРБИС#Операторы отношения и выражения отношения|операторов отношения]] ('''<tt>=</tt>''', '''<tt><></tt>''', '''<tt><</tt>''', '''<tt><=</tt>''', '''<tt>></tt>''', '''<tt>>=</tt>''', '''<tt>:</tt>'''). Например <tt>mfn&nbsp;<&nbsp;10</tt>.<br />
* [[Функции языка форматирования ИРБИС#Логические функции|Логические функции]], например <tt>p(v24)</tt>.<br />
* Логические выражения.<br />
<br />
Примеры логических выражений:<br />
{| class="standard"<br />
!Выражение||Значение<br />
|-<br />
|<tt>mfn=34</tt>||<tt>Истина</tt><br />
|-<br />
|<tt>not mfn=34</tt>||<tt>Ложь</tt><br />
|-<br />
|<tt>not (not mfn=34)</tt>||<tt>Истина</tt><br />
|-<br />
|<tt>v20 = 'люди'</tt>||<tt>Ложь</tt><br />
|-<br />
|<tt>v200 : 'люди'</tt>||<tt>Истина</tt><br />
|-<br />
|<tt>v200 : 'ЛЮДИ'</tt>||<tt>Истина</tt><br />
|-<br />
|<tt>v210^c.6 = 'Военное'</tt>||<tt>Ложь</tt><br />
|-<br />
|<tt>v210^c.7 = 'Военное'</tt>||<tt>Истина</tt><br />
|-<br />
|<tt>(v200 : 'люди') AND (v210^c.7= 'Военное')</tt>||<tt>Истина</tt><br />
|}<br />
<br />
===Функции===<br />
<br />
'''''Функция''''' вычисляет ''значение'' (называемое '''''значением функции''''' или '''''возвращаемым значением'''''), которое затем подставляется вместо функции при вычислении выражения.<br />
<br />
Функции могут иметь один или более ''аргументов'', которые необходимо задать для вычисления функции. Аргументы заключаются в скобки и разделяются запятыми.<br />
<br />
Аргументы могут быть следующих трех типов: [[#Понятие формата|формат]], [[#Числовые выражения|числовое выражение]], [[#Команды вывода полей|команда вывода поля]].<br />
<br />
Аргументом функции может быть произвольный формат, который может содержать любую разрешенную команду за исключением [[Функции языка форматирования ИРБИС#Функция REF(выражение, формат)|функции REF]], в которой формат так же используется в качестве аргумента. Функции передается не сам формат, а текст, полученный в результате вычисления формата.<br />
<br />
При использовании числового выражения в качестве аргумента функции, оно сначала вычисляется, и затем вычисленное значение передается функции.<br />
<br />
В качестве аргумента могут быть команды вывода поля или подполя. Не допускается использовать в команде спецификацию смещение/длина.<br />
<br />
Список функций с их описанием приведён в статье '''[[Функции языка форматирования ИРБИС]]'''.<br />
<br />
===Форматные выходы. UNIFOR===<br />
<br />
'''''Форматные выходы''''' – вид функций, реализованных на основе определённой технологии вне рамок языка форматирования, и предназначенных для выполнения таких операций по форматированию, которые не могут быть выполнены с помощью собственно языка форматирования. Технология '''''форматных выходов''''' подразумевает реализацию определённого стандартного интерфейса передачи данных для таких функций и возврата значений. В рамках языка форматирования '''''форматные выходы''''' являются строковыми функциями с форматом в качестве аргумента.<br />
<br />
Форматные выходы имеют следующий синтаксис в языке форматирования:<br />
&имя(формат)<br />
где:<br />
* '''<tt>&</tt>''' – идентификатор вызова форматного выхода,<br />
* '''<tt>имя</tt>''' – имя форматного выхода,<br />
* '''<tt>формат</tt>''' – аргумент.<br />
<br />
К использованию предлагается [[UNIFOR|форматный выход UNIFOR]], реализующий множество функций вне базовых рамок языка форматирования.<br />
<br />
===Команда IF===<br />
<br />
Команда '''IF''' предоставляет возможность строить контекстно-зависимые форматы, то есть форматы, способные изменять выходные значения в зависимости от содержимого форматируемой записи.<br />
<br />
Команда '''IF''' записывается следующим образом:<br />
'''IF''' '''''условие''''' '''THEN''' '''''формат-1''''' '''ELSE''' '''''формат-2''''' '''FI'''<br />
где:<br />
* '''''Условие''''' – [[#Логические выражения|логическое выражение]],<br />
* '''''формат-1''''' – формат, который вычисляется в том и только том случае, когда значением логического выражения является '''истина''',<br />
* '''''формат-2''''' – формат, который вычисляется в том и только том случае, когда значением логического выражения является '''ложь'''.<br />
<br />
Фраза '''ELSE''' '''''формат-2''''' не является обязательной, и может быть опущена. Ключевые слова '''IF''', '''THEN''' и '''FI''' обязательны всегда. '''''Формат-1''''' может быть опущен, если присутствует предложение '''ELSE''' (то есть если условие истинно, то ничего не будет выведено). Таким образом, команда '''IF''' может также принимать одну из следующих дополнительных форм:<br />
'''IF ''условие'' THEN ''формат-1'' FI'''<br />
'''IF ''условие'' THEN ELSE ''формат-2'' FI'''<br />
<br />
Поскольку нет никаких ограничений на команды, которые можно использовать в '''''формате-1''''' и '''''формате-2''''', то команды '''IF''' могут быть вложены друг в друга любое количество раз. Ключевое слово '''FI''', в таком случае, должно закрывать каждую команду '''IF''' (можно рассматривать '''IF''' и '''FI''' как пару скобок). Например:<br />
if p(v1) then v24 else if p(v2) and a(v3) then v5 fi fi<br />
<br />
Команда '''IF''' особенно полезна для создания обобщенных форматов в интегрированных базах данных, которые содержат различные типы записей. В этом случае надо иметь различные метки для каждого типа записи (должно быть поле, содержащее код, идентифицирующий тип записи). Таким образом, проверяя тип документа с помощью команды '''IF''', можно порождать в одном формате специфическое форматирование записей каждого типа.<br />
<br />
===Повторяющиеся группы===<br />
<br />
====Определение повторяющейся группы====<br />
<br />
Повторяющаяся группа состоит из набора команд форматирования, заключенных в круглые скобки. Смысл этих команд обычный, за исключением того, что обработка повторяющихся полей производится особым образом.<br />
<br />
Чтобы понять концепцию повторяющейся группы, надо, прежде всего, знать, каким образом система работает с повторяющимися полями. При отсутствии каких-либо дополнительных указаний система трактует все экземпляры (в том порядке, в котором они находятся в записи) как единую строку текста.<br />
<br />
Повторяющаяся группа изменяет порядок обработки системой экземпляров повторяющихся полей таким образом, что происходит последовательная обработка отдельно каждого экземпляра повторяющегося поля.<br />
<br />
Когда система обнаруживает скобку, открывающую повторяющуюся группу, происходит следующее:<br />
# Счетчик экземпляров (повторений) устанавливается в единицу.<br />
# Заключенный в скобки формат обрабатывается таким образом, что команды вывода полей выводят только те экземпляры повторяющихся полей, которые соответствуют текущему значению счетчика экземпляров.<br />
# Если в процессе текущего просмотра всей повторяющейся группы ничего не выводится (то есть в пределах группы больше не оказалось экземпляров повторяющегося поля), то процесс обработки повторяющейся группы завершается. В противном случае значение счетчика экземпляров увеличивается на 1 и повторяется выполнение шагов 2 и 3.<br />
<br />
Отметим еще раз, что все команды форматирования внутри повторяющейся группы обрабатываются последовательно экземпляр за экземпляром (как объяснялось выше), включая, таким образом, и поля, указываемые в команде IF, выражениях и функциях, а также строковых функциях, используемых как команды. Поэтому нежелательно использовать безусловные литералы в повторяющейся группе. И если все же безусловные литералы используются, то они будут выдаваться на один раз больше, чем это надо.<br />
<br />
====Использование повторяющейся группы====<br />
<br />
В подавляющем большинстве случаев для правильной обработки повторяющихся полей достаточно использование простых команд форматирования, таких, например, как команда режима вывода или повторяющихся литералов, как это показано ниже:<br />
{| class="standard"<br />
!Формат||Выходные данные<br />
|-<br />
|<tt>mpl,v70</tt>||<tt>Grieve, B.J.Went, F.W.</tt><br />
|-<br />
|<tt>mdl,v70</tt>||<tt>Grieve, B.J. Went, F.W.</tt><br />
|-<br />
|<tt><nowiki>v70+|; |</nowiki></tt>||<tt>Grieve, B.J.; Went, F.W.</tt><br />
|}<br />
<br />
Однако, возможны случаи, когда появляется необходимость отформатировать повторяющиеся поля другим способом. Например, иногда необходимо форматировать каждый экземпляр поля с новой строки, чего можно достигнуть только с использованием повторяющейся группы, как это показано ниже:<br />
{| class="standard"<br />
!Формат||Выходные данные<br />
|-<br />
|<tt>v675/v200^a</tt>||<tt>623.746623.746(092) Сухой П.О.<br>Конструктор Сухой. Люди и самолеты</tt><br />
|-<br />
|<tt>(v675/),v200^a</tt>||<tt>623.746<br>623.746(092) Сухой П.О.<br>Конструктор Сухой. Люди и самолеты</tt><br />
|}<br />
<br />
В первом случае команда перехода на новую строку (/) выполняется после форматирования всех экземпляров поля 675, а во втором случае она выполняется после каждого экземпляра поля.<br />
<br />
Пример ниже иллюстрирует использование повторяющихся полей с подполями (предполагается, что запись содержит два экземпляра поля 20). В первом формате использование повторяющейся группы дает возможность вывести различные подполя каждого экземпляра повторяющегося поля в виде таблицы. Второй формат аналогичен первому, но не содержит повторяющейся группы.<br />
<br />
Если нужно вывести литерал перед данными, создаваемыми повторяющейся группой, то можно использовать безусловный или условный литерал. Отметим, однако, что условный литерал должен быть связан с командой вывода поля (повторяющаяся группа не является командой вывода поля). Для этой цели необходимо использовать команды фиктивного вывода поля.<br />
<br />
Содержимое записи:<br />
210 ^aNew York^сMcGraw Hill^d1988<br />
210 ^aLondon^cAcademic Press^d1975<br />
Формат 1:<br />
/(v210^a,c11,v210^c,c30,v210^d/)<br />
Вывод:<br />
New York McGraw Hill 1988<br />
London Academic Press 1975<br />
Формат 2:<br />
/v210^a,c11,v210^c,c30,v210^d/<br />
Вывод:<br />
New YorkLondon<br />
McGraw HillAcademic Press<br />
19881975<br />
<br />
Для избежания недоразумений, связанных с тонкостями использования повторяющейся группы, рекомендуется воспользоваться следующим типовым примером:<br />
(if p(v20) then ... fi)<br />
где вместо троеточия следует поставить свои команды, которые будут выполнены на каждое повторение поля 20.<br />
<br />
Если существуют дополнительные условия на вывод, то их также следует помещать в тело условного оператора в приведённом типовом примере.<br />
<br />
Например, вывод всех повторений, кроме первого, можно сделать так:<br />
(if p(v20) then if &uf('+90') <> '1' then ... fi fi)<br />
<br />
Повторяющиеся группы не могут быть вложенными (то есть повторяющаяся группа не может содержать другую повторяющуюся группу), за исключением случая, когда внутренняя группа содержится в аргументе формата функции REF. Так, например, допустимым является следующий формат:<br />
(v10,ref(val(v20),v10,(v20,v30)))<br />
<br />
но приведенный ниже формат является недопустимым, что вызовет сообщение об ошибке:<br />
(v10,(v20,v30))<br />
<br />
Использование повторяющейся группы является обязательным в следующих случаях:<br />
* Использование повторяющегося поля в качестве аргумента функции L.<br />
* Первый аргумент функции REF ссылается на повторяющееся поле.<br />
<br />
Также нужно учитывать возможность употребления повторяющейся группы, когда повторяющееся поле используется в логическом выражении команды IF.<br />
<br />
===Глобальные переменные===<br />
<br />
Для записи и чтения глобальных переменных предназначены [[UNIFOR#Функции для работы с глобальными переменными|специальные форматные выходы]].<br />
<br />
Для вывода значения глобальной переменной предназначена команда '''g''', после которой должен быть записан номер глобальной переменной.<br />
<br />
Например, команда<br />
g1<br />
выводит значение первой глобальной переменной.<br />
<br />
Команда '''g''' в некоторых случаях может служить краткой альтернативой форматным выходам для чтения глобальных переменных.<br />
<br />
Об области видимости глобальных переменных см. в [[#Контекст форматёра|подразделе ''Контекст форматёра'']].<br />
<br />
==Возможности организации программного кода на языке форматирования==<br />
<br />
Возможности ''выполнения файла формата'' и ''вложения формата'' позволяют организовывать код в соответствии с принципами модульности.<br />
<br />
===Выполнение файла формата===<br />
<br />
Возможность выполнения файла формата реализована с помощью [[UNIFOR|форматного выхода <tt>&uf('6…</tt>]].<br />
<br />
Особенности выполнения файла формата:<br />
* возможно вложенное использование повторяющихся групп, если внутри повторяющейся группы выполнить файл формата, содержащий повторяющуюся группу;<br />
* допустима не более чем тройная вложенность выполнения файла формата;<br />
* выполнение файла формата происходит динамически, когда доходит очередь до данной инструкции.<br />
<br />
===Вложенный формат===<br />
<br />
В качестве ссылки на вложенный формат используется имя файла формата без расширения, обозначенное символами ASCII с кодами <tt>1C</tt> (File Separator) и <tt>1D</tt> (Group Separator). <tt>1C</tt> указывают непосредственно перед именем формата, а <tt>1D</tt> – непосредственно после.<br />
<br />
Обозначение вложения формата нарушает концепцию файла формата как текстового файла, который возможно набрать с клавиатуры. Предполагается, что возможностью вложения формата удобно пользоваться из Редактора форматов.<br />
<br />
Особенности выполнения файла формата:<br />
* до начала выполнения инструкция формата, вместо ссылок на файлы вложенных форматов вставляется их содержимое.<br />
<br />
Следствием упомянутой особенности является то, что рекурсивное вложение формата неизбежно повлечёт ошибку, так как вставка вложенного формата будет происходить до тех пор, пока не закончится память.<br />
<br />
==Использование команд (тэгов) RTF и HTML==<br />
<br />
В форматах допускается использование команд RTF, обеспечивающих представление неплоских текстов, содержащих шрифтовые выделения, горизонтальную и вертикальную верстку и т.п. Форматы, в которых используются команды RTF, называются RTF-форматы.<br />
<br />
Команды RTF вводятся в формат в виде литералов.<br />
<br />
Если предполагается, что формат будет содержать RTF команды, то он должен быть целиком заключен в фигурные скобки:<br />
'{'формат '}'<br />
<br />
Все команды RTF начинаются с символа \ (обратный слеш).<br />
<br />
Любая команда RTF должна заканчиваться знаком пробела, или непосредственно за ней может следовать другая команда RTF.<br />
Перечень основных команд RTF:<br />
{| class="standard"<br />
!Команда||Назначение<br />
|-<br />
|<tt>\par</tt>||Начало нового параграфа (абзаца)<br />
|-<br />
|<tt>\liNNN</tt>||Левый отступ для всех строк параграфа – NNN (в пунктах)<br />
|-<br />
|<tt>\riNNN</tt>||Правый отступ для всех строк параграфа – NNN (в пунктах)<br />
|-<br />
|<tt>\fiNNN</tt>||Левый отступ для первой строки параграфа – NNN (в пунктах)<br />
|-<br />
|<tt>\pard</tt>||Начало форматирования нового абзаца, все предыдущие команды форматирования параграфа отменяются<br />
|-<br />
|<tt>\fsNNN</tt>||Размер шрифта – NNN (удвоенный размер в пунктах)<br />
|-<br />
|<tt>\ul \ul0</tt>||Начало и конец подчеркивания<br />
|-<br />
|<tt>\i \i0</tt>||Начало и конец курсива<br />
|-<br />
|<tt>\b \b0</tt>||Начало и конец жирности<br />
|-<br />
|<tt>\tab</tt>||Табуляция<br />
|-<br />
|<tt>\qr</tt>||Правое выравнивание строк<br />
|-<br />
|<tt>\ql</tt>||Левое выравнивание строк<br />
|-<br />
|<tt>\qc</tt>||Цетральное выравнивание строк<br />
|-<br />
|<tt>\qj</tt>||Равномерное выравнивание строк<br />
|-<br />
|<tt>\page</tt>||Переход на новую страницу<br />
|-<br />
|<tt>\txNNN</tt>||Позиция табуляция – NNN (в пунктах)<br />
|}<br />
<br />
В форматах, содержащих команды RTF, неприменимы [[#Команды горизонтального и вертикального размещения|команды вертикальной верстки]].<br />
<br />
В форматах показа могут использоваться HTML-теги в качестве альтернативы RTF-командам. Совместное использование RTF-команд и HTML-тегов недопустимо.<br />
<br />
Форматы, в которых используются HTML-теги, называются HTML-форматы.<br />
<br />
HTML-теги вводятся в формат в виде литералов.<br />
<br />
Если требуется явно определить формат как HTML-формат, необходимо в самом начале формата указать фиктивный тэг:<br />
'</>'<br />
<br />
В форматах, содержащих HTML-теги, неприменимы [[#Команды горизонтального и вертикального размещения|команды вертикальной верстки, а также команды Xn и Cn]].<br />
<br />
Предлагаются дополнительные возможности при адресации ресурсов ИРБИС в тегах <A HREF=…> и <IMG SRC=…>:<br />
<A HREF="IRBIS:N,описание_ссылки"><br />
где:<br />
* N – число, обозначающее вид ссылки. Принимает значения 0, 1, 2, 3.<br />
** Для значений 0, 1, 2 – структура и смысл ссылок аналогичен ссылкам, формируемым с помощью форматного выхода &unifor(‘+I..). Важное замечание: форматный выход &unifor(‘+I..) ПРИМЕНИМ ТОЛЬКО В RTF-форматах (т.е. в форматах с HTML-тэгами он не применим).<br />
** Значение 3 определяет ссылку на внешний объект через относительную адресацию в рамках системы ИРБИС:<br />
<A HREF="IRBIS:3,path,dbname,filename"><br />
где:<br />
* path – определяет относительный путь к внешнему объекту в рамках ИР-БИС и принимает значения: 0 – основная директория системы (для ИРБИС32 – та, где находятся исполняемые модули; для ИРБИС64 – та, где находятся ис-полняемые модули сервера); 1 – общая директория баз данных (по умолчанию \DATAI); 10 – директория конкретной БД;<br />
* dbname – имя БД (имеет смысл только при path=10). По умолчанию – предполагается текущая БД;<br />
* filename – имя файла внешнего объекта.<br />
<br />
<IMG SRC="IRBIS:path,dbname,filename"><br />
где параметры path, dbname, filename имеют тот же смысл, что указано выше, и определяют ссылку на графический ресурс (картинку) в рамках ИРБИС.<br />
<br />
Реализуется специальная возможность для отображения штрих-кодов в HTML-форматах, а именно:<br />
<IMG SRC="IRBIS:!!ШТРИХ_КОД!!"><br />
<br />
==Форматы для формально-логического контроля (ФЛК)==<br />
<br />
Для формально-логического контроля данных (как на уровне поля, так и документа в целом) применяются специальные форматы. Форматы для ФЛК используются следующим образом:<br />
* форматированию подвергается контролируемый документ;<br />
* первый символ результата форматирования определяет результат ФЛК, а именно:<br />
** 0 – означает положительный результат контроля;<br />
** 1 – означает отрицательный результат и обнаруженные ошибки считаются непреодолимыми, т.е. подлежат обязательному устранению;<br />
** 2 – означает отрицательный результат, но при этом ошибки считаются преодолимыми, т.е. их можно не исправлять.<br />
* остальной результат форматирования (начиная со второго символа) в случае отрицательного контроля выдается пользователю в качестве сообщения.<br />
<br />
Собственно форматы ФЛК, как правило, содержат команды IF. Многочисленные примеры таких форматов находятся в директории БД IBIS.<br />
<br />
==Форматы с переменными метками==<br />
<br />
В некоторых режимах работы системы применяются форматы, в которых используются, так называемые, переменные метки (например, при вводе данных через словарь – т.н. форматы для переноса данных). [[Сценарии поиска#Поиски по словарю|Исходным для таких форматов обязательно является термин словаря.]]<br />
<br />
Переменные метки обозначаются в таких форматах в виде *** (три символа ''звёздочка''). Форматы с переменными метками используются следующим образом:<br />
* Определяется первая [[Таблица выбора полей#ТВП для инвертированного файла|индексная ссылка]] для исходного термина: а именно, соответствующие номер документа (MFN), метка поля (TAG) и повторение (OCC).<br />
* Все переменные метки в формате заменяются на значение найденной метки поля (TAG) и форматированию подвергается документ с найденным номером (MFN).<br />
* В качестве результата форматирования берется строка с номером OCC (нумерация начинается с 1). Если нет строки с таким номером, результатом форматирования является пустая строка.<br />
<br />
Примеры форматов с переменными метками находятся в директории БД IBIS.<br />
<br />
==Ссылки==<br />
<br />
См. также:<br />
* [[Базы данных ИРБИС]]<br />
* [[Операторы языка форматирования ИРБИС]]<br />
* [[Функции языка форматирования ИРБИС]]<br />
* [[UNIFOR]]<br />
* <tt>[[IRBIS64.dll]]</tt><br />
* [[Язык запросов ИРБИС]]<br />
<br />
Источники информации:<br />
* [[Общее описание системы ИРБИС64]]<br />
<br />
[[Категория:Язык форматирования системы ИРБИС]]<br />
[[Категория:Анонсированные статьи]]</div>Sokvhttp://wiki.elnit.org/index.php?title=%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F_%D0%92%D0%B5%D0%B1-%D0%98%D0%A0%D0%91%D0%98%D0%A1&diff=2462Технология Веб-ИРБИС2016-08-25T18:47:05Z<p>Sokv: /* Обработка фреймов */</p>
<hr />
<div>Технология '''''Веб-ИРБИС''''' служит для создания Веб-приложений для работы с базами данных ИРБИС.<br />
<br />
Данная технология реализована в виде одноимённого [[Веб-ИРБИС|'''''программного продукта – Веб-ИРБИС''''']].<br />
<br />
==Веб-шлюз ИРБИС==<br />
<br />
Программный модуль ''Веб-шлюз ИРБИС'' обеспечивает обработку клиентских запросов.<br />
<br />
''Веб-шлюз ИРБИС'' является шлюзом CGI.<br />
<br />
Запрос может осуществляться по методу POST или GET.<br />
<br />
===Общая схема работы Веб-шлюза ИРБИС===<br />
<br />
Последовательность операций шлюза:<br />
* Чтение параметров INI файла<br />
* Препроцессинг<br />
** Формальный контроль правильности параметров<br />
** Интерпретация поискового запроса<br />
** Авторизация<br />
** Выполнение скрипта защиты<br />
** Повторная авторизация<br />
* Выполнение поиска<br />
* Формирование ответа (объединение и обработка фреймов)<br />
* Определение HTTP заголовков на основе INI файла<br />
* Возврат ответа<br />
<br />
В случае возникновения ошибки выполнения или превышения времени обработки запроса шлюз возвращает ошибку (error.html).<br />
<br />
====Препроцессинг====<br />
<br />
=====Скрипт-защита=====<br />
<br />
Формат скрипта защиты выполняет две функции: 1) проверку поступивших параметров запроса и защиту от взлома 2) обработку и дополнение параметров.<br />
<br />
Первая строка, сформированная форматом срипт-защиты, определяет общий результат – если это 0 или файлом не было возвращено никаких значений – скрипт-защита определила ошибку, если результат 1 или файлом были возвращены другие ненулевые значения – ошибки нет. В первом случае шлюз возвращает error.html, в последнем случае шлюз читает остальные строки формата и изменяет параметры запроса на новые.<br />
<br />
Например, строка ‘SCRIPT_DONE=YES’/ задаёт параметру SCRIPT_DONE значение YES.<br />
<br />
=====Авторизация пользователя=====<br />
<br />
Авторизация даёт возможность заказывать литературу, просматривать формуляр и редактировать корзину заказов.<br />
<br />
Для авторизации используется база RDR. Авторизация происходит по идентификатору и, если в пользовательском запросе задан параметр Z21FLAGID=1, – по фамилии. После авторизации шлюз выполняет шифрование идентификатора, и зашифрованный идентификатор передаётся при переходе по страницам.<br />
<br />
====Инициализация параметров====<br />
<br />
После поступления клиентского запроса осуществляется инициализация параметров веб-шлюза на основе параметров CGI.<br />
<br />
Обрабатываемый шлюзом набор параметров определяется конфигурационным файлом Веб-шлюза ИРБИС.<br />
<br />
Эти параметры доступны в контексте фреймов.<br />
<br />
Параметры используются, в том числе, для отслеживания состояния веб-страницы. В ответ на HTTP-запрос клиента (обычно – в генерируемую html-страницу, передаваемую клиенту) может включить набор пользовательских параметров вместе с их значениями, полученными в запросе, для чего есть специальная команда.<br />
<br />
Отслеживание состояния осуществляется с использованием следующих этапов: 1) данные передаются на веб-шлюз в виде параметров запроса; 2) веб-шлюз передаёт данные вместе со сформированной страницей в скрытых полях форм HTML.<br />
<br />
====Выполнение команды====<br />
<br />
Затем шлюз переходит к выполнению команды. Команда соответствует переданному параметру C21COM.<br />
<br />
В контексте выполнения команды используются полученные параметры.<br />
<br />
Для каждой команды есть набор '''основных параметров''', логика использования которых предопределена самим веб-шлюзом.<br />
<br />
К основным параметрам шлюза относятся:<br />
* <tt>C21COM</tt> – команда, которую должен выполнить веб-шлюз.<br />
* <tt>I21DBN</tt> – имя [[Профили|профиля]]. Веб-шлюз ИРБИС в соответствии с именем профиля определяет набор [[Фреймы|фреймов]], из которых составит ответ клиенту. Веб-шлюз ИРБИС ищет названия фреймов в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файле irbis_server.ini]] в секции, название которой соответствует значению параметра <tt>I21DBN</tt> (подробнее в разделе [[#Роль фреймов в работе веб-шлюза ИРБИС|Роль фреймов в работе веб-шлюза ИРБИС]]).<br />
* <tt>P21DBN</tt> – имя базы данных.<br />
* <tt>Z21ID</tt> – значение параметра авторизации.<br />
<br />
Кроме '''основных''', есть '''пользовательские параметры''' – все остальные параметры.<br />
<br />
Особенность пользовательских параметров в том, что их набор и использование полностью могут быть определены (переопределены) пользователями системы ИРБИС:<br />
* Определение параметров даётся в конфигурационном файле Веб-шлюза ИРБИС.<br />
* Параметры доступны в виде виртуальных полей на языке форматирования в контексте фреймов.<br />
<br />
====Ответ веб-шлюза ИРБИС клиенту====<br />
<br />
Порядок формирования ответа веб-шлюза ИРБИС клиенту зависит от команды.<br />
<br />
=====Ответ с использованием фреймов=====<br />
<br />
Для команд, представленных в таблице, осуществляется генерация ответа с использованием технологии выбора и обработки фреймов.<br />
<br />
Обычно это динамически формируемая веб-страница.<br />
<br />
'''Таблица.''' Команды веб-шлюза ИРБИС.<br />
{|<br />
|<br />
{| class="standard"<br />
!Значение параметра <tt>C21COM</tt>||Описание команды||Соответствующий параметр в <tt>irbis_server.ini</tt><br />
|-<br />
|'''F'''||'''''показ''''' – команда показа страницы||ShowFrames<br />
|-<br />
|'''S'''||'''''поиск''''' – команда выполнения и показа результатов поиска||SearchFrames<br />
|-<br />
|'''T'''||'''''словарь''''' – команда показа терминов словаря||DictionryFrames<br />
|-<br />
|'''Z'''||'''''заказ''''' – команда отбора записей в корзину заказов||ZakazFrames<br />
|-<br />
|'''R'''||'''''запись''''' – команда редактуры записей||RecUpdateFrames<br />
|}<br />
|}<br />
<br />
Выбор набора фреймов зависит от: команды (параметр C21COM) и профиля (параметр I21DBN).<br />
<br />
Возможные наборы фреймов предварительно сконфигурированы и указаны в конфигурационном файле <tt>irbis_server.ini</tt>.<br />
<br />
Откуда шлюз и считывает нужный набор, в зависимости от параметров (C21COM и I21DBN).<br />
<br />
Каждой команде веб-шлюза ИРБИС соответствует имя параметра в файле <tt>irbis_server.ini</tt> (см. таблицу ''Команды веб-шлюза ИРБИС'').<br />
<br />
=====Отправка клиенту ресурсного файла=====<br />
<br />
Для команд, представленных в таблице, отправка клиенту ресурсного файла.<br />
<br />
'''Таблица.''' Команды веб-шлюза ИРБИС.<br />
{|<br />
|<br />
{| class="standard"<br />
!Значение параметра <tt>C21COM</tt>||Описание команды<br />
|-<br />
|'''E'''||'''''экспорт''''' – команда выгрузки записей<br />
|-<br />
|'''2'''||'''''файл''''' – команда чтения внешнего объекта<br />
|-<br />
|'''4'''||'''''скачать''''' – команда заимствования записи<br />
|}<br />
|}<br />
<br />
===Команда поиска – S===<br />
<br />
'''Пример поиска всех страниц одного текста PDF'''<br />
<br />
Здесь мы предполагаем, что:<br />
* Работаем в контексте базы данных IBIS.<br />
* Поисковое выражение <tt>TXT=2__$</tt> позволяет найти все страницы файла <tt>2.pdf</tt>.<br />
<br />
Чтобы создать произвольный запрос, не связанный с существующим функционалом системы, можно создать новый профиль EXAMPLE1. Для этого в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|конфигурационном файле веб-шлюза ИРБИС irbis server.ini]] нужно добавить секцию EXAMPLE1<br />
[EXAMPLE1]<br />
FRAMES=C:\irbis\irbis_plus\IRBIS64\DATAI\frames_15_plus\FullText\<br />
ShowFrames=<br />
SearchFrames=RESULT<br />
DBNAME=IBIS<br />
где значение параметра FRAMES должно соответствовать местонахождению фреймов.<br />
<br />
Для команды поиска порядок формирования ответа определяется параметром SearchFrames. И запись<br />
SearchFrames=RESULT<br />
означает, что при формировании Веб-шлюзом ответа на команду поиска не участвуют фреймы, участвует только формат, который будет указан в запросе.<br />
<br />
В качестве этого формата предлагается создать файл '''<tt>example1.pft</tt>''' со следующим содержимым<br />
<nowiki>mfn,/,</nowiki><br />
Этот формат выводит список MFN найденных записей.<br />
<br />
Теперь всё готово, чтобы выполнить запрос<br />
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<br />
<br />
В основных полях мы указываем команду поиска (S), базу данных IBIS, профиль EXAMPLE1, идентификатор пользователя.<br />
<br />
Поле S21All содержит запрос на языке запросов ИРБИС. Если его декодировать из кодировки URL, то он будет выглядеть так<br />
<nowiki>S21All=<.>TXT=2__$<.></nowiki><br />
где, в соответствии с правилами [[#Постобработка|постобработки]], точка в угловых скобках заменяет двойную кавычку. Таким образом, указанный запрос следует читать как<br />
"TXT=2__$"<br />
где двойные кавычки являются ограничителем запроса в выражении на [[Язык запросов ИРБИС|языке запросов ИРБИС]]<br />
<br />
Формат вывода найденных записей, который предлагалось подготовить выше, указан в параметре S21FMT, без расширения.<br />
<br />
Результатом выполнения этого запроса будет обещанный список mfn, например<br />
0000000002<br />
0000000006<br />
0000000013<br />
0000000018<br />
<br />
Можно усложнить запрос, ограничив вывод порцией из 2 результатов, начиная со 2-го (параметры S21CNR и S21STN)<br />
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<br />
<br />
Результатом будет<br />
0000000006<br />
0000000013<br />
<br />
Можно усложнить формат вывода найденных записей '''<tt>example1.pft</tt>''', добавив информацию о количестве найденных, а также введённых порционных ограничениях<br />
<nowiki>mfn,'; кол-во найденных = ',v1001,'; с какого номера начать = ',v2223,'; размер порции = ',v2224,/,</nowiki><br />
где 1001, 2223 и 2224 – виртуальные поля, в которые шлюз помещает данные в соответствии с [[таблицей виртуальных полей шлюза]].<br />
<br />
Все данные, которые шлюз принял в виде параметров, попадают в виртуальные поля в соответствии правилами, заданными в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файле irbis_server.ini]]. Например, параметру S21CNR соответствует метка 2224, параметру S21STN – 2223.<br />
<br />
Результатом будет<br />
0000000006; кол-во найденных = 4; с какого номера начать = 2; размер порции = 2<br />
0000000013; кол-во найденных = 4; с какого номера начать = 2; размер порции = 2<br />
<br />
В последнем примере количество найденных и данные о порции повторяются с каждым результатом поиска, что является избыточным.<br />
<br />
Такой избыточности позволяют избежать применение [[фреймов]].<br />
<br />
Создадим файл example1.frm (его местоположение должно соответствовать параметру FRAMES в профиле) со следующим содержимым<br />
Вывод через фрейм... <br />
<?! 'кол-во найденных = ',v1001,'; с какого номера начать = ',v2223,'; размер порции = ',v2224,/, ?><br />
<br />
Чтобы задействовать этот фрейм, в описании профиля можно изменить значение параметра SearchFrames следующим образом:<br />
SearchFrames=example1.frm,RESULT<br />
что следует понимать так, что шлюз вернёт результат выполнения команды поиска, составленный из:<br />
* результата выполнения фрейма example1.frm<br />
* результатов работы формата, который отработает для каждого результата поиска (обозначается словом RESULT).<br />
<br />
Кроме того, чтобы измежать дублирующихся данных, в '''<tt>example1.pft</tt>''' оставим только вывод MFN:<br />
mfn,/,<br />
<br />
Результатом будет<br />
Вывод через фрейм... кол-во найденных = 4; с какого номера начать = 2; размер порции = 2<br />
0000000006<br />
0000000013<br />
<br />
===Команда показа терминов словаря – T===<br />
<br />
'''Пример команды показа терминов словаря'''<br />
<br />
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&<br />
<br />
где:<br />
* <tt>C21COM=T</tt> определяет команду,<br />
* <tt>I21DBN=IBIS</tt> базу данных,<br />
* <tt>Z21ID=1500323880383212</tt> идентификатор читателя в зашифрованном виде,<br />
* <tt>T21PRF=KT=</tt> префикс словаря,<br />
* <tt>T21TRM=a</tt> – требование терминов, начинающихся на <tt>a</tt>.<br />
<br />
Пример возврата:<br />
A20040830ARUSY|1<br />
A20041017ABELY|1<br />
A20041118ARUSY|1<br />
A2H|2<br />
A540|9<br />
A54001|7<br />
A550UTILIZATION|1<br />
AACDEMY|1<br />
AASL|2<br />
AASLPUBSANDJOURNALS|2<br />
<br />
===Добавление пользовательского параметра===<br />
<br />
Добавление пользовательского параметра осуществляется в несколько шагов:<br />
* '''добавление ''пользовательского параметра'' в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файл инициализации шлюза <tt>irbis_server.ini</tt>]]'''<br />
: Необходимо добавить описание нового ''пользовательского параметра'' в настроечный файл <tt>irbis_server.ini</tt>, задав имя и метку параметра. Для этого в секции <tt>[PARAMETRS]</tt> используются ''параметры ini файла'' <tt>PARNAME_</tt> и <tt>PARTAG_</tt> (не стоит путать термины ''пользовательские параметры'' веб-шлюза и ''параметры ini файла''), где вместо знака подчёркивания ставится номер пользовательского параметра по порядку, например:<br />
PARNAME2=C21COM<br />
PARTAG2=2222<br />
: В этом примере мы видим описание второго по порядку из определённых в секции <tt>[PARAMETRS]</tt> параметров: имя параметра <tt>C21COM</tt>, метка параметра <tt>2222</tt>. Имя и метка параметров должны быть уникальными. После того как описание ''пользовательского параметра'' добавлено необходимо изменить значение параметра <tt>PARCOUNT</tt> в секции <tt>[PARAMETRS]</tt>, его значение должно быть равно порядковому номеру последнего описания ''пользовательского параметра''.<br />
: ''Примечание:'' обратите внимание, что в файле <tt>irbis_server.ini</tt> хранятся описания не только пользовательских параметров, а присутствует также описания предустановленных параметров.<br />
* '''использование в файлах <tt>.frm</tt> команд <tt><!FORMAT=INSERT_ALL_PARAMETERS></tt> и <tt><!FORMAT=INSERT_ALL_PARAMETERS_IN_QUERY></tt>'''<br />
: Команда <tt><!FORMAT=INSERT_ALL_PARAMETERS></tt> обеспечивает вставку в код HTML-страницы всех непустых переданных веб-шлюзу параметров в виде скрытых элементов формы, например:<br />
<input type="hidden" name="PARAM_NAME" value="PARAM_VALUE"><br />
: Команда <tt><!FORMAT=INSERT_ALL_PARAMETERS_IN_QUERY></tt> вставляет в код HTML-страницы гиперссылку, содержащую все переданные веб-шлюзу параметры.<br />
<br />
===Система команд Веб-шлюза ИРБИС===<br />
<br />
Система ''команд'' Веб-шлюза ИРБИС позволяет задать собственный набор фреймов и порядок их объединения для каждой задачи. Для разных задач предусмотрены разные команды, например: для страницы приглашения к поиску, результата поиска, отбора записей в корзину заказов и т.д.<br />
<br />
==Обработка фреймов==<br />
<br />
В общем случае, веб-страница формируется путём объединения (''склеивания''):<br />
* Нескольких ''фреймов'' (соответствующий список ''фреймов'' задаётся в профиле для каждой команды). Список может не содержать ни одного фрейма.<br />
* Результата [[Язык форматирования системы ИРБИС#Понятие формата|''форматирования'']] записей, найденных в соответствии запросу пользователя, базы данных, заданной в профиле. Формат задаётся параметром шлюза <tt>S21FMT</tt>. Результат форматирования вставляется в месте, указанном словом <tt>RESULT</tt> в списке ''фреймов'' заданном в профиле. Слово может отсутствовать в списке.<br />
<br />
===Контекст фрейма===<br />
<br />
Контекст фрейма - запись читателя, осуществившего вход в систему.<br />
<br />
===Фрейм как язык разметки===<br />
<br />
Фрейм представляет собой текстовый файл, содержимое которого передаётся клиенту (в веб браузер), который также может содержать вставки, которые будут обработаны определённым образом перед передачей клиенту.<br />
<br />
Предусмотрены вставки следующих видов:<br />
* вставка на языке форматирования ИРБИС,<br />
* вложенный фрейм.<br />
<br />
'''''Вставка на языке форматирования''''' обозначается следующим образом<br />
<br />
<!FORMAT<br />
<br />
'''Пример:'''<br />
<br />
<nowiki><!FORMAT=if v3409='' then 'value=""' else 'value=','"',v3409,'"',fi></nowiki><br />
<br />
''Примечание: если вставка на языке форматирования содержит символы, кодирующиеся в UTF-8 более чем одним байтом (например, кириллицу), то формат обязательно должен начинаться с восклицательного знака. Это связано с тем, что формат в кодировке UTF-8 [[Язык форматирования системы ИРБИС#Кодировка|должен предваряться восклицательным знаком]], а все фреймы храняться именно в кодировке UTF-8.''<br />
<br />
'''Пример:'''<br />
<br />
<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><br />
<br />
'''Пример вложенного фрейма:'''<br />
<br />
<!FORMAT=if &uf('IMAIN,SHOW_DUBLIN_CORE,0') <> '0' then /'<!FILE=Dublin_Core.frm>' fi><br />
<br />
Предусмотрен '''''упрощённый синтаксис вставки на языке форматирования''''':<br />
<?!if p(v2225) then 'true' fi ?><br />
<br />
===Постобработка===<br />
<br />
Перед передачей результата выполнения фрейма клиенту происходит замена сочетаний символов<br />
<.><br />
на символ двойной кавычки<br />
"<br />
<br />
===Пример последовательности действий Веб-шлюза ИРБИС при формировании веб-страницы в ответ на запрос===<br />
<br />
Веб-шлюз ИРБИС при получении команд '''F''', '''S''', '''T''', '''Z''', '''R''' выполняет следующую последовательность действий:<br />
* Веб-шлюз получил запрос. Запрос содержит параметры <tt>C21COM</tt>, <tt>I21DBN</tt> и другие.<br />
* В файле <tt>irbis_server.ini</tt> веб-шлюз находит секцию, имя которой соответствует значению параметра <tt>I21DBN</tt>. Иными словами: с одной стороны, в качестве значения параметра <tt>I21DBN</tt> указывается имя профиля, с другой стороны, для каждого профиля в файле <tt>irbis_server.ini</tt> должна содержаться секция, имя которой совпадает с именем профиля.<br />
* В указанной секции файла <tt>irbis_server.ini</tt> веб-шлюз находит значение параметра, соответствующего указанной в параметре <tt>C21COM</tt> команде (см. таблицу ''Команды веб-шлюза ИРБИС''). Полученное значение должно представлять собой список фреймов.<br />
* Фреймы обрабатываются, и результат, представляющий собой HTML-страницу, отправляется клиенту в качестве ответа.<br />
<br />
===Примеры перехода пользователя по страницам Веб-ИРБИС===<br />
<br />
Пример запроса начальной страницы:<br />
<br />
http://localhost:8080/cgi-bin/irbis64r_15_plus/cgiirbis_64_ft.exe?C21COM=F&I21DBN=IBIS_FULLTEXT&P21DBN=IBIS&Z21ID=&S21CNR=5<br />
<br />
где указаны:<br />
* команда шлюза F (''показ страницы'')<br />
* имя профиля IBIS_FULLTEXT<br />
* база данных IBIS<br />
* авторизация не осуществлялась<br />
<br />
Параметр S21CNR не обязателен.<br />
<br />
При авторизации запрос приобретает следующий вид<br />
<br />
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<br />
<br />
где указаны:<br />
* команда шлюза F (''показ страницы'')<br />
* имя профиля AUTHOR<br />
* база данных IBIS<br />
* параметры авторизации: Z21FLAGID, фамилия читателя Z21FAMILY и идентификатор читателя Z21ID<br />
<br />
При поиске по слову "библиотека" запрос приобретает следующий вид<br />
<br />
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<br />
<br />
где указаны:<br />
* команда шлюза S (''поиск'')<br />
* имя профиля IBIS_FULLTEXT<br />
* база данных IBIS<br />
* параметры авторизации: Z21ID<br />
* текущий запрос SEARCH_STRING и предыдущий запрос FT_S21STR (одинаковые)<br />
* USES21ALL=1 (использовать параметр S21ALL, применяется в поиске связных)<br />
* S21CNR=5 (порция при показе найденных)<br />
* S21REF=10 (для правильного формирования ссылок на страницы с результатами поиска)<br />
* C21COM1<br />
* FT_PREFIX<br />
* S21FMT=briefHTML_ft<br />
* AVT_S21P03=A%3D<br />
* AVT_S21P02=1<br />
* AVT_S21LOG=1<br />
* NAME_S21P03=T%3D<br />
* NAME_S21P02=1<br />
* NAME_S21LOG=1<br />
* UDC_S21P03=U%3D<br />
* UDC_S21P02=0<br />
* UDC_S21LOG=1<br />
* IZD_S21P03=M%3D<br />
* IZD_S21P02=1<br />
* IZD_S21LOG=1<br />
* DAT_S21P03=G%3D<br />
* DAT_S21P02=1<br />
* DAT_S21LOG=5<br />
* P21DBN=IBIS<br />
* FT_S21LOG=4<br />
* FT_S21P03=K%3D<br />
* FT_S21P01=3<br />
* S21STN=1<br />
* S21COLORTERMS=1<br />
<br />
==Ссылки==<br />
<br />
См. также:<br />
* [[Веб-ИРБИС]]<br />
* [[Установка Веб-шлюза Ирбис 64]]<br />
* [[Настройка и обслуживание Веб-ИРБИС]]<br />
* [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini]]<br />
* [[Язык форматирования системы ИРБИС]]<br />
* [[Язык запросов ИРБИС]]<br />
<br />
[[Категория:Технология Веб-ИРБИС]]<br />
[[Категория:ИРБИС 64]]</div>Sokvhttp://wiki.elnit.org/index.php?title=UNIFOR&diff=2461UNIFOR2016-05-20T17:00:21Z<p>Sokv: /* Выполнить внешнюю программу */</p>
<hr />
<div>UNIFOR – [[Язык форматирования системы ИРБИС#Форматные выходы. UNIFOR|''форматный выход'']], реализующий множество функций вне базовых рамок [[Язык форматирования системы ИРБИС|языка форматирования]].<br />
<br />
В статье для удобства перечень форматных выходов UNIFOR разбит на категории.<br />
<br />
==Использование UNIFOR==<br />
<br />
UNIFOR имеет следующий синтаксис в языке форматирования (в полной или сокращённой форме):<br />
&unifor(формат)<br />
&uf(формат)<br />
где:<br />
* '''<tt>&</tt>''' – идентификатор вызова форматного выхода,<br />
* '''<tt>unifor</tt>''' – имя форматного выхода (соответственно '''<tt>uf</tt>''' – сокращённое имя),<br />
* '''<tt>формат</tt>''' – аргумент.<br />
<br />
Рекомендуется использовать сокращённую форму вызова UNIFOR. Сокращённая форма по действию ничем не отличается от полной формы, зато позволяет сократить размер формата и повысить его читаемость.<br />
<br />
Вид реализуемой функции определяется первыми символами строки, которая формируется в результате выполнения формата, передаваемого в качестве аргумента.<br />
<br />
===Передача параметров===<br />
<br />
Во многих функциях, которые позволяет реализовать форматный выход UNIFOR, для передачи параметра неизвестной длины используется уникальный разделитель. Значение параметра должно быть окружено таким уникальным разделителем слева и справа.<br />
<br />
Например, если исходная строка<br />
!AAAA!BBBB<br />
то в качестве уникального разделителя выступает символ<br />
!<br />
значение параметра<br />
AAAA<br />
а оставшаяся часть исходной строки<br />
BBBB<br />
<br />
==Перечень функций UNIFOR с примерами их применения==<br />
<br />
===Функции для обработки строк===<br />
<br />
====Обычные функции для обработки строк====<br />
<br />
{{Описание функции UNIFOR<br />
|name=+95<br />
|title=Вернуть длину исходной строки<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
|sectionLevel======<br />
}}<br />
<br />
+95<строка><br />
<br />
{{Описание функции UNIFOR<br />
|name=+96<br />
|title=Вернуть часть строки<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
|sectionLevel======<br />
}}<br />
<br />
+96A*SSS.NNN#<строка><br />
где:<br />
* A – направление: 0 – с начала строки; 1 – с конца;<br />
* SSS – смещение;<br />
* NNN – кол-во символов.<br />
<br />
'''Примеры:'''<br />
&uf('+960*0.4#'v100)<br />
&uf('+960*5.4#'v100)<br />
&uf('+961*0.4#'v100)<br />
<br />
{{Описание функции UNIFOR<br />
|name=Q<br />
|title=Вернуть заданную строку в нижнем регистре<br />
|sectionLevel======<br />
}}<br />
<br />
Q<строка><br />
<br />
'''Примеры:'''<br />
&unifor("Q"v200)<br />
<br />
{{Описание функции UNIFOR<br />
|name=+97<br />
|title=Вернуть заданную строку в верхнем регистре<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
|sectionLevel======<br />
}}<br />
<br />
+97<строка><br />
<br />
{{Описание функции UNIFOR<br />
|name=+98<br />
|title=Заменить в заданной строке один символ на другой<br />
|description=Заменить в заданной строке один символ на другой (регистр учитывается)<br />
|versionFilename=RELEASE_7_2.doc<br />
|versionText=2007.2<br />
|sectionLevel======<br />
}}<br />
<br />
+98ab<строка><br />
где:<br />
* a – заменяемый символ;<br />
* b – заменяющий символ.<br />
<br />
'''Примеры:'''<br />
<br />
В результате выполнения формата<br />
&uf('+98 0',f(1,5,0))<br />
получится значение<br />
00001<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9F<br />
|title=Вернуть ANSI-символ с заданным кодом<br />
|versionFilename=RELEASE_8_1.doc<br />
|versionText=2008.1<br />
|sectionLevel======<br />
}}<br />
<br />
+9F<код><br />
<br />
'''Примеры:'''<br />
<br />
Такой форматный выход может пригодиться, например, когда надо вывести в литерале символ, совпадающий с ограничителями литерала.<br />
<br />
Для формата<br />
<br />
'11111',&Uf('+9F39'),'22222'<br />
<br />
результат расформатирования будет<br />
<br />
11111'22222<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9I<br />
|title=Заменить в исходных данных некоторую заданную последовательность символов другой заданной последовательностью символов<br />
|versionFilename=RELEASE_9_1.doc<br />
|versionText=2009.1<br />
|sectionLevel======<br />
}}<br />
<br />
+9I!AAAA!/BBBB/<данные><br />
где <tt>АААА</tt> – последовательность символов, подлежащая замене; <tt>ВВВВ</tt> – заменяющая последовательность символов; символ <tt>!</tt> – уникальный разделитель, отсутствующий в строке <tt>АААА</tt>; символ <tt>/</tt> – уникальный разделитель, отсутствующий в строке <tt>ВВВВ</tt>. <tt>ВВВВ</tt> может быть пустым значением, в этом случае последовательность <tt>АААА</tt> будет удаляться. Обрабатываются ВСЕ (а не только первое) вхождения <tt>АААА</tt> в исходные данные. В качестве разделителей можно использовать ТОЛЬКО символы стандартного набора (с кодом менее 128).<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9S<br />
|title=Найти подстроку<br />
|description=Возвращает позицию первого символа найденного вхождения подстроки в исходную строку. Считается, что символы в строке нумеруются с 1. Если подстрока не найдена, то возвращает 0. ''Комментарий: следует отметить, что в функции {{Описание функции UNIFOR (ссылка)|name=+96|title=Вернуть часть строки}} указывают смещение, а не позицию символа''<br />
|versionFilename=RELEASE_13_1.doc<br />
|versionText=2013.1<br />
|sectionLevel======<br />
}}<br />
<br />
+9S!подстрока!<исходная_строка><br />
где <tt>подстрока</tt> – подстрока, которую нужно найти; <tt><исходная_строка></tt> – исходная строка для поиска; символ <tt>!</tt> – уникальный разделитель, отсутствующий в искомой подстроке.<br />
<br />
====Функции для работы со словами====<br />
<br />
{{Описание функции UNIFOR<br />
|name=E<br />
|title=Вернуть заданное количество слов с начала строки<br />
|sectionLevel======<br />
}}<br />
<br />
EN<строка><br />
где <tt>N</tt> – количество слов (одна цифра).<br />
<br />
<br />
'''Примеры:'''<br />
&unifor("E3"v200^a)<br />
<br />
{{Описание функции UNIFOR<br />
|name=F<br />
|title=Вернуть часть строки, начиная со следующего слова после указанного и до конца строки<br />
|sectionLevel======<br />
}}<br />
<br />
FN<строка><br />
где <tt>N</tt> – количество слов (одна цифра).<br />
<br />
'''Примеры:'''<br />
&unifor("F3"v200^a)<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9G<br />
|title=Преобразовать заданную строку в список слов<br />
|versionFilename=RELEASE_8_1.doc<br />
|versionText=2008.1<br />
|sectionLevel======<br />
}}<br />
<br />
+9G<строка><br />
<br />
Границы слов определяются на основе [[Файлы ИРБИС#Таблица алфавитных символов|таблицы алфавитных символов]].<br />
<br />
====Дополнительные функции для обработки строк====<br />
<br />
{{Описание функции UNIFOR<br />
|name=+3E<br />
|title=Кодирование данных для представления в URL<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
|sectionLevel======<br />
}}<br />
<br />
+3E<данные><br />
<br />
'''Примеры:'''<br />
&unifor('+3E',v1007)<br />
<br />
{{Описание функции UNIFOR<br />
|name=+3D<br />
|title=Декодирование данных из URL<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
|sectionLevel======<br />
}}<br />
<br />
+3D<данные><br />
<br />
{{Описание функции UNIFOR<br />
|name=+3+<br />
|title=Перевод знака <tt>+</tt> в <tt>%2B</tt><br />
|sectionLevel======<br />
}}<br />
<br />
+3+<данные><br />
<br />
{{Описание функции UNIFOR<br />
|name=+3U<br />
|title=Кодирование строки в UTF-8<br />
|sectionLevel======<br />
}}<br />
<br />
+3U<данные><br />
<br />
{{Описание функции UNIFOR<br />
|name=+3W<br />
|title=Декодирование строки из UTF-8<br />
|sectionLevel======<br />
}}<br />
<br />
+3W<данные><br />
<br />
{{Описание функции UNIFOR<br />
|name=T<br />
|title=Транслитерация кириллических символов с помощью латиницы<br />
|sectionLevel======<br />
}}<br />
<br />
TN<строка><br />
где N – вид таблицы транслитерации (0 или 1).<br />
<br />
'''Примеры:'''<br />
&unifor("T0"V200)<br />
<br />
{{Описание функции UNIFOR<br />
|name=G<br />
|title=Вернуть часть строки до или начиная с заданного символа<br />
|sectionLevel======<br />
}}<br />
<br />
GNA<строка><br />
где:<br />
* N может принимать значения:<br />
** 0 (или A) – до заданного символа не включая его;<br />
** 1 (или B) – начиная с заданного символа;<br />
** 2 (или C) – после заданного символа;<br />
** 3 (или D) – после последнего вхождения заданного символа;<br />
** 4 (или E) – до последнего вхождения заданного символа (включая его);<br />
** 5 – до последнего вхождения заданного символа (не включая его).<br />
* А – заданный символ. Символ обозначает самого себя, кроме # (обозначает любую цифру) и $ (обозначает любую букву).<br />
<br />
''Примечание: функция G5 присутствует в версиях ИРБИС с {{Ссылка на открытый FTP<br />
|filename=RELEASE_15_1.doc<br />
|text=2015.1<br />
}}.''<br />
<br />
'''Примеры:'''<br />
&unifor("G0#"v700)<br />
&unifor("G1-"v700^a)<br />
&unifor("G2-"v700^a)<br />
<br />
Пример получения ссылки на файл из подполя 952^U полнотекстовой БД для файлов, добавленных с разбиением и без<br />
&uf('G0:',&uf('G4:',&uf('G2:',&uf('G2:',v952^U))))<br />
<br />
{{Описание функции UNIFOR<br />
|name=9<br />
|title=Удалить двойные кавычки из заданной строки<br />
|sectionLevel======<br />
}}<br />
<br />
9<исх.строка><br />
<br />
'''Примеры:'''<br />
&unifor("9"v200^a)<br />
<br />
{{Описание функции UNIFOR<br />
|name=X<br />
|title=Удаление из заданной строки фрагментов, выделенных угловыми скобками <><br />
|sectionLevel======<br />
}}<br />
<br />
X<строка><br />
<br />
'''Примеры:'''<br />
&unifor("X"v200)<br />
<br />
{{Описание функции UNIFOR<br />
|name=+S<br />
|title=<nowiki>Выводит нужную часть текста (до знака "=", или после него) в заголовках, описанных по принципу <NNN=KKK></nowiki><br />
|versionText=не установленно, предположительно давно<br />
|sectionLevel======<br />
}}<br />
<br />
+SN[строка]<br />
где N может принимать значения 0 для вывода текста после знака "=", и 1 для вывода текста перед знаком "=".<br />
<br />
Выдержка из документации (см. {{Ссылка на открытый FTP|filename=RELEASE_2_2.doc|text=Файл описания релиза 2002.2}}<br />
и [http://nucleonics.fatal.ru/irbis/irbishelp.html?wci004010200000.htm документацию на http://nucleonics.fatal.ru]):<br />
* Для книг, описанных «Под заглавием», которые начинаются с числительного, обозначенного цифрами, начальный элемент сортировки и авторский знак должны формироваться по словесному обозначению числительного. В связи с этим Пользователь должен ввести дополнительную разметку типа <NNN=Текст>, где «Текст», стоящий после знака «=», — это словесное значение числительного NNN, используемое взамен его для формирования авторского знака и/или в качестве начального элемента сортировки. Например, заглавие 1000 и одна ночь, размеченное как <1000=тысяча> и одна ночь, для формирования авторского знака и сортировки будет представлено как «тысяча и одна ночь», а для печати как «1000 и одна ночь».<br />
* Для биографических и биобиблиографических изданий, описанных под заглавием, начинающимся с имени лица, которому оно посвящено, авторский знак и начальный элемент сортировки должны формироваться на фамилию. В связи с этим Пользователь также должен ввести дополнительную разметку типа <AAA=Текст>, где «Текст», стоя-щий после знака «=», — это фамилия, используемая (взамен части ААА) для формирования авторского знака и/или начального элемента сортировки. Например, заглавие Антон Павлович Чехов может быть размечено как <Антон Павлович Чехов=Чехов Антон Павлович> (в сортировку пойдет «Чехов Антон Павлович», на печать «Антон Павлович Чехов»). Заметим, что разметка типа <Антон=Чехов> Павлович Чехов даст правильный авторский знак (Чехов Павлович Чехов), но может дать ошибки в сортировке.<br />
<br />
'''Примеры:'''<br />
<br />
Пример входной строки:<br />
<br />
<1=Первое> апреля<br />
<br />
Примеры использования функции:<br />
<br />
&uf('+s0'v200^a)<br />
&uf('+s1'v200^a)<br />
<br />
Пример расформатирования:<br />
<br />
Первое апреля<br />
1 апреля<br />
<br />
{{Описание функции UNIFOR<br />
|name==<br />
|title=Сравнить заданное значение с маской<br />
|description=Возвращаемое значение: 1 – в случае положительного результата сравнения; 0 – в случае отрицательного<br />
|versionFilename=RELEASE_8_1.doc<br />
|versionText=2008.1<br />
|sectionLevel======<br />
}}<br />
<br />
=!<маска>!<значение><br />
<br />
<tt>!</tt> – уникальный разделитель (может быть любым символом). Маска может содержать принятые символы маскирования <tt>*</tt> и <tt>?</tt>. В общем случае маска может содержать несколько масок, отделенных друг от друга символом вертикальной черты <tt>|</tt>.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+\<br />
|title=Преобразование строки, удваивающее обратный слэш, или обратное<br />
|description=Преобразование строки, удваивающее обратный слэш, или обратное<br />
|sectionLevel======<br />
}}<br />
<br />
+\N<строка><br />
<br />
где:<br />
* N может принимать значения<br />
** 0 - удвоение знаков обратного слэш;<br />
** 1 - преобразование удвоенных знаков слэш в одинарные.<br />
<br />
'''Примеры:'''<br />
<br />
Результатом формата<br />
&uf('+\0c:\example.txt')<br />
будет строка<br />
c:\\example.txt<br />
<br />
Результатом формата<br />
&uf('+\1c:\\example.txt')<br />
будет строка<br />
c:\example.txt<br />
<br />
<br />
{{Описание функции UNIFOR<br />
|name=+R<br />
|title=Усекает строку справа до точки. Используется для отсечения одного уровня в рубриках ГРНТИ<br />
|description=Усечение кода рубрики в рубрикаторе ГРНТИ до вышестоящего<br />
|sectionLevel======<br />
}}<br />
<br />
+\R<строка><br />
<br />
'''Примеры:'''<br />
<br />
формат<br />
&unifor("+R"v3) <br />
исходная строка<br />
02.61.45<br />
результирующая строка<br />
02.61<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9R<br />
|title=Преобразование римского числа в арабское<br />
|versionFilename=RELEASE_11_1.doc<br />
|versionText=2011.1<br />
|sectionLevel======<br />
}}<br />
<br />
+9R<римское_число><br />
<br />
{{Описание функции UNIFOR<br />
|name=+9X<br />
|title=Преобразование арабского числа в римское<br />
|versionFilename=RELEASE_11_1.doc<br />
|versionText=2011.1<br />
|sectionLevel======<br />
}}<br />
<br />
+9X<арабское_число><br />
<br />
===Функции для работы с датой и временем===<br />
<br />
{{Описание функции UNIFOR<br />
|name=3<br />
|title=Выдача данных, связанных с датой и временем<br />
|description=Выдача данных, связанных с датой и временем<br />
}}<br />
<br />
Имеются следующие подфункции:<br />
* '''<tt>3</tt>''' – выдать текущую дату в виде ГГГГММДД. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>30</tt>''' – выдать текущий год в виде ГГГГ. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>31</tt>''' – выдать текущий месяц в виде ММ (с лидирующим нулем). ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>32</tt>''' – выдать текущий день в виде ДД (с лидирующим нулем). ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>33</tt>''' – выдать текущий год в виде ГГ. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>34</tt>''' – выдать текущий месяц в виде М (без лидирующего нуля). ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>35</tt>''' – выдать текущий день в виде Д (без лидирующего нуля). ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>36MM</tt>''' – выдать по заданному номеру месяца его название на русском языке в именительном падеже. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>37MM</tt>''' – выдать по заданному номеру месяца его название на русском языке в родительном падеже. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>38MM</tt>''' – выдать по заданному номеру месяца его название на английском языке. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>39</tt>''' – выдать текущее время. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>3А</tt>''' – выдать номер текущего дня от начала года. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>3BГГГГММДД/ддд</tt>''' – прибавить/вычесть из заданной даты в виде ГГГГММДД заданное количество дней (ддд – может быть отрицательным) и вернуть полученную дату в виде ГГГГММДД. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_7_2.doc|text=2007.2}}.</small>''<br />
* '''<tt>3СГГГГММДД/ГГГГММДД</tt>''' – вычесть из одной даты в виде ГГГГММДД другую дату в виде ГГГГММДД и вернуть разницу в виде количества дней. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_7_2.doc|text=2007.2}}.</small>''<br />
* '''<tt>3JГГГГММДД</tt>''' – переводит заданную юлианскую дату ГГГГММДД в грегорианскую. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_9_1.doc|text=2009.1}}.</small>''<br />
<br />
'''Примеры:'''<br />
<br />
&unifor('36',&unifor('34'))<br />
<br />
Вычесть из текущей даты сто дней:<br />
&uf('3B',&uf('3'),'/-100')<br />
<br />
Количество дней с 1 января 1900 года до сегодняшнего дня:<br />
&uf('3С',&uf('3'),'/19000101')<br />
<br />
===Функции для работы с глобальными переменными===<br />
<br />
Дополнительно о глобальных переменных см. [[Язык форматирования системы ИРБИС#Глобальные переменные|в подразделе ''Глобальные переменные'' статьи ''Язык форматирования системы ИРБИС'']].<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7<br />
|title=Очистить (опустошить) все глобальные переменные<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7<br />
<br />
'''Примеры:'''<br />
&unifor('+7')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7R<br />
|title=Чтение глобальной переменной<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7RNNN,nnn<br />
где:<br />
* NNN – номер переменной.<br />
* nnn – номер повторения. По умолчанию – номер текущего повторения в повторяющейся группе.<br />
Эквивалентная конструкция языка форматирования GNNN.<br />
<br />
'''Примеры:'''<br />
&unifor('+7R100')<br />
эквивалентная конструкция языка форматирования:<br />
G100<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7W<br />
|title=Запись глобальной переменной<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7WNNN#SSSS<br />
где:<br />
* NNN – номер переменной;<br />
* SSSS – список строк (результат расформатирования); каждая строка становится отдельным повторением.<br />
<br />
'''Примеры:'''<br />
&unifor('+7W100#',(v910/))<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7U<br />
|title=Добавление повторений глобальной переменной<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7UNNN#SSSS<br />
где:<br />
* NNN – номер переменной;<br />
* SSSS – список строк (результат расформатирования); каждая строка становится отдельным повторением.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7M<br />
|title=Логическое перемножение повторений двух переменных<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7MNNN#MMM<br />
Результат перемножения записывается в первую переменную.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7S<br />
|title=Логическое вычитание повторений двух переменных<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7SNNN#MMM<br />
Результат вычитания записывается в первую переменную.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7A<br />
|title=Логическое сложение повторений двух переменных<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7ANNN#MMM<br />
Результат сложения записывается в первую переменную.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7G<br />
|title=Исключение неоригинальных повторений переменной<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7GNNN<br />
Результат исключения записывается в ту же переменную.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7T<br />
|title=Сортировка повторений переменной<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7TNNN<br />
Результат сортировки записывается в ту же переменную.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+99<br />
|title=Групповая установка глобальных переменных<br />
|description=Групповая установка глобальных переменных. Применяется для ИРБИС-Навигатора. Исходная строка закодирована с помощью URL-кодировки. После раскодировки рассматривается как список строк (аналогично <tt>TStringList.Text</tt> в Delphi). Каждая строка этого списка имеет структуру: <tt>NNN#<значение_глобальной_переменной_NNN><tt><br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
}}<br />
<br />
+99<br />
<br />
===Функции для работы с базой данных===<br />
<br />
{{Описание функции UNIFOR<br />
|name=0<br />
|title=Выдать содержимое документа полностью в формате RTF<br />
|description=Выдать содержимое документа полностью (формат ALLl)<br />
}}<br />
0<br />
<br />
'''Примеры:'''<br />
&unifor('0')<br />
<br />
'''Результат расформатирования:'''<br />
\b #910/1:_\b0 ^YДА^PНЮАУ - каф. кримінального права\par \b #920/1:_\b0 ATHRA\par \b #210/1:_\b0 ^AТацій^BВ. Я.^GВасиль Якович^8ukr\par \b #710/1:_\b0 ^AТаций^BВ. Я.^GВасилий Яковлевич^8rus\par \b #907/1:_\b0 ^A20110301^B111\par \b #907/2:_\b0 ^A20110419^BZhukovskaya\par \b #710/2:_\b0 ^ATatsiy^BV.^8eng\par \b #907/3:_\b0 ^A20110421^BZhukovskaya\par \b #907/4:_\b0 ^A20111108^B111\par <br />
<br />
{{Описание функции UNIFOR<br />
|name=+0<br />
|title=Выдать содержимое документа полностью во внутреннем представлении<br />
|description=Выдать содержимое документа полностью (формат ALLl)<br />
}}<br />
+0<br />
<br />
'''Результат расформатирования:'''<br />
0<br />
2#0<br />
0#1<br />
910#^YДА^PНЮАУ - каф. кримінального права<br />
920#ATHRA<br />
210#^AТацій^BВ. Я.^GВасиль Якович^8ukr<br />
710#^AТаций^BВ. Я.^GВасилий Яковлевич^8rus<br />
907#^A20110301^B111<br />
907#^A20110419^BZhukovskaya<br />
710#^ATatsiy^BV.^8eng<br />
907#^A20110421^BZhukovskaya<br />
907#^A20111108^B111<br />
<br />
{{Описание функции UNIFOR<br />
|name=++0<br />
|title=Выдать содержимое документа полностью – только содержимое полей<br />
|description=Выдать содержимое документа полностью (формат ALLl)<br />
}}<br />
++0<br />
<br />
{{Описание функции UNIFOR<br />
|name=+@<br />
|title=Выдать содержимое документа полностью в формате JSON<br />
|versionFilename=RELEASE_2014_1.doc<br />
|versionText=2014.1<br />
|sectionLevel=====<br />
}}<br />
+@<br />
<br />
{{Описание функции UNIFOR<br />
|name=+N<br />
|title=Выдать количество повторений поля<br />
|description=Выдать количество повторений поля, метка которого указана после идентификатора функции<br />
}}<br />
+N<br />
<br />
'''Примеры:'''<br />
&unifor('+N910')<br />
<br />
{{Описание функции UNIFOR<br />
|name=A<br />
|title=Выдать заданное повторение поля<br />
}}<br />
<br />
AV<tag>^<delim>*<offset>.<length>#<occur><br />
где:<br />
* <tt><tag></tt> – метка поля;<br />
* <tt><delim></tt> – разделитель подполя;<br />
* <tt><offset></tt> – смещение;<br />
* <tt><length></tt> – длина;<br />
* <tt><occur></tt> – номер повторения.<br />
<br />
'''Примеры:'''<br />
&unifor('Av200#2')<br />
&unifor('Av910^a#5')<br />
&unifor('Av10^b*2.10#2')<br />
<br />
{{Описание функции UNIFOR<br />
|name=P<br />
|title=Выдать заданное оригинальное повторение поля<br />
|formatSeeAlsoName=A<br />
|formatSeeAlsoTitle=Выдать заданное повторение поля<br />
|exampleSeeAlsoName=A<br />
|exampleSeeAlsoTitle=Выдать заданное повторение поля<br />
}}<br />
<br />
{{Описание функции UNIFOR<br />
|name=+E<br />
|title=Возвращает порядковый номер заданного поля в записи<br />
|description=Возвращает порядковый номер заданного поля в записи. При отсутствии в записи заданного поля возвращается пустота<br />
|versionFilename=RELEASE_9_1.doc<br />
|versionText=2009.1<br />
}}<br />
<br />
+Etag#occ<br />
где:<br />
* tag – метка поля;<br />
* occ – номер повторения поля (по умолчанию – 1). Может принимать значение <tt>*</tt> – это означает номер текущего повторения в повторяющейся группе.<br />
<br />
{{Описание функции UNIFOR<br />
|name=K<br />
|title=Раскодировка через справочник<br />
|description=Возвращает значение из справочника, соответствующее переданному коду (иными словами, осуществляется раскодировка)<br />
}}<br />
<br />
K<имя_справочника><разделитель><исх_значение><br />
<br />
<разделитель> между <имя_справочника> и <исх_значение> может быть двух видов:<br />
\ - раскодировка с учетом регистра,<br />
! - раскодировка без учета регистра.<br />
<br />
'''Примеры:'''<br />
&unifor("Kjz.mnu\"v101)<br />
&uf('kFIO_SF.MNU!'&uf('av907^b#1'))<br />
<br />
{{Описание функции UNIFOR<br />
|name=I<br />
|title=Вернуть параметр из INI-файла<br />
}}<br />
<br />
I<SECTION>,<PAR_NAME>,<DE-FAULT_VALUE><br />
<br />
'''Примеры:'''<br />
&unifor('IPRIVATE,NAME,NONAME')<br />
<br />
{{Описание функции UNIFOR<br />
|name=1<br />
|title=Вернуть заданный подэлемент<br />
}}<br />
<br />
1NCXY?V<tag>^<delim>*<offset>.<length>#<occur><br />
где:<br />
* N – номер повторения подэлемента; если указана * – номер подэлемента совпадает со счетчиком повторяющейся группы.<br />
* ХY – разделители между подэлементами.<br />
* С – принимает значения: R – разделители справа от каждого подэлемента, кроме последнего; L – разделители слева от каждого подэлемента; D – каждый подэлемент заключен слева разделителем Х и справа – Y.<br />
* ? – символ-разделитель.<br />
* Остальные параметры аналогичны параметрам для функции {{Описание функции UNIFOR (ссылка)|name=A|title=Выдать заданное повторение поля}}.<br />
<br />
'''Примеры:'''<br />
(/&unifor('1*R; ?v910^h#1'))<br />
<br />
{{Описание функции UNIFOR<br />
|name=J<br />
|title=Вернуть кол-во ссылок для заданного термина<br />
}}<br />
<br />
J<dbn>,<термин><br />
<dbn> – имя БД; по умолчанию используется текущая.<br />
<br />
'''Примеры:'''<br />
&unifor('JBOOK,',"A="v200^a)<br />
<br />
{{Описание функции UNIFOR<br />
|name=D<br />
|title=Форматирование документа из другой БД<br />
|description=Форматирование документа из другой БД (REF на другую БД – отношение «от одного к одному»)<br />
}}<br />
<br />
D<dbn>,<@mfn|/termin/>,<@имя_формата|формат|*><br />
Передаются три параметра, разделенные запятой:<br />
* Первый – имя БД;<br />
* Второй – или непосредственно MFN с предшествующим символом @ или термин, ссылающийся на документ (термин – заключается в ограничительные символы);<br />
* Третий – или имя формата с предшествующим символом @ или непосредственно формат.<br />
Если задается *, данные выводятся по прямой ссылке (метка поля, номер повторения).<br />
<br />
'''Примеры:'''<br />
&unifor('DBOOK,/K=AAA/,v200')<br />
<br />
{{Описание функции UNIFOR<br />
|name=7<br />
|title=Расформатирование группы связанных документов из другой БД<br />
|description=Расформатирование группы связанных документов из другой БД (отношение «от одного к многим»)<br />
Функция обеспечивает возможность связать запись с рядом других записей по какому бы то ни было общему признаку. К примеру, можно отобрать все записи с определенным заглавие, индексом УДК/ББК, ключевым словом. <br />
|versionFilename=RELEASE_4_1.doc<br />
|versionText=2004.1<br />
}}<br />
<br />
7<имя_БД>,</termin/>,<@имя_формата|формат|*><br />
где:<br />
* имя_БД – имя базы данных, из которой будут браться связанные документы; по умолчанию используется текущая БД.<br />
* /termin/ – ключевой термин, на основе которого отбираются связанные документы; термин заключается в уникальные ограничители (например. /), в качестве которых используется символ, не входящий (гарантированно) в термин.<br />
* @имя_формата|формат|* – имя формата или формат в явном виде, в соответствии с которым будут расформатироваться связанные документы. Если задается имя формата, то он берется из директории БД, заданной параметром <имя_БД>. Если задается *, данные выводятся по прямой ссылке (метка поля, номер повторения).<br />
<br />
'''Примеры:'''<br />
&unifor('7TEST,',"/T="v200^a"/",',v903"\par "')<br />
<br />
&uf(|7EK,!FAK=23.01!,&uf('av907^A#1'),&uf('6brief')/|d90),<br />
<br />
{{Описание функции UNIFOR<br />
|name=!<br />
|title=Команда постредактуры: очистить результат расформатирования от двойных разделителей<br />
|description=Команда постредактуры: очистить результат расформатирования от двойных разделителей (двойных точек или двойных конструкций <. – >). Имеет смысл использовать один раз в любом месте формата<br />
|versionFilename=RELEASE_4_1.doc<br />
|versionText=2004.1<br />
}}<br />
<br />
!<br />
<br />
'''Примеры:'''<br />
&unifor('!')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+F<br />
|title=Команда постредактуры: очистить результат расформатирования от RTF-конструкций<br />
|description=Команда постредактуры: очистить результат расформатирования от RTF-конструкций. Имеет смысл использовать один раз в любом месте формата<br />
|versionFilename=RELEASE_4_1.doc<br />
|versionText=2004.1<br />
}}<br />
<br />
+F<br />
<br />
'''Примеры:'''<br />
&unifor('+F')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1O<br />
|title=Групповая мультираскодировка списка<br />
}}<br />
<br />
+1O<MNU>|SSSS<br />
где:<br />
* <MNU> имя справочника (с расширением).<br />
* SSSS – список строк (результат расформатирования.<br />
<br />
'''Примеры:'''<br />
&unifor('+1Omhr.mnu|',(v910^m/))<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1I<br />
|title=Исключение неоригинальных значений из списка<br />
}}<br />
<br />
+1ISSSS<br />
где параметры аналогичны описанным для функции {{Описание функции UNIFOR (ссылка)|name=+1O|title=Групповая мультираскодировка списка}}<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1V<br />
|title=Сортировка списка<br />
}}<br />
<br />
+1VSSSS<br />
где параметры аналогичны описанным для функции {{Описание функции UNIFOR (ссылка)|name=+1O|title=Групповая мультираскодировка списка}}<br />
<br />
{{Описание функции UNIFOR<br />
|name=+I<br />
|title=Формирования ссылки (гиперссылки)<br />
|versionFilename=RELEASE_4_1.doc<br />
|versionText=2004.1<br />
}}<br />
<br />
+I/содержание_ссылки/название_ссылки<br />
'''/содержание_ссылки/''' – внутренние данные ссылки, ограниченные уникальным разделителем. Имеют структуру<br />
NNN,HHH,<параметры><br />
где:<br />
* NNN – тип ссылки, возможные значения: <br />
** 0 – ссылки на внешние объекты;<br />
** 1 – ссылка на связанный документ (возможно в другой БД) – "от одного к одному";<br />
** 2 – ссылка на связанные документы (возможно в другой БД) – "от одного к многим";<br />
* HHH – экранная подсказка, может иметь вид: @iii – где <tt>iii</tt> – номер текста в файле IRBISMSG.TXT, \text\ – собственно текст подсказки в уникальных ограничителях.<br />
'''<параметры>''':<br />
* Для ссылок типа 0 представляет собой в общем виде URL внешнего объекта (в том числе – полный путь на файл).<br />
* Для ссылок типа 1 и 2 <параметры> имеют следующую структуру:<br />
имя_БД,имя_формата,termin<br />
где:<br />
* имя_БД – имя базы данных, из которой будут браться связанные документы; по умолчанию используется текущая БД.<br />
* имя_формата – имя формата, в соответствии с которым будут расформатироваться связанные документы. (по умолчанию – используется оптимизированный формат).<br />
* termin – ключевой термин, на основе которого отбираются (ищутся) связанные документы.<br />
<br />
<br />
'''Примеры:'''<br />
&unifor('+I?0,,'v951^i'?',v951^t,|INTERNET|n951^t)<br />
&unifor(|+I?1,,,,I=|v421^w|?|,v421^a)<br />
<br />
{{Описание функции UNIFOR<br />
|name=+6<br />
|title=Выдать статус записи<br />
|description=Выдать статус записи. Если запись логически удаленная, возвращается 0, в противном случае – 1<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+6<br />
<br />
'''Примеры:'''<br />
… if &unifor('+6')='0' then 'запись логически удаленная' fi …<br />
<br />
{{Описание функции UNIFOR<br />
|name=+D<br />
|title=Выдать имя базы данных<br />
|description=Возвращает имя текущей базы данных<br />
}}<br />
<br />
+D<br />
<br />
'''Примеры:'''<br />
… &unifor('+D') …<br />
<br />
{{Описание функции UNIFOR<br />
|name=2<br />
|title=Вернуть последний номер MFN в базе +1 <br />
|description=Возвращает последний номер MFN в текущей базе данных, увеличенный на единицу (MAX_MFN) + 1). В общем случае параметр имеет вид 2N, где N - выводимое количество символов, обрезанное до необходимой длинны справа.<br />
}}<br />
<br />
'''Пример:'''<br />
&unifor('2'), &unifor('27')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9V<br />
|title=Вернуть номер поколения ИРБИС<br />
|description=Возвращает поколение системы, в которой осуществляется расформатирование. Может быть полезен при разработке единых форматов, которые по-разному выполняются в ИРБИС 32 и ИРБИС 64<br />
|versionFilename=RELEASE_11_1.doc<br />
|versionText=2011.1<br />
}}<br />
<br />
+9V<br />
который возвращает:<br />
* 32 – если форматирование выполняется в ИРБИС 32;<br />
* 64 – если в ИРБИС 64 (и ИРБИС 128).<br />
<br />
{{Описание функции UNIFOR<br />
|name=4N<br />
|title=Форматировать предыдущую копию текущей записи<br />
|versionFilename=RELEASE_11_1.doc<br />
|versionText=2011.1<br />
}}<br />
<br />
4N,Format<br />
где: <br />
* <tt>N</tt> – номер копии (в обратном порядке, т.е. если N=1 – это один шаг назад, N=2 – два шага назад и т.д.). Может принимать значение * – это указывает на последнюю копию. Если N – пустое значение, то в случае повторяющейся группы в качестве значения N берется НОМЕР ТЕКУЩЕГО ПОВТОРЕНИЯ, в противном случае берется первая копия;<br />
* <tt>Format</tt> – формат; может задаваться непосредственно или в виде @имя_формата.<br />
<br />
Если не задается ни <tt>N</tt> ни <tt>Format</tt>, т.е. &unifor('4'), то возвращается количество предыдущих копий. <br />
Если запись не имеет предыдущих копий, то &unifor('4') возвращает 0, а все остальные конструкции &unifor('4...') возвращают пустоту.<br />
<br />
'''Примеры:'''<br />
&unifor('41,@brief') <br />
(...&unifor('4,v200^a')...) <br />
&unifor('4*,(v910/)')<br />
<br />
Примечание: в связи с этим см. также новую команду глобальной корректировки – ВОССТАНОВИТЬ ПРЕДЫДУЩУЮ КОПИЮ.<br />
<br />
===Функции для работы с повторяющимися группами===<br />
<br />
Дополнительно о повторяющихся группах см. [[Язык форматирования системы ИРБИС#Повторяющиеся группы|в подразделе ''Повторяющиеся группы'' статьи ''Язык форматирования системы ИРБИС'']].<br />
<br />
{{Описание функции UNIFOR<br />
|name=+4<br />
|title=Выдача метки, порядкового номера и значения поля в соответствии с индексом (номером повторения) повторяющейся группы<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+4XY <br />
где:<br />
* Х принимает три значения: T – выдать метку; F – выдать значение поле; N – выдать порядковый номер поля в записи (отличается от индекса повторения, если Y принимает значение 1); <br />
* Y принимает значения: 0 – поля выдаются в порядке расположения в записи; 1 – поля выдаются в порядке возрастания меток (по умолчанию 0).<br />
<br />
'''Примеры:'''<br />
(…&unifor('+4T1'),'_' &unifor('+4N1'),': ', &unifor('+4F1'),'<br>'…)<br />
<br />
{{Описание функции UNIFOR<br />
|name=+5<br />
|title=Выдача элемента списка/справочника в соответствии с индексом (номером повторения) повторяющейся группы<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+5Х<имя_справочника/списка> <br />
где Х принимает значения: Т – выдать значение; F – выдать пояснение (имеет смысл, если задается справочник, т.е. файл с расширением MNU).<br />
<br />
'''Примеры:'''<br />
…(…&unifor('+5Tfield.mnu'),' – ',&unifor('+5Ffield.mnu'),'<br>'…)<br />
<br />
{{Описание функции UNIFOR<br />
|name=+90<br />
|title=Вернуть номер текущего повторения в повторяющейся группе<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
}}<br />
<br />
+90<br />
<br />
===Функции для работы с базой данных электронного каталога===<br />
<br />
{{Описание функции UNIFOR<br />
|name=B<br />
|title=Выдать библиографическую свертку документа<br />
}}<br />
<br />
B<br />
<br />
'''Примеры:'''<br />
&unifor('B')<br />
<br />
{{Описание функции UNIFOR<br />
|name=C<br />
|title=Контроль ISSN/ISBN<br />
|description=Контроль ISSN/ISBN. Возвращаемое значение: 0 – при положительном результате, 1 – при отрицательном<br />
}}<br />
<br />
С<ISSN/ISBN><br />
<br />
'''Примеры:'''<br />
&unifor("C"v10^a)<br />
<br />
{{Описание функции UNIFOR<br />
|name=L<br />
|title=Вернуть окончание термина<br />
}}<br />
<br />
L<начало_термина><br />
<br />
'''Примеры:'''<br />
&unifor("L"v101)<br />
<br />
{{Описание функции UNIFOR<br />
|name=U<br />
|title=Кумуляция номеров журналов<br />
}}<br />
<br />
U<strbase>,<stradd><br />
где:<br />
* <strbase> – исходная кумулированная строка.<br />
* <stradd> – кумулируемые номера.<br />
<br />
'''Примеры:'''<br />
&unifor("U"v909^h",12")<br />
<br />
{{Описание функции UNIFOR<br />
|name=V<br />
|title=Декумуляция номеров журналов<br />
}}<br />
<br />
V<strbase><br />
где:<br />
<strbase> – исходная строка для декумуляции.<br />
<br />
'''Примеры:'''<br />
&unifor("V"v909^h")<br />
<br />
{{Описание функции UNIFOR<br />
|name=W<br />
|title=Контроль кумуляции<br />
}}<br />
<br />
W<strbadd>,<strbase><br />
где:<br />
* <strbase> – исходная кумулированная строка.<br />
* <stradd> – кумулируемый номер.<br />
'''Возвращаемые значения:'''<br />
* 0 – если <stradd> не присутствует в <strbase>.<br />
* 1 – если <stradd> присутствует в <strbase>.<br />
<br />
'''Примеры:'''<br />
&unifor("W12,"v909^h)<br />
<br />
{{Описание функции UNIFOR<br />
|name=O<br />
|title=Вывод сведений о всех экземплярах по всем местам хранения<br />
}}<br />
<br />
'''Пример:'''<br />
&unifor('O')<br />
<br />
<br />
{{Описание функции UNIFOR<br />
|name=Y<br />
|title=Возвращает данные о всех свободных (не выданных) экземплярах по всем местах хранения<br />
}}<br />
<br />
'''Пример:'''<br />
&unifor('Y')<br />
<br />
===Функции для работы с файлами===<br />
<br />
{{Описание функции UNIFOR<br />
|name=+91<br />
|title=Вернуть имя файла из заданного полного пути/имени<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
}}<br />
<br />
+91<br />
<br />
{{Описание функции UNIFOR<br />
|name=+92<br />
|title=Вернуть путь из заданного полного пути/имени<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
}}<br />
<br />
+92<br />
<br />
{{Описание функции UNIFOR<br />
|name=+93<br />
|title=Вернуть расширение из заданного полного пути/имени<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
}}<br />
<br />
+93<br />
<br />
{{Описание функции UNIFOR<br />
|name=+94<br />
|title=Вернуть имя диска из заданного полного пути/имени<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
}}<br />
<br />
+94<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9L<br />
|title=Проверить наличие файла/корректность URL<br />
|versionFilename=RELEASE_13_1.doc<br />
|versionText=2013.1<br />
}}<br />
<br />
+9L<path>,<dbname>,<filename><br />
где:<br />
* <tt><path></tt> – определяет путь к файлу и принимает значения: <tt>0</tt> – папка, в которой установлена серверная часть ИРБИС (<tt><IRBIS_SERVER_ROOT></tt>); <tt>1</tt> – общая директория баз данных (по умолчанию <tt><IRBIS_SERVER_ROOT>\DATAI</tt>); <tt>2,3,10</tt> – папка БД <dbname>; <tt>11</tt> – абсолютный путь/URL.<br />
* <tt><dbname></tt> – имя БД (имеет смысл только при <tt>path=2,3,10</tt>).<br />
* <tt><filename></tt> – путь и имя файла или URL.<br />
<br />
Функция возвращает:<br />
0 – если файл отсутствует/некорректный URL;<br />
1 – если файл присутствует/корректный URL.<br />
<br />
'''Примеры:'''<br />
&uf('+9L1,,\deposit\rksu.fst') <br />
(....&uf('+9L10,',&uf('+D'),',',v951^A)....)<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9C<br />
|title=Вставить данные из заданного текстового файла<br />
}}<br />
<br />
+9С<path>,<dbname>,<filename><br />
где:<br />
* <tt><path></tt> – определяет путь к файлу и принимает значения: <tt>0</tt> – основная директория системы (для ИРБИС32 – та, где находятся исполняемые модули; для ИРБИС64 – та, где находятся исполняемые модули сервера); <tt>1</tt> – общая директория баз данных (по умолчанию \DATAI); <tt>10</tt> – директория конкретной БД;<br />
* <tt><dbname></tt> – имя БД (имеет смысл только при <tt>path=10</tt>). По умолчанию – предполагается текущая БД;<br />
* <tt><filename></tt> – имя файла;<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9A<br />
|title=Вернуть размер файла в байтах. <br />
}}<br />
<br />
+9A<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9D<br />
|title=Сохранить заданный внутренний двоичный объект в заданном файле<br />
|versionFilename=RELEASE_6_2.doc<br />
|versionText=2006.2<br />
}}<br />
<br />
+9DNN#<полный путь><br />
где <tt>NN</tt> – номер внутреннего двоичного объекта.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9J<br />
|title=Представить заданный двоичный файл в кодированном виде<br />
|description=Представить заданный двоичный файл в виде: <tt>^A<тип_файла>^B<данные файла перекодированные на основе URLEncode></tt><br />
|versionFilename=RELEASE_10_1.doc<br />
|versionText=2010.1<br />
}}<br />
<br />
+9J<полный путь и имя файла><br />
<br />
Имя файла может задаваться в виде маски, в этом случае использоваться будет первый найденный соответствующей маске файл.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9K<br />
|title=Удалить заданный файл<br />
|description=Удалить заданный файл. Если имя файла задано в виде маски, то удаляться будут все соответствующие маске файлы<br />
|versionFilename=RELEASE_10_1.doc<br />
|versionText=2010.1<br />
}}<br />
<br />
+9K<полный путь и имя файла><br />
<br />
===Функции, используемые только в глобальной корректировке===<br />
<br />
{{Описание функции UNIFOR<br />
|name=Z<br />
|title=Размножение экземпляров<br />
|description=Размножение экземпляров. Функция ничего не возвращает. Можно применять только в глобальной корректировке<br />
}}<br />
<br />
Z<br />
<br />
'''Примеры:'''<br />
&unifor('Z')<br />
<br />
{{Описание функции UNIFOR<br />
|name=M<br />
|title=Отсортировать повторения заданного поля<br />
|description=Отсортировать повторения заданного поля (имеется в виду строковая сортировка) – функция ничего не возвращает. Можно применять только в глобальной корректировке<br />
}}<br />
<br />
MX<tag>^<delims><br />
где:<br />
* X – вид сортировки: I – по возрастанию; D – по убыванию.<br />
* <tag> – метка поля.<br />
* <delims> – разделители подполей, определяющих ключ сортировки.<br />
<br />
'''Примеры:'''<br />
&unifor('MI910^BD')<br />
<br />
===Выполнить внешнюю программу===<br />
<br />
{{Описание функции UNIFOR<br />
|name=6<br />
|title=Выполнить формат<br />
}}<br />
<br />
6<имя файла формата><br />
где <tt><имя файла формата></tt> – имя [[Язык форматирования системы ИРБИС#Понятие формата|файла формата]], указывается без расширения. Файл формата будет найден по заданному имени, обязательному расширению <tt>.pft</tt> и местоположению: в [[Файлы ИРБИС#Файлы баз данных ИРБИС|папке базы данных]], а если там нет, то в папке [[Файлы ИРБИС#Основные обозначения|<tt><IRBIS_SERVER_ROOT>\Deposit</tt>]].<br />
<br />
Подробнее о выполнении файла формата см. в [[Язык форматирования системы ИРБИС#Выполнение файла формата|Подразделе ''Язык форматирования системы ИРБИС'' статьи ''Выполнение файла формата'']].<br />
<br />
{{Описание функции UNIFOR<br />
|name=+2<br />
|title=Выполнить внешнее приложение<br />
|description=Выполняет внешнее приложение. Всё, что после +2 – параметры командной строки. <br />
}}<br />
<br />
'''Примеры:'''<br />
&unifor('+2cmd')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+8<br />
|title=Вызвать функцию из внешней DLL<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
}}<br />
<br />
+8<имя_DLL>,<имя_функции>,<передаваемые_данные><br />
<br />
Внешние функции должны ОБЯЗАТЕЛЬНО иметь следующую структуру:<br />
<br />
* в случае Pascal<br />
test_function1(buf1,buf2: Pchar; bufsize: integer): integer; <br />
<br />
* в случае C<br />
int test_function1(char *buf1, char *buf2, int bufsize) <br />
где: buf1 – передаваемые данные (входные), buf2 – возвращаемые данные (выходные), bufsize – размер выходного буфера (buf2). В ИРБИС64 данные передаются и возвращаются в UTF8. Возврат функции: 0 – нормальное завершение; любое другое значение – ненормальное. В случае нестандартного вызова функций из DLL (по Pascal-правилам) надо указывать символ * перед именем DLL:<br />
&unifor('+8*<имя_DLL>,<имя_функции>,.... <br />
<br />
Следует помнить, что имя функции в вызове надо указывать строго в соответствии с тем, как она экспортирована из DLL, большие и маленькие буквы различаются.<br />
<br />
'''Примеры:'''<br />
<br />
В вызываемую функцию передается заглавие:<br />
&unifor('+8test_dll,test_function1,',v200^a)<br />
<br />
Передаются повторения 910 поля:<br />
(&unifor('+8test_dll,test_function2,',v910))<br />
<br />
Передается вся текущая запись:<br />
(&unifor('+8test_dll,test_function2,',&unifor('+0')))<br />
<br />
===Функции, не вошедшие в другие категории===<br />
<br />
{{Описание функции UNIFOR<br />
|name=S<br />
|title=Универсальный счетчик<br />
}}<br />
<br />
SN<br />
где:<br />
* N=0 – обнулить счетчик.<br />
* N=1..9 – увеличить значение счетчика на со-отв. значение.<br />
* N=A – вернуть значение счетчика – арабскими цифрами.<br />
* N=X – вернуть значение счетчика – римскими цифрами.<br />
<br />
'''Примеры:'''<br />
&unifor('S0')<br />
&unifor('S1')<br />
&unifor('SA')<br />
<br />
{{Описание функции UNIFOR<br />
|name=R<br />
|title=Генерация случайного числа<br />
}}<br />
<br />
RNN<br />
где NN – кол-во знаков в случайном числе (по умолчанию – 6).<br />
<br />
'''Примеры:'''<br />
&unifor('R')<br />
&unifor('R4')<br />
<br />
{{Описание функции UNIFOR<br />
|name=[<br />
|title=Чистка данных от команд контекстного выделения<br />
|versionFilename=RELEASE_8_1.doc<br />
|versionText=2008.1<br />
}}<br />
<br />
[<br />
<br />
'''Примеры:'''<br />
&unifor('[')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+3G<br />
|title=<nowiki>Вывод количества документов, найденных во внешней базе по команде G.(команда возвращает строку RESULT=[кол-во найденных по запросу документов])</nowiki><br />
}}<br />
<br />
+3G[URL к внешнему сайту WEB ИРБИС, с запросом G]<br />
<br />
{{Описание функции UNIFOR<br />
|name=+3S<br />
|title=<nowiki>Расформатирует найденные по запросу записи. Если [количество выводимых записей]=0, то возвращает только количество найденных по запросу документов</nowiki><br />
}}<br />
<br />
+3S[имя базы],[количество выводимых записей],[ограничитель][формат][ограничитель],[формат или @имя файла с форматом]<br />
<br />
{{Описание функции UNIFOR<br />
|name=+3C<br />
|title=Функция введена для оптимизации скорости проверки наличия текста в полнотекстовой базе данных<br />
|description=Функция предназначена для обрезания перед помещением в словарь базы данных значения, формируемого путём соединения префикса <tt>TXT=</tt> и содержимого подполя ^B ссылки на текстовый файл полнотекстовой базы. Подробнее см. [[Схема полнотекстовой базы данных#Префикс TXT| в подразделе ''Префикс TXT'' статьи ''Схема полнотекстовой базы данных'']]<br />
|versionFilename=RELEASE_13_1.doc<br />
|versionText=2013.1<br />
}}<br />
<br />
==Устаревшие, не рекомендованные к использованию UNIFOR'ы==<br />
<br />
===Устаревшие функции для работы с глобальными переменными===<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1<br />
|title=Очистить (опустошить) все глобальные переменные<br />
}}<br />
<br />
+1<br />
<br />
'''Примеры:'''<br />
&unifor('+1')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1R<br />
|title=Чтение глобальных переменных<br />
|versionFilename=RELEASE_4_1.doc<br />
|versionText=2004.1<br />
}}<br />
<br />
+1RNNN,nnn<br />
где:<br />
* NNN – номер первой или единственной переменной, возможна конструкция *+-<число>. * – номер текущего повторения в повторяющейся группе.<br />
* nnn – кол-во переменных (по умолчанию 1).<br />
<br />
<br />
'''Примеры:'''<br />
&unifor('+1R100,2')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1W<br />
|title=Запись в глобальные переменные<br />
|versionFilename=RELEASE_4_1.doc<br />
|versionText=2004.1<br />
}}<br />
<br />
+1WNNN,MMM#SSSS<br />
где:<br />
* NNN – номер первой или единственной переменной, возможна конструкция *+-<число>. * – номер текущего повторения в повторяющейся группе.<br />
* MMM – номер переменной для сохранения кол-ва записанных переменных (по умолчанию не используется).<br />
* SSSS – список строк (результат расформатирования). Если задан MMM – каждая строка пишется в отдельную переменную, в противном случае все пишется в одну переменную.<br />
<br />
'''Примеры:'''<br />
&unifor('+1W100,0#',(v910/))<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1K<br />
|title=Групповая мультираскодировка переменных<br />
}}<br />
<br />
+1K<MNU>|NNN,nnn<br />
где:<br />
* NNN – номер первой или единственной переменной.<br />
* nnn – кол-во переменных (по умолчанию 1).<br />
<br />
'''Примеры:'''<br />
&unifor('+1Kmhr.mnu|100,10')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1M<br />
|title=Перемножение двух списков (групп переменных)<br />
}}<br />
<br />
+1MNNN,nnn#MMM,mmm<br />
где параметры аналогичны описанным для функции {{Описание функции UNIFOR (ссылка)|name=+1K|title=Групповая мультираскодировка переменных}}.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1S<br />
|title=Вычитание списков (групп переменных)<br />
}}<br />
<br />
+1SNNN,nnn#MMM,mmm<br />
где параметры аналогичны описанным для функции {{Описание функции UNIFOR (ссылка)|name=+1K|title=Групповая мультираскодировка переменных}}<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1A<br />
|title=Сложение списков (групп переменных)<br />
}}<br />
<br />
+1ANNN,nnn#MMM,mmm<br />
где параметры аналогичны описанным для функции {{Описание функции UNIFOR (ссылка)|name=+1K|title=Групповая мультираскодировка переменных}}<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1G<br />
|title=Исключение неоригинальных значений из группы переменных<br />
}}<br />
<br />
+1GNNN,nnn<br />
где параметры аналогичны описанным для функции {{Описание функции UNIFOR (ссылка)|name=+1K|title=Групповая мультираскодировка переменных}}<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1T<br />
|title=Сортировка группы переменных<br />
}}<br />
<br />
+1TNNN,nnn<br />
где параметры аналогичны описанным для функции {{Описание функции UNIFOR (ссылка)|name=+1K|title=Групповая мультираскодировка переменных}}<br />
<br />
==Неописанные UNIFOR'ы==<br />
<br />
<br />
<br />
{{Описание функции UNIFOR<br />
|name=Неописанный UNIFOR &unifor('11R^c?v210*2')<br />
|title=<br />
|versionFilename=<br />
|versionText=<br />
|sectionLevel======<br />
}}<br />
<br />
<br />
<br />
{{Описание функции UNIFOR<br />
|name=Неописанный UNIFOR &umarci('1200#h#2')<br />
|title=<br />
|versionFilename=<br />
|versionText=<br />
|sectionLevel======<br />
}}<br />
<br />
<br />
<br />
{{Описание функции UNIFOR<br />
|name=Неописанный UNIFOR &umarci('2210#^c')<br />
|title=<br />
|versionFilename=<br />
|versionText=<br />
|sectionLevel======<br />
}}<br />
<br />
<br />
{{Описание функции UNIFOR<br />
|name=Неописанный UNIFOR &umarci('3210#2#^c')<br />
|title=<br />
|versionFilename=<br />
|versionText=<br />
|sectionLevel======<br />
}}<br />
<br />
==Ссылки==<br />
<br />
См. также:<br />
* [[Язык форматирования системы ИРБИС]]<br />
* [[Операторы языка форматирования ИРБИС]]<br />
* [[Функции языка форматирования ИРБИС]]<br />
<br />
Источники информации:<br />
* [[Общее описание системы ИРБИС64]]<br />
* ''Техническая документация WEB ИРБИС64 и WEB ИРБИС32''. [http://irbis.gpntb.ru/read.php?21,62125 Актуальная версия документа доступна на форуме.]<br />
* [[Документация, поставляемая с системой ИРБИС#История версий ИРБИС|История версий ИРБИС (файл <tt>RELEASE_OVERALL.doc</tt>)]] версии 2008.1<br />
* {{Ссылка на открытый FTP|filename=RELEASE_13_1.doc|text=Файл описания релиза 2009.1}}<br />
* {{Ссылка на открытый FTP|filename=RELEASE_13_1.doc|text=Файл описания релиза 2010.1}}<br />
* {{Ссылка на открытый FTP|filename=RELEASE_13_1.doc|text=Файл описания релиза 2011.1}}<br />
* {{Ссылка на открытый FTP|filename=RELEASE_13_1.doc|text=Файл описания релиза 2013.1}}<br />
<br />
[[Категория:Язык форматирования системы ИРБИС]]<br />
[[Категория:Анонсированные статьи]]</div>Sokvhttp://wiki.elnit.org/index.php?title=%D0%AF%D0%B7%D1%8B%D0%BA_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%98%D0%A0%D0%91%D0%98%D0%A1&diff=2460Язык форматирования системы ИРБИС2016-05-20T16:57:15Z<p>Sokv: </p>
<hr />
<div>'''''Язык форматирования''''' ИРБИС – язык манипулирования данными в контексте [[Базы данных ИРБИС#Модель баз данных ИРБИС|''записи'']] базы данных, представляет собой средство, с помощью которого осуществляется разнообразное представление данных для многих операций и функций системы, в частности, для показа и печати документов, для создания словарей, для импорта/экспорта данных, для формально-логического контроля и т.д.<br />
<br />
==Общие сведения==<br />
<br />
===История появления===<br />
<br />
Язык форматирования системы ИРБИС базируется на языке форматирования системы CDS/ISIS (ЮНЕСКО).<br />
<br />
===Понятие формата===<br />
<br />
'''''Форматом''''' называют совокупность инструкций (команд, функций и т.п.), записанных на языке форматирования.<br />
<br />
Формат может быть выполнен в контексте ''записи'' базы данных, и результатом выполнения является текстовое (строковое) значение, которое затем может использоваться системой ИРБИС для выполнения определенных функций.<br />
<br />
===Файл формата===<br />
<br />
'''''Файл формата''''' – основная структурная единица, служащая для организации программного кода на языке форматирования. Представляет собой текстовый файл с расширением [[Файлы ИРБИС#Файлы форматов ИРБИС|<tt>.pft</tt>]], содержащий '''формат'''.<br />
<br />
===Начало знакомства с языком форматирования ИРБИС===<br />
<br />
Для понимания языка форматирования необходимо быть знакомым с такими понятиями как:<br />
* поле данных – структурная единица документа (записи), имеющая числовую идентификацию (метку поля) и содержащая один элемент описания (например, первый индивидуальный автор, основное заглавие и т.д.);<br />
* подполе – структурная единица поля, которая определяется двумя символами, предшествующими собственно данным подполя: первый из этих символов знак ^, второй символ может быть латинской буквой (прописные и строчные не различаются) или цифрой и называется разделителем подполя.<br />
<br />
Для новичков может показаться, что некоторые форматы являются очень сложными для понимания. Однако, все форматы, даже громоздкие, состоят по сути из довольно простых команд или функций, разделенных запятыми или пробелами. Кажущаяся сложность связана с тем, что формат может состоять из многих таких команд. В связи с этим, ключом к пониманию форматов является последовательный анализ всех присутствующих в них команд.<br />
<br />
Обрабатывая формат, система работает с тремя объектами: запись (документ) базы данных, собственно формат и рабочая область, в которой размещаются выходные данные. Команды выполняются последовательно в порядке их представления в формате. Одни из команд порождают выходные данные (например, значения полей данных), другие - инициируют некоторые действия (например, переход на другую строку, создание нескольких пустых строк и т.д.). Создаваемые данные запоминаются в рабочей области в виде текстовых строк, которые затем передаются для последующей обработки, например, для печати.<br />
<br />
Все команды форматирования могут вводиться прописными или строчными буквами или их комбинацией.<br />
В форматах могут присутствовать комментарии. Признаком начала комментария является комбинация символов /*. В качестве комментария принимается часть строки от признака начала комментария до конца строки.<br />
<br />
==Выполнение формата==<br />
<br />
===Форматёр===<br />
<br />
''Форматёр'' – программный модуль, реализующий набор функций для обработки данных с использованием языка форматирования.<br />
<br />
В системе ИРБИС 64 присутствует несколько реализаций форматёра:<br />
* серверный форматёр – [[IRBIS64.dll#Функции форматёра|входит в библиотеку <tt>IRBIS64.dll</tt>]],<br />
* клиентский форматёр – включён в код клиентских приложений.<br />
<br />
Клиентский форматёр используется клиентскими приложениями.<br />
<br />
Серверный форматёр используется:<br />
* серверным [[АРМ Администратор]],<br />
* в некоторых случаях клиентское приложение передаёт формат на исполнение серверному форматёру, при этом взаимодействие осуществляется через [[TCP/IP сервер ИРБИС 64|сервер ИРБИС]].<br />
<br />
===Контекст форматёра===<br />
<br />
Значения глобальных переменных хранятся в конкретном запущенном экземпляре форматёра. Таким образом, область видимости переменных оказывается в непосредственной связи с экземпляром форматёра:<br />
* В рамках одного экземпляра форматёра значения глобальных переменных, инициализированные в одном формате, доступны в другом формате.<br />
* В разных экземплярах форматёра – собственные наборы глобальных переменных.<br />
<br />
Например:<br />
* В серверном [[АРМ Администратор]] с момента запуска и до закрытия приложения будет использоваться один экземпляр форматёра, соответственно для всех выполняемых данным АРМ форматов будет один набор глобальных переменных.<br />
* Для любого клиентского АРМ будет использоваться один экземпляр клиентского форматёра.<br />
* В тех случаях, когда клиентское АРМ передаёт форматы на исполнение серверному форматёру, запросы на исполнение форматов могут выполняться разными экземплярами форматёра.<br />
<br />
Таким образом, в контексте выполнения формата нельзя рассчитывать на то, что до присвоения глобальным переменным каких либо значений они будут пустыми.<br />
<br />
==Кодировка==<br />
<br />
Формат может начинаться с маркера кодировки UTF-8, в качестве данного маркера служит восклицательный знак.<br />
<br />
Если формат начинается с восклицательного знака, то система ИРБИС при чтении данного формата будет использовать кодировку UTF-8, в противном случае Windows-1251.<br />
<br />
Этот же механизм используется и при [[Технология Веб-ИРБИС#Фрейм как язык разметки|вставке формата внутри фрейма]].<br />
<br />
==Запись в базе данных, используемая в примерах==<br />
<br />
Если не оговорено противное, то все примеры по форматированию в последующих разделах ссылаются на запись, приведенную ниже. Эта запись присутствует в базе данных IBIS, поставляемой в дистрибутивном варианте системы в качестве учебной.<br />
<br />
'''MFN: 34'''<br />
600: ^AСухой П.О.^Bо нем<br />
215: ^a383^cил.24л<br />
920: PAZK<br />
999: 0000000<br />
907: ^A19941123^bdsm<br />
964: 78.09.19<br />
10: ^a5-203-01472-8^dЦ.договор.<br />
101: rus<br />
102: RU<br />
900: ^b05^c22<br />
210: ^cВоенное изд-во^aМ.^d1993<br />
700: ^aКузьмина^bЛ.М.<br />
675: 623.746<br />
675: 623.746(092) Сухой П.О.<br />
908: К89<br />
903: 623.746/К89-239165<br />
910: ^A0^BЭ93-18430^C19930830^Dхр<br />
910: ^A2^Dхр<br />
200: ^aКонструктор Сухой. Люди и самолеты<br />
<br />
==Инструкции языка форматирования==<br />
<br />
===Команды вывода полей===<br />
<br />
Команды вывода полей – это команды, используемые для извлечения из записи и вывода конкретного поля или подполя. Имеется [[#Команда вывода MFN|специальная команда для извлечения и вывода номера записи MFN]], хотя, строго говоря, MFN не является полем (MFN не имеет метки).<br />
<br />
====Команда вывода поля====<br />
<br />
Для указания на необходимость вывода поля из записи необходимо записать букву '''V''', за которой должна следовать метка поля. Это может быть прописная или строчная буква. Ниже приведены примеры применения данной команды.<br />
<br />
{| class="standard"<br />
!Формат||Выходные данные<br />
|-<br />
|<tt>v210</tt>||<tt>^cВоенное изд-во^aМ.^d1993</tt><br />
|-<br />
|<tt>v200</tt>||<tt>aКонструктор Сухой. Люди и самолеты</tt><br />
|-<br />
|<tt>v700</tt>||<tt>^aКузьмина^bЛ.М.</tt><br />
|-<br />
|<tt>v600</tt>||<tt>^AСухой П.О.^Bо нем</tt><br />
|}<br />
<br />
====Команда вывода подполя====<br />
<br />
Для вывода конкретного подполя из данного поля следует добавить соответствующий разделитель подполей к метке поля. Заметим, что можно использовать специальный разделитель подполей ^* для вывода первого подполя, если оно есть. В этом случае, первому подполю необязательно должен предшествовать его разделитель. Разделитель подполей может быть прописной или строчной буквой (обязательно латинской).<br />
<br />
{| class="standard"<br />
!Формат||Выходные данные<br />
|-<br />
|<tt>v210^с</tt>||<tt>Военное изд-во</tt><br />
|-<br />
|<tt>v200^a</tt>||<tt>Конструктор Сухой. Люди и самолеты</tt><br />
|-<br />
|<tt>v700^a</tt>||<tt>Кузьмина</tt><br />
|-<br />
|<tt>v600^*</tt>||<tt>Сухой П.О.</tt><br />
|}<br />
<br />
====Вывод фрагмента поля или подполя====<br />
<br />
В некоторых случаях может возникнуть необходимость вывести часть поля, которая не является подполем, особенно тогда, когда поле имеет фиксированный формат (например, запись даты в виде ГГГГММДД). Это можно сделать командой смещение/длина, размещаемой сразу за командой вывода поля или подполя, к которому команда применяется.<br />
<br />
Эта команда имеет вид:<br />
*<смещение>.<длина><br />
где:<br />
* *<смещение> указывает позицию первого символа фрагмента, который должен быть извлечен из поля или подполя (позиции символов нумеруются с нуля, т.е. первый символ находится в позиции 0, второй - в позиции 1 и т.д.); если смещение не указано, то оно считается равным 0;<br />
* .<длина> указывает количество извлекаемых символов. Если длина опущена, то извлекается все поле (подполе) до конца, начиная с символа, указанного в смещении.<br />
<br />
Ниже приведены примеры использования команды по отношению к записи, которая в качестве поля с меткой 1 содержит значение<br />
<tt>88-Nov-05</tt>.<br />
<br />
{| class="standard"<br />
!Формат||Выходные данные<br />
|-<br />
|<tt>v1*3.3</tt>||<tt>Nov</tt><br />
|-<br />
|<tt>v1.2</tt>||<tt>88</tt><br />
|-<br />
|<tt>v1*7</tt>||<tt>05</tt><br />
|-<br />
|<tt>v1*7,v1*2.4</tt>||<tt>05-Nov</tt><br />
|-<br />
|<tt>v1*7,v1*2.5,v1.2</tt>||<tt>05-Nov-88</tt><br />
|-<br />
|<tt>v210.3</tt>||<tt>^cВ</tt><br />
|-<br />
|<tt>v210^c.3</tt>||<tt>Вое</tt><br />
|}<br />
<br />
Обратите внимание на различные способы манипулирования полями с подполями в последних двух примерах. Если производится ссылка на поле целиком (например, v210), то нулевое смещение указывает на первую фактическую позицию поля (включая возможные разделители, стоящие в начале), а при ссылке на подполе (например, v210^с) нулевое смещение указывает на первый символ данных, стоящий после разделителя подполей.<br />
<br />
====Команда вывода MFN====<br />
<br />
Для вывода номера записи в файле документов служит команда MFN, формат которой:<br />
MFN<br />
или<br />
MFN(d)<br />
где d – количество выводимых на экран цифр. Если параметр (d) опущен, то по умолчанию предполагается 6 цифр. Ниже приводятся примеры использования данной команды.<br />
<br />
{| class="standard"<br />
!Формат||Выходные данные<br />
|-<br />
|<tt>MFN</tt>||<tt>000034</tt><br />
|-<br />
|<tt>MFN(3)</tt>||<tt>034</tt><br />
|-<br />
|<tt>MFN(2)</tt>||<tt>34</tt><br />
|-<br />
|<tt>MFN(1)</tt>||<tt>3</tt><br />
|}<br />
<br />
Заметим, что для подавления в MFN впереди стоящих нулей можно использовать [[Функции языка форматирования ИРБИС#Функция F(выр-1, выр-2, выр-3)|функцию F]].<br />
<br />
===Команды режима вывода===<br />
<br />
Система может выводить данные в трех различных режимах: '''''режим проверки''''', '''''режим заголовка''''', '''''режим данных'''''.<br />
<br />
В '''''режиме проверки''''' поля выводятся в том виде, в каком они хранятся в записи. При этом система не обеспечивает никаких разделителей между полями или экземплярами повторяющихся полей. Пользователь должен обеспечить адекватное разделение полей с помощью команд размещения, литералов или повторяющихся групп. Режим обычно используется для вывода записей с целью проверки правильности введенных данных.<br />
<br />
'''''Режим заголовка''''' обычно используется для печати заголовков при выводе указателей и таблиц. Все управляющие символы, введенные вместе с данными, такие как разделители терминов (< и >) игнорируются (за исключением указанных ниже случаев), а разделители подполей заменяются знаками пунктуации.<br />
<br />
'''''Режим данных''''' похож на режим заголовка, но дополнительно после каждого поля автоматически ставится точка (.), за которой следуют два пробела (или просто два пробела, если поле заканчивается каким-либо знаком пунктуации). Отметим, однако, что эта автоматическая пунктуация подавляется, если за командой вывода поля следует [[#Литералы|суффикс-литерал]].<br />
<br />
Когда система форматирует поле, содержащее подполе, в режимах заголовка или данных, она автоматически заменяет имеющиеся разделители подполей знаками пунктуации (при этом разделитель первого подполя, если он имеется, всегда игнорируется). Специальная комбинация символов "><" заме-няется на "; " (а отдельные символы “<” и “>” подавляются), обеспечивая простой способ форматирования полей, содержащих перечень ключевых фраз, заключенных в угловые скобки. Таблица стандартного замещения разделителей подполей выглядит так:<br />
* ^a замещается на "; " <br />
* от ^b до ^i замещается на ", "<br />
* все другие замещаются на ". "<br />
<br />
Команды режима вывода представляются в виде <tt>Mmc</tt>, где:<br />
* М – признак команды режима вывода.<br />
* m следующим образом определяет режим вывода:<br />
** Р режим проверки;<br />
** H режим заголовка;<br />
** D режим данных.<br />
* с – определяет необходимость преобразования букв в прописные:<br />
** U буквы преобразуются в прописные;<br />
** L буквы преобразованию не подвергаются.<br />
<br />
Команда режима вывода может появляться в формате столько раз, сколько это нужно и действует до следующей команды режима вывода. По умолчанию система использует команду MPL. Ниже приведены примеры использования команды.<br />
<br />
{| class="standard"<br />
!Формат||Выходные данные<br />
|-<br />
|<tt>mpl,v200</tt>||<tt>^aКонструктор Сухой. Люди и самолеты</tt><br />
|-<br />
|<tt>mhl,v200</tt>||<tt>Конструктор Сухой. Люди и самолеты</tt><br />
|-<br />
|<tt>mdl,v200</tt>||<tt>Конструктор Сухой. Люди и самолеты.</tt><br />
|-<br />
|<tt>mdu,v200</tt>||<tt>КОНСТРУКТОР СУХОЙ. ЛЮДИ И САМОЛЕТЫ.</tt><br />
|-<br />
|<tt>mpl,v210</tt>||<tt>^cВоенное изд-во^aМ.^d1993</tt><br />
|-<br />
|<tt>mdl,v210</tt>||<tt>Военное изд-во; М., 1993.</tt><br />
|}<br />
<br />
===Команды горизонтального и вертикального размещения===<br />
<br />
В языке форматирования имеются следующие команды для управления горизонтальным и вертикальным размещением данных:<br />
* '''<tt>Xn</tt>''' – вставляет <tt>n</tt> пробелов;<br />
* '''<tt>Cn</tt>''' – табуляция в позицию <tt>n</tt>;<br />
* '''<tt>/</tt>''' – переход на новую строку, если предыдущая строка не была пустой;<br />
* '''<tt>#</tt>''' – безусловный переход на новую строку;<br />
* '''<tt>%</tt>''' – удаляет пустые строки (если они есть).<br />
<br />
Команда <tt>/</tt> приводит к размещению последующих данных с начала следующей строки. Подряд расположенные команды <tt>/</tt> эквивалентны одной команде <tt>/</tt>. Команда <tt>/</tt> никогда не создает пустых строк.<br />
<br />
Команда <tt>#</tt> выполняет те же действия, что и <tt>/</tt>, но переход на новую строку является безусловным.<br />
<br />
Можно использовать комбинацию <tt>/#</tt> для создания одной (и только одной) пустой строки. Комбинация <tt>##</tt> может привести к созданию одной или двух пустых строк в зависимости от того, была ли пустой текущая строка перед выполнением первой команды <tt>#</tt>.<br />
<br />
Использование команды <tt>#</tt> может вызвать затруднение в тех случаях, когда выбираемое поле оказывается пустым. Эта ситуация хорошо иллюстрируется на следующем примере:<br />
/#V10/#V20/#V30<br />
Если все поля присутствуют в документе, то в результате поля <tt>10</tt>, <tt>20</tt>, и <tt>30</tt> будут располагаться с начала строк и каждому будет предшествовать одна пустая строка. Однако, если поле <tt>20</tt> в документе отсутствует, то между <tt>10</tt> и <tt>30</tt> полями будут вставлены две пустые строки. Это может оказаться нежелательным, если действительно требуется, чтобы между полями была пропущена именно одна пустая строка, независимо от наличия или отсутствия некоторых полей. Таким образом, приведенный выше формат не приведет к желаемому результату.<br />
<br />
Эту проблему решает команда <tt>%</tt>. Ее действие заключается в подавлении всех последовательно расположенных пустых строк, если они имеются, между текущей строкой и последней непустой строкой. Таким образом, формат<br />
%##V10%##V20%##V30 ...<br />
приведет к созданию одной и только одной пустой строки между каждым полем, независимо от их наличия или отсутствия в документе.<br />
<br />
Команду <tt>Сn</tt> имеет смысл применять только в случае использования моноширинных шрифтов. Команды <tt>/</tt> <tt>#</tt> <tt>%</tt> не применимы в случае использования в форматах показа средств RTF или HTML. Команды <tt>Сn</tt> и <tt>Xn</tt> не работают в [[HTML-форматах]].<br />
<br />
===Литералы===<br />
<br />
Литерал – это строка символов, заключенная в соответствующие ограничители, которая вносится в выводимый текст в таком виде, как она приведена в формате. Литералы могут использоваться, например, для именования полей.<br />
<br />
Существуют литералы трех типов:<br />
* '''''Условный литерал''''' определяет текст, который будет выведен только в случае присутствия в записи соответствующего ему поля/подполя. Если поле является повторяющимся, то текст будет выведен только один раз, независимо от количества экземпляров поля/подполя. Условные литералы заключаются в двойные кавычки, например:<br />
"Заглавие: "<br />
* '''''Повторяющийся литерал''''' определяет текст, который будет выведен только в случае присутствия в записи соответствующего ему поля или подполя. Однако, если поле повторяющееся, литерал будет выводиться для каждого экземпляра поля/подполя. Ограничителем для повторяющихся литералов служит символ вертикальной черты:<br />
|Автор: |<br />
* '''''Безусловный литерал''''' определяет текст, который будет выведен независимо от наличия поля в записи. Безусловные литералы заключаются в одинарные кавычки, например:<br />
'Краткое содержание'<br />
или<br />
'Заголовок'<br />
<br />
Литерал не должен содержать ограничителей литерала. Например, безусловный литерал не может содержать одинарную кавычку (хотя может содержать двойные кавычки и/или вертикальные черты).<br />
<br />
Условные и/или повторяющиеся литералы связываются с полем или подполем своим расположением в формате. Литералы, предшествующие команде вывода поля/подполя, называемые '''''префикс-литералами''''', выводятся перед содержимым поля/подполя, в то время, как литералы, следующие за командой вывода поля/подполя, называемые '''''суффикс-литералами''''', выводятся после содержимого поля/подполя.<br />
<br />
Если за повторяющимся префикс-литералом непосредственно следует знак '''<tt>+</tt>''' (например, '''<tt>|xxx|+</tt>'''), то он будет выведен перед каждым, кроме первого, экземпляром поля/подполя.<br />
<br />
Если повторяющемуся суффикс-литералу непосредственно предшествует знак '''<tt>+</tt>''' (например, '''<tt>+|xxx|</tt>'''), то он будет выведен после каждого, кроме последнего, экземпляра поля/подполя.<br />
<br />
С полем/подполем может быть связан более чем один литерал. В этом случае различные литералы должны подчиняться следующим правилам и порядку:<br />
* '''префикс-литералы:'''<br />
** Один или более условных префикс-литералов. За условным префикс-литералом могут следовать другие условные префикс-литералы, команды вертикального и горизонтального размещения, и/или команды режима вывода. Все команды между первым условным префикс-литералом и соответствующей ему командой вывода поля/подполя становятся условными и будут выполнены только при наличии поля/подполя, иначе они игнорируются.<br />
** Один и только один повторяющийся префикс-литерал. Если такой литерал есть, то он должен непосредственно предшествовать соответствующей ему команде вывода поля/подполя.<br />
* '''суффикс-литералы:'''<br />
** Один и только один повторяющийся суффикс-литерал. Если такой литерал есть, то он должен следовать непосредственно за соответствующей ему командой вывода поля/подполя.<br />
** Один и только один условный суффикс-литерал. Если такой литерал есть, то он должен следовать непосредственно за повторяющимся суффикс-литералом или связанной с ним командой вывода поля/подполя.<br />
**Суффикс-литералы не должны разделяться запятыми и не должно быть запятой между командами вывода поля/подполя и первым суффикс-литералом, так как запятая обозначает конец суффикс-литералов, связанных с данной командой вывода поля/подполя.<br />
<br />
'''''Пустые литералы''''' – литералы нулевой длины, такие, как <tt>""</tt> или <tt>||</tt> вполне допустимы и могут использоваться, как префикс-литералы для обеспечения условного вертикального размещения или как суффикс-литералы для временного подавления автоматической пунктуации, которая обеспечивается в режиме данных.<br />
<br />
Литералы подвергаются преобразованию в прописные буквы, если расположены после соответствующей команды режима вывода.<br />
<br />
Примеры различных типов литералов:<br />
<br />
{| class="standard"<br />
!Формат||Выходные данные<br />
|-<br />
|<tt>'MFN:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;',mfn(3)</tt>||<tt>MFN:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;034</tt><br />
|-<br />
|<tt>mdl,"Заглавие: "v200</tt>||<tt>Заглавие: Конструктор Сухой. Люди и самолеты.</tt><br />
|-<br />
|<tt>v675</tt>||<tt>623.746623.746(092) Сухой П.О.</tt><br />
|-<br />
|<tt><nowiki>v675|; |</nowiki></tt>||<tt>623.746; 623.746(092) Сухой П.О.;</tt><br />
|-<br />
|<tt><nowiki>v675+|; |</nowiki></tt>||<tt>623.746; 623.746(092) Сухой П.О.</tt><br />
|-<br />
|<tt>|; |v675</tt>||<tt>; 623.746; 623.746(092) Сухой П.О.</tt><br />
|-<br />
|<tt>|; |+v675</tt>||<tt>623.746; 623.746(092) Сухой П.О.</tt><br />
|-<br />
|<tt><nowiki>"УДК"/v675+|; |</nowiki></tt>||<tt>УДК<br />623.746; 623.746(092) Сухой П.О.</tt><br />
|-<br />
|<tt>|(|v675|)|</tt>||<tt>(623.746)(623.746(092) Сухой П.О.)</tt><br />
|-<br />
|<tt><nowiki>"(УДК: ",v675+|; |")"</nowiki></tt>||<tt>(УДК: 623.746; 623.746(092) Сухой П.О.)</tt><br />
|-<br />
|<tt>mdl,v210</tt>||<tt>Военное изд-во; М., 1993.</tt><br />
|-<br />
|<tt>mdl,v210""</tt>||<tt>Военное изд-во; М., 1993</tt><br />
|}<br />
<br />
====Команды фиктивного вывода поля====<br />
<br />
Команды фиктивного вывода поля реализует условный вывод литералов в зависимости от наличия или отсутствия данного поля или подполя без вывода содержимого самого поля. Задаются они следующим образом: '''<tt>Dt</tt>''' или '''<tt>Dt^x</tt>''' или '''<tt>Nt</tt>''' или '''<tt>Nt^x</tt>''', где:<br />
* '''<tt>D</tt>''' указывает, что все соответствующие ей условные литералы должны выводиться только при наличии поля,<br />
* '''<tt>N</tt>''' указывает, что они должны выводиться только при отсутствии поля;<br />
* '''<tt>t</tt>''' метка поля, управляющего выводом литералов;<br />
* '''<tt>^x</tt>''' необязательный код разделителя подполя. Если он приведен, то это означает, что вывод литералов зависит от наличия или отсутствия определенного подполя (отметим, что отсутствие поля говорит и об отсутствии подполей в этом поле).<br />
<br />
Обычно команде фиктивного вывода поля предшествует, по крайней мере, один условный префикс-литерал (который может быть пустым), за которым могут следовать один или более других условных префикс-литералов, команды вертикального и горизонтального размещения и/или команды режима вывода. Команда фиктивного вывода поля не может иметь суффикс-литералов.<br />
<br />
Несколько примеров использования этих команд:<br />
<br />
{| class="standard"<br />
!Формат||Выходные данные<br />
|-<br />
|<tt>"(Отсут.)"n700,v700</tt>||<tt>Конструктор Сухой. Люди и самолеты</tt><br />
|-<br />
|<tt><nowiki>"(Отсут.)"n80,v80+|; |</nowiki></tt>||<tt>(Отсут.)</tt><br />
|-<br />
|<tt>"[нет даты]"n907^А,V907^A</tt>||<tt>19941123</tt><br />
|-<br />
|<tt>"[нет сведений]"n911,v911</tt>||<tt>[нет сведений]</tt><br />
|}<br />
<br />
===Выражения===<br />
<br />
Язык форматирования позволяет вычислять значения и/или сравнивать значения с помощью выражений. Выражения построены таким образом, что при их вычислении возвращается значение. Таким значением может быть строка символов (например, содержимое поля или литерал), тогда выражение называется строковым, либо число, тогда выражение называется числовым, либо логическое значение (истина или ложь), тогда выражение называется логическим. В системе также имеется набор функций, которые, на основе задаваемых аргументов, выполняют некоторые специфические действия и возвращают значения. Функции, возвращающие в качестве значения число, называются числовыми функциями, возвращающие строку символов - строковыми функциями, а возвращающие логическое значение - логическими функциями. Только строковые функции могут использоваться непосредственно в качестве команд форматирования. Числовые выражения могут использоваться либо в логических выражениях, либо в качестве аргументов функций. Логические выражения и логические функции могут использоваться только в контексте [[#Команда IF|команды IF]].<br />
<br />
====Числовые выражения====<br />
<br />
'''''Числовое выражение''''' формируется из операндов, которые имеют числовое значение, и [[Операторы языка форматирования ИРБИС#Арифметические операторы|арифметических операторов]] ('''<tt>+</tt>''', '''<tt>-</tt>''', '''<tt>*</tt>''', '''<tt>/</tt>''').<br />
<br />
В качестве операндов в числовых выражениях могут выступать: '''''числовые константы''''', '''''числовые функции''''', [[#Команда вывода MFN|команда вывода номера записи MFN]], числовые выражения.<br />
<br />
'''''Числовые константы''''' могут быть представлены в виде целых чисел, чисел с десятичной точкой, например <tt>5</tt>, <tt>18</tt>, <tt>98.65</tt>, или чисел в '''''экспоненциальной форме''''', например, <tt>1.5Е5</tt>, обозначающее 1.5 умноженное на 10 в 5-ой степени, т.е. 150000. Числа могут быть со знаком или без.<br />
<br />
[[#Числовые функции|'''''Числовые функции''''' рассматриваются в отдельной главе]]. Пример числовой функции <tt>val(v10)</tt>.<br />
<br />
Числовые выражения при использовании их в качестве операндов должны быть заключены в круглые скобки, например:<br />
(val(v20)-5)<br />
<br />
Отметим, что поскольку команды вывода полей (например, v10 или v10^a) дают текстовые строки, они не могут использоваться в качестве операндов числовых выражений. Однако, для преобразования содержимого поля или подполя в числовое значение может быть использована [[Функции языка форматирования ИРБИС#Функция VAL(формат)|функция VAL]].<br />
<br />
Аналогичным образом, числовое выражение не может быть непосредственно выведено на экран или печать, а должно быть предварительно преобразовано в строку символов с помощью [[Функции языка форматирования ИРБИС#Функция F(выр-1, выр-2, выр-3)|функции F]].<br />
<br />
Ниже приведены примеры числовых выражений. Предполагается, что MFN=10, v1^a=10, v1^b=20 и v2=30.<br />
<br />
{| class="standard"<br />
!Выражение||Значение<br />
|-<br />
|<tt>0.155е+3</tt>||<tt>155</tt><br />
|-<br />
|<tt>1е-3</tt>||<tt>0.001</tt><br />
|-<br />
|<tt>2*3+9</tt>||<tt>15</tt><br />
|-<br />
|<tt>2*(3+9)</tt>||<tt>24</tt><br />
|-<br />
|<tt>10-(4*(2-1))</tt>||<tt>6</tt><br />
|-<br />
|<tt>15*0.001</tt>||<tt>0.015</tt><br />
|-<br />
|<tt>mfn+100</tt>||<tt>110</tt><br />
|-<br />
|<tt>val(v2)+val(v1^a)*7.5</tt>||<tt>105</tt><br />
|-<br />
|<tt>(val(v1^a)-val(v1^b))/100</tt>||<tt>-0.1</tt><br />
|}<br />
<br />
====Строковые выражения====<br />
<br />
'''''Строковым выражением''''' являются:<br />
* [[#Литералы|Безусловный литерал]], например <tt>'некоторый текст'</tt>.<br />
* [[#Команды вывода полей|Команда вывода поля/подполя]], которая может включать [[#Вывод фрагмента поля или подполя|команду смещение/длина]], например <tt>v26^c*2.2</tt>.<br />
* [[Функции языка форматирования ИРБИС#Строковые функции|Строковая функция]], например <tt>S(v24,v25,v26)</tt>.<br />
<br />
====Логические выражения====<br />
<br />
'''''Логическое выражение''''' формируется из операндов, которые могут принимать одно из двух значений, '''истина''' или '''ложь''', и [[Операторы языка форматирования ИРБИС#Логические операторы|логических операторов]] ('''NOT''', '''AND''', '''OR'''). Логические выражения используются для вычисления истинности одного или более условий.<br />
<br />
Операндами логического выражения могут быть:<br />
* [[Операторы языка форматирования ИРБИС#Операторы отношения и выражения отношения|Выражения отношения]] – сравнивают два числовых или строковых значения и определяют, удовлетворяют ли они отношению, строятся на основе [[Операторы языка форматирования ИРБИС#Операторы отношения и выражения отношения|операторов отношения]] ('''<tt>=</tt>''', '''<tt><></tt>''', '''<tt><</tt>''', '''<tt><=</tt>''', '''<tt>></tt>''', '''<tt>>=</tt>''', '''<tt>:</tt>'''). Например <tt>mfn&nbsp;<&nbsp;10</tt>.<br />
* [[Функции языка форматирования ИРБИС#Логические функции|Логические функции]], например <tt>p(v24)</tt>.<br />
* Логические выражения.<br />
<br />
Примеры логических выражений:<br />
{| class="standard"<br />
!Выражение||Значение<br />
|-<br />
|<tt>mfn=34</tt>||<tt>Истина</tt><br />
|-<br />
|<tt>not mfn=34</tt>||<tt>Ложь</tt><br />
|-<br />
|<tt>not (not mfn=34)</tt>||<tt>Истина</tt><br />
|-<br />
|<tt>v20 = 'люди'</tt>||<tt>Ложь</tt><br />
|-<br />
|<tt>v200 : 'люди'</tt>||<tt>Истина</tt><br />
|-<br />
|<tt>v200 : 'ЛЮДИ'</tt>||<tt>Истина</tt><br />
|-<br />
|<tt>v210^c.6 = 'Военное'</tt>||<tt>Ложь</tt><br />
|-<br />
|<tt>v210^c.7 = 'Военное'</tt>||<tt>Истина</tt><br />
|-<br />
|<tt>(v200 : 'люди') AND (v210^c.7= 'Военное')</tt>||<tt>Истина</tt><br />
|}<br />
<br />
===Функции===<br />
<br />
'''''Функция''''' вычисляет ''значение'' (называемое '''''значением функции''''' или '''''возвращаемым значением'''''), которое затем подставляется вместо функции при вычислении выражения.<br />
<br />
Функции могут иметь один или более ''аргументов'', которые необходимо задать для вычисления функции. Аргументы заключаются в скобки и разделяются запятыми.<br />
<br />
Аргументы могут быть следующих трех типов: [[#Понятие формата|формат]], [[#Числовые выражения|числовое выражение]], [[#Команды вывода полей|команда вывода поля]].<br />
<br />
Аргументом функции может быть произвольный формат, который может содержать любую разрешенную команду за исключением [[Функции языка форматирования ИРБИС#Функция REF(выражение, формат)|функции REF]], в которой формат так же используется в качестве аргумента. Функции передается не сам формат, а текст, полученный в результате вычисления формата.<br />
<br />
При использовании числового выражения в качестве аргумента функции, оно сначала вычисляется, и затем вычисленное значение передается функции.<br />
<br />
В качестве аргумента могут быть команды вывода поля или подполя. Не допускается использовать в команде спецификацию смещение/длина.<br />
<br />
Список функций с их описанием приведён в статье '''[[Функции языка форматирования ИРБИС]]'''.<br />
<br />
===Форматные выходы. UNIFOR===<br />
<br />
'''''Форматные выходы''''' – вид функций, реализованных на основе определённой технологии вне рамок языка форматирования, и предназначенных для выполнения таких операций по форматированию, которые не могут быть выполнены с помощью собственно языка форматирования. Технология '''''форматных выходов''''' подразумевает реализацию определённого стандартного интерфейса передачи данных для таких функций и возврата значений. В рамках языка форматирования '''''форматные выходы''''' являются строковыми функциями с форматом в качестве аргумента.<br />
<br />
Форматные выходы имеют следующий синтаксис в языке форматирования:<br />
&имя(формат)<br />
где:<br />
* '''<tt>&</tt>''' – идентификатор вызова форматного выхода,<br />
* '''<tt>имя</tt>''' – имя форматного выхода,<br />
* '''<tt>формат</tt>''' – аргумент.<br />
<br />
К использованию предлагается [[UNIFOR|форматный выход UNIFOR]], реализующий множество функций вне базовых рамок языка форматирования.<br />
<br />
===Команда IF===<br />
<br />
Команда '''IF''' предоставляет возможность строить контекстно-зависимые форматы, то есть форматы, способные изменять выходные значения в зависимости от содержимого форматируемой записи.<br />
<br />
Команда '''IF''' записывается следующим образом:<br />
'''IF''' '''''условие''''' '''THEN''' '''''формат-1''''' '''ELSE''' '''''формат-2''''' '''FI'''<br />
где:<br />
* '''''Условие''''' – [[#Логические выражения|логическое выражение]],<br />
* '''''формат-1''''' – формат, который вычисляется в том и только том случае, когда значением логического выражения является '''истина''',<br />
* '''''формат-2''''' – формат, который вычисляется в том и только том случае, когда значением логического выражения является '''ложь'''.<br />
<br />
Фраза '''ELSE''' '''''формат-2''''' не является обязательной, и может быть опущена. Ключевые слова '''IF''', '''THEN''' и '''FI''' обязательны всегда. '''''Формат-1''''' может быть опущен, если присутствует предложение '''ELSE''' (то есть если условие истинно, то ничего не будет выведено). Таким образом, команда '''IF''' может также принимать одну из следующих дополнительных форм:<br />
'''IF ''условие'' THEN ''формат-1'' FI'''<br />
'''IF ''условие'' THEN ELSE ''формат-2'' FI'''<br />
<br />
Поскольку нет никаких ограничений на команды, которые можно использовать в '''''формате-1''''' и '''''формате-2''''', то команды '''IF''' могут быть вложены друг в друга любое количество раз. Ключевое слово '''FI''', в таком случае, должно закрывать каждую команду '''IF''' (можно рассматривать '''IF''' и '''FI''' как пару скобок). Например:<br />
if p(v1) then v24 else if p(v2) and a(v3) then v5 fi fi<br />
<br />
Команда '''IF''' особенно полезна для создания обобщенных форматов в интегрированных базах данных, которые содержат различные типы записей. В этом случае надо иметь различные метки для каждого типа записи (должно быть поле, содержащее код, идентифицирующий тип записи). Таким образом, проверяя тип документа с помощью команды '''IF''', можно порождать в одном формате специфическое форматирование записей каждого типа.<br />
<br />
===Повторяющиеся группы===<br />
<br />
====Определение повторяющейся группы====<br />
<br />
Повторяющаяся группа состоит из набора команд форматирования, заключенных в круглые скобки. Смысл этих команд обычный, за исключением того, что обработка повторяющихся полей производится особым образом.<br />
<br />
Чтобы понять концепцию повторяющейся группы, надо, прежде всего, знать, каким образом система работает с повторяющимися полями. При отсутствии каких-либо дополнительных указаний система трактует все экземпляры (в том порядке, в котором они находятся в записи) как единую строку текста.<br />
<br />
Повторяющаяся группа изменяет порядок обработки системой экземпляров повторяющихся полей таким образом, что происходит последовательная обработка отдельно каждого экземпляра повторяющегося поля.<br />
<br />
Когда система обнаруживает скобку, открывающую повторяющуюся группу, происходит следующее:<br />
# Счетчик экземпляров (повторений) устанавливается в единицу.<br />
# Заключенный в скобки формат обрабатывается таким образом, что команды вывода полей выводят только те экземпляры повторяющихся полей, которые соответствуют текущему значению счетчика экземпляров.<br />
# Если в процессе текущего просмотра всей повторяющейся группы ничего не выводится (то есть в пределах группы больше не оказалось экземпляров повторяющегося поля), то процесс обработки повторяющейся группы завершается. В противном случае значение счетчика экземпляров увеличивается на 1 и повторяется выполнение шагов 2 и 3.<br />
<br />
Отметим еще раз, что все команды форматирования внутри повторяющейся группы обрабатываются последовательно экземпляр за экземпляром (как объяснялось выше), включая, таким образом, и поля, указываемые в команде IF, выражениях и функциях, а также строковых функциях, используемых как команды. Поэтому нежелательно использовать безусловные литералы в повторяющейся группе. И если все же безусловные литералы используются, то они будут выдаваться на один раз больше, чем это надо.<br />
<br />
====Использование повторяющейся группы====<br />
<br />
В подавляющем большинстве случаев для правильной обработки повторяющихся полей достаточно использование простых команд форматирования, таких, например, как команда режима вывода или повторяющихся литералов, как это показано ниже:<br />
{| class="standard"<br />
!Формат||Выходные данные<br />
|-<br />
|<tt>mpl,v70</tt>||<tt>Grieve, B.J.Went, F.W.</tt><br />
|-<br />
|<tt>mdl,v70</tt>||<tt>Grieve, B.J. Went, F.W.</tt><br />
|-<br />
|<tt><nowiki>v70+|; |</nowiki></tt>||<tt>Grieve, B.J.; Went, F.W.</tt><br />
|}<br />
<br />
Однако, возможны случаи, когда появляется необходимость отформатировать повторяющиеся поля другим способом. Например, иногда необходимо форматировать каждый экземпляр поля с новой строки, чего можно достигнуть только с использованием повторяющейся группы, как это показано ниже:<br />
{| class="standard"<br />
!Формат||Выходные данные<br />
|-<br />
|<tt>v675/v200^a</tt>||<tt>623.746623.746(092) Сухой П.О.<br>Конструктор Сухой. Люди и самолеты</tt><br />
|-<br />
|<tt>(v675/),v200^a</tt>||<tt>623.746<br>623.746(092) Сухой П.О.<br>Конструктор Сухой. Люди и самолеты</tt><br />
|}<br />
<br />
В первом случае команда перехода на новую строку (/) выполняется после форматирования всех экземпляров поля 675, а во втором случае она выполняется после каждого экземпляра поля.<br />
<br />
Пример ниже иллюстрирует использование повторяющихся полей с подполями (предполагается, что запись содержит два экземпляра поля 20). В первом формате использование повторяющейся группы дает возможность вывести различные подполя каждого экземпляра повторяющегося поля в виде таблицы. Второй формат аналогичен первому, но не содержит повторяющейся группы.<br />
<br />
Если нужно вывести литерал перед данными, создаваемыми повторяющейся группой, то можно использовать безусловный или условный литерал. Отметим, однако, что условный литерал должен быть связан с командой вывода поля (повторяющаяся группа не является командой вывода поля). Для этой цели необходимо использовать команды фиктивного вывода поля.<br />
<br />
Содержимое записи:<br />
210 ^aNew York^сMcGraw Hill^d1988<br />
210 ^aLondon^cAcademic Press^d1975<br />
Формат 1:<br />
/(v210^a,c11,v210^c,c30,v210^d/)<br />
Вывод:<br />
New York McGraw Hill 1988<br />
London Academic Press 1975<br />
Формат 2:<br />
/v210^a,c11,v210^c,c30,v210^d/<br />
Вывод:<br />
New YorkLondon<br />
McGraw HillAcademic Press<br />
19881975<br />
<br />
Для избежания недоразумений, связанных с тонкостями использования повторяющейся группы, рекомендуется воспользоваться следующим типовым примером:<br />
(if p(v20) then ... fi)<br />
где вместо троеточия следует поставить свои команды, которые будут выполнены на каждое повторение поля 20.<br />
<br />
Если существуют дополнительные условия на вывод, то их также следует помещать в тело условного оператора в приведённом типовом примере.<br />
<br />
Например, вывод всех повторений, кроме первого, можно сделать так:<br />
(if p(v20) then if &uf('+90') <> '1' then ... fi fi)<br />
<br />
Повторяющиеся группы не могут быть вложенными (то есть повторяющаяся группа не может содержать другую повторяющуюся группу), за исключением случая, когда внутренняя группа содержится в аргументе формата функции REF. Так, например, допустимым является следующий формат:<br />
(v10,ref(val(v20),v10,(v20,v30)))<br />
<br />
но приведенный ниже формат является недопустимым, что вызовет сообщение об ошибке:<br />
(v10,(v20,v30))<br />
<br />
Использование повторяющейся группы является обязательным в следующих случаях:<br />
* Использование повторяющегося поля в качестве аргумента функции L.<br />
* Первый аргумент функции REF ссылается на повторяющееся поле.<br />
<br />
Также нужно учитывать возможность употребления повторяющейся группы, когда повторяющееся поле используется в логическом выражении команды IF.<br />
<br />
===Глобальные переменные===<br />
<br />
Для записи и чтения глобальных переменных предназначены [[UNIFOR#Функции для работы с глобальными переменными|специальные форматные выходы]].<br />
<br />
Для вывода значения глобальной переменной предназначена команда '''g''', после которой должен быть записан номер глобальной переменной.<br />
<br />
Например, команда<br />
g1<br />
выводит значение первой глобальной переменной.<br />
<br />
Команда '''g''' в некоторых случаях может служить краткой альтернативой форматным выходам для чтения глобальных переменных.<br />
<br />
Об области видимости глобальных переменных см. в [[#Контекст форматёра|подразделе ''Контекст форматёра'']].<br />
<br />
==Возможности организации программного кода на языке форматирования==<br />
<br />
Возможности ''выполнения файла формата'' и ''вложения формата'' позволяют организовывать код в соответствии с принципами модульности.<br />
<br />
===Выполнение файла формата===<br />
<br />
Возможность выполнения файла формата реализована с помощью [[UNIFOR|форматного выхода <tt>&uf('6…</tt>]].<br />
<br />
Особенности выполнения файла формата:<br />
* возможно вложенное использование повторяющихся групп, если внутри повторяющейся группы выполнить файл формата, содержащий повторяющуюся группу;<br />
* допустима не более чем тройная вложенность выполнения файла формата;<br />
* выполнение файла формата происходит динамически, когда доходит очередь до данной инструкции.<br />
<br />
===Вложенный формат===<br />
<br />
В качестве ссылки на вложенный формат используется имя файла формата без расширения, обозначенное символами ASCII с кодами <tt>1C</tt> (File Separator) и <tt>1D</tt> (Group Separator). <tt>1C</tt> указывают непосредственно перед именем формата, а <tt>1D</tt> – непосредственно после.<br />
<br />
Обозначение вложения формата нарушает концепцию файла формата как текстового файла, который возможно набрать с клавиатуры. Предполагается, что возможностью вложения формата удобно пользоваться из Редактора форматов.<br />
<br />
Особенности выполнения файла формата:<br />
* до начала выполнения инструкция формата, вместо ссылок на файлы вложенных форматов вставляется их содержимое.<br />
<br />
Следствием упомянутой особенности является то, что рекурсивное вложение формата неизбежно повлечёт ошибку, так как вставка вложенного формата будет происходить до тех пор, пока не закончится память.<br />
<br />
==Использование команд (тэгов) RTF и HTML==<br />
<br />
В форматах допускается использование команд RTF, обеспечивающих представление неплоских текстов, содержащих шрифтовые выделения, горизонтальную и вертикальную верстку и т.п. Форматы, в которых используются команды RTF, называются RTF-форматы.<br />
<br />
Команды RTF вводятся в формат в виде литералов.<br />
<br />
Если предполагается, что формат будет содержать RTF команды, то он должен быть целиком заключен в фигурные скобки:<br />
'{'формат '}'<br />
<br />
Все команды RTF начинаются с символа \ (обратный слеш).<br />
<br />
Любая команда RTF должна заканчиваться знаком пробела, или непосредственно за ней может следовать другая команда RTF.<br />
Перечень основных команд RTF:<br />
{| class="standard"<br />
!Команда||Назначение<br />
|-<br />
|<tt>\par</tt>||Начало нового параграфа (абзаца)<br />
|-<br />
|<tt>\liNNN</tt>||Левый отступ для всех строк параграфа – NNN (в пунктах)<br />
|-<br />
|<tt>\riNNN</tt>||Правый отступ для всех строк параграфа – NNN (в пунктах)<br />
|-<br />
|<tt>\fiNNN</tt>||Левый отступ для первой строки параграфа – NNN (в пунктах)<br />
|-<br />
|<tt>\pard</tt>||Начало форматирования нового абзаца, все предыдущие команды форматирования параграфа отменяются<br />
|-<br />
|<tt>\fsNNN</tt>||Размер шрифта – NNN (удвоенный размер в пунктах)<br />
|-<br />
|<tt>\ul \ul0</tt>||Начало и конец подчеркивания<br />
|-<br />
|<tt>\i \i0</tt>||Начало и конец курсива<br />
|-<br />
|<tt>\b \b0</tt>||Начало и конец жирности<br />
|-<br />
|<tt>\tab</tt>||Табуляция<br />
|-<br />
|<tt>\qr</tt>||Правое выравнивание строк<br />
|-<br />
|<tt>\ql</tt>||Левое выравнивание строк<br />
|-<br />
|<tt>\qc</tt>||Цетральное выравнивание строк<br />
|-<br />
|<tt>\qj</tt>||Равномерное выравнивание строк<br />
|-<br />
|<tt>\page</tt>||Переход на новую страницу<br />
|-<br />
|<tt>\txNNN</tt>||Позиция табуляция – NNN (в пунктах)<br />
|}<br />
<br />
В форматах, содержащих команды RTF, неприменимы [[#Команды горизонтального и вертикального размещения|команды вертикальной верстки]].<br />
<br />
В форматах показа могут использоваться HTML-теги в качестве альтернативы RTF-командам. Совместное использование RTF-команд и HTML-тегов недопустимо.<br />
<br />
Форматы, в которых используются HTML-теги, называются HTML-форматы.<br />
<br />
HTML-теги вводятся в формат в виде литералов.<br />
<br />
Если требуется явно определить формат как HTML-формат, необходимо в самом начале формата указать фиктивный тэг:<br />
'</>'<br />
<br />
В форматах, содержащих HTML-теги, неприменимы [[#Команды горизонтального и вертикального размещения|команды вертикальной верстки, а также команды Xn и Cn]].<br />
<br />
Предлагаются дополнительные возможности при адресации ресурсов ИРБИС в тегах <A HREF=…> и <IMG SRC=…>:<br />
<A HREF="IRBIS:N,описание_ссылки"><br />
где:<br />
* N – число, обозначающее вид ссылки. Принимает значения 0, 1, 2, 3.<br />
** Для значений 0, 1, 2 – структура и смысл ссылок аналогичен ссылкам, формируемым с помощью форматного выхода &unifor(‘+I..). Важное замечание: форматный выход &unifor(‘+I..) ПРИМЕНИМ ТОЛЬКО В RTF-форматах (т.е. в форматах с HTML-тэгами он не применим).<br />
** Значение 3 определяет ссылку на внешний объект через относительную адресацию в рамках системы ИРБИС:<br />
<A HREF="IRBIS:3,path,dbname,filename"><br />
где:<br />
* path – определяет относительный путь к внешнему объекту в рамках ИР-БИС и принимает значения: 0 – основная директория системы (для ИРБИС32 – та, где находятся исполняемые модули; для ИРБИС64 – та, где находятся ис-полняемые модули сервера); 1 – общая директория баз данных (по умолчанию \DATAI); 10 – директория конкретной БД;<br />
* dbname – имя БД (имеет смысл только при path=10). По умолчанию – предполагается текущая БД;<br />
* filename – имя файла внешнего объекта.<br />
<br />
<IMG SRC="IRBIS:path,dbname,filename"><br />
где параметры path, dbname, filename имеют тот же смысл, что указано выше, и определяют ссылку на графический ресурс (картинку) в рамках ИРБИС.<br />
<br />
Реализуется специальная возможность для отображения штрих-кодов в HTML-форматах, а именно:<br />
<IMG SRC="IRBIS:!!ШТРИХ_КОД!!"><br />
<br />
==Форматы для формально-логического контроля (ФЛК)==<br />
<br />
Для формально-логического контроля данных (как на уровне поля, так и документа в целом) применяются специальные форматы. Форматы для ФЛК используются следующим образом:<br />
* форматированию подвергается контролируемый документ;<br />
* первый символ результата форматирования определяет результат ФЛК, а именно:<br />
** 0 – означает положительный результат контроля;<br />
** 1 – означает отрицательный результат и обнаруженные ошибки считаются непреодолимыми, т.е. подлежат обязательному устранению;<br />
** 2 – означает отрицательный результат, но при этом ошибки считаются преодолимыми, т.е. их можно не исправлять.<br />
* остальной результат форматирования (начиная со второго символа) в случае отрицательного контроля выдается пользователю в качестве сообщения.<br />
<br />
Собственно форматы ФЛК, как правило, содержат команды IF. Многочисленные примеры таких форматов находятся в директории БД IBIS.<br />
<br />
==Форматы с переменными метками==<br />
<br />
В некоторых режимах работы системы применяются форматы, в которых используются, так называемые, переменные метки (например, при вводе данных через словарь – т.н. форматы для переноса данных). [[Сценарии поиска#Поиски по словарю|Исходным для таких форматов обязательно является термин словаря.]]<br />
<br />
Переменные метки обозначаются в таких форматах в виде *** (три символа ''звёздочка''). Форматы с переменными метками используются следующим образом:<br />
* Определяется первая [[Таблица выбора полей#ТВП для инвертированного файла|индексная ссылка]] для исходного термина: а именно, соответствующие номер документа (MFN), метка поля (TAG) и повторение (OCC).<br />
* Все переменные метки в формате заменяются на значение найденной метки поля (TAG) и форматированию подвергается документ с найденным номером (MFN).<br />
* В качестве результата форматирования берется строка с номером OCC (нумерация начинается с 1). Если нет строки с таким номером, результатом форматирования является пустая строка.<br />
<br />
Примеры форматов с переменными метками находятся в директории БД IBIS.<br />
<br />
==Ссылки==<br />
<br />
См. также:<br />
* [[Базы данных ИРБИС]]<br />
* [[Операторы языка форматирования ИРБИС]]<br />
* [[Функции языка форматирования ИРБИС]]<br />
* [[UNIFOR]]<br />
* <tt>[[IRBIS64.dll]]</tt><br />
* [[Язык запросов ИРБИС]]<br />
<br />
Источники информации:<br />
* [[Общее описание системы ИРБИС64]]<br />
<br />
[[Категория:Язык форматирования системы ИРБИС]]<br />
[[Категория:Анонсированные статьи]]</div>Sokvhttp://wiki.elnit.org/index.php?title=UNIFOR&diff=2459UNIFOR2016-05-20T16:52:19Z<p>Sokv: </p>
<hr />
<div>UNIFOR – [[Язык форматирования системы ИРБИС#Форматные выходы. UNIFOR|''форматный выход'']], реализующий множество функций вне базовых рамок [[Язык форматирования системы ИРБИС|языка форматирования]].<br />
<br />
В статье для удобства перечень форматных выходов UNIFOR разбит на категории.<br />
<br />
==Использование UNIFOR==<br />
<br />
UNIFOR имеет следующий синтаксис в языке форматирования (в полной или сокращённой форме):<br />
&unifor(формат)<br />
&uf(формат)<br />
где:<br />
* '''<tt>&</tt>''' – идентификатор вызова форматного выхода,<br />
* '''<tt>unifor</tt>''' – имя форматного выхода (соответственно '''<tt>uf</tt>''' – сокращённое имя),<br />
* '''<tt>формат</tt>''' – аргумент.<br />
<br />
Рекомендуется использовать сокращённую форму вызова UNIFOR. Сокращённая форма по действию ничем не отличается от полной формы, зато позволяет сократить размер формата и повысить его читаемость.<br />
<br />
Вид реализуемой функции определяется первыми символами строки, которая формируется в результате выполнения формата, передаваемого в качестве аргумента.<br />
<br />
===Передача параметров===<br />
<br />
Во многих функциях, которые позволяет реализовать форматный выход UNIFOR, для передачи параметра неизвестной длины используется уникальный разделитель. Значение параметра должно быть окружено таким уникальным разделителем слева и справа.<br />
<br />
Например, если исходная строка<br />
!AAAA!BBBB<br />
то в качестве уникального разделителя выступает символ<br />
!<br />
значение параметра<br />
AAAA<br />
а оставшаяся часть исходной строки<br />
BBBB<br />
<br />
==Перечень функций UNIFOR с примерами их применения==<br />
<br />
===Функции для обработки строк===<br />
<br />
====Обычные функции для обработки строк====<br />
<br />
{{Описание функции UNIFOR<br />
|name=+95<br />
|title=Вернуть длину исходной строки<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
|sectionLevel======<br />
}}<br />
<br />
+95<строка><br />
<br />
{{Описание функции UNIFOR<br />
|name=+96<br />
|title=Вернуть часть строки<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
|sectionLevel======<br />
}}<br />
<br />
+96A*SSS.NNN#<строка><br />
где:<br />
* A – направление: 0 – с начала строки; 1 – с конца;<br />
* SSS – смещение;<br />
* NNN – кол-во символов.<br />
<br />
'''Примеры:'''<br />
&uf('+960*0.4#'v100)<br />
&uf('+960*5.4#'v100)<br />
&uf('+961*0.4#'v100)<br />
<br />
{{Описание функции UNIFOR<br />
|name=Q<br />
|title=Вернуть заданную строку в нижнем регистре<br />
|sectionLevel======<br />
}}<br />
<br />
Q<строка><br />
<br />
'''Примеры:'''<br />
&unifor("Q"v200)<br />
<br />
{{Описание функции UNIFOR<br />
|name=+97<br />
|title=Вернуть заданную строку в верхнем регистре<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
|sectionLevel======<br />
}}<br />
<br />
+97<строка><br />
<br />
{{Описание функции UNIFOR<br />
|name=+98<br />
|title=Заменить в заданной строке один символ на другой<br />
|description=Заменить в заданной строке один символ на другой (регистр учитывается)<br />
|versionFilename=RELEASE_7_2.doc<br />
|versionText=2007.2<br />
|sectionLevel======<br />
}}<br />
<br />
+98ab<строка><br />
где:<br />
* a – заменяемый символ;<br />
* b – заменяющий символ.<br />
<br />
'''Примеры:'''<br />
<br />
В результате выполнения формата<br />
&uf('+98 0',f(1,5,0))<br />
получится значение<br />
00001<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9F<br />
|title=Вернуть ANSI-символ с заданным кодом<br />
|versionFilename=RELEASE_8_1.doc<br />
|versionText=2008.1<br />
|sectionLevel======<br />
}}<br />
<br />
+9F<код><br />
<br />
'''Примеры:'''<br />
<br />
Такой форматный выход может пригодиться, например, когда надо вывести в литерале символ, совпадающий с ограничителями литерала.<br />
<br />
Для формата<br />
<br />
'11111',&Uf('+9F39'),'22222'<br />
<br />
результат расформатирования будет<br />
<br />
11111'22222<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9I<br />
|title=Заменить в исходных данных некоторую заданную последовательность символов другой заданной последовательностью символов<br />
|versionFilename=RELEASE_9_1.doc<br />
|versionText=2009.1<br />
|sectionLevel======<br />
}}<br />
<br />
+9I!AAAA!/BBBB/<данные><br />
где <tt>АААА</tt> – последовательность символов, подлежащая замене; <tt>ВВВВ</tt> – заменяющая последовательность символов; символ <tt>!</tt> – уникальный разделитель, отсутствующий в строке <tt>АААА</tt>; символ <tt>/</tt> – уникальный разделитель, отсутствующий в строке <tt>ВВВВ</tt>. <tt>ВВВВ</tt> может быть пустым значением, в этом случае последовательность <tt>АААА</tt> будет удаляться. Обрабатываются ВСЕ (а не только первое) вхождения <tt>АААА</tt> в исходные данные. В качестве разделителей можно использовать ТОЛЬКО символы стандартного набора (с кодом менее 128).<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9S<br />
|title=Найти подстроку<br />
|description=Возвращает позицию первого символа найденного вхождения подстроки в исходную строку. Считается, что символы в строке нумеруются с 1. Если подстрока не найдена, то возвращает 0. ''Комментарий: следует отметить, что в функции {{Описание функции UNIFOR (ссылка)|name=+96|title=Вернуть часть строки}} указывают смещение, а не позицию символа''<br />
|versionFilename=RELEASE_13_1.doc<br />
|versionText=2013.1<br />
|sectionLevel======<br />
}}<br />
<br />
+9S!подстрока!<исходная_строка><br />
где <tt>подстрока</tt> – подстрока, которую нужно найти; <tt><исходная_строка></tt> – исходная строка для поиска; символ <tt>!</tt> – уникальный разделитель, отсутствующий в искомой подстроке.<br />
<br />
====Функции для работы со словами====<br />
<br />
{{Описание функции UNIFOR<br />
|name=E<br />
|title=Вернуть заданное количество слов с начала строки<br />
|sectionLevel======<br />
}}<br />
<br />
EN<строка><br />
где <tt>N</tt> – количество слов (одна цифра).<br />
<br />
<br />
'''Примеры:'''<br />
&unifor("E3"v200^a)<br />
<br />
{{Описание функции UNIFOR<br />
|name=F<br />
|title=Вернуть часть строки, начиная со следующего слова после указанного и до конца строки<br />
|sectionLevel======<br />
}}<br />
<br />
FN<строка><br />
где <tt>N</tt> – количество слов (одна цифра).<br />
<br />
'''Примеры:'''<br />
&unifor("F3"v200^a)<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9G<br />
|title=Преобразовать заданную строку в список слов<br />
|versionFilename=RELEASE_8_1.doc<br />
|versionText=2008.1<br />
|sectionLevel======<br />
}}<br />
<br />
+9G<строка><br />
<br />
Границы слов определяются на основе [[Файлы ИРБИС#Таблица алфавитных символов|таблицы алфавитных символов]].<br />
<br />
====Дополнительные функции для обработки строк====<br />
<br />
{{Описание функции UNIFOR<br />
|name=+3E<br />
|title=Кодирование данных для представления в URL<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
|sectionLevel======<br />
}}<br />
<br />
+3E<данные><br />
<br />
'''Примеры:'''<br />
&unifor('+3E',v1007)<br />
<br />
{{Описание функции UNIFOR<br />
|name=+3D<br />
|title=Декодирование данных из URL<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
|sectionLevel======<br />
}}<br />
<br />
+3D<данные><br />
<br />
{{Описание функции UNIFOR<br />
|name=+3+<br />
|title=Перевод знака <tt>+</tt> в <tt>%2B</tt><br />
|sectionLevel======<br />
}}<br />
<br />
+3+<данные><br />
<br />
{{Описание функции UNIFOR<br />
|name=+3U<br />
|title=Кодирование строки в UTF-8<br />
|sectionLevel======<br />
}}<br />
<br />
+3U<данные><br />
<br />
{{Описание функции UNIFOR<br />
|name=+3W<br />
|title=Декодирование строки из UTF-8<br />
|sectionLevel======<br />
}}<br />
<br />
+3W<данные><br />
<br />
{{Описание функции UNIFOR<br />
|name=T<br />
|title=Транслитерация кириллических символов с помощью латиницы<br />
|sectionLevel======<br />
}}<br />
<br />
TN<строка><br />
где N – вид таблицы транслитерации (0 или 1).<br />
<br />
'''Примеры:'''<br />
&unifor("T0"V200)<br />
<br />
{{Описание функции UNIFOR<br />
|name=G<br />
|title=Вернуть часть строки до или начиная с заданного символа<br />
|sectionLevel======<br />
}}<br />
<br />
GNA<строка><br />
где:<br />
* N может принимать значения:<br />
** 0 (или A) – до заданного символа не включая его;<br />
** 1 (или B) – начиная с заданного символа;<br />
** 2 (или C) – после заданного символа;<br />
** 3 (или D) – после последнего вхождения заданного символа;<br />
** 4 (или E) – до последнего вхождения заданного символа (включая его);<br />
** 5 – до последнего вхождения заданного символа (не включая его).<br />
* А – заданный символ. Символ обозначает самого себя, кроме # (обозначает любую цифру) и $ (обозначает любую букву).<br />
<br />
''Примечание: функция G5 присутствует в версиях ИРБИС с {{Ссылка на открытый FTP<br />
|filename=RELEASE_15_1.doc<br />
|text=2015.1<br />
}}.''<br />
<br />
'''Примеры:'''<br />
&unifor("G0#"v700)<br />
&unifor("G1-"v700^a)<br />
&unifor("G2-"v700^a)<br />
<br />
Пример получения ссылки на файл из подполя 952^U полнотекстовой БД для файлов, добавленных с разбиением и без<br />
&uf('G0:',&uf('G4:',&uf('G2:',&uf('G2:',v952^U))))<br />
<br />
{{Описание функции UNIFOR<br />
|name=9<br />
|title=Удалить двойные кавычки из заданной строки<br />
|sectionLevel======<br />
}}<br />
<br />
9<исх.строка><br />
<br />
'''Примеры:'''<br />
&unifor("9"v200^a)<br />
<br />
{{Описание функции UNIFOR<br />
|name=X<br />
|title=Удаление из заданной строки фрагментов, выделенных угловыми скобками <><br />
|sectionLevel======<br />
}}<br />
<br />
X<строка><br />
<br />
'''Примеры:'''<br />
&unifor("X"v200)<br />
<br />
{{Описание функции UNIFOR<br />
|name=+S<br />
|title=<nowiki>Выводит нужную часть текста (до знака "=", или после него) в заголовках, описанных по принципу <NNN=KKK></nowiki><br />
|versionText=не установленно, предположительно давно<br />
|sectionLevel======<br />
}}<br />
<br />
+SN[строка]<br />
где N может принимать значения 0 для вывода текста после знака "=", и 1 для вывода текста перед знаком "=".<br />
<br />
Выдержка из документации (см. {{Ссылка на открытый FTP|filename=RELEASE_2_2.doc|text=Файл описания релиза 2002.2}}<br />
и [http://nucleonics.fatal.ru/irbis/irbishelp.html?wci004010200000.htm документацию на http://nucleonics.fatal.ru]):<br />
* Для книг, описанных «Под заглавием», которые начинаются с числительного, обозначенного цифрами, начальный элемент сортировки и авторский знак должны формироваться по словесному обозначению числительного. В связи с этим Пользователь должен ввести дополнительную разметку типа <NNN=Текст>, где «Текст», стоящий после знака «=», — это словесное значение числительного NNN, используемое взамен его для формирования авторского знака и/или в качестве начального элемента сортировки. Например, заглавие 1000 и одна ночь, размеченное как <1000=тысяча> и одна ночь, для формирования авторского знака и сортировки будет представлено как «тысяча и одна ночь», а для печати как «1000 и одна ночь».<br />
* Для биографических и биобиблиографических изданий, описанных под заглавием, начинающимся с имени лица, которому оно посвящено, авторский знак и начальный элемент сортировки должны формироваться на фамилию. В связи с этим Пользователь также должен ввести дополнительную разметку типа <AAA=Текст>, где «Текст», стоя-щий после знака «=», — это фамилия, используемая (взамен части ААА) для формирования авторского знака и/или начального элемента сортировки. Например, заглавие Антон Павлович Чехов может быть размечено как <Антон Павлович Чехов=Чехов Антон Павлович> (в сортировку пойдет «Чехов Антон Павлович», на печать «Антон Павлович Чехов»). Заметим, что разметка типа <Антон=Чехов> Павлович Чехов даст правильный авторский знак (Чехов Павлович Чехов), но может дать ошибки в сортировке.<br />
<br />
'''Примеры:'''<br />
<br />
Пример входной строки:<br />
<br />
<1=Первое> апреля<br />
<br />
Примеры использования функции:<br />
<br />
&uf('+s0'v200^a)<br />
&uf('+s1'v200^a)<br />
<br />
Пример расформатирования:<br />
<br />
Первое апреля<br />
1 апреля<br />
<br />
{{Описание функции UNIFOR<br />
|name==<br />
|title=Сравнить заданное значение с маской<br />
|description=Возвращаемое значение: 1 – в случае положительного результата сравнения; 0 – в случае отрицательного<br />
|versionFilename=RELEASE_8_1.doc<br />
|versionText=2008.1<br />
|sectionLevel======<br />
}}<br />
<br />
=!<маска>!<значение><br />
<br />
<tt>!</tt> – уникальный разделитель (может быть любым символом). Маска может содержать принятые символы маскирования <tt>*</tt> и <tt>?</tt>. В общем случае маска может содержать несколько масок, отделенных друг от друга символом вертикальной черты <tt>|</tt>.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+\<br />
|title=Преобразование строки, удваивающее обратный слэш, или обратное<br />
|description=Преобразование строки, удваивающее обратный слэш, или обратное<br />
|sectionLevel======<br />
}}<br />
<br />
+\N<строка><br />
<br />
где:<br />
* N может принимать значения<br />
** 0 - удвоение знаков обратного слэш;<br />
** 1 - преобразование удвоенных знаков слэш в одинарные.<br />
<br />
'''Примеры:'''<br />
<br />
Результатом формата<br />
&uf('+\0c:\example.txt')<br />
будет строка<br />
c:\\example.txt<br />
<br />
Результатом формата<br />
&uf('+\1c:\\example.txt')<br />
будет строка<br />
c:\example.txt<br />
<br />
<br />
{{Описание функции UNIFOR<br />
|name=+R<br />
|title=Усекает строку справа до точки. Используется для отсечения одного уровня в рубриках ГРНТИ<br />
|description=Усечение кода рубрики в рубрикаторе ГРНТИ до вышестоящего<br />
|sectionLevel======<br />
}}<br />
<br />
+\R<строка><br />
<br />
'''Примеры:'''<br />
<br />
формат<br />
&unifor("+R"v3) <br />
исходная строка<br />
02.61.45<br />
результирующая строка<br />
02.61<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9R<br />
|title=Преобразование римского числа в арабское<br />
|versionFilename=RELEASE_11_1.doc<br />
|versionText=2011.1<br />
|sectionLevel======<br />
}}<br />
<br />
+9R<римское_число><br />
<br />
{{Описание функции UNIFOR<br />
|name=+9X<br />
|title=Преобразование арабского числа в римское<br />
|versionFilename=RELEASE_11_1.doc<br />
|versionText=2011.1<br />
|sectionLevel======<br />
}}<br />
<br />
+9X<арабское_число><br />
<br />
===Функции для работы с датой и временем===<br />
<br />
{{Описание функции UNIFOR<br />
|name=3<br />
|title=Выдача данных, связанных с датой и временем<br />
|description=Выдача данных, связанных с датой и временем<br />
}}<br />
<br />
Имеются следующие подфункции:<br />
* '''<tt>3</tt>''' – выдать текущую дату в виде ГГГГММДД. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>30</tt>''' – выдать текущий год в виде ГГГГ. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>31</tt>''' – выдать текущий месяц в виде ММ (с лидирующим нулем). ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>32</tt>''' – выдать текущий день в виде ДД (с лидирующим нулем). ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>33</tt>''' – выдать текущий год в виде ГГ. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>34</tt>''' – выдать текущий месяц в виде М (без лидирующего нуля). ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>35</tt>''' – выдать текущий день в виде Д (без лидирующего нуля). ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>36MM</tt>''' – выдать по заданному номеру месяца его название на русском языке в именительном падеже. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>37MM</tt>''' – выдать по заданному номеру месяца его название на русском языке в родительном падеже. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>38MM</tt>''' – выдать по заданному номеру месяца его название на английском языке. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>39</tt>''' – выдать текущее время. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>3А</tt>''' – выдать номер текущего дня от начала года. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>3BГГГГММДД/ддд</tt>''' – прибавить/вычесть из заданной даты в виде ГГГГММДД заданное количество дней (ддд – может быть отрицательным) и вернуть полученную дату в виде ГГГГММДД. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_7_2.doc|text=2007.2}}.</small>''<br />
* '''<tt>3СГГГГММДД/ГГГГММДД</tt>''' – вычесть из одной даты в виде ГГГГММДД другую дату в виде ГГГГММДД и вернуть разницу в виде количества дней. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_7_2.doc|text=2007.2}}.</small>''<br />
* '''<tt>3JГГГГММДД</tt>''' – переводит заданную юлианскую дату ГГГГММДД в грегорианскую. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_9_1.doc|text=2009.1}}.</small>''<br />
<br />
'''Примеры:'''<br />
<br />
&unifor('36',&unifor('34'))<br />
<br />
Вычесть из текущей даты сто дней:<br />
&uf('3B',&uf('3'),'/-100')<br />
<br />
Количество дней с 1 января 1900 года до сегодняшнего дня:<br />
&uf('3С',&uf('3'),'/19000101')<br />
<br />
===Функции для работы с глобальными переменными===<br />
<br />
Дополнительно о глобальных переменных см. [[Язык форматирования системы ИРБИС#Глобальные переменные|в подразделе ''Глобальные переменные'' статьи ''Язык форматирования системы ИРБИС'']].<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7<br />
|title=Очистить (опустошить) все глобальные переменные<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7<br />
<br />
'''Примеры:'''<br />
&unifor('+7')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7R<br />
|title=Чтение глобальной переменной<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7RNNN,nnn<br />
где:<br />
* NNN – номер переменной.<br />
* nnn – номер повторения. По умолчанию – номер текущего повторения в повторяющейся группе.<br />
Эквивалентная конструкция языка форматирования GNNN.<br />
<br />
'''Примеры:'''<br />
&unifor('+7R100')<br />
эквивалентная конструкция языка форматирования:<br />
G100<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7W<br />
|title=Запись глобальной переменной<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7WNNN#SSSS<br />
где:<br />
* NNN – номер переменной;<br />
* SSSS – список строк (результат расформатирования); каждая строка становится отдельным повторением.<br />
<br />
'''Примеры:'''<br />
&unifor('+7W100#',(v910/))<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7U<br />
|title=Добавление повторений глобальной переменной<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7UNNN#SSSS<br />
где:<br />
* NNN – номер переменной;<br />
* SSSS – список строк (результат расформатирования); каждая строка становится отдельным повторением.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7M<br />
|title=Логическое перемножение повторений двух переменных<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7MNNN#MMM<br />
Результат перемножения записывается в первую переменную.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7S<br />
|title=Логическое вычитание повторений двух переменных<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7SNNN#MMM<br />
Результат вычитания записывается в первую переменную.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7A<br />
|title=Логическое сложение повторений двух переменных<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7ANNN#MMM<br />
Результат сложения записывается в первую переменную.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7G<br />
|title=Исключение неоригинальных повторений переменной<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7GNNN<br />
Результат исключения записывается в ту же переменную.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7T<br />
|title=Сортировка повторений переменной<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7TNNN<br />
Результат сортировки записывается в ту же переменную.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+99<br />
|title=Групповая установка глобальных переменных<br />
|description=Групповая установка глобальных переменных. Применяется для ИРБИС-Навигатора. Исходная строка закодирована с помощью URL-кодировки. После раскодировки рассматривается как список строк (аналогично <tt>TStringList.Text</tt> в Delphi). Каждая строка этого списка имеет структуру: <tt>NNN#<значение_глобальной_переменной_NNN><tt><br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
}}<br />
<br />
+99<br />
<br />
===Функции для работы с базой данных===<br />
<br />
{{Описание функции UNIFOR<br />
|name=0<br />
|title=Выдать содержимое документа полностью в формате RTF<br />
|description=Выдать содержимое документа полностью (формат ALLl)<br />
}}<br />
0<br />
<br />
'''Примеры:'''<br />
&unifor('0')<br />
<br />
'''Результат расформатирования:'''<br />
\b #910/1:_\b0 ^YДА^PНЮАУ - каф. кримінального права\par \b #920/1:_\b0 ATHRA\par \b #210/1:_\b0 ^AТацій^BВ. Я.^GВасиль Якович^8ukr\par \b #710/1:_\b0 ^AТаций^BВ. Я.^GВасилий Яковлевич^8rus\par \b #907/1:_\b0 ^A20110301^B111\par \b #907/2:_\b0 ^A20110419^BZhukovskaya\par \b #710/2:_\b0 ^ATatsiy^BV.^8eng\par \b #907/3:_\b0 ^A20110421^BZhukovskaya\par \b #907/4:_\b0 ^A20111108^B111\par <br />
<br />
{{Описание функции UNIFOR<br />
|name=+0<br />
|title=Выдать содержимое документа полностью во внутреннем представлении<br />
|description=Выдать содержимое документа полностью (формат ALLl)<br />
}}<br />
+0<br />
<br />
'''Результат расформатирования:'''<br />
0<br />
2#0<br />
0#1<br />
910#^YДА^PНЮАУ - каф. кримінального права<br />
920#ATHRA<br />
210#^AТацій^BВ. Я.^GВасиль Якович^8ukr<br />
710#^AТаций^BВ. Я.^GВасилий Яковлевич^8rus<br />
907#^A20110301^B111<br />
907#^A20110419^BZhukovskaya<br />
710#^ATatsiy^BV.^8eng<br />
907#^A20110421^BZhukovskaya<br />
907#^A20111108^B111<br />
<br />
{{Описание функции UNIFOR<br />
|name=++0<br />
|title=Выдать содержимое документа полностью – только содержимое полей<br />
|description=Выдать содержимое документа полностью (формат ALLl)<br />
}}<br />
++0<br />
<br />
{{Описание функции UNIFOR<br />
|name=+@<br />
|title=Выдать содержимое документа полностью в формате JSON<br />
|versionFilename=RELEASE_2014_1.doc<br />
|versionText=2014.1<br />
|sectionLevel=====<br />
}}<br />
+@<br />
<br />
{{Описание функции UNIFOR<br />
|name=+N<br />
|title=Выдать количество повторений поля<br />
|description=Выдать количество повторений поля, метка которого указана после идентификатора функции<br />
}}<br />
+N<br />
<br />
'''Примеры:'''<br />
&unifor('+N910')<br />
<br />
{{Описание функции UNIFOR<br />
|name=A<br />
|title=Выдать заданное повторение поля<br />
}}<br />
<br />
AV<tag>^<delim>*<offset>.<length>#<occur><br />
где:<br />
* <tt><tag></tt> – метка поля;<br />
* <tt><delim></tt> – разделитель подполя;<br />
* <tt><offset></tt> – смещение;<br />
* <tt><length></tt> – длина;<br />
* <tt><occur></tt> – номер повторения.<br />
<br />
'''Примеры:'''<br />
&unifor('Av200#2')<br />
&unifor('Av910^a#5')<br />
&unifor('Av10^b*2.10#2')<br />
<br />
{{Описание функции UNIFOR<br />
|name=P<br />
|title=Выдать заданное оригинальное повторение поля<br />
|formatSeeAlsoName=A<br />
|formatSeeAlsoTitle=Выдать заданное повторение поля<br />
|exampleSeeAlsoName=A<br />
|exampleSeeAlsoTitle=Выдать заданное повторение поля<br />
}}<br />
<br />
{{Описание функции UNIFOR<br />
|name=+E<br />
|title=Возвращает порядковый номер заданного поля в записи<br />
|description=Возвращает порядковый номер заданного поля в записи. При отсутствии в записи заданного поля возвращается пустота<br />
|versionFilename=RELEASE_9_1.doc<br />
|versionText=2009.1<br />
}}<br />
<br />
+Etag#occ<br />
где:<br />
* tag – метка поля;<br />
* occ – номер повторения поля (по умолчанию – 1). Может принимать значение <tt>*</tt> – это означает номер текущего повторения в повторяющейся группе.<br />
<br />
{{Описание функции UNIFOR<br />
|name=K<br />
|title=Раскодировка через справочник<br />
|description=Возвращает значение из справочника, соответствующее переданному коду (иными словами, осуществляется раскодировка)<br />
}}<br />
<br />
K<имя_справочника><разделитель><исх_значение><br />
<br />
<разделитель> между <имя_справочника> и <исх_значение> может быть двух видов:<br />
\ - раскодировка с учетом регистра,<br />
! - раскодировка без учета регистра.<br />
<br />
'''Примеры:'''<br />
&unifor("Kjz.mnu\"v101)<br />
&uf('kFIO_SF.MNU!'&uf('av907^b#1'))<br />
<br />
{{Описание функции UNIFOR<br />
|name=I<br />
|title=Вернуть параметр из INI-файла<br />
}}<br />
<br />
I<SECTION>,<PAR_NAME>,<DE-FAULT_VALUE><br />
<br />
'''Примеры:'''<br />
&unifor('IPRIVATE,NAME,NONAME')<br />
<br />
{{Описание функции UNIFOR<br />
|name=1<br />
|title=Вернуть заданный подэлемент<br />
}}<br />
<br />
1NCXY?V<tag>^<delim>*<offset>.<length>#<occur><br />
где:<br />
* N – номер повторения подэлемента; если указана * – номер подэлемента совпадает со счетчиком повторяющейся группы.<br />
* ХY – разделители между подэлементами.<br />
* С – принимает значения: R – разделители справа от каждого подэлемента, кроме последнего; L – разделители слева от каждого подэлемента; D – каждый подэлемент заключен слева разделителем Х и справа – Y.<br />
* ? – символ-разделитель.<br />
* Остальные параметры аналогичны параметрам для функции {{Описание функции UNIFOR (ссылка)|name=A|title=Выдать заданное повторение поля}}.<br />
<br />
'''Примеры:'''<br />
(/&unifor('1*R; ?v910^h#1'))<br />
<br />
{{Описание функции UNIFOR<br />
|name=J<br />
|title=Вернуть кол-во ссылок для заданного термина<br />
}}<br />
<br />
J<dbn>,<термин><br />
<dbn> – имя БД; по умолчанию используется текущая.<br />
<br />
'''Примеры:'''<br />
&unifor('JBOOK,',"A="v200^a)<br />
<br />
{{Описание функции UNIFOR<br />
|name=D<br />
|title=Форматирование документа из другой БД<br />
|description=Форматирование документа из другой БД (REF на другую БД – отношение «от одного к одному»)<br />
}}<br />
<br />
D<dbn>,<@mfn|/termin/>,<@имя_формата|формат|*><br />
Передаются три параметра, разделенные запятой:<br />
* Первый – имя БД;<br />
* Второй – или непосредственно MFN с предшествующим символом @ или термин, ссылающийся на документ (термин – заключается в ограничительные символы);<br />
* Третий – или имя формата с предшествующим символом @ или непосредственно формат.<br />
Если задается *, данные выводятся по прямой ссылке (метка поля, номер повторения).<br />
<br />
'''Примеры:'''<br />
&unifor('DBOOK,/K=AAA/,v200')<br />
<br />
{{Описание функции UNIFOR<br />
|name=7<br />
|title=Расформатирование группы связанных документов из другой БД<br />
|description=Расформатирование группы связанных документов из другой БД (отношение «от одного к многим»)<br />
Функция обеспечивает возможность связать запись с рядом других записей по какому бы то ни было общему признаку. К примеру, можно отобрать все записи с определенным заглавие, индексом УДК/ББК, ключевым словом. <br />
|versionFilename=RELEASE_4_1.doc<br />
|versionText=2004.1<br />
}}<br />
<br />
7<имя_БД>,</termin/>,<@имя_формата|формат|*><br />
где:<br />
* имя_БД – имя базы данных, из которой будут браться связанные документы; по умолчанию используется текущая БД.<br />
* /termin/ – ключевой термин, на основе которого отбираются связанные документы; термин заключается в уникальные ограничители (например. /), в качестве которых используется символ, не входящий (гарантированно) в термин.<br />
* @имя_формата|формат|* – имя формата или формат в явном виде, в соответствии с которым будут расформатироваться связанные документы. Если задается имя формата, то он берется из директории БД, заданной параметром <имя_БД>. Если задается *, данные выводятся по прямой ссылке (метка поля, номер повторения).<br />
<br />
'''Примеры:'''<br />
&unifor('7TEST,',"/T="v200^a"/",',v903"\par "')<br />
<br />
&uf(|7EK,!FAK=23.01!,&uf('av907^A#1'),&uf('6brief')/|d90),<br />
<br />
{{Описание функции UNIFOR<br />
|name=!<br />
|title=Команда постредактуры: очистить результат расформатирования от двойных разделителей<br />
|description=Команда постредактуры: очистить результат расформатирования от двойных разделителей (двойных точек или двойных конструкций <. – >). Имеет смысл использовать один раз в любом месте формата<br />
|versionFilename=RELEASE_4_1.doc<br />
|versionText=2004.1<br />
}}<br />
<br />
!<br />
<br />
'''Примеры:'''<br />
&unifor('!')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+F<br />
|title=Команда постредактуры: очистить результат расформатирования от RTF-конструкций<br />
|description=Команда постредактуры: очистить результат расформатирования от RTF-конструкций. Имеет смысл использовать один раз в любом месте формата<br />
|versionFilename=RELEASE_4_1.doc<br />
|versionText=2004.1<br />
}}<br />
<br />
+F<br />
<br />
'''Примеры:'''<br />
&unifor('+F')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1O<br />
|title=Групповая мультираскодировка списка<br />
}}<br />
<br />
+1O<MNU>|SSSS<br />
где:<br />
* <MNU> имя справочника (с расширением).<br />
* SSSS – список строк (результат расформатирования.<br />
<br />
'''Примеры:'''<br />
&unifor('+1Omhr.mnu|',(v910^m/))<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1I<br />
|title=Исключение неоригинальных значений из списка<br />
}}<br />
<br />
+1ISSSS<br />
где параметры аналогичны описанным для функции {{Описание функции UNIFOR (ссылка)|name=+1O|title=Групповая мультираскодировка списка}}<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1V<br />
|title=Сортировка списка<br />
}}<br />
<br />
+1VSSSS<br />
где параметры аналогичны описанным для функции {{Описание функции UNIFOR (ссылка)|name=+1O|title=Групповая мультираскодировка списка}}<br />
<br />
{{Описание функции UNIFOR<br />
|name=+I<br />
|title=Формирования ссылки (гиперссылки)<br />
|versionFilename=RELEASE_4_1.doc<br />
|versionText=2004.1<br />
}}<br />
<br />
+I/содержание_ссылки/название_ссылки<br />
'''/содержание_ссылки/''' – внутренние данные ссылки, ограниченные уникальным разделителем. Имеют структуру<br />
NNN,HHH,<параметры><br />
где:<br />
* NNN – тип ссылки, возможные значения: <br />
** 0 – ссылки на внешние объекты;<br />
** 1 – ссылка на связанный документ (возможно в другой БД) – "от одного к одному";<br />
** 2 – ссылка на связанные документы (возможно в другой БД) – "от одного к многим";<br />
* HHH – экранная подсказка, может иметь вид: @iii – где <tt>iii</tt> – номер текста в файле IRBISMSG.TXT, \text\ – собственно текст подсказки в уникальных ограничителях.<br />
'''<параметры>''':<br />
* Для ссылок типа 0 представляет собой в общем виде URL внешнего объекта (в том числе – полный путь на файл).<br />
* Для ссылок типа 1 и 2 <параметры> имеют следующую структуру:<br />
имя_БД,имя_формата,termin<br />
где:<br />
* имя_БД – имя базы данных, из которой будут браться связанные документы; по умолчанию используется текущая БД.<br />
* имя_формата – имя формата, в соответствии с которым будут расформатироваться связанные документы. (по умолчанию – используется оптимизированный формат).<br />
* termin – ключевой термин, на основе которого отбираются (ищутся) связанные документы.<br />
<br />
<br />
'''Примеры:'''<br />
&unifor('+I?0,,'v951^i'?',v951^t,|INTERNET|n951^t)<br />
&unifor(|+I?1,,,,I=|v421^w|?|,v421^a)<br />
<br />
{{Описание функции UNIFOR<br />
|name=+6<br />
|title=Выдать статус записи<br />
|description=Выдать статус записи. Если запись логически удаленная, возвращается 0, в противном случае – 1<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+6<br />
<br />
'''Примеры:'''<br />
… if &unifor('+6')='0' then 'запись логически удаленная' fi …<br />
<br />
{{Описание функции UNIFOR<br />
|name=+D<br />
|title=Выдать имя базы данных<br />
|description=Возвращает имя текущей базы данных<br />
}}<br />
<br />
+D<br />
<br />
'''Примеры:'''<br />
… &unifor('+D') …<br />
<br />
{{Описание функции UNIFOR<br />
|name=2<br />
|title=Вернуть последний номер MFN в базе +1 <br />
|description=Возвращает последний номер MFN в текущей базе данных, увеличенный на единицу (MAX_MFN) + 1). В общем случае параметр имеет вид 2N, где N - выводимое количество символов, обрезанное до необходимой длинны справа.<br />
}}<br />
<br />
'''Пример:'''<br />
&unifor('2'), &unifor('27')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9V<br />
|title=Вернуть номер поколения ИРБИС<br />
|description=Возвращает поколение системы, в которой осуществляется расформатирование. Может быть полезен при разработке единых форматов, которые по-разному выполняются в ИРБИС 32 и ИРБИС 64<br />
|versionFilename=RELEASE_11_1.doc<br />
|versionText=2011.1<br />
}}<br />
<br />
+9V<br />
который возвращает:<br />
* 32 – если форматирование выполняется в ИРБИС 32;<br />
* 64 – если в ИРБИС 64 (и ИРБИС 128).<br />
<br />
{{Описание функции UNIFOR<br />
|name=4N<br />
|title=Форматировать предыдущую копию текущей записи<br />
|versionFilename=RELEASE_11_1.doc<br />
|versionText=2011.1<br />
}}<br />
<br />
4N,Format<br />
где: <br />
* <tt>N</tt> – номер копии (в обратном порядке, т.е. если N=1 – это один шаг назад, N=2 – два шага назад и т.д.). Может принимать значение * – это указывает на последнюю копию. Если N – пустое значение, то в случае повторяющейся группы в качестве значения N берется НОМЕР ТЕКУЩЕГО ПОВТОРЕНИЯ, в противном случае берется первая копия;<br />
* <tt>Format</tt> – формат; может задаваться непосредственно или в виде @имя_формата.<br />
<br />
Если не задается ни <tt>N</tt> ни <tt>Format</tt>, т.е. &unifor('4'), то возвращается количество предыдущих копий. <br />
Если запись не имеет предыдущих копий, то &unifor('4') возвращает 0, а все остальные конструкции &unifor('4...') возвращают пустоту.<br />
<br />
'''Примеры:'''<br />
&unifor('41,@brief') <br />
(...&unifor('4,v200^a')...) <br />
&unifor('4*,(v910/)')<br />
<br />
Примечание: в связи с этим см. также новую команду глобальной корректировки – ВОССТАНОВИТЬ ПРЕДЫДУЩУЮ КОПИЮ.<br />
<br />
===Функции для работы с повторяющимися группами===<br />
<br />
Дополнительно о повторяющихся группах см. [[Язык форматирования системы ИРБИС#Повторяющиеся группы|в подразделе ''Повторяющиеся группы'' статьи ''Язык форматирования системы ИРБИС'']].<br />
<br />
{{Описание функции UNIFOR<br />
|name=+4<br />
|title=Выдача метки, порядкового номера и значения поля в соответствии с индексом (номером повторения) повторяющейся группы<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+4XY <br />
где:<br />
* Х принимает три значения: T – выдать метку; F – выдать значение поле; N – выдать порядковый номер поля в записи (отличается от индекса повторения, если Y принимает значение 1); <br />
* Y принимает значения: 0 – поля выдаются в порядке расположения в записи; 1 – поля выдаются в порядке возрастания меток (по умолчанию 0).<br />
<br />
'''Примеры:'''<br />
(…&unifor('+4T1'),'_' &unifor('+4N1'),': ', &unifor('+4F1'),'<br>'…)<br />
<br />
{{Описание функции UNIFOR<br />
|name=+5<br />
|title=Выдача элемента списка/справочника в соответствии с индексом (номером повторения) повторяющейся группы<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+5Х<имя_справочника/списка> <br />
где Х принимает значения: Т – выдать значение; F – выдать пояснение (имеет смысл, если задается справочник, т.е. файл с расширением MNU).<br />
<br />
'''Примеры:'''<br />
…(…&unifor('+5Tfield.mnu'),' – ',&unifor('+5Ffield.mnu'),'<br>'…)<br />
<br />
{{Описание функции UNIFOR<br />
|name=+90<br />
|title=Вернуть номер текущего повторения в повторяющейся группе<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
}}<br />
<br />
+90<br />
<br />
===Функции для работы с базой данных электронного каталога===<br />
<br />
{{Описание функции UNIFOR<br />
|name=B<br />
|title=Выдать библиографическую свертку документа<br />
}}<br />
<br />
B<br />
<br />
'''Примеры:'''<br />
&unifor('B')<br />
<br />
{{Описание функции UNIFOR<br />
|name=C<br />
|title=Контроль ISSN/ISBN<br />
|description=Контроль ISSN/ISBN. Возвращаемое значение: 0 – при положительном результате, 1 – при отрицательном<br />
}}<br />
<br />
С<ISSN/ISBN><br />
<br />
'''Примеры:'''<br />
&unifor("C"v10^a)<br />
<br />
{{Описание функции UNIFOR<br />
|name=L<br />
|title=Вернуть окончание термина<br />
}}<br />
<br />
L<начало_термина><br />
<br />
'''Примеры:'''<br />
&unifor("L"v101)<br />
<br />
{{Описание функции UNIFOR<br />
|name=U<br />
|title=Кумуляция номеров журналов<br />
}}<br />
<br />
U<strbase>,<stradd><br />
где:<br />
* <strbase> – исходная кумулированная строка.<br />
* <stradd> – кумулируемые номера.<br />
<br />
'''Примеры:'''<br />
&unifor("U"v909^h",12")<br />
<br />
{{Описание функции UNIFOR<br />
|name=V<br />
|title=Декумуляция номеров журналов<br />
}}<br />
<br />
V<strbase><br />
где:<br />
<strbase> – исходная строка для декумуляции.<br />
<br />
'''Примеры:'''<br />
&unifor("V"v909^h")<br />
<br />
{{Описание функции UNIFOR<br />
|name=W<br />
|title=Контроль кумуляции<br />
}}<br />
<br />
W<strbadd>,<strbase><br />
где:<br />
* <strbase> – исходная кумулированная строка.<br />
* <stradd> – кумулируемый номер.<br />
'''Возвращаемые значения:'''<br />
* 0 – если <stradd> не присутствует в <strbase>.<br />
* 1 – если <stradd> присутствует в <strbase>.<br />
<br />
'''Примеры:'''<br />
&unifor("W12,"v909^h)<br />
<br />
{{Описание функции UNIFOR<br />
|name=O<br />
|title=Вывод сведений о всех экземплярах по всем местам хранения<br />
}}<br />
<br />
'''Пример:'''<br />
&unifor('O')<br />
<br />
<br />
{{Описание функции UNIFOR<br />
|name=Y<br />
|title=Возвращает данные о всех свободных (не выданных) экземплярах по всем местах хранения<br />
}}<br />
<br />
'''Пример:'''<br />
&unifor('Y')<br />
<br />
===Функции для работы с файлами===<br />
<br />
{{Описание функции UNIFOR<br />
|name=+91<br />
|title=Вернуть имя файла из заданного полного пути/имени<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
}}<br />
<br />
+91<br />
<br />
{{Описание функции UNIFOR<br />
|name=+92<br />
|title=Вернуть путь из заданного полного пути/имени<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
}}<br />
<br />
+92<br />
<br />
{{Описание функции UNIFOR<br />
|name=+93<br />
|title=Вернуть расширение из заданного полного пути/имени<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
}}<br />
<br />
+93<br />
<br />
{{Описание функции UNIFOR<br />
|name=+94<br />
|title=Вернуть имя диска из заданного полного пути/имени<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
}}<br />
<br />
+94<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9L<br />
|title=Проверить наличие файла/корректность URL<br />
|versionFilename=RELEASE_13_1.doc<br />
|versionText=2013.1<br />
}}<br />
<br />
+9L<path>,<dbname>,<filename><br />
где:<br />
* <tt><path></tt> – определяет путь к файлу и принимает значения: <tt>0</tt> – папка, в которой установлена серверная часть ИРБИС (<tt><IRBIS_SERVER_ROOT></tt>); <tt>1</tt> – общая директория баз данных (по умолчанию <tt><IRBIS_SERVER_ROOT>\DATAI</tt>); <tt>2,3,10</tt> – папка БД <dbname>; <tt>11</tt> – абсолютный путь/URL.<br />
* <tt><dbname></tt> – имя БД (имеет смысл только при <tt>path=2,3,10</tt>).<br />
* <tt><filename></tt> – путь и имя файла или URL.<br />
<br />
Функция возвращает:<br />
0 – если файл отсутствует/некорректный URL;<br />
1 – если файл присутствует/корректный URL.<br />
<br />
'''Примеры:'''<br />
&uf('+9L1,,\deposit\rksu.fst') <br />
(....&uf('+9L10,',&uf('+D'),',',v951^A)....)<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9C<br />
|title=Вставить данные из заданного текстового файла<br />
}}<br />
<br />
+9С<path>,<dbname>,<filename><br />
где:<br />
* <tt><path></tt> – определяет путь к файлу и принимает значения: <tt>0</tt> – основная директория системы (для ИРБИС32 – та, где находятся исполняемые модули; для ИРБИС64 – та, где находятся исполняемые модули сервера); <tt>1</tt> – общая директория баз данных (по умолчанию \DATAI); <tt>10</tt> – директория конкретной БД;<br />
* <tt><dbname></tt> – имя БД (имеет смысл только при <tt>path=10</tt>). По умолчанию – предполагается текущая БД;<br />
* <tt><filename></tt> – имя файла;<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9A<br />
|title=Вернуть размер файла в байтах. <br />
}}<br />
<br />
+9A<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9D<br />
|title=Сохранить заданный внутренний двоичный объект в заданном файле<br />
|versionFilename=RELEASE_6_2.doc<br />
|versionText=2006.2<br />
}}<br />
<br />
+9DNN#<полный путь><br />
где <tt>NN</tt> – номер внутреннего двоичного объекта.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9J<br />
|title=Представить заданный двоичный файл в кодированном виде<br />
|description=Представить заданный двоичный файл в виде: <tt>^A<тип_файла>^B<данные файла перекодированные на основе URLEncode></tt><br />
|versionFilename=RELEASE_10_1.doc<br />
|versionText=2010.1<br />
}}<br />
<br />
+9J<полный путь и имя файла><br />
<br />
Имя файла может задаваться в виде маски, в этом случае использоваться будет первый найденный соответствующей маске файл.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9K<br />
|title=Удалить заданный файл<br />
|description=Удалить заданный файл. Если имя файла задано в виде маски, то удаляться будут все соответствующие маске файлы<br />
|versionFilename=RELEASE_10_1.doc<br />
|versionText=2010.1<br />
}}<br />
<br />
+9K<полный путь и имя файла><br />
<br />
===Функции, используемые только в глобальной корректировке===<br />
<br />
{{Описание функции UNIFOR<br />
|name=Z<br />
|title=Размножение экземпляров<br />
|description=Размножение экземпляров. Функция ничего не возвращает. Можно применять только в глобальной корректировке<br />
}}<br />
<br />
Z<br />
<br />
'''Примеры:'''<br />
&unifor('Z')<br />
<br />
{{Описание функции UNIFOR<br />
|name=M<br />
|title=Отсортировать повторения заданного поля<br />
|description=Отсортировать повторения заданного поля (имеется в виду строковая сортировка) – функция ничего не возвращает. Можно применять только в глобальной корректировке<br />
}}<br />
<br />
MX<tag>^<delims><br />
где:<br />
* X – вид сортировки: I – по возрастанию; D – по убыванию.<br />
* <tag> – метка поля.<br />
* <delims> – разделители подполей, определяющих ключ сортировки.<br />
<br />
'''Примеры:'''<br />
&unifor('MI910^BD')<br />
<br />
===Выполнить внешнюю программу===<br />
<br />
{{Описание функции UNIFOR<br />
|name=6<br />
|title=Выполнить формат<br />
}}<br />
<br />
6<имя файла формата><br />
где <tt><имя файла формата></tt> – имя [[Язык форматирования системы ИРБИС#Понятие формата|файла формата]], указывается без расширения. Файл формата будет найден по заданному имени, обязательному расширению <tt>.pft</tt> и местоположению: в [[Файлы ИРБИС#Файлы баз данных ИРБИС|папке базы данных]], а если там нет, то в папке [[Файлы ИРБИС#Основные обозначения|<tt><IRBIS_SERVER_ROOT>\Deposit</tt>]].<br />
<br />
Альтернативным способом выполнения файла форматов является использование [[Язык форматирования системы ИРБИС#Вложенный формат|вложенных форматов]].<br />
<br />
{{Описание функции UNIFOR<br />
|name=+2<br />
|title=Выполнить внешнее приложение<br />
|description=Выполняет внешнее приложение. Всё, что после +2 – параметры командной строки. <br />
}}<br />
<br />
'''Примеры:'''<br />
&unifor('+2cmd')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+8<br />
|title=Вызвать функцию из внешней DLL<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
}}<br />
<br />
+8<имя_DLL>,<имя_функции>,<передаваемые_данные><br />
<br />
Внешние функции должны ОБЯЗАТЕЛЬНО иметь следующую структуру:<br />
<br />
* в случае Pascal<br />
test_function1(buf1,buf2: Pchar; bufsize: integer): integer; <br />
<br />
* в случае C<br />
int test_function1(char *buf1, char *buf2, int bufsize) <br />
где: buf1 – передаваемые данные (входные), buf2 – возвращаемые данные (выходные), bufsize – размер выходного буфера (buf2). В ИРБИС64 данные передаются и возвращаются в UTF8. Возврат функции: 0 – нормальное завершение; любое другое значение – ненормальное. В случае нестандартного вызова функций из DLL (по Pascal-правилам) надо указывать символ * перед именем DLL:<br />
&unifor('+8*<имя_DLL>,<имя_функции>,.... <br />
<br />
Следует помнить, что имя функции в вызове надо указывать строго в соответствии с тем, как она экспортирована из DLL, большие и маленькие буквы различаются.<br />
<br />
'''Примеры:'''<br />
<br />
В вызываемую функцию передается заглавие:<br />
&unifor('+8test_dll,test_function1,',v200^a)<br />
<br />
Передаются повторения 910 поля:<br />
(&unifor('+8test_dll,test_function2,',v910))<br />
<br />
Передается вся текущая запись:<br />
(&unifor('+8test_dll,test_function2,',&unifor('+0')))<br />
<br />
===Функции, не вошедшие в другие категории===<br />
<br />
{{Описание функции UNIFOR<br />
|name=S<br />
|title=Универсальный счетчик<br />
}}<br />
<br />
SN<br />
где:<br />
* N=0 – обнулить счетчик.<br />
* N=1..9 – увеличить значение счетчика на со-отв. значение.<br />
* N=A – вернуть значение счетчика – арабскими цифрами.<br />
* N=X – вернуть значение счетчика – римскими цифрами.<br />
<br />
'''Примеры:'''<br />
&unifor('S0')<br />
&unifor('S1')<br />
&unifor('SA')<br />
<br />
{{Описание функции UNIFOR<br />
|name=R<br />
|title=Генерация случайного числа<br />
}}<br />
<br />
RNN<br />
где NN – кол-во знаков в случайном числе (по умолчанию – 6).<br />
<br />
'''Примеры:'''<br />
&unifor('R')<br />
&unifor('R4')<br />
<br />
{{Описание функции UNIFOR<br />
|name=[<br />
|title=Чистка данных от команд контекстного выделения<br />
|versionFilename=RELEASE_8_1.doc<br />
|versionText=2008.1<br />
}}<br />
<br />
[<br />
<br />
'''Примеры:'''<br />
&unifor('[')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+3G<br />
|title=<nowiki>Вывод количества документов, найденных во внешней базе по команде G.(команда возвращает строку RESULT=[кол-во найденных по запросу документов])</nowiki><br />
}}<br />
<br />
+3G[URL к внешнему сайту WEB ИРБИС, с запросом G]<br />
<br />
{{Описание функции UNIFOR<br />
|name=+3S<br />
|title=<nowiki>Расформатирует найденные по запросу записи. Если [количество выводимых записей]=0, то возвращает только количество найденных по запросу документов</nowiki><br />
}}<br />
<br />
+3S[имя базы],[количество выводимых записей],[ограничитель][формат][ограничитель],[формат или @имя файла с форматом]<br />
<br />
{{Описание функции UNIFOR<br />
|name=+3C<br />
|title=Функция введена для оптимизации скорости проверки наличия текста в полнотекстовой базе данных<br />
|description=Функция предназначена для обрезания перед помещением в словарь базы данных значения, формируемого путём соединения префикса <tt>TXT=</tt> и содержимого подполя ^B ссылки на текстовый файл полнотекстовой базы. Подробнее см. [[Схема полнотекстовой базы данных#Префикс TXT| в подразделе ''Префикс TXT'' статьи ''Схема полнотекстовой базы данных'']]<br />
|versionFilename=RELEASE_13_1.doc<br />
|versionText=2013.1<br />
}}<br />
<br />
==Устаревшие, не рекомендованные к использованию UNIFOR'ы==<br />
<br />
===Устаревшие функции для работы с глобальными переменными===<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1<br />
|title=Очистить (опустошить) все глобальные переменные<br />
}}<br />
<br />
+1<br />
<br />
'''Примеры:'''<br />
&unifor('+1')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1R<br />
|title=Чтение глобальных переменных<br />
|versionFilename=RELEASE_4_1.doc<br />
|versionText=2004.1<br />
}}<br />
<br />
+1RNNN,nnn<br />
где:<br />
* NNN – номер первой или единственной переменной, возможна конструкция *+-<число>. * – номер текущего повторения в повторяющейся группе.<br />
* nnn – кол-во переменных (по умолчанию 1).<br />
<br />
<br />
'''Примеры:'''<br />
&unifor('+1R100,2')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1W<br />
|title=Запись в глобальные переменные<br />
|versionFilename=RELEASE_4_1.doc<br />
|versionText=2004.1<br />
}}<br />
<br />
+1WNNN,MMM#SSSS<br />
где:<br />
* NNN – номер первой или единственной переменной, возможна конструкция *+-<число>. * – номер текущего повторения в повторяющейся группе.<br />
* MMM – номер переменной для сохранения кол-ва записанных переменных (по умолчанию не используется).<br />
* SSSS – список строк (результат расформатирования). Если задан MMM – каждая строка пишется в отдельную переменную, в противном случае все пишется в одну переменную.<br />
<br />
'''Примеры:'''<br />
&unifor('+1W100,0#',(v910/))<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1K<br />
|title=Групповая мультираскодировка переменных<br />
}}<br />
<br />
+1K<MNU>|NNN,nnn<br />
где:<br />
* NNN – номер первой или единственной переменной.<br />
* nnn – кол-во переменных (по умолчанию 1).<br />
<br />
'''Примеры:'''<br />
&unifor('+1Kmhr.mnu|100,10')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1M<br />
|title=Перемножение двух списков (групп переменных)<br />
}}<br />
<br />
+1MNNN,nnn#MMM,mmm<br />
где параметры аналогичны описанным для функции {{Описание функции UNIFOR (ссылка)|name=+1K|title=Групповая мультираскодировка переменных}}.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1S<br />
|title=Вычитание списков (групп переменных)<br />
}}<br />
<br />
+1SNNN,nnn#MMM,mmm<br />
где параметры аналогичны описанным для функции {{Описание функции UNIFOR (ссылка)|name=+1K|title=Групповая мультираскодировка переменных}}<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1A<br />
|title=Сложение списков (групп переменных)<br />
}}<br />
<br />
+1ANNN,nnn#MMM,mmm<br />
где параметры аналогичны описанным для функции {{Описание функции UNIFOR (ссылка)|name=+1K|title=Групповая мультираскодировка переменных}}<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1G<br />
|title=Исключение неоригинальных значений из группы переменных<br />
}}<br />
<br />
+1GNNN,nnn<br />
где параметры аналогичны описанным для функции {{Описание функции UNIFOR (ссылка)|name=+1K|title=Групповая мультираскодировка переменных}}<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1T<br />
|title=Сортировка группы переменных<br />
}}<br />
<br />
+1TNNN,nnn<br />
где параметры аналогичны описанным для функции {{Описание функции UNIFOR (ссылка)|name=+1K|title=Групповая мультираскодировка переменных}}<br />
<br />
==Неописанные UNIFOR'ы==<br />
<br />
<br />
<br />
{{Описание функции UNIFOR<br />
|name=Неописанный UNIFOR &unifor('11R^c?v210*2')<br />
|title=<br />
|versionFilename=<br />
|versionText=<br />
|sectionLevel======<br />
}}<br />
<br />
<br />
<br />
{{Описание функции UNIFOR<br />
|name=Неописанный UNIFOR &umarci('1200#h#2')<br />
|title=<br />
|versionFilename=<br />
|versionText=<br />
|sectionLevel======<br />
}}<br />
<br />
<br />
<br />
{{Описание функции UNIFOR<br />
|name=Неописанный UNIFOR &umarci('2210#^c')<br />
|title=<br />
|versionFilename=<br />
|versionText=<br />
|sectionLevel======<br />
}}<br />
<br />
<br />
{{Описание функции UNIFOR<br />
|name=Неописанный UNIFOR &umarci('3210#2#^c')<br />
|title=<br />
|versionFilename=<br />
|versionText=<br />
|sectionLevel======<br />
}}<br />
<br />
==Ссылки==<br />
<br />
См. также:<br />
* [[Язык форматирования системы ИРБИС]]<br />
* [[Операторы языка форматирования ИРБИС]]<br />
* [[Функции языка форматирования ИРБИС]]<br />
<br />
Источники информации:<br />
* [[Общее описание системы ИРБИС64]]<br />
* ''Техническая документация WEB ИРБИС64 и WEB ИРБИС32''. [http://irbis.gpntb.ru/read.php?21,62125 Актуальная версия документа доступна на форуме.]<br />
* [[Документация, поставляемая с системой ИРБИС#История версий ИРБИС|История версий ИРБИС (файл <tt>RELEASE_OVERALL.doc</tt>)]] версии 2008.1<br />
* {{Ссылка на открытый FTP|filename=RELEASE_13_1.doc|text=Файл описания релиза 2009.1}}<br />
* {{Ссылка на открытый FTP|filename=RELEASE_13_1.doc|text=Файл описания релиза 2010.1}}<br />
* {{Ссылка на открытый FTP|filename=RELEASE_13_1.doc|text=Файл описания релиза 2011.1}}<br />
* {{Ссылка на открытый FTP|filename=RELEASE_13_1.doc|text=Файл описания релиза 2013.1}}<br />
<br />
[[Категория:Язык форматирования системы ИРБИС]]<br />
[[Категория:Анонсированные статьи]]</div>Sokvhttp://wiki.elnit.org/index.php?title=%D0%AF%D0%B7%D1%8B%D0%BA_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%98%D0%A0%D0%91%D0%98%D0%A1&diff=2458Язык форматирования системы ИРБИС2016-05-20T15:38:37Z<p>Sokv: /* Вложенные форматы */</p>
<hr />
<div>'''''Язык форматирования''''' ИРБИС – язык манипулирования данными в контексте [[Базы данных ИРБИС#Модель баз данных ИРБИС|''записи'']] базы данных, представляет собой средство, с помощью которого осуществляется разнообразное представление данных для многих операций и функций системы, в частности, для показа и печати документов, для создания словарей, для импорта/экспорта данных, для формально-логического контроля и т.д.<br />
<br />
==Общие сведения==<br />
<br />
===История появления===<br />
<br />
Язык форматирования системы ИРБИС базируется на языке форматирования системы CDS/ISIS (ЮНЕСКО).<br />
<br />
===Понятие формата===<br />
<br />
Совокупность команд и функций, записанных в соответствии с требованиями языка форматирования, называется '''''форматом'''''. В общем случае формат определяет некоторое подмножество данных из записи базы данных, которые затем могут использоваться системой для выполнения определенных функций.<br />
<br />
Формат как отдельная структура сохраняется в текстовом файле с расширением [[Файлы ИРБИС#Файлы форматов ИРБИС|<tt>.pft</tt>]]. Такой файл обычно называют '''''файл формата'''''.<br />
<br />
===Начало знакомства с языком форматирования ИРБИС===<br />
<br />
Для понимания языка форматирования необходимо быть знакомым с такими понятиями как:<br />
поле данных – структурная единица документа (записи), имеющая числовую идентификацию (метку поля) и содержащая один элемент описания (например, первый индивидуальный автор, основное заглавие и т.д.):<br />
подполе – структурная единица поля, которая определяется двумя символами, предшествующими собственно данным подполя: первый из этих символов знак ^, второй символ может быть латинской буквой (прописные и строчные не различаются) или цифрой и называется разделителем подполя.<br />
<br />
Для новичков может показаться, что некоторые форматы являются очень сложными для понимания. Однако, все форматы, даже громоздкие, состоят по сути из довольно простых команд или функций, разделенных запятыми или пробелами. Кажущаяся сложность связана с тем, что формат может состоять из многих таких команд. В связи с этим, ключом к пониманию форматов является последовательный анализ всех присутствующих в них команд.<br />
<br />
Обрабатывая формат, система работает с тремя объектами: запись (документ) базы данных, собственно формат и рабочая область, в которой размещаются выходные данные. Команды выполняются последовательно в порядке их представления в формате. Одни из команд порождают выходные данные (например, значения полей данных), другие - инициируют некоторые действия (например, переход на другую строку, создание нескольких пустых строк и т.д.). Создаваемые данные запоминаются в рабочей области в виде текстовых строк, которые затем передаются для последующей обработки, например, для печати.<br />
<br />
Все команды форматирования могут вводиться прописными или строчными буквами или их комбинацией.<br />
В форматах могут присутствовать комментарии. Признаком начала комментария является комбинация символов /*. В качестве комментария принимается часть строки от признака начала комментария до конца строки.<br />
<br />
===Выполнение формата===<br />
<br />
====Форматёр====<br />
<br />
''Форматёр'' – модуль, реализующий набор функций для обработки данных с использованием языка форматирования.<br />
<br />
В системе ИРБИС 64 присутствует несколько реализаций форматёра:<br />
* серверный форматёр – [[IRBIS64.dll#Функции форматёра|входит в библиотеку <tt>IRBIS64.dll</tt>]],<br />
* клиентский форматёр – включён в код клиентских приложений.<br />
<br />
Клиентский форматёр используется клиентскими приложениями.<br />
<br />
Серверный форматёр используется:<br />
* серверным [[АРМ Администратор]],<br />
* в некоторых случаях клиентское приложение передаёт формат на исполнение серверному форматёру, при этом взаимодействие осуществляется через [[TCP/IP сервер ИРБИС 64|сервер ИРБИС]].<br />
<br />
====Контекст форматёра====<br />
<br />
Значения глобальных переменных хранятся в конкретном запущенном экземпляре форматёра. Таким образом, область видимости переменных оказывается в непосредственной связи с экземпляром форматёра:<br />
* В рамках одного экземпляра форматёра значения глобальных переменных, инициализированные в одном формате, доступны в другом формате.<br />
* В разных экземплярах форматёра – собственные наборы глобальных переменных.<br />
<br />
Например:<br />
* В серверном [[АРМ Администратор]] с момента запуска и до закрытия приложения будет использоваться один экземпляр форматёра, соответственно для всех выполняемых данным АРМ форматов будет один набор глобальных переменных.<br />
* Для любого клиентского АРМ будет использоваться один экземпляр клиентского форматёра.<br />
* В тех случаях, когда клиентское АРМ передаёт форматы на исполнение серверному форматёру, запросы на исполнение форматов могут выполняться разными экземплярами форматёра.<br />
<br />
Таким образом, в контексте выполнения формата нельзя рассчитывать на то, что до присвоения глобальным переменным каких либо значений они будут пустыми.<br />
<br />
==Кодировка==<br />
<br />
Формат может начинаться с маркера кодировки UTF-8, в качестве данного маркера служит восклицательный знак.<br />
<br />
Если формат начинается с восклицательного знака, то система ИРБИС при чтении данного формата будет использовать кодировку UTF-8, в противном случае Windows-1251.<br />
<br />
Этот же механизм используется и при [[Технология Веб-ИРБИС#Фрейм как язык разметки|вставке формата внутри фрейма]].<br />
<br />
==Запись в базе данных, используемая в примерах==<br />
<br />
Если не оговорено противное, то все примеры по форматированию в последующих разделах ссылаются на запись, приведенную ниже. Эта запись присутствует в базе данных IBIS, поставляемой в дистрибутивном варианте системы в качестве учебной.<br />
<br />
'''MFN: 34'''<br />
600: ^AСухой П.О.^Bо нем<br />
215: ^a383^cил.24л<br />
920: PAZK<br />
999: 0000000<br />
907: ^A19941123^bdsm<br />
964: 78.09.19<br />
10: ^a5-203-01472-8^dЦ.договор.<br />
101: rus<br />
102: RU<br />
900: ^b05^c22<br />
210: ^cВоенное изд-во^aМ.^d1993<br />
700: ^aКузьмина^bЛ.М.<br />
675: 623.746<br />
675: 623.746(092) Сухой П.О.<br />
908: К89<br />
903: 623.746/К89-239165<br />
910: ^A0^BЭ93-18430^C19930830^Dхр<br />
910: ^A2^Dхр<br />
200: ^aКонструктор Сухой. Люди и самолеты<br />
<br />
==Команды вывода полей==<br />
<br />
Команды вывода полей – это команды, используемые для извлечения из записи и вывода конкретного поля или подполя. Имеется [[#Команда вывода MFN|специальная команда для извлечения и вывода номера записи MFN]], хотя, строго говоря, MFN не является полем (MFN не имеет метки).<br />
<br />
===Команда вывода поля===<br />
<br />
Для указания на необходимость вывода поля из записи необходимо записать букву '''V''', за которой должна следовать метка поля. Это может быть прописная или строчная буква. Ниже приведены примеры применения данной команды.<br />
<br />
{| class="standard"<br />
!Формат||Выходные данные<br />
|-<br />
|<tt>v210</tt>||<tt>^cВоенное изд-во^aМ.^d1993</tt><br />
|-<br />
|<tt>v200</tt>||<tt>aКонструктор Сухой. Люди и самолеты</tt><br />
|-<br />
|<tt>v700</tt>||<tt>^aКузьмина^bЛ.М.</tt><br />
|-<br />
|<tt>v600</tt>||<tt>^AСухой П.О.^Bо нем</tt><br />
|}<br />
<br />
===Команда вывода подполя===<br />
<br />
Для вывода конкретного подполя из данного поля следует добавить соответствующий разделитель подполей к метке поля. Заметим, что можно использовать специальный разделитель подполей ^* для вывода первого подполя, если оно есть. В этом случае, первому подполю необязательно должен предшествовать его разделитель. Разделитель подполей может быть прописной или строчной буквой (обязательно латинской).<br />
<br />
{| class="standard"<br />
!Формат||Выходные данные<br />
|-<br />
|<tt>v210^с</tt>||<tt>Военное изд-во</tt><br />
|-<br />
|<tt>v200^a</tt>||<tt>Конструктор Сухой. Люди и самолеты</tt><br />
|-<br />
|<tt>v700^a</tt>||<tt>Кузьмина</tt><br />
|-<br />
|<tt>v600^*</tt>||<tt>Сухой П.О.</tt><br />
|}<br />
<br />
===Вывод фрагмента поля или подполя===<br />
<br />
В некоторых случаях может возникнуть необходимость вывести часть поля, которая не является подполем, особенно тогда, когда поле имеет фиксированный формат (например, запись даты в виде ГГГГММДД). Это можно сделать командой смещение/длина, размещаемой сразу за командой вывода поля или подполя, к которому команда применяется.<br />
<br />
Эта команда имеет вид:<br />
*<смещение>.<длина><br />
где:<br />
* *<смещение> указывает позицию первого символа фрагмента, который должен быть извлечен из поля или подполя (позиции символов нумеруются с нуля, т.е. первый символ находится в позиции 0, второй - в позиции 1 и т.д.); если смещение не указано, то оно считается равным 0;<br />
* .<длина> указывает количество извлекаемых символов. Если длина опущена, то извлекается все поле (подполе) до конца, начиная с символа, указанного в смещении.<br />
<br />
Ниже приведены примеры использования команды по отношению к записи, которая в качестве поля с меткой 1 содержит значение<br />
<tt>88-Nov-05</tt>.<br />
<br />
{| class="standard"<br />
!Формат||Выходные данные<br />
|-<br />
|<tt>v1*3.3</tt>||<tt>Nov</tt><br />
|-<br />
|<tt>v1.2</tt>||<tt>88</tt><br />
|-<br />
|<tt>v1*7</tt>||<tt>05</tt><br />
|-<br />
|<tt>v1*7,v1*2.4</tt>||<tt>05-Nov</tt><br />
|-<br />
|<tt>v1*7,v1*2.5,v1.2</tt>||<tt>05-Nov-88</tt><br />
|-<br />
|<tt>v210.3</tt>||<tt>^cВ</tt><br />
|-<br />
|<tt>v210^c.3</tt>||<tt>Вое</tt><br />
|}<br />
<br />
Обратите внимание на различные способы манипулирования полями с подполями в последних двух примерах. Если производится ссылка на поле целиком (например, v210), то нулевое смещение указывает на первую фактическую позицию поля (включая возможные разделители, стоящие в начале), а при ссылке на подполе (например, v210^с) нулевое смещение указывает на первый символ данных, стоящий после разделителя подполей.<br />
<br />
===Команда вывода MFN===<br />
<br />
Для вывода номера записи в файле документов служит команда MFN, формат которой:<br />
MFN<br />
или<br />
MFN(d)<br />
где d – количество выводимых на экран цифр. Если параметр (d) опущен, то по умолчанию предполагается 6 цифр. Ниже приводятся примеры использования данной команды.<br />
<br />
{| class="standard"<br />
!Формат||Выходные данные<br />
|-<br />
|<tt>MFN</tt>||<tt>000034</tt><br />
|-<br />
|<tt>MFN(3)</tt>||<tt>034</tt><br />
|-<br />
|<tt>MFN(2)</tt>||<tt>34</tt><br />
|-<br />
|<tt>MFN(1)</tt>||<tt>3</tt><br />
|}<br />
<br />
Заметим, что для подавления в MFN впереди стоящих нулей можно использовать [[Функции языка форматирования ИРБИС#Функция F(выр-1, выр-2, выр-3)|функцию F]].<br />
<br />
==Команды режима вывода==<br />
<br />
Система может выводить данные в трех различных режимах: '''''режим проверки''''', '''''режим заголовка''''', '''''режим данных'''''.<br />
<br />
В '''''режиме проверки''''' поля выводятся в том виде, в каком они хранятся в записи. При этом система не обеспечивает никаких разделителей между полями или экземплярами повторяющихся полей. Пользователь должен обеспечить адекватное разделение полей с помощью команд размещения, литералов или повторяющихся групп. Режим обычно используется для вывода записей с целью проверки правильности введенных данных.<br />
<br />
'''''Режим заголовка''''' обычно используется для печати заголовков при выводе указателей и таблиц. Все управляющие символы, введенные вместе с данными, такие как разделители терминов (< и >) игнорируются (за исключением указанных ниже случаев), а разделители подполей заменяются знаками пунктуации.<br />
<br />
'''''Режим данных''''' похож на режим заголовка, но дополнительно после каждого поля автоматически ставится точка (.), за которой следуют два пробела (или просто два пробела, если поле заканчивается каким-либо знаком пунктуации). Отметим, однако, что эта автоматическая пунктуация подавляется, если за командой вывода поля следует [[#Литералы|суффикс-литерал]].<br />
<br />
Когда система форматирует поле, содержащее подполе, в режимах заголовка или данных, она автоматически заменяет имеющиеся разделители подполей знаками пунктуации (при этом разделитель первого подполя, если он имеется, всегда игнорируется). Специальная комбинация символов "><" заме-няется на "; " (а отдельные символы “<” и “>” подавляются), обеспечивая простой способ форматирования полей, содержащих перечень ключевых фраз, заключенных в угловые скобки. Таблица стандартного замещения разделителей подполей выглядит так:<br />
* ^a замещается на "; " <br />
* от ^b до ^i замещается на ", "<br />
* все другие замещаются на ". "<br />
<br />
Команды режима вывода представляются в виде <tt>Mmc</tt>, где:<br />
* М – признак команды режима вывода.<br />
* m следующим образом определяет режим вывода:<br />
** Р режим проверки;<br />
** H режим заголовка;<br />
** D режим данных.<br />
* с – определяет необходимость преобразования букв в прописные:<br />
** U буквы преобразуются в прописные;<br />
** L буквы преобразованию не подвергаются.<br />
<br />
Команда режима вывода может появляться в формате столько раз, сколько это нужно и действует до следующей команды режима вывода. По умолчанию система использует команду MPL. Ниже приведены примеры использования команды.<br />
<br />
{| class="standard"<br />
!Формат||Выходные данные<br />
|-<br />
|<tt>mpl,v200</tt>||<tt>^aКонструктор Сухой. Люди и самолеты</tt><br />
|-<br />
|<tt>mhl,v200</tt>||<tt>Конструктор Сухой. Люди и самолеты</tt><br />
|-<br />
|<tt>mdl,v200</tt>||<tt>Конструктор Сухой. Люди и самолеты.</tt><br />
|-<br />
|<tt>mdu,v200</tt>||<tt>КОНСТРУКТОР СУХОЙ. ЛЮДИ И САМОЛЕТЫ.</tt><br />
|-<br />
|<tt>mpl,v210</tt>||<tt>^cВоенное изд-во^aМ.^d1993</tt><br />
|-<br />
|<tt>mdl,v210</tt>||<tt>Военное изд-во; М., 1993.</tt><br />
|}<br />
<br />
==Команды горизонтального и вертикального размещения==<br />
<br />
В языке форматирования имеются следующие команды для управления горизонтальным и вертикальным размещением данных:<br />
* '''<tt>Xn</tt>''' – вставляет <tt>n</tt> пробелов;<br />
* '''<tt>Cn</tt>''' – табуляция в позицию <tt>n</tt>;<br />
* '''<tt>/</tt>''' – переход на новую строку, если предыдущая строка не была пустой;<br />
* '''<tt>#</tt>''' – безусловный переход на новую строку;<br />
* '''<tt>%</tt>''' – удаляет пустые строки (если они есть).<br />
<br />
Команда <tt>/</tt> приводит к размещению последующих данных с начала следующей строки. Подряд расположенные команды <tt>/</tt> эквивалентны одной команде <tt>/</tt>. Команда <tt>/</tt> никогда не создает пустых строк.<br />
<br />
Команда <tt>#</tt> выполняет те же действия, что и <tt>/</tt>, но переход на новую строку является безусловным.<br />
<br />
Можно использовать комбинацию <tt>/#</tt> для создания одной (и только одной) пустой строки. Комбинация <tt>##</tt> может привести к созданию одной или двух пустых строк в зависимости от того, была ли пустой текущая строка перед выполнением первой команды <tt>#</tt>.<br />
<br />
Использование команды <tt>#</tt> может вызвать затруднение в тех случаях, когда выбираемое поле оказывается пустым. Эта ситуация хорошо иллюстрируется на следующем примере:<br />
/#V10/#V20/#V30<br />
Если все поля присутствуют в документе, то в результате поля <tt>10</tt>, <tt>20</tt>, и <tt>30</tt> будут располагаться с начала строк и каждому будет предшествовать одна пустая строка. Однако, если поле <tt>20</tt> в документе отсутствует, то между <tt>10</tt> и <tt>30</tt> полями будут вставлены две пустые строки. Это может оказаться нежелательным, если действительно требуется, чтобы между полями была пропущена именно одна пустая строка, независимо от наличия или отсутствия некоторых полей. Таким образом, приведенный выше формат не приведет к желаемому результату.<br />
<br />
Эту проблему решает команда <tt>%</tt>. Ее действие заключается в подавлении всех последовательно расположенных пустых строк, если они имеются, между текущей строкой и последней непустой строкой. Таким образом, формат<br />
%##V10%##V20%##V30 ...<br />
приведет к созданию одной и только одной пустой строки между каждым полем, независимо от их наличия или отсутствия в документе.<br />
<br />
Команду <tt>Сn</tt> имеет смысл применять только в случае использования моноширинных шрифтов. Команды <tt>/</tt> <tt>#</tt> <tt>%</tt> не применимы в случае использования в форматах показа средств RTF или HTML. Команды <tt>Сn</tt> и <tt>Xn</tt> не работают в [[HTML-форматах]].<br />
<br />
==Литералы==<br />
<br />
Литерал – это строка символов, заключенная в соответствующие ограничители, которая вносится в выводимый текст в таком виде, как она приведена в формате. Литералы могут использоваться, например, для именования полей.<br />
<br />
Существуют литералы трех типов:<br />
* '''''Условный литерал''''' определяет текст, который будет выведен только в случае присутствия в записи соответствующего ему поля/подполя. Если поле является повторяющимся, то текст будет выведен только один раз, независимо от количества экземпляров поля/подполя. Условные литералы заключаются в двойные кавычки, например:<br />
"Заглавие: "<br />
* '''''Повторяющийся литерал''''' определяет текст, который будет выведен только в случае присутствия в записи соответствующего ему поля или подполя. Однако, если поле повторяющееся, литерал будет выводиться для каждого экземпляра поля/подполя. Ограничителем для повторяющихся литералов служит символ вертикальной черты:<br />
|Автор: |<br />
* '''''Безусловный литерал''''' определяет текст, который будет выведен независимо от наличия поля в записи. Безусловные литералы заключаются в одинарные кавычки, например:<br />
'Краткое содержание'<br />
или<br />
'Заголовок'<br />
<br />
Литерал не должен содержать ограничителей литерала. Например, безусловный литерал не может содержать одинарную кавычку (хотя может содержать двойные кавычки и/или вертикальные черты).<br />
<br />
Условные и/или повторяющиеся литералы связываются с полем или подполем своим расположением в формате. Литералы, предшествующие команде вывода поля/подполя, называемые '''''префикс-литералами''''', выводятся перед содержимым поля/подполя, в то время, как литералы, следующие за командой вывода поля/подполя, называемые '''''суффикс-литералами''''', выводятся после содержимого поля/подполя.<br />
<br />
Если за повторяющимся префикс-литералом непосредственно следует знак '''<tt>+</tt>''' (например, '''<tt>|xxx|+</tt>'''), то он будет выведен перед каждым, кроме первого, экземпляром поля/подполя.<br />
<br />
Если повторяющемуся суффикс-литералу непосредственно предшествует знак '''<tt>+</tt>''' (например, '''<tt>+|xxx|</tt>'''), то он будет выведен после каждого, кроме последнего, экземпляра поля/подполя.<br />
<br />
С полем/подполем может быть связан более чем один литерал. В этом случае различные литералы должны подчиняться следующим правилам и порядку:<br />
* '''префикс-литералы:'''<br />
** Один или более условных префикс-литералов. За условным префикс-литералом могут следовать другие условные префикс-литералы, команды вертикального и горизонтального размещения, и/или команды режима вывода. Все команды между первым условным префикс-литералом и соответствующей ему командой вывода поля/подполя становятся условными и будут выполнены только при наличии поля/подполя, иначе они игнорируются.<br />
** Один и только один повторяющийся префикс-литерал. Если такой литерал есть, то он должен непосредственно предшествовать соответствующей ему команде вывода поля/подполя.<br />
* '''суффикс-литералы:'''<br />
** Один и только один повторяющийся суффикс-литерал. Если такой литерал есть, то он должен следовать непосредственно за соответствующей ему командой вывода поля/подполя.<br />
** Один и только один условный суффикс-литерал. Если такой литерал есть, то он должен следовать непосредственно за повторяющимся суффикс-литералом или связанной с ним командой вывода поля/подполя.<br />
**Суффикс-литералы не должны разделяться запятыми и не должно быть запятой между командами вывода поля/подполя и первым суффикс-литералом, так как запятая обозначает конец суффикс-литералов, связанных с данной командой вывода поля/подполя.<br />
<br />
'''''Пустые литералы''''' – литералы нулевой длины, такие, как <tt>""</tt> или <tt>||</tt> вполне допустимы и могут использоваться, как префикс-литералы для обеспечения условного вертикального размещения или как суффикс-литералы для временного подавления автоматической пунктуации, которая обеспечивается в режиме данных.<br />
<br />
Литералы подвергаются преобразованию в прописные буквы, если расположены после соответствующей команды режима вывода.<br />
<br />
Примеры различных типов литералов:<br />
<br />
{| class="standard"<br />
!Формат||Выходные данные<br />
|-<br />
|<tt>'MFN:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;',mfn(3)</tt>||<tt>MFN:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;034</tt><br />
|-<br />
|<tt>mdl,"Заглавие: "v200</tt>||<tt>Заглавие: Конструктор Сухой. Люди и самолеты.</tt><br />
|-<br />
|<tt>v675</tt>||<tt>623.746623.746(092) Сухой П.О.</tt><br />
|-<br />
|<tt><nowiki>v675|; |</nowiki></tt>||<tt>623.746; 623.746(092) Сухой П.О.;</tt><br />
|-<br />
|<tt><nowiki>v675+|; |</nowiki></tt>||<tt>623.746; 623.746(092) Сухой П.О.</tt><br />
|-<br />
|<tt>|; |v675</tt>||<tt>; 623.746; 623.746(092) Сухой П.О.</tt><br />
|-<br />
|<tt>|; |+v675</tt>||<tt>623.746; 623.746(092) Сухой П.О.</tt><br />
|-<br />
|<tt><nowiki>"УДК"/v675+|; |</nowiki></tt>||<tt>УДК<br />623.746; 623.746(092) Сухой П.О.</tt><br />
|-<br />
|<tt>|(|v675|)|</tt>||<tt>(623.746)(623.746(092) Сухой П.О.)</tt><br />
|-<br />
|<tt><nowiki>"(УДК: ",v675+|; |")"</nowiki></tt>||<tt>(УДК: 623.746; 623.746(092) Сухой П.О.)</tt><br />
|-<br />
|<tt>mdl,v210</tt>||<tt>Военное изд-во; М., 1993.</tt><br />
|-<br />
|<tt>mdl,v210""</tt>||<tt>Военное изд-во; М., 1993</tt><br />
|}<br />
<br />
===Команды фиктивного вывода поля===<br />
<br />
Команды фиктивного вывода поля реализует условный вывод литералов в зависимости от наличия или отсутствия данного поля или подполя без вывода содержимого самого поля. Задаются они следующим образом: '''<tt>Dt</tt>''' или '''<tt>Dt^x</tt>''' или '''<tt>Nt</tt>''' или '''<tt>Nt^x</tt>''', где:<br />
* '''<tt>D</tt>''' указывает, что все соответствующие ей условные литералы должны выводиться только при наличии поля,<br />
* '''<tt>N</tt>''' указывает, что они должны выводиться только при отсутствии поля;<br />
* '''<tt>t</tt>''' метка поля, управляющего выводом литералов;<br />
* '''<tt>^x</tt>''' необязательный код разделителя подполя. Если он приведен, то это означает, что вывод литералов зависит от наличия или отсутствия определенного подполя (отметим, что отсутствие поля говорит и об отсутствии подполей в этом поле).<br />
<br />
Обычно команде фиктивного вывода поля предшествует, по крайней мере, один условный префикс-литерал (который может быть пустым), за которым могут следовать один или более других условных префикс-литералов, команды вертикального и горизонтального размещения и/или команды режима вывода. Команда фиктивного вывода поля не может иметь суффикс-литералов.<br />
<br />
Несколько примеров использования этих команд:<br />
<br />
{| class="standard"<br />
!Формат||Выходные данные<br />
|-<br />
|<tt>"(Отсут.)"n700,v700</tt>||<tt>Конструктор Сухой. Люди и самолеты</tt><br />
|-<br />
|<tt><nowiki>"(Отсут.)"n80,v80+|; |</nowiki></tt>||<tt>(Отсут.)</tt><br />
|-<br />
|<tt>"[нет даты]"n907^А,V907^A</tt>||<tt>19941123</tt><br />
|-<br />
|<tt>"[нет сведений]"n911,v911</tt>||<tt>[нет сведений]</tt><br />
|}<br />
<br />
==Выражения==<br />
<br />
Язык форматирования позволяет вычислять значения и/или сравнивать значения с помощью выражений. Выражения построены таким образом, что при их вычислении возвращается значение. Таким значением может быть строка символов (например, содержимое поля или литерал), тогда выражение называется строковым, либо число, тогда выражение называется числовым, либо логическое значение (истина или ложь), тогда выражение называется логическим. В системе также имеется набор функций, которые, на основе задаваемых аргументов, выполняют некоторые специфические действия и возвращают значения. Функции, возвращающие в качестве значения число, называются числовыми функциями, возвращающие строку символов - строковыми функциями, а возвращающие логическое значение - логическими функциями. Только строковые функции могут использоваться непосредственно в качестве команд форматирования. Числовые выражения могут использоваться либо в логических выражениях, либо в качестве аргументов функций. Логические выражения и логические функции могут использоваться только в контексте [[#Команда IF|команды IF]].<br />
<br />
===Числовые выражения===<br />
<br />
'''''Числовое выражение''''' формируется из операндов, которые имеют числовое значение, и [[Операторы языка форматирования ИРБИС#Арифметические операторы|арифметических операторов]] ('''<tt>+</tt>''', '''<tt>-</tt>''', '''<tt>*</tt>''', '''<tt>/</tt>''').<br />
<br />
В качестве операндов в числовых выражениях могут выступать: '''''числовые константы''''', '''''числовые функции''''', [[#Команда вывода MFN|команда вывода номера записи MFN]], числовые выражения.<br />
<br />
'''''Числовые константы''''' могут быть представлены в виде целых чисел, чисел с десятичной точкой, например <tt>5</tt>, <tt>18</tt>, <tt>98.65</tt>, или чисел в '''''экспоненциальной форме''''', например, <tt>1.5Е5</tt>, обозначающее 1.5 умноженное на 10 в 5-ой степени, т.е. 150000. Числа могут быть со знаком или без.<br />
<br />
[[#Числовые функции|'''''Числовые функции''''' рассматриваются в отдельной главе]]. Пример числовой функции <tt>val(v10)</tt>.<br />
<br />
Числовые выражения при использовании их в качестве операндов должны быть заключены в круглые скобки, например:<br />
(val(v20)-5)<br />
<br />
Отметим, что поскольку команды вывода полей (например, v10 или v10^a) дают текстовые строки, они не могут использоваться в качестве операндов числовых выражений. Однако, для преобразования содержимого поля или подполя в числовое значение может быть использована [[Функции языка форматирования ИРБИС#Функция VAL(формат)|функция VAL]].<br />
<br />
Аналогичным образом, числовое выражение не может быть непосредственно выведено на экран или печать, а должно быть предварительно преобразовано в строку символов с помощью [[Функции языка форматирования ИРБИС#Функция F(выр-1, выр-2, выр-3)|функции F]].<br />
<br />
Ниже приведены примеры числовых выражений. Предполагается, что MFN=10, v1^a=10, v1^b=20 и v2=30.<br />
<br />
{| class="standard"<br />
!Выражение||Значение<br />
|-<br />
|<tt>0.155е+3</tt>||<tt>155</tt><br />
|-<br />
|<tt>1е-3</tt>||<tt>0.001</tt><br />
|-<br />
|<tt>2*3+9</tt>||<tt>15</tt><br />
|-<br />
|<tt>2*(3+9)</tt>||<tt>24</tt><br />
|-<br />
|<tt>10-(4*(2-1))</tt>||<tt>6</tt><br />
|-<br />
|<tt>15*0.001</tt>||<tt>0.015</tt><br />
|-<br />
|<tt>mfn+100</tt>||<tt>110</tt><br />
|-<br />
|<tt>val(v2)+val(v1^a)*7.5</tt>||<tt>105</tt><br />
|-<br />
|<tt>(val(v1^a)-val(v1^b))/100</tt>||<tt>-0.1</tt><br />
|}<br />
<br />
===Строковые выражения===<br />
<br />
'''''Строковым выражением''''' являются:<br />
* [[#Литералы|Безусловный литерал]], например <tt>'некоторый текст'</tt>.<br />
* [[#Команды вывода полей|Команда вывода поля/подполя]], которая может включать [[#Вывод фрагмента поля или подполя|команду смещение/длина]], например <tt>v26^c*2.2</tt>.<br />
* [[Функции языка форматирования ИРБИС#Строковые функции|Строковая функция]], например <tt>S(v24,v25,v26)</tt>.<br />
<br />
===Логические выражения===<br />
<br />
'''''Логическое выражение''''' формируется из операндов, которые могут принимать одно из двух значений, '''истина''' или '''ложь''', и [[Операторы языка форматирования ИРБИС#Логические операторы|логических операторов]] ('''NOT''', '''AND''', '''OR'''). Логические выражения используются для вычисления истинности одного или более условий.<br />
<br />
Операндами логического выражения могут быть:<br />
* [[Операторы языка форматирования ИРБИС#Операторы отношения и выражения отношения|Выражения отношения]] – сравнивают два числовых или строковых значения и определяют, удовлетворяют ли они отношению, строятся на основе [[Операторы языка форматирования ИРБИС#Операторы отношения и выражения отношения|операторов отношения]] ('''<tt>=</tt>''', '''<tt><></tt>''', '''<tt><</tt>''', '''<tt><=</tt>''', '''<tt>></tt>''', '''<tt>>=</tt>''', '''<tt>:</tt>'''). Например <tt>mfn&nbsp;<&nbsp;10</tt>.<br />
* [[Функции языка форматирования ИРБИС#Логические функции|Логические функции]], например <tt>p(v24)</tt>.<br />
* Логические выражения.<br />
<br />
Примеры логических выражений:<br />
{| class="standard"<br />
!Выражение||Значение<br />
|-<br />
|<tt>mfn=34</tt>||<tt>Истина</tt><br />
|-<br />
|<tt>not mfn=34</tt>||<tt>Ложь</tt><br />
|-<br />
|<tt>not (not mfn=34)</tt>||<tt>Истина</tt><br />
|-<br />
|<tt>v20 = 'люди'</tt>||<tt>Ложь</tt><br />
|-<br />
|<tt>v200 : 'люди'</tt>||<tt>Истина</tt><br />
|-<br />
|<tt>v200 : 'ЛЮДИ'</tt>||<tt>Истина</tt><br />
|-<br />
|<tt>v210^c.6 = 'Военное'</tt>||<tt>Ложь</tt><br />
|-<br />
|<tt>v210^c.7 = 'Военное'</tt>||<tt>Истина</tt><br />
|-<br />
|<tt>(v200 : 'люди') AND (v210^c.7= 'Военное')</tt>||<tt>Истина</tt><br />
|}<br />
<br />
==Функции==<br />
<br />
'''''Функция''''' вычисляет ''значение'' (называемое '''''значением функции''''' или '''''возвращаемым значением'''''), которое затем подставляется вместо функции при вычислении выражения.<br />
<br />
Функции могут иметь один или более ''аргументов'', которые необходимо задать для вычисления функции. Аргументы заключаются в скобки и разделяются запятыми.<br />
<br />
Аргументы могут быть следующих трех типов: [[#Понятие формата|формат]], [[#Числовые выражения|числовое выражение]], [[#Команды вывода полей|команда вывода поля]].<br />
<br />
Аргументом функции может быть произвольный формат, который может содержать любую разрешенную команду за исключением [[Функции языка форматирования ИРБИС#Функция REF(выражение, формат)|функции REF]], в которой формат так же используется в качестве аргумента. Функции передается не сам формат, а текст, полученный в результате вычисления формата.<br />
<br />
При использовании числового выражения в качестве аргумента функции, оно сначала вычисляется, и затем вычисленное значение передается функции.<br />
<br />
В качестве аргумента могут быть команды вывода поля или подполя. Не допускается использовать в команде спецификацию смещение/длина.<br />
<br />
Список функций с их описанием приведён в статье '''[[Функции языка форматирования ИРБИС]]'''.<br />
<br />
==Форматные выходы. UNIFOR==<br />
<br />
'''''Форматные выходы''''' – вид функций, реализованных на основе определённой технологии вне рамок языка форматирования, и предназначенных для выполнения таких операций по форматированию, которые не могут быть выполнены с помощью собственно языка форматирования. Технология '''''форматных выходов''''' подразумевает реализацию определённого стандартного интерфейса передачи данных для таких функций и возврата значений. В рамках языка форматирования '''''форматные выходы''''' являются строковыми функциями с форматом в качестве аргумента.<br />
<br />
Форматные выходы имеют следующий синтаксис в языке форматирования:<br />
&имя(формат)<br />
где:<br />
* '''<tt>&</tt>''' – идентификатор вызова форматного выхода,<br />
* '''<tt>имя</tt>''' – имя форматного выхода,<br />
* '''<tt>формат</tt>''' – аргумент.<br />
<br />
К использованию предлагается [[UNIFOR|форматный выход UNIFOR]], реализующий множество функций вне базовых рамок языка форматирования.<br />
<br />
==Команда IF==<br />
<br />
Команда '''IF''' предоставляет возможность строить контекстно-зависимые форматы, то есть форматы, способные изменять выходные значения в зависимости от содержимого форматируемой записи.<br />
<br />
Команда '''IF''' записывается следующим образом:<br />
'''IF''' '''''условие''''' '''THEN''' '''''формат-1''''' '''ELSE''' '''''формат-2''''' '''FI'''<br />
где:<br />
* '''''Условие''''' – [[#Логические выражения|логическое выражение]],<br />
* '''''формат-1''''' – формат, который вычисляется в том и только том случае, когда значением логического выражения является '''истина''',<br />
* '''''формат-2''''' – формат, который вычисляется в том и только том случае, когда значением логического выражения является '''ложь'''.<br />
<br />
Фраза '''ELSE''' '''''формат-2''''' не является обязательной, и может быть опущена. Ключевые слова '''IF''', '''THEN''' и '''FI''' обязательны всегда. '''''Формат-1''''' может быть опущен, если присутствует предложение '''ELSE''' (то есть если условие истинно, то ничего не будет выведено). Таким образом, команда '''IF''' может также принимать одну из следующих дополнительных форм:<br />
'''IF ''условие'' THEN ''формат-1'' FI'''<br />
'''IF ''условие'' THEN ELSE ''формат-2'' FI'''<br />
<br />
Поскольку нет никаких ограничений на команды, которые можно использовать в '''''формате-1''''' и '''''формате-2''''', то команды '''IF''' могут быть вложены друг в друга любое количество раз. Ключевое слово '''FI''', в таком случае, должно закрывать каждую команду '''IF''' (можно рассматривать '''IF''' и '''FI''' как пару скобок). Например:<br />
if p(v1) then v24 else if p(v2) and a(v3) then v5 fi fi<br />
<br />
Команда '''IF''' особенно полезна для создания обобщенных форматов в интегрированных базах данных, которые содержат различные типы записей. В этом случае надо иметь различные метки для каждого типа записи (должно быть поле, содержащее код, идентифицирующий тип записи). Таким образом, проверяя тип документа с помощью команды '''IF''', можно порождать в одном формате специфическое форматирование записей каждого типа.<br />
<br />
==Повторяющиеся группы==<br />
<br />
===Определение повторяющейся группы===<br />
<br />
Повторяющаяся группа состоит из набора команд форматирования, заключенных в круглые скобки. Смысл этих команд обычный, за исключением того, что обработка повторяющихся полей производится особым образом.<br />
<br />
Чтобы понять концепцию повторяющейся группы, надо, прежде всего, знать, каким образом система работает с повторяющимися полями. При отсутствии каких-либо дополнительных указаний система трактует все экземпляры (в том порядке, в котором они находятся в записи) как единую строку текста.<br />
<br />
Повторяющаяся группа изменяет порядок обработки системой экземпляров повторяющихся полей таким образом, что происходит последовательная обработка отдельно каждого экземпляра повторяющегося поля.<br />
<br />
Когда система обнаруживает скобку, открывающую повторяющуюся группу, происходит следующее:<br />
# Счетчик экземпляров (повторений) устанавливается в единицу.<br />
# Заключенный в скобки формат обрабатывается таким образом, что команды вывода полей выводят только те экземпляры повторяющихся полей, которые соответствуют текущему значению счетчика экземпляров.<br />
# Если в процессе текущего просмотра всей повторяющейся группы ничего не выводится (то есть в пределах группы больше не оказалось экземпляров повторяющегося поля), то процесс обработки повторяющейся группы завершается. В противном случае значение счетчика экземпляров увеличивается на 1 и повторяется выполнение шагов 2 и 3.<br />
<br />
Отметим еще раз, что все команды форматирования внутри повторяющейся группы обрабатываются последовательно экземпляр за экземпляром (как объяснялось выше), включая, таким образом, и поля, указываемые в команде IF, выражениях и функциях, а также строковых функциях, используемых как команды. Поэтому нежелательно использовать безусловные литералы в повторяющейся группе. И если все же безусловные литералы используются, то они будут выдаваться на один раз больше, чем это надо.<br />
<br />
===Использование повторяющейся группы===<br />
<br />
В подавляющем большинстве случаев для правильной обработки повторяющихся полей достаточно использование простых команд форматирования, таких, например, как команда режима вывода или повторяющихся литералов, как это показано ниже:<br />
{| class="standard"<br />
!Формат||Выходные данные<br />
|-<br />
|<tt>mpl,v70</tt>||<tt>Grieve, B.J.Went, F.W.</tt><br />
|-<br />
|<tt>mdl,v70</tt>||<tt>Grieve, B.J. Went, F.W.</tt><br />
|-<br />
|<tt><nowiki>v70+|; |</nowiki></tt>||<tt>Grieve, B.J.; Went, F.W.</tt><br />
|}<br />
<br />
Однако, возможны случаи, когда появляется необходимость отформатировать повторяющиеся поля другим способом. Например, иногда необходимо форматировать каждый экземпляр поля с новой строки, чего можно достигнуть только с использованием повторяющейся группы, как это показано ниже:<br />
{| class="standard"<br />
!Формат||Выходные данные<br />
|-<br />
|<tt>v675/v200^a</tt>||<tt>623.746623.746(092) Сухой П.О.<br>Конструктор Сухой. Люди и самолеты</tt><br />
|-<br />
|<tt>(v675/),v200^a</tt>||<tt>623.746<br>623.746(092) Сухой П.О.<br>Конструктор Сухой. Люди и самолеты</tt><br />
|}<br />
<br />
В первом случае команда перехода на новую строку (/) выполняется после форматирования всех экземпляров поля 675, а во втором случае она выполняется после каждого экземпляра поля.<br />
<br />
Пример ниже иллюстрирует использование повторяющихся полей с подполями (предполагается, что запись содержит два экземпляра поля 20). В первом формате использование повторяющейся группы дает возможность вывести различные подполя каждого экземпляра повторяющегося поля в виде таблицы. Второй формат аналогичен первому, но не содержит повторяющейся группы.<br />
<br />
Если нужно вывести литерал перед данными, создаваемыми повторяющейся группой, то можно использовать безусловный или условный литерал. Отметим, однако, что условный литерал должен быть связан с командой вывода поля (повторяющаяся группа не является командой вывода поля). Для этой цели необходимо использовать команды фиктивного вывода поля.<br />
<br />
Содержимое записи:<br />
210 ^aNew York^сMcGraw Hill^d1988<br />
210 ^aLondon^cAcademic Press^d1975<br />
Формат 1:<br />
/(v210^a,c11,v210^c,c30,v210^d/)<br />
Вывод:<br />
New York McGraw Hill 1988<br />
London Academic Press 1975<br />
Формат 2:<br />
/v210^a,c11,v210^c,c30,v210^d/<br />
Вывод:<br />
New YorkLondon<br />
McGraw HillAcademic Press<br />
19881975<br />
<br />
Для избежания недоразумений, связанных с тонкостями использования повторяющейся группы, рекомендуется воспользоваться следующим типовым примером:<br />
(if p(v20) then ... fi)<br />
где вместо троеточия следует поставить свои команды, которые будут выполнены на каждое повторение поля 20.<br />
<br />
Если существуют дополнительные условия на вывод, то их также следует помещать в тело условного оператора в приведённом типовом примере.<br />
<br />
Например, вывод всех повторений, кроме первого, можно сделать так:<br />
(if p(v20) then if &uf('+90') <> '1' then ... fi fi)<br />
<br />
Повторяющиеся группы не могут быть вложенными (то есть повторяющаяся группа не может содержать другую повторяющуюся группу), за исключением случая, когда внутренняя группа содержится в аргументе формата функции REF. Так, например, допустимым является следующий формат:<br />
(v10,ref(val(v20),v10,(v20,v30)))<br />
<br />
но приведенный ниже формат является недопустимым, что вызовет сообщение об ошибке:<br />
(v10,(v20,v30))<br />
<br />
Использование повторяющейся группы является обязательным в следующих случаях:<br />
* Использование повторяющегося поля в качестве аргумента функции L.<br />
* Первый аргумент функции REF ссылается на повторяющееся поле.<br />
<br />
Также нужно учитывать возможность употребления повторяющейся группы, когда повторяющееся поле используется в логическом выражении команды IF.<br />
<br />
==Глобальные переменные==<br />
<br />
Для записи и чтения глобальных переменных предназначены [[UNIFOR#Функции для работы с глобальными переменными|специальные форматные выходы]].<br />
<br />
Для вывода значения глобальной переменной предназначена команда '''g''', после которой должен быть записан номер глобальной переменной.<br />
<br />
Например, команда<br />
g1<br />
выводит значение первой глобальной переменной.<br />
<br />
Команда '''g''' в некоторых случаях может служить краткой альтернативой форматным выходам для чтения глобальных переменных.<br />
<br />
Об области видимости глобальных переменных см. в [[#Контекст форматёра|подразделе ''Контекст форматёра'']].<br />
<br />
==Использование команд (тэгов) RTF и HTML==<br />
<br />
В форматах допускается использование команд RTF, обеспечивающих представление неплоских текстов, содержащих шрифтовые выделения, горизонтальную и вертикальную верстку и т.п. Форматы, в которых используются команды RTF, называются RTF-форматы.<br />
<br />
Команды RTF вводятся в формат в виде литералов.<br />
<br />
Если предполагается, что формат будет содержать RTF команды, то он должен быть целиком заключен в фигурные скобки:<br />
'{'формат '}'<br />
<br />
Все команды RTF начинаются с символа \ (обратный слеш).<br />
<br />
Любая команда RTF должна заканчиваться знаком пробела, или непосредственно за ней может следовать другая команда RTF.<br />
Перечень основных команд RTF:<br />
{| class="standard"<br />
!Команда||Назначение<br />
|-<br />
|<tt>\par</tt>||Начало нового параграфа (абзаца)<br />
|-<br />
|<tt>\liNNN</tt>||Левый отступ для всех строк параграфа – NNN (в пунктах)<br />
|-<br />
|<tt>\riNNN</tt>||Правый отступ для всех строк параграфа – NNN (в пунктах)<br />
|-<br />
|<tt>\fiNNN</tt>||Левый отступ для первой строки параграфа – NNN (в пунктах)<br />
|-<br />
|<tt>\pard</tt>||Начало форматирования нового абзаца, все предыдущие команды форматирования параграфа отменяются<br />
|-<br />
|<tt>\fsNNN</tt>||Размер шрифта – NNN (удвоенный размер в пунктах)<br />
|-<br />
|<tt>\ul \ul0</tt>||Начало и конец подчеркивания<br />
|-<br />
|<tt>\i \i0</tt>||Начало и конец курсива<br />
|-<br />
|<tt>\b \b0</tt>||Начало и конец жирности<br />
|-<br />
|<tt>\tab</tt>||Табуляция<br />
|-<br />
|<tt>\qr</tt>||Правое выравнивание строк<br />
|-<br />
|<tt>\ql</tt>||Левое выравнивание строк<br />
|-<br />
|<tt>\qc</tt>||Цетральное выравнивание строк<br />
|-<br />
|<tt>\qj</tt>||Равномерное выравнивание строк<br />
|-<br />
|<tt>\page</tt>||Переход на новую страницу<br />
|-<br />
|<tt>\txNNN</tt>||Позиция табуляция – NNN (в пунктах)<br />
|}<br />
<br />
В форматах, содержащих команды RTF, неприменимы [[#Команды горизонтального и вертикального размещения|команды вертикальной верстки]].<br />
<br />
В форматах показа могут использоваться HTML-теги в качестве альтернативы RTF-командам. Совместное использование RTF-команд и HTML-тегов недопустимо.<br />
<br />
Форматы, в которых используются HTML-теги, называются HTML-форматы.<br />
<br />
HTML-теги вводятся в формат в виде литералов.<br />
<br />
Если требуется явно определить формат как HTML-формат, необходимо в самом начале формата указать фиктивный тэг:<br />
'</>'<br />
<br />
В форматах, содержащих HTML-теги, неприменимы [[#Команды горизонтального и вертикального размещения|команды вертикальной верстки, а также команды Xn и Cn]].<br />
<br />
Предлагаются дополнительные возможности при адресации ресурсов ИРБИС в тегах <A HREF=…> и <IMG SRC=…>:<br />
<A HREF="IRBIS:N,описание_ссылки"><br />
где:<br />
* N – число, обозначающее вид ссылки. Принимает значения 0, 1, 2, 3.<br />
** Для значений 0, 1, 2 – структура и смысл ссылок аналогичен ссылкам, формируемым с помощью форматного выхода &unifor(‘+I..). Важное замечание: форматный выход &unifor(‘+I..) ПРИМЕНИМ ТОЛЬКО В RTF-форматах (т.е. в форматах с HTML-тэгами он не применим).<br />
** Значение 3 определяет ссылку на внешний объект через относительную адресацию в рамках системы ИРБИС:<br />
<A HREF="IRBIS:3,path,dbname,filename"><br />
где:<br />
* path – определяет относительный путь к внешнему объекту в рамках ИР-БИС и принимает значения: 0 – основная директория системы (для ИРБИС32 – та, где находятся исполняемые модули; для ИРБИС64 – та, где находятся ис-полняемые модули сервера); 1 – общая директория баз данных (по умолчанию \DATAI); 10 – директория конкретной БД;<br />
* dbname – имя БД (имеет смысл только при path=10). По умолчанию – предполагается текущая БД;<br />
* filename – имя файла внешнего объекта.<br />
<br />
<IMG SRC="IRBIS:path,dbname,filename"><br />
где параметры path, dbname, filename имеют тот же смысл, что указано выше, и определяют ссылку на графический ресурс (картинку) в рамках ИРБИС.<br />
<br />
Реализуется специальная возможность для отображения штрих-кодов в HTML-форматах, а именно:<br />
<IMG SRC="IRBIS:!!ШТРИХ_КОД!!"><br />
<br />
==Форматы для формально-логического контроля (ФЛК)==<br />
<br />
Для формально-логического контроля данных (как на уровне поля, так и документа в целом) применяются специальные форматы. Форматы для ФЛК используются следующим образом:<br />
* форматированию подвергается контролируемый документ;<br />
* первый символ результата форматирования определяет результат ФЛК, а именно:<br />
** 0 – означает положительный результат контроля;<br />
** 1 – означает отрицательный результат и обнаруженные ошибки считаются непреодолимыми, т.е. подлежат обязательному устранению;<br />
** 2 – означает отрицательный результат, но при этом ошибки считаются преодолимыми, т.е. их можно не исправлять.<br />
* остальной результат форматирования (начиная со второго символа) в случае отрицательного контроля выдается пользователю в качестве сообщения.<br />
<br />
Собственно форматы ФЛК, как правило, содержат команды IF. Многочисленные примеры таких форматов находятся в директории БД IBIS.<br />
<br />
==Форматы с переменными метками==<br />
<br />
В некоторых режимах работы системы применяются форматы, в которых используются, так называемые, переменные метки (например, при вводе данных через словарь – т.н. форматы для переноса данных). [[Сценарии поиска#Поиски по словарю|Исходным для таких форматов обязательно является термин словаря.]]<br />
<br />
Переменные метки обозначаются в таких форматах в виде *** (три символа ''звёздочка''). Форматы с переменными метками используются следующим образом:<br />
* Определяется первая [[Таблица выбора полей#ТВП для инвертированного файла|индексная ссылка]] для исходного термина: а именно, соответствующие номер документа (MFN), метка поля (TAG) и повторение (OCC).<br />
* Все переменные метки в формате заменяются на значение найденной метки поля (TAG) и форматированию подвергается документ с найденным номером (MFN).<br />
* В качестве результата форматирования берется строка с номером OCC (нумерация начинается с 1). Если нет строки с таким номером, результатом форматирования является пустая строка.<br />
<br />
Примеры форматов с переменными метками находятся в директории БД IBIS.<br />
<br />
==Ссылки==<br />
<br />
См. также:<br />
* [[Базы данных ИРБИС]]<br />
* [[Операторы языка форматирования ИРБИС]]<br />
* [[Функции языка форматирования ИРБИС]]<br />
* [[UNIFOR]]<br />
* <tt>[[IRBIS64.dll]]</tt><br />
* [[Язык запросов ИРБИС]]<br />
<br />
Источники информации:<br />
* [[Общее описание системы ИРБИС64]]<br />
<br />
[[Категория:Язык форматирования системы ИРБИС]]<br />
[[Категория:Анонсированные статьи]]</div>Sokvhttp://wiki.elnit.org/index.php?title=%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F_%D0%92%D0%B5%D0%B1-%D0%98%D0%A0%D0%91%D0%98%D0%A1&diff=2457Технология Веб-ИРБИС2016-03-18T17:05:11Z<p>Sokv: /* Команда поиска – S */</p>
<hr />
<div>Технология '''''Веб-ИРБИС''''' служит для создания Веб-приложений для работы с базами данных ИРБИС.<br />
<br />
Данная технология реализована в виде одноимённого [[Веб-ИРБИС|'''''программного продукта – Веб-ИРБИС''''']].<br />
<br />
==Веб-шлюз ИРБИС==<br />
<br />
Программный модуль ''Веб-шлюз ИРБИС'' обеспечивает обработку клиентских запросов.<br />
<br />
''Веб-шлюз ИРБИС'' является шлюзом CGI.<br />
<br />
Запрос может осуществляться по методу POST или GET.<br />
<br />
===Общая схема работы Веб-шлюза ИРБИС===<br />
<br />
Последовательность операций шлюза:<br />
* Чтение параметров INI файла<br />
* Препроцессинг<br />
** Формальный контроль правильности параметров<br />
** Интерпретация поискового запроса<br />
** Авторизация<br />
** Выполнение скрипта защиты<br />
** Повторная авторизация<br />
* Выполнение поиска<br />
* Формирование ответа (объединение и обработка фреймов)<br />
* Определение HTTP заголовков на основе INI файла<br />
* Возврат ответа<br />
<br />
В случае возникновения ошибки выполнения или превышения времени обработки запроса шлюз возвращает ошибку (error.html).<br />
<br />
====Препроцессинг====<br />
<br />
=====Скрипт-защита=====<br />
<br />
Формат скрипта защиты выполняет две функции: 1) проверку поступивших параметров запроса и защиту от взлома 2) обработку и дополнение параметров.<br />
<br />
Первая строка, сформированная форматом срипт-защиты, определяет общий результат – если это 0 или файлом не было возвращено никаких значений – скрипт-защита определила ошибку, если результат 1 или файлом были возвращены другие ненулевые значения – ошибки нет. В первом случае шлюз возвращает error.html, в последнем случае шлюз читает остальные строки формата и изменяет параметры запроса на новые.<br />
<br />
Например, строка ‘SCRIPT_DONE=YES’/ задаёт параметру SCRIPT_DONE значение YES.<br />
<br />
=====Авторизация пользователя=====<br />
<br />
Авторизация даёт возможность заказывать литературу, просматривать формуляр и редактировать корзину заказов.<br />
<br />
Для авторизации используется база RDR. Авторизация происходит по идентификатору и, если в пользовательском запросе задан параметр Z21FLAGID=1, – по фамилии. После авторизации шлюз выполняет шифрование идентификатора, и зашифрованный идентификатор передаётся при переходе по страницам.<br />
<br />
====Инициализация параметров====<br />
<br />
После поступления клиентского запроса осуществляется инициализация параметров веб-шлюза на основе параметров CGI.<br />
<br />
Обрабатываемый шлюзом набор параметров определяется конфигурационным файлом Веб-шлюза ИРБИС.<br />
<br />
Эти параметры доступны в контексте фреймов.<br />
<br />
Параметры используются, в том числе, для отслеживания состояния веб-страницы. В ответ на HTTP-запрос клиента (обычно – в генерируемую html-страницу, передаваемую клиенту) может включить набор пользовательских параметров вместе с их значениями, полученными в запросе, для чего есть специальная команда.<br />
<br />
Отслеживание состояния осуществляется с использованием следующих этапов: 1) данные передаются на веб-шлюз в виде параметров запроса; 2) веб-шлюз передаёт данные вместе со сформированной страницей в скрытых полях форм HTML.<br />
<br />
====Выполнение команды====<br />
<br />
Затем шлюз переходит к выполнению команды. Команда соответствует переданному параметру C21COM.<br />
<br />
В контексте выполнения команды используются полученные параметры.<br />
<br />
Для каждой команды есть набор '''основных параметров''', логика использования которых предопределена самим веб-шлюзом.<br />
<br />
К основным параметрам шлюза относятся:<br />
* <tt>C21COM</tt> – команда, которую должен выполнить веб-шлюз.<br />
* <tt>I21DBN</tt> – имя [[Профили|профиля]]. Веб-шлюз ИРБИС в соответствии с именем профиля определяет набор [[Фреймы|фреймов]], из которых составит ответ клиенту. Веб-шлюз ИРБИС ищет названия фреймов в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файле irbis_server.ini]] в секции, название которой соответствует значению параметра <tt>I21DBN</tt> (подробнее в разделе [[#Роль фреймов в работе веб-шлюза ИРБИС|Роль фреймов в работе веб-шлюза ИРБИС]]).<br />
* <tt>P21DBN</tt> – имя базы данных.<br />
* <tt>Z21ID</tt> – значение параметра авторизации.<br />
<br />
Кроме '''основных''', есть '''пользовательские параметры''' – все остальные параметры.<br />
<br />
Особенность пользовательских параметров в том, что их набор и использование полностью могут быть определены (переопределены) пользователями системы ИРБИС:<br />
* Определение параметров даётся в конфигурационном файле Веб-шлюза ИРБИС.<br />
* Параметры доступны в виде виртуальных полей на языке форматирования в контексте фреймов.<br />
<br />
====Ответ веб-шлюза ИРБИС клиенту====<br />
<br />
Порядок формирования ответа веб-шлюза ИРБИС клиенту зависит от команды.<br />
<br />
=====Ответ с использованием фреймов=====<br />
<br />
Для команд, представленных в таблице, осуществляется генерация ответа с использованием технологии выбора и обработки фреймов.<br />
<br />
Обычно это динамически формируемая веб-страница.<br />
<br />
'''Таблица.''' Команды веб-шлюза ИРБИС.<br />
{|<br />
|<br />
{| class="standard"<br />
!Значение параметра <tt>C21COM</tt>||Описание команды||Соответствующий параметр в <tt>irbis_server.ini</tt><br />
|-<br />
|'''F'''||'''''показ''''' – команда показа страницы||ShowFrames<br />
|-<br />
|'''S'''||'''''поиск''''' – команда выполнения и показа результатов поиска||SearchFrames<br />
|-<br />
|'''T'''||'''''словарь''''' – команда показа терминов словаря||DictionryFrames<br />
|-<br />
|'''Z'''||'''''заказ''''' – команда отбора записей в корзину заказов||ZakazFrames<br />
|-<br />
|'''R'''||'''''запись''''' – команда редактуры записей||RecUpdateFrames<br />
|}<br />
|}<br />
<br />
Выбор набора фреймов зависит от: команды (параметр C21COM) и профиля (параметр I21DBN).<br />
<br />
Возможные наборы фреймов предварительно сконфигурированы и указаны в конфигурационном файле <tt>irbis_server.ini</tt>.<br />
<br />
Откуда шлюз и считывает нужный набор, в зависимости от параметров (C21COM и I21DBN).<br />
<br />
Каждой команде веб-шлюза ИРБИС соответствует имя параметра в файле <tt>irbis_server.ini</tt> (см. таблицу ''Команды веб-шлюза ИРБИС'').<br />
<br />
=====Отправка клиенту ресурсного файла=====<br />
<br />
Для команд, представленных в таблице, отправка клиенту ресурсного файла.<br />
<br />
'''Таблица.''' Команды веб-шлюза ИРБИС.<br />
{|<br />
|<br />
{| class="standard"<br />
!Значение параметра <tt>C21COM</tt>||Описание команды<br />
|-<br />
|'''E'''||'''''экспорт''''' – команда выгрузки записей<br />
|-<br />
|'''2'''||'''''файл''''' – команда чтения внешнего объекта<br />
|-<br />
|'''4'''||'''''скачать''''' – команда заимствования записи<br />
|}<br />
|}<br />
<br />
===Команда поиска – S===<br />
<br />
'''Пример поиска всех страниц одного текста PDF'''<br />
<br />
Здесь мы предполагаем, что:<br />
* Работаем в контексте базы данных IBIS.<br />
* Поисковое выражение <tt>TXT=2__$</tt> позволяет найти все страницы файла <tt>2.pdf</tt>.<br />
<br />
Чтобы создать произвольный запрос, не связанный с существующим функционалом системы, можно создать новый профиль EXAMPLE1. Для этого в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|конфигурационном файле веб-шлюза ИРБИС irbis server.ini]] нужно добавить секцию EXAMPLE1<br />
[EXAMPLE1]<br />
FRAMES=C:\irbis\irbis_plus\IRBIS64\DATAI\frames_15_plus\FullText\<br />
ShowFrames=<br />
SearchFrames=RESULT<br />
DBNAME=IBIS<br />
где значение параметра FRAMES должно соответствовать местонахождению фреймов.<br />
<br />
Для команды поиска порядок формирования ответа определяется параметром SearchFrames. И запись<br />
SearchFrames=RESULT<br />
означает, что при формировании Веб-шлюзом ответа на команду поиска не участвуют фреймы, участвует только формат, который будет указан в запросе.<br />
<br />
В качестве этого формата предлагается создать файл '''<tt>example1.pft</tt>''' со следующим содержимым<br />
<nowiki>mfn,/,</nowiki><br />
Этот формат выводит список MFN найденных записей.<br />
<br />
Теперь всё готово, чтобы выполнить запрос<br />
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<br />
<br />
В основных полях мы указываем команду поиска (S), базу данных IBIS, профиль EXAMPLE1, идентификатор пользователя.<br />
<br />
Поле S21All содержит запрос на языке запросов ИРБИС. Если его декодировать из кодировки URL, то он будет выглядеть так<br />
<nowiki>S21All=<.>TXT=2__$<.></nowiki><br />
где, в соответствии с правилами [[#Постобработка|постобработки]], точка в угловых скобках заменяет двойную кавычку. Таким образом, указанный запрос следует читать как<br />
"TXT=2__$"<br />
где двойные кавычки являются ограничителем запроса в выражении на [[Язык запросов ИРБИС|языке запросов ИРБИС]]<br />
<br />
Формат вывода найденных записей, который предлагалось подготовить выше, указан в параметре S21FMT, без расширения.<br />
<br />
Результатом выполнения этого запроса будет обещанный список mfn, например<br />
0000000002<br />
0000000006<br />
0000000013<br />
0000000018<br />
<br />
Можно усложнить запрос, ограничив вывод порцией из 2 результатов, начиная со 2-го (параметры S21CNR и S21STN)<br />
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<br />
<br />
Результатом будет<br />
0000000006<br />
0000000013<br />
<br />
Можно усложнить формат вывода найденных записей '''<tt>example1.pft</tt>''', добавив информацию о количестве найденных, а также введённых порционных ограничениях<br />
<nowiki>mfn,'; кол-во найденных = ',v1001,'; с какого номера начать = ',v2223,'; размер порции = ',v2224,/,</nowiki><br />
где 1001, 2223 и 2224 – виртуальные поля, в которые шлюз помещает данные в соответствии с [[таблицей виртуальных полей шлюза]].<br />
<br />
Все данные, которые шлюз принял в виде параметров, попадают в виртуальные поля в соответствии правилами, заданными в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файле irbis_server.ini]]. Например, параметру S21CNR соответствует метка 2224, параметру S21STN – 2223.<br />
<br />
Результатом будет<br />
0000000006; кол-во найденных = 4; с какого номера начать = 2; размер порции = 2<br />
0000000013; кол-во найденных = 4; с какого номера начать = 2; размер порции = 2<br />
<br />
В последнем примере количество найденных и данные о порции повторяются с каждым результатом поиска, что является избыточным.<br />
<br />
Такой избыточности позволяют избежать применение [[фреймов]].<br />
<br />
Создадим файл example1.frm (его местоположение должно соответствовать параметру FRAMES в профиле) со следующим содержимым<br />
Вывод через фрейм... <br />
<?! 'кол-во найденных = ',v1001,'; с какого номера начать = ',v2223,'; размер порции = ',v2224,/, ?><br />
<br />
Чтобы задействовать этот фрейм, в описании профиля можно изменить значение параметра SearchFrames следующим образом:<br />
SearchFrames=example1.frm,RESULT<br />
что следует понимать так, что шлюз вернёт результат выполнения команды поиска, составленный из:<br />
* результата выполнения фрейма example1.frm<br />
* результатов работы формата, который отработает для каждого результата поиска (обозначается словом RESULT).<br />
<br />
Кроме того, чтобы измежать дублирующихся данных, в '''<tt>example1.pft</tt>''' оставим только вывод MFN:<br />
mfn,/,<br />
<br />
Результатом будет<br />
Вывод через фрейм... кол-во найденных = 4; с какого номера начать = 2; размер порции = 2<br />
0000000006<br />
0000000013<br />
<br />
===Команда показа терминов словаря – T===<br />
<br />
'''Пример команды показа терминов словаря'''<br />
<br />
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&<br />
<br />
где:<br />
* <tt>C21COM=T</tt> определяет команду,<br />
* <tt>I21DBN=IBIS</tt> базу данных,<br />
* <tt>Z21ID=1500323880383212</tt> идентификатор читателя в зашифрованном виде,<br />
* <tt>T21PRF=KT=</tt> префикс словаря,<br />
* <tt>T21TRM=a</tt> – требование терминов, начинающихся на <tt>a</tt>.<br />
<br />
Пример возврата:<br />
A20040830ARUSY|1<br />
A20041017ABELY|1<br />
A20041118ARUSY|1<br />
A2H|2<br />
A540|9<br />
A54001|7<br />
A550UTILIZATION|1<br />
AACDEMY|1<br />
AASL|2<br />
AASLPUBSANDJOURNALS|2<br />
<br />
===Добавление пользовательского параметра===<br />
<br />
Добавление пользовательского параметра осуществляется в несколько шагов:<br />
* '''добавление ''пользовательского параметра'' в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файл инициализации шлюза <tt>irbis_server.ini</tt>]]'''<br />
: Необходимо добавить описание нового ''пользовательского параметра'' в настроечный файл <tt>irbis_server.ini</tt>, задав имя и метку параметра. Для этого в секции <tt>[PARAMETRS]</tt> используются ''параметры ini файла'' <tt>PARNAME_</tt> и <tt>PARTAG_</tt> (не стоит путать термины ''пользовательские параметры'' веб-шлюза и ''параметры ini файла''), где вместо знака подчёркивания ставится номер пользовательского параметра по порядку, например:<br />
PARNAME2=C21COM<br />
PARTAG2=2222<br />
: В этом примере мы видим описание второго по порядку из определённых в секции <tt>[PARAMETRS]</tt> параметров: имя параметра <tt>C21COM</tt>, метка параметра <tt>2222</tt>. Имя и метка параметров должны быть уникальными. После того как описание ''пользовательского параметра'' добавлено необходимо изменить значение параметра <tt>PARCOUNT</tt> в секции <tt>[PARAMETRS]</tt>, его значение должно быть равно порядковому номеру последнего описания ''пользовательского параметра''.<br />
: ''Примечание:'' обратите внимание, что в файле <tt>irbis_server.ini</tt> хранятся описания не только пользовательских параметров, а присутствует также описания предустановленных параметров.<br />
* '''использование в файлах <tt>.frm</tt> команд <tt><!FORMAT=INSERT_ALL_PARAMETERS></tt> и <tt><!FORMAT=INSERT_ALL_PARAMETERS_IN_QUERY></tt>'''<br />
: Команда <tt><!FORMAT=INSERT_ALL_PARAMETERS></tt> обеспечивает вставку в код HTML-страницы всех непустых переданных веб-шлюзу параметров в виде скрытых элементов формы, например:<br />
<input type="hidden" name="PARAM_NAME" value="PARAM_VALUE"><br />
: Команда <tt><!FORMAT=INSERT_ALL_PARAMETERS_IN_QUERY></tt> вставляет в код HTML-страницы гиперссылку, содержащую все переданные веб-шлюзу параметры.<br />
<br />
===Система команд Веб-шлюза ИРБИС===<br />
<br />
Система ''команд'' Веб-шлюза ИРБИС позволяет задать собственный набор фреймов и порядок их объединения для каждой задачи. Для разных задач предусмотрены разные команды, например: для страницы приглашения к поиску, результата поиска, отбора записей в корзину заказов и т.д.<br />
<br />
==Обработка фреймов==<br />
<br />
В общем случае, веб-страница формируется путём объединения (''склеивания'') следующих частей:<br />
* ''заголовочной'' и ''подвальной'' частей, формируемых при помощи ''фреймов'' и<br />
* ''тела'' страницы, формируемого при помощи [[Язык форматирования системы ИРБИС#Понятие формата|''формата'']], который отрабатывает на наборе записей базы данных (соответствующих запросу пользователя).<br />
<br />
===Фрейм как язык разметки===<br />
<br />
Фрейм представляет собой текстовый файл, содержимое которого передаётся клиенту (в веб браузер), который также может содержать вставки, которые будут обработаны определённым образом перед передачей клиенту.<br />
<br />
Предусмотрены вставки следующих видов:<br />
* вставка на языке форматирования ИРБИС,<br />
* вложенный фрейм.<br />
<br />
'''''Вставка на языке форматирования''''' обозначается следующим образом<br />
<br />
<!FORMAT<br />
<br />
'''Пример:'''<br />
<br />
<nowiki><!FORMAT=if v3409='' then 'value=""' else 'value=','"',v3409,'"',fi></nowiki><br />
<br />
''Примечание: если вставка на языке форматирования содержит символы, кодирующиеся в UTF-8 более чем одним байтом (например, кириллицу), то формат обязательно должен начинаться с восклицательного знака. Это связано с тем, что формат в кодировке UTF-8 [[Язык форматирования системы ИРБИС#Кодировка|должен предваряться восклицательным знаком]], а все фреймы храняться именно в кодировке UTF-8.''<br />
<br />
'''Пример:'''<br />
<br />
<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><br />
<br />
'''Пример вложенного фрейма:'''<br />
<br />
<!FORMAT=if &uf('IMAIN,SHOW_DUBLIN_CORE,0') <> '0' then /'<!FILE=Dublin_Core.frm>' fi><br />
<br />
Предусмотрен '''''упрощённый синтаксис вставки на языке форматирования''''':<br />
<?!if p(v2225) then 'true' fi ?><br />
<br />
===Постобработка===<br />
<br />
Перед передачей результата выполнения фрейма клиенту происходит замена сочетаний символов<br />
<.><br />
на символ двойной кавычки<br />
"<br />
<br />
===Пример последовательности действий Веб-шлюза ИРБИС при формировании веб-страницы в ответ на запрос===<br />
<br />
Веб-шлюз ИРБИС при получении команд '''F''', '''S''', '''T''', '''Z''', '''R''' выполняет следующую последовательность действий:<br />
* Веб-шлюз получил запрос. Запрос содержит параметры <tt>C21COM</tt>, <tt>I21DBN</tt> и другие.<br />
* В файле <tt>irbis_server.ini</tt> веб-шлюз находит секцию, имя которой соответствует значению параметра <tt>I21DBN</tt>. Иными словами: с одной стороны, в качестве значения параметра <tt>I21DBN</tt> указывается имя профиля, с другой стороны, для каждого профиля в файле <tt>irbis_server.ini</tt> должна содержаться секция, имя которой совпадает с именем профиля.<br />
* В указанной секции файла <tt>irbis_server.ini</tt> веб-шлюз находит значение параметра, соответствующего указанной в параметре <tt>C21COM</tt> команде (см. таблицу ''Команды веб-шлюза ИРБИС''). Полученное значение должно представлять собой список фреймов.<br />
* Фреймы обрабатываются, и результат, представляющий собой HTML-страницу, отправляется клиенту в качестве ответа.<br />
<br />
===Примеры перехода пользователя по страницам Веб-ИРБИС===<br />
<br />
Пример запроса начальной страницы:<br />
<br />
http://localhost:8080/cgi-bin/irbis64r_15_plus/cgiirbis_64_ft.exe?C21COM=F&I21DBN=IBIS_FULLTEXT&P21DBN=IBIS&Z21ID=&S21CNR=5<br />
<br />
где указаны:<br />
* команда шлюза F (''показ страницы'')<br />
* имя профиля IBIS_FULLTEXT<br />
* база данных IBIS<br />
* авторизация не осуществлялась<br />
<br />
Параметр S21CNR не обязателен.<br />
<br />
При авторизации запрос приобретает следующий вид<br />
<br />
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<br />
<br />
где указаны:<br />
* команда шлюза F (''показ страницы'')<br />
* имя профиля AUTHOR<br />
* база данных IBIS<br />
* параметры авторизации: Z21FLAGID, фамилия читателя Z21FAMILY и идентификатор читателя Z21ID<br />
<br />
При поиске по слову "библиотека" запрос приобретает следующий вид<br />
<br />
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<br />
<br />
где указаны:<br />
* команда шлюза S (''поиск'')<br />
* имя профиля IBIS_FULLTEXT<br />
* база данных IBIS<br />
* параметры авторизации: Z21ID<br />
* текущий запрос SEARCH_STRING и предыдущий запрос FT_S21STR (одинаковые)<br />
* USES21ALL=1 (использовать параметр S21ALL, применяется в поиске связных)<br />
* S21CNR=5 (порция при показе найденных)<br />
* S21REF=10 (для правильного формирования ссылок на страницы с результатами поиска)<br />
* C21COM1<br />
* FT_PREFIX<br />
* S21FMT=briefHTML_ft<br />
* AVT_S21P03=A%3D<br />
* AVT_S21P02=1<br />
* AVT_S21LOG=1<br />
* NAME_S21P03=T%3D<br />
* NAME_S21P02=1<br />
* NAME_S21LOG=1<br />
* UDC_S21P03=U%3D<br />
* UDC_S21P02=0<br />
* UDC_S21LOG=1<br />
* IZD_S21P03=M%3D<br />
* IZD_S21P02=1<br />
* IZD_S21LOG=1<br />
* DAT_S21P03=G%3D<br />
* DAT_S21P02=1<br />
* DAT_S21LOG=5<br />
* P21DBN=IBIS<br />
* FT_S21LOG=4<br />
* FT_S21P03=K%3D<br />
* FT_S21P01=3<br />
* S21STN=1<br />
* S21COLORTERMS=1<br />
<br />
==Ссылки==<br />
<br />
См. также:<br />
* [[Веб-ИРБИС]]<br />
* [[Установка Веб-шлюза Ирбис 64]]<br />
* [[Настройка и обслуживание Веб-ИРБИС]]<br />
* [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini]]<br />
* [[Язык форматирования системы ИРБИС]]<br />
* [[Язык запросов ИРБИС]]<br />
<br />
[[Категория:Технология Веб-ИРБИС]]<br />
[[Категория:ИРБИС 64]]</div>Sokvhttp://wiki.elnit.org/index.php?title=%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F_%D0%92%D0%B5%D0%B1-%D0%98%D0%A0%D0%91%D0%98%D0%A1&diff=2456Технология Веб-ИРБИС2016-03-18T16:44:44Z<p>Sokv: /* Обработка фреймов */</p>
<hr />
<div>Технология '''''Веб-ИРБИС''''' служит для создания Веб-приложений для работы с базами данных ИРБИС.<br />
<br />
Данная технология реализована в виде одноимённого [[Веб-ИРБИС|'''''программного продукта – Веб-ИРБИС''''']].<br />
<br />
==Веб-шлюз ИРБИС==<br />
<br />
Программный модуль ''Веб-шлюз ИРБИС'' обеспечивает обработку клиентских запросов.<br />
<br />
''Веб-шлюз ИРБИС'' является шлюзом CGI.<br />
<br />
Запрос может осуществляться по методу POST или GET.<br />
<br />
===Общая схема работы Веб-шлюза ИРБИС===<br />
<br />
Последовательность операций шлюза:<br />
* Чтение параметров INI файла<br />
* Препроцессинг<br />
** Формальный контроль правильности параметров<br />
** Интерпретация поискового запроса<br />
** Авторизация<br />
** Выполнение скрипта защиты<br />
** Повторная авторизация<br />
* Выполнение поиска<br />
* Формирование ответа (объединение и обработка фреймов)<br />
* Определение HTTP заголовков на основе INI файла<br />
* Возврат ответа<br />
<br />
В случае возникновения ошибки выполнения или превышения времени обработки запроса шлюз возвращает ошибку (error.html).<br />
<br />
====Препроцессинг====<br />
<br />
=====Скрипт-защита=====<br />
<br />
Формат скрипта защиты выполняет две функции: 1) проверку поступивших параметров запроса и защиту от взлома 2) обработку и дополнение параметров.<br />
<br />
Первая строка, сформированная форматом срипт-защиты, определяет общий результат – если это 0 или файлом не было возвращено никаких значений – скрипт-защита определила ошибку, если результат 1 или файлом были возвращены другие ненулевые значения – ошибки нет. В первом случае шлюз возвращает error.html, в последнем случае шлюз читает остальные строки формата и изменяет параметры запроса на новые.<br />
<br />
Например, строка ‘SCRIPT_DONE=YES’/ задаёт параметру SCRIPT_DONE значение YES.<br />
<br />
=====Авторизация пользователя=====<br />
<br />
Авторизация даёт возможность заказывать литературу, просматривать формуляр и редактировать корзину заказов.<br />
<br />
Для авторизации используется база RDR. Авторизация происходит по идентификатору и, если в пользовательском запросе задан параметр Z21FLAGID=1, – по фамилии. После авторизации шлюз выполняет шифрование идентификатора, и зашифрованный идентификатор передаётся при переходе по страницам.<br />
<br />
====Инициализация параметров====<br />
<br />
После поступления клиентского запроса осуществляется инициализация параметров веб-шлюза на основе параметров CGI.<br />
<br />
Обрабатываемый шлюзом набор параметров определяется конфигурационным файлом Веб-шлюза ИРБИС.<br />
<br />
Эти параметры доступны в контексте фреймов.<br />
<br />
Параметры используются, в том числе, для отслеживания состояния веб-страницы. В ответ на HTTP-запрос клиента (обычно – в генерируемую html-страницу, передаваемую клиенту) может включить набор пользовательских параметров вместе с их значениями, полученными в запросе, для чего есть специальная команда.<br />
<br />
Отслеживание состояния осуществляется с использованием следующих этапов: 1) данные передаются на веб-шлюз в виде параметров запроса; 2) веб-шлюз передаёт данные вместе со сформированной страницей в скрытых полях форм HTML.<br />
<br />
====Выполнение команды====<br />
<br />
Затем шлюз переходит к выполнению команды. Команда соответствует переданному параметру C21COM.<br />
<br />
В контексте выполнения команды используются полученные параметры.<br />
<br />
Для каждой команды есть набор '''основных параметров''', логика использования которых предопределена самим веб-шлюзом.<br />
<br />
К основным параметрам шлюза относятся:<br />
* <tt>C21COM</tt> – команда, которую должен выполнить веб-шлюз.<br />
* <tt>I21DBN</tt> – имя [[Профили|профиля]]. Веб-шлюз ИРБИС в соответствии с именем профиля определяет набор [[Фреймы|фреймов]], из которых составит ответ клиенту. Веб-шлюз ИРБИС ищет названия фреймов в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файле irbis_server.ini]] в секции, название которой соответствует значению параметра <tt>I21DBN</tt> (подробнее в разделе [[#Роль фреймов в работе веб-шлюза ИРБИС|Роль фреймов в работе веб-шлюза ИРБИС]]).<br />
* <tt>P21DBN</tt> – имя базы данных.<br />
* <tt>Z21ID</tt> – значение параметра авторизации.<br />
<br />
Кроме '''основных''', есть '''пользовательские параметры''' – все остальные параметры.<br />
<br />
Особенность пользовательских параметров в том, что их набор и использование полностью могут быть определены (переопределены) пользователями системы ИРБИС:<br />
* Определение параметров даётся в конфигурационном файле Веб-шлюза ИРБИС.<br />
* Параметры доступны в виде виртуальных полей на языке форматирования в контексте фреймов.<br />
<br />
====Ответ веб-шлюза ИРБИС клиенту====<br />
<br />
Порядок формирования ответа веб-шлюза ИРБИС клиенту зависит от команды.<br />
<br />
=====Ответ с использованием фреймов=====<br />
<br />
Для команд, представленных в таблице, осуществляется генерация ответа с использованием технологии выбора и обработки фреймов.<br />
<br />
Обычно это динамически формируемая веб-страница.<br />
<br />
'''Таблица.''' Команды веб-шлюза ИРБИС.<br />
{|<br />
|<br />
{| class="standard"<br />
!Значение параметра <tt>C21COM</tt>||Описание команды||Соответствующий параметр в <tt>irbis_server.ini</tt><br />
|-<br />
|'''F'''||'''''показ''''' – команда показа страницы||ShowFrames<br />
|-<br />
|'''S'''||'''''поиск''''' – команда выполнения и показа результатов поиска||SearchFrames<br />
|-<br />
|'''T'''||'''''словарь''''' – команда показа терминов словаря||DictionryFrames<br />
|-<br />
|'''Z'''||'''''заказ''''' – команда отбора записей в корзину заказов||ZakazFrames<br />
|-<br />
|'''R'''||'''''запись''''' – команда редактуры записей||RecUpdateFrames<br />
|}<br />
|}<br />
<br />
Выбор набора фреймов зависит от: команды (параметр C21COM) и профиля (параметр I21DBN).<br />
<br />
Возможные наборы фреймов предварительно сконфигурированы и указаны в конфигурационном файле <tt>irbis_server.ini</tt>.<br />
<br />
Откуда шлюз и считывает нужный набор, в зависимости от параметров (C21COM и I21DBN).<br />
<br />
Каждой команде веб-шлюза ИРБИС соответствует имя параметра в файле <tt>irbis_server.ini</tt> (см. таблицу ''Команды веб-шлюза ИРБИС'').<br />
<br />
=====Отправка клиенту ресурсного файла=====<br />
<br />
Для команд, представленных в таблице, отправка клиенту ресурсного файла.<br />
<br />
'''Таблица.''' Команды веб-шлюза ИРБИС.<br />
{|<br />
|<br />
{| class="standard"<br />
!Значение параметра <tt>C21COM</tt>||Описание команды<br />
|-<br />
|'''E'''||'''''экспорт''''' – команда выгрузки записей<br />
|-<br />
|'''2'''||'''''файл''''' – команда чтения внешнего объекта<br />
|-<br />
|'''4'''||'''''скачать''''' – команда заимствования записи<br />
|}<br />
|}<br />
<br />
===Команда поиска – S===<br />
<br />
'''Пример поиска всех страниц одного текста PDF'''<br />
<br />
Здесь мы предполагаем, что:<br />
* Работаем в контексте базы данных IBIS.<br />
* Поисковое выражение <tt>TXT=2__$</tt> позволяет найти все страницы файла <tt>2.pdf</tt>.<br />
<br />
Чтобы создать произвольный запрос, не связанный с существующим функционалом системы, можно создать новый профиль EXAMPLE1. Для этого в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|конфигурационном файле веб-шлюза ИРБИС irbis server.ini]] нужно добавить секцию EXAMPLE1<br />
[EXAMPLE1]<br />
FRAMES=C:\irbis\irbis_plus\IRBIS64\DATAI\frames_15_plus\FullText\<br />
ShowFrames=<br />
SearchFrames=RESULT<br />
DBNAME=IBIS<br />
где значение параметра FRAMES должно соответствовать местонахождению фреймов.<br />
<br />
Для команды поиска порядок формирования ответа определяется параметром SearchFrames. И запись<br />
SearchFrames=RESULT<br />
означает, что при формировании Веб-шлюзом ответа на команду поиска не участвуют фреймы, участвует только формат, который будет указан в запросе.<br />
<br />
В качестве этого формата предлагается создать файл '''<tt>example1.pft</tt>''' со следующим содержимым<br />
<nowiki>mfn,/,</nowiki><br />
Этот формат выводит список MFN найденных записей.<br />
<br />
Теперь всё готово, чтобы выполнить запрос<br />
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<br />
<br />
В основных полях мы указываем команду поиска (S), базу данных IBIS, профиль EXAMPLE1, идентификатор пользователя.<br />
<br />
Поле S21All содержит запрос на языке запросов ИРБИС. Если его декодировать из кодировки URL, то он будет выглядеть так<br />
<nowiki>S21All=<.>TXT=2__$<.></nowiki><br />
где точка в угловых скобках заменяет двойную кавычку, являющуюся ограничителем запроса в [[Язык запросов ИРБИС|языке запросов ИРБИС]], то есть указанный запрос следует читать как<br />
"TXT=2__$"<br />
<br />
Формат вывода найденных записей, который предлагалось подготовить выше, указан в параметре S21FMT, без расширения.<br />
<br />
Результатом выполнения этого запроса будет обещанный список mfn, например<br />
0000000002<br />
0000000006<br />
0000000013<br />
0000000018<br />
<br />
Можно усложнить запрос, ограничив вывод порцией из 2 результатов, начиная со 2-го (параметры S21CNR и S21STN)<br />
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<br />
<br />
Результатом будет<br />
0000000006<br />
0000000013<br />
<br />
Можно усложнить формат вывода найденных записей '''<tt>example1.pft</tt>''', добавив информацию о количестве найденных, а также введённых порционных ограничениях<br />
<nowiki>mfn,'; кол-во найденных = ',v1001,'; с какого номера начать = ',v2223,'; размер порции = ',v2224,/,</nowiki><br />
где 1001, 2223 и 2224 – виртуальные поля, в которые шлюз помещает данные в соответствии с [[таблицей виртуальных полей шлюза]].<br />
<br />
Все данные, которые шлюз принял в виде параметров, попадают в виртуальные поля в соответствии правилами, заданными в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файле irbis_server.ini]]. Например, параметру S21CNR соответствует метка 2224, параметру S21STN – 2223.<br />
<br />
Результатом будет<br />
0000000006; кол-во найденных = 4; с какого номера начать = 2; размер порции = 2<br />
0000000013; кол-во найденных = 4; с какого номера начать = 2; размер порции = 2<br />
<br />
В последнем примере количество найденных и данные о порции повторяются с каждым результатом поиска, что является избыточным.<br />
<br />
Такой избыточности позволяют избежать применение [[фреймов]].<br />
<br />
Создадим файл example1.frm (его местоположение должно соответствовать параметру FRAMES в профиле) со следующим содержимым<br />
Вывод через фрейм... <br />
<?! 'кол-во найденных = ',v1001,'; с какого номера начать = ',v2223,'; размер порции = ',v2224,/, ?><br />
<br />
Чтобы задействовать этот фрейм, в описании профиля можно изменить значение параметра SearchFrames следующим образом:<br />
SearchFrames=example1.frm,RESULT<br />
что следует понимать так, что шлюз вернёт результат выполнения команды поиска, составленный из:<br />
* результата выполнения фрейма example1.frm<br />
* результатов работы формата, который отработает для каждого результата поиска (обозначается словом RESULT).<br />
<br />
Кроме того, чтобы измежать дублирующихся данных, в '''<tt>example1.pft</tt>''' оставим только вывод MFN:<br />
mfn,/,<br />
<br />
Результатом будет<br />
Вывод через фрейм... кол-во найденных = 4; с какого номера начать = 2; размер порции = 2<br />
0000000006<br />
0000000013<br />
<br />
===Команда показа терминов словаря – T===<br />
<br />
'''Пример команды показа терминов словаря'''<br />
<br />
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&<br />
<br />
где:<br />
* <tt>C21COM=T</tt> определяет команду,<br />
* <tt>I21DBN=IBIS</tt> базу данных,<br />
* <tt>Z21ID=1500323880383212</tt> идентификатор читателя в зашифрованном виде,<br />
* <tt>T21PRF=KT=</tt> префикс словаря,<br />
* <tt>T21TRM=a</tt> – требование терминов, начинающихся на <tt>a</tt>.<br />
<br />
Пример возврата:<br />
A20040830ARUSY|1<br />
A20041017ABELY|1<br />
A20041118ARUSY|1<br />
A2H|2<br />
A540|9<br />
A54001|7<br />
A550UTILIZATION|1<br />
AACDEMY|1<br />
AASL|2<br />
AASLPUBSANDJOURNALS|2<br />
<br />
===Добавление пользовательского параметра===<br />
<br />
Добавление пользовательского параметра осуществляется в несколько шагов:<br />
* '''добавление ''пользовательского параметра'' в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файл инициализации шлюза <tt>irbis_server.ini</tt>]]'''<br />
: Необходимо добавить описание нового ''пользовательского параметра'' в настроечный файл <tt>irbis_server.ini</tt>, задав имя и метку параметра. Для этого в секции <tt>[PARAMETRS]</tt> используются ''параметры ini файла'' <tt>PARNAME_</tt> и <tt>PARTAG_</tt> (не стоит путать термины ''пользовательские параметры'' веб-шлюза и ''параметры ini файла''), где вместо знака подчёркивания ставится номер пользовательского параметра по порядку, например:<br />
PARNAME2=C21COM<br />
PARTAG2=2222<br />
: В этом примере мы видим описание второго по порядку из определённых в секции <tt>[PARAMETRS]</tt> параметров: имя параметра <tt>C21COM</tt>, метка параметра <tt>2222</tt>. Имя и метка параметров должны быть уникальными. После того как описание ''пользовательского параметра'' добавлено необходимо изменить значение параметра <tt>PARCOUNT</tt> в секции <tt>[PARAMETRS]</tt>, его значение должно быть равно порядковому номеру последнего описания ''пользовательского параметра''.<br />
: ''Примечание:'' обратите внимание, что в файле <tt>irbis_server.ini</tt> хранятся описания не только пользовательских параметров, а присутствует также описания предустановленных параметров.<br />
* '''использование в файлах <tt>.frm</tt> команд <tt><!FORMAT=INSERT_ALL_PARAMETERS></tt> и <tt><!FORMAT=INSERT_ALL_PARAMETERS_IN_QUERY></tt>'''<br />
: Команда <tt><!FORMAT=INSERT_ALL_PARAMETERS></tt> обеспечивает вставку в код HTML-страницы всех непустых переданных веб-шлюзу параметров в виде скрытых элементов формы, например:<br />
<input type="hidden" name="PARAM_NAME" value="PARAM_VALUE"><br />
: Команда <tt><!FORMAT=INSERT_ALL_PARAMETERS_IN_QUERY></tt> вставляет в код HTML-страницы гиперссылку, содержащую все переданные веб-шлюзу параметры.<br />
<br />
===Система команд Веб-шлюза ИРБИС===<br />
<br />
Система ''команд'' Веб-шлюза ИРБИС позволяет задать собственный набор фреймов и порядок их объединения для каждой задачи. Для разных задач предусмотрены разные команды, например: для страницы приглашения к поиску, результата поиска, отбора записей в корзину заказов и т.д.<br />
<br />
==Обработка фреймов==<br />
<br />
В общем случае, веб-страница формируется путём объединения (''склеивания'') следующих частей:<br />
* ''заголовочной'' и ''подвальной'' частей, формируемых при помощи ''фреймов'' и<br />
* ''тела'' страницы, формируемого при помощи [[Язык форматирования системы ИРБИС#Понятие формата|''формата'']], который отрабатывает на наборе записей базы данных (соответствующих запросу пользователя).<br />
<br />
===Фрейм как язык разметки===<br />
<br />
Фрейм представляет собой текстовый файл, содержимое которого передаётся клиенту (в веб браузер), который также может содержать вставки, которые будут обработаны определённым образом перед передачей клиенту.<br />
<br />
Предусмотрены вставки следующих видов:<br />
* вставка на языке форматирования ИРБИС,<br />
* вложенный фрейм.<br />
<br />
'''''Вставка на языке форматирования''''' обозначается следующим образом<br />
<br />
<!FORMAT<br />
<br />
'''Пример:'''<br />
<br />
<nowiki><!FORMAT=if v3409='' then 'value=""' else 'value=','"',v3409,'"',fi></nowiki><br />
<br />
''Примечание: если вставка на языке форматирования содержит символы, кодирующиеся в UTF-8 более чем одним байтом (например, кириллицу), то формат обязательно должен начинаться с восклицательного знака. Это связано с тем, что формат в кодировке UTF-8 [[Язык форматирования системы ИРБИС#Кодировка|должен предваряться восклицательным знаком]], а все фреймы храняться именно в кодировке UTF-8.''<br />
<br />
'''Пример:'''<br />
<br />
<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><br />
<br />
'''Пример вложенного фрейма:'''<br />
<br />
<!FORMAT=if &uf('IMAIN,SHOW_DUBLIN_CORE,0') <> '0' then /'<!FILE=Dublin_Core.frm>' fi><br />
<br />
Предусмотрен '''''упрощённый синтаксис вставки на языке форматирования''''':<br />
<?!if p(v2225) then 'true' fi ?><br />
<br />
===Постобработка===<br />
<br />
Перед передачей результата выполнения фрейма клиенту происходит замена сочетаний символов<br />
<.><br />
на символ двойной кавычки<br />
"<br />
<br />
===Пример последовательности действий Веб-шлюза ИРБИС при формировании веб-страницы в ответ на запрос===<br />
<br />
Веб-шлюз ИРБИС при получении команд '''F''', '''S''', '''T''', '''Z''', '''R''' выполняет следующую последовательность действий:<br />
* Веб-шлюз получил запрос. Запрос содержит параметры <tt>C21COM</tt>, <tt>I21DBN</tt> и другие.<br />
* В файле <tt>irbis_server.ini</tt> веб-шлюз находит секцию, имя которой соответствует значению параметра <tt>I21DBN</tt>. Иными словами: с одной стороны, в качестве значения параметра <tt>I21DBN</tt> указывается имя профиля, с другой стороны, для каждого профиля в файле <tt>irbis_server.ini</tt> должна содержаться секция, имя которой совпадает с именем профиля.<br />
* В указанной секции файла <tt>irbis_server.ini</tt> веб-шлюз находит значение параметра, соответствующего указанной в параметре <tt>C21COM</tt> команде (см. таблицу ''Команды веб-шлюза ИРБИС''). Полученное значение должно представлять собой список фреймов.<br />
* Фреймы обрабатываются, и результат, представляющий собой HTML-страницу, отправляется клиенту в качестве ответа.<br />
<br />
===Примеры перехода пользователя по страницам Веб-ИРБИС===<br />
<br />
Пример запроса начальной страницы:<br />
<br />
http://localhost:8080/cgi-bin/irbis64r_15_plus/cgiirbis_64_ft.exe?C21COM=F&I21DBN=IBIS_FULLTEXT&P21DBN=IBIS&Z21ID=&S21CNR=5<br />
<br />
где указаны:<br />
* команда шлюза F (''показ страницы'')<br />
* имя профиля IBIS_FULLTEXT<br />
* база данных IBIS<br />
* авторизация не осуществлялась<br />
<br />
Параметр S21CNR не обязателен.<br />
<br />
При авторизации запрос приобретает следующий вид<br />
<br />
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<br />
<br />
где указаны:<br />
* команда шлюза F (''показ страницы'')<br />
* имя профиля AUTHOR<br />
* база данных IBIS<br />
* параметры авторизации: Z21FLAGID, фамилия читателя Z21FAMILY и идентификатор читателя Z21ID<br />
<br />
При поиске по слову "библиотека" запрос приобретает следующий вид<br />
<br />
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<br />
<br />
где указаны:<br />
* команда шлюза S (''поиск'')<br />
* имя профиля IBIS_FULLTEXT<br />
* база данных IBIS<br />
* параметры авторизации: Z21ID<br />
* текущий запрос SEARCH_STRING и предыдущий запрос FT_S21STR (одинаковые)<br />
* USES21ALL=1 (использовать параметр S21ALL, применяется в поиске связных)<br />
* S21CNR=5 (порция при показе найденных)<br />
* S21REF=10 (для правильного формирования ссылок на страницы с результатами поиска)<br />
* C21COM1<br />
* FT_PREFIX<br />
* S21FMT=briefHTML_ft<br />
* AVT_S21P03=A%3D<br />
* AVT_S21P02=1<br />
* AVT_S21LOG=1<br />
* NAME_S21P03=T%3D<br />
* NAME_S21P02=1<br />
* NAME_S21LOG=1<br />
* UDC_S21P03=U%3D<br />
* UDC_S21P02=0<br />
* UDC_S21LOG=1<br />
* IZD_S21P03=M%3D<br />
* IZD_S21P02=1<br />
* IZD_S21LOG=1<br />
* DAT_S21P03=G%3D<br />
* DAT_S21P02=1<br />
* DAT_S21LOG=5<br />
* P21DBN=IBIS<br />
* FT_S21LOG=4<br />
* FT_S21P03=K%3D<br />
* FT_S21P01=3<br />
* S21STN=1<br />
* S21COLORTERMS=1<br />
<br />
==Ссылки==<br />
<br />
См. также:<br />
* [[Веб-ИРБИС]]<br />
* [[Установка Веб-шлюза Ирбис 64]]<br />
* [[Настройка и обслуживание Веб-ИРБИС]]<br />
* [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini]]<br />
* [[Язык форматирования системы ИРБИС]]<br />
* [[Язык запросов ИРБИС]]<br />
<br />
[[Категория:Технология Веб-ИРБИС]]<br />
[[Категория:ИРБИС 64]]</div>Sokvhttp://wiki.elnit.org/index.php?title=%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F_%D0%92%D0%B5%D0%B1-%D0%98%D0%A0%D0%91%D0%98%D0%A1&diff=2455Технология Веб-ИРБИС2016-03-18T16:40:44Z<p>Sokv: /* Фрейм как язык разметки */</p>
<hr />
<div>Технология '''''Веб-ИРБИС''''' служит для создания Веб-приложений для работы с базами данных ИРБИС.<br />
<br />
Данная технология реализована в виде одноимённого [[Веб-ИРБИС|'''''программного продукта – Веб-ИРБИС''''']].<br />
<br />
==Веб-шлюз ИРБИС==<br />
<br />
Программный модуль ''Веб-шлюз ИРБИС'' обеспечивает обработку клиентских запросов.<br />
<br />
''Веб-шлюз ИРБИС'' является шлюзом CGI.<br />
<br />
Запрос может осуществляться по методу POST или GET.<br />
<br />
===Общая схема работы Веб-шлюза ИРБИС===<br />
<br />
Последовательность операций шлюза:<br />
* Чтение параметров INI файла<br />
* Препроцессинг<br />
** Формальный контроль правильности параметров<br />
** Интерпретация поискового запроса<br />
** Авторизация<br />
** Выполнение скрипта защиты<br />
** Повторная авторизация<br />
* Выполнение поиска<br />
* Формирование ответа (объединение и обработка фреймов)<br />
* Определение HTTP заголовков на основе INI файла<br />
* Возврат ответа<br />
<br />
В случае возникновения ошибки выполнения или превышения времени обработки запроса шлюз возвращает ошибку (error.html).<br />
<br />
====Препроцессинг====<br />
<br />
=====Скрипт-защита=====<br />
<br />
Формат скрипта защиты выполняет две функции: 1) проверку поступивших параметров запроса и защиту от взлома 2) обработку и дополнение параметров.<br />
<br />
Первая строка, сформированная форматом срипт-защиты, определяет общий результат – если это 0 или файлом не было возвращено никаких значений – скрипт-защита определила ошибку, если результат 1 или файлом были возвращены другие ненулевые значения – ошибки нет. В первом случае шлюз возвращает error.html, в последнем случае шлюз читает остальные строки формата и изменяет параметры запроса на новые.<br />
<br />
Например, строка ‘SCRIPT_DONE=YES’/ задаёт параметру SCRIPT_DONE значение YES.<br />
<br />
=====Авторизация пользователя=====<br />
<br />
Авторизация даёт возможность заказывать литературу, просматривать формуляр и редактировать корзину заказов.<br />
<br />
Для авторизации используется база RDR. Авторизация происходит по идентификатору и, если в пользовательском запросе задан параметр Z21FLAGID=1, – по фамилии. После авторизации шлюз выполняет шифрование идентификатора, и зашифрованный идентификатор передаётся при переходе по страницам.<br />
<br />
====Инициализация параметров====<br />
<br />
После поступления клиентского запроса осуществляется инициализация параметров веб-шлюза на основе параметров CGI.<br />
<br />
Обрабатываемый шлюзом набор параметров определяется конфигурационным файлом Веб-шлюза ИРБИС.<br />
<br />
Эти параметры доступны в контексте фреймов.<br />
<br />
Параметры используются, в том числе, для отслеживания состояния веб-страницы. В ответ на HTTP-запрос клиента (обычно – в генерируемую html-страницу, передаваемую клиенту) может включить набор пользовательских параметров вместе с их значениями, полученными в запросе, для чего есть специальная команда.<br />
<br />
Отслеживание состояния осуществляется с использованием следующих этапов: 1) данные передаются на веб-шлюз в виде параметров запроса; 2) веб-шлюз передаёт данные вместе со сформированной страницей в скрытых полях форм HTML.<br />
<br />
====Выполнение команды====<br />
<br />
Затем шлюз переходит к выполнению команды. Команда соответствует переданному параметру C21COM.<br />
<br />
В контексте выполнения команды используются полученные параметры.<br />
<br />
Для каждой команды есть набор '''основных параметров''', логика использования которых предопределена самим веб-шлюзом.<br />
<br />
К основным параметрам шлюза относятся:<br />
* <tt>C21COM</tt> – команда, которую должен выполнить веб-шлюз.<br />
* <tt>I21DBN</tt> – имя [[Профили|профиля]]. Веб-шлюз ИРБИС в соответствии с именем профиля определяет набор [[Фреймы|фреймов]], из которых составит ответ клиенту. Веб-шлюз ИРБИС ищет названия фреймов в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файле irbis_server.ini]] в секции, название которой соответствует значению параметра <tt>I21DBN</tt> (подробнее в разделе [[#Роль фреймов в работе веб-шлюза ИРБИС|Роль фреймов в работе веб-шлюза ИРБИС]]).<br />
* <tt>P21DBN</tt> – имя базы данных.<br />
* <tt>Z21ID</tt> – значение параметра авторизации.<br />
<br />
Кроме '''основных''', есть '''пользовательские параметры''' – все остальные параметры.<br />
<br />
Особенность пользовательских параметров в том, что их набор и использование полностью могут быть определены (переопределены) пользователями системы ИРБИС:<br />
* Определение параметров даётся в конфигурационном файле Веб-шлюза ИРБИС.<br />
* Параметры доступны в виде виртуальных полей на языке форматирования в контексте фреймов.<br />
<br />
====Ответ веб-шлюза ИРБИС клиенту====<br />
<br />
Порядок формирования ответа веб-шлюза ИРБИС клиенту зависит от команды.<br />
<br />
=====Ответ с использованием фреймов=====<br />
<br />
Для команд, представленных в таблице, осуществляется генерация ответа с использованием технологии выбора и обработки фреймов.<br />
<br />
Обычно это динамически формируемая веб-страница.<br />
<br />
'''Таблица.''' Команды веб-шлюза ИРБИС.<br />
{|<br />
|<br />
{| class="standard"<br />
!Значение параметра <tt>C21COM</tt>||Описание команды||Соответствующий параметр в <tt>irbis_server.ini</tt><br />
|-<br />
|'''F'''||'''''показ''''' – команда показа страницы||ShowFrames<br />
|-<br />
|'''S'''||'''''поиск''''' – команда выполнения и показа результатов поиска||SearchFrames<br />
|-<br />
|'''T'''||'''''словарь''''' – команда показа терминов словаря||DictionryFrames<br />
|-<br />
|'''Z'''||'''''заказ''''' – команда отбора записей в корзину заказов||ZakazFrames<br />
|-<br />
|'''R'''||'''''запись''''' – команда редактуры записей||RecUpdateFrames<br />
|}<br />
|}<br />
<br />
Выбор набора фреймов зависит от: команды (параметр C21COM) и профиля (параметр I21DBN).<br />
<br />
Возможные наборы фреймов предварительно сконфигурированы и указаны в конфигурационном файле <tt>irbis_server.ini</tt>.<br />
<br />
Откуда шлюз и считывает нужный набор, в зависимости от параметров (C21COM и I21DBN).<br />
<br />
Каждой команде веб-шлюза ИРБИС соответствует имя параметра в файле <tt>irbis_server.ini</tt> (см. таблицу ''Команды веб-шлюза ИРБИС'').<br />
<br />
=====Отправка клиенту ресурсного файла=====<br />
<br />
Для команд, представленных в таблице, отправка клиенту ресурсного файла.<br />
<br />
'''Таблица.''' Команды веб-шлюза ИРБИС.<br />
{|<br />
|<br />
{| class="standard"<br />
!Значение параметра <tt>C21COM</tt>||Описание команды<br />
|-<br />
|'''E'''||'''''экспорт''''' – команда выгрузки записей<br />
|-<br />
|'''2'''||'''''файл''''' – команда чтения внешнего объекта<br />
|-<br />
|'''4'''||'''''скачать''''' – команда заимствования записи<br />
|}<br />
|}<br />
<br />
===Команда поиска – S===<br />
<br />
'''Пример поиска всех страниц одного текста PDF'''<br />
<br />
Здесь мы предполагаем, что:<br />
* Работаем в контексте базы данных IBIS.<br />
* Поисковое выражение <tt>TXT=2__$</tt> позволяет найти все страницы файла <tt>2.pdf</tt>.<br />
<br />
Чтобы создать произвольный запрос, не связанный с существующим функционалом системы, можно создать новый профиль EXAMPLE1. Для этого в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|конфигурационном файле веб-шлюза ИРБИС irbis server.ini]] нужно добавить секцию EXAMPLE1<br />
[EXAMPLE1]<br />
FRAMES=C:\irbis\irbis_plus\IRBIS64\DATAI\frames_15_plus\FullText\<br />
ShowFrames=<br />
SearchFrames=RESULT<br />
DBNAME=IBIS<br />
где значение параметра FRAMES должно соответствовать местонахождению фреймов.<br />
<br />
Для команды поиска порядок формирования ответа определяется параметром SearchFrames. И запись<br />
SearchFrames=RESULT<br />
означает, что при формировании Веб-шлюзом ответа на команду поиска не участвуют фреймы, участвует только формат, который будет указан в запросе.<br />
<br />
В качестве этого формата предлагается создать файл '''<tt>example1.pft</tt>''' со следующим содержимым<br />
<nowiki>mfn,/,</nowiki><br />
Этот формат выводит список MFN найденных записей.<br />
<br />
Теперь всё готово, чтобы выполнить запрос<br />
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<br />
<br />
В основных полях мы указываем команду поиска (S), базу данных IBIS, профиль EXAMPLE1, идентификатор пользователя.<br />
<br />
Поле S21All содержит запрос на языке запросов ИРБИС. Если его декодировать из кодировки URL, то он будет выглядеть так<br />
<nowiki>S21All=<.>TXT=2__$<.></nowiki><br />
где точка в угловых скобках заменяет двойную кавычку, являющуюся ограничителем запроса в [[Язык запросов ИРБИС|языке запросов ИРБИС]], то есть указанный запрос следует читать как<br />
"TXT=2__$"<br />
<br />
Формат вывода найденных записей, который предлагалось подготовить выше, указан в параметре S21FMT, без расширения.<br />
<br />
Результатом выполнения этого запроса будет обещанный список mfn, например<br />
0000000002<br />
0000000006<br />
0000000013<br />
0000000018<br />
<br />
Можно усложнить запрос, ограничив вывод порцией из 2 результатов, начиная со 2-го (параметры S21CNR и S21STN)<br />
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<br />
<br />
Результатом будет<br />
0000000006<br />
0000000013<br />
<br />
Можно усложнить формат вывода найденных записей '''<tt>example1.pft</tt>''', добавив информацию о количестве найденных, а также введённых порционных ограничениях<br />
<nowiki>mfn,'; кол-во найденных = ',v1001,'; с какого номера начать = ',v2223,'; размер порции = ',v2224,/,</nowiki><br />
где 1001, 2223 и 2224 – виртуальные поля, в которые шлюз помещает данные в соответствии с [[таблицей виртуальных полей шлюза]].<br />
<br />
Все данные, которые шлюз принял в виде параметров, попадают в виртуальные поля в соответствии правилами, заданными в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файле irbis_server.ini]]. Например, параметру S21CNR соответствует метка 2224, параметру S21STN – 2223.<br />
<br />
Результатом будет<br />
0000000006; кол-во найденных = 4; с какого номера начать = 2; размер порции = 2<br />
0000000013; кол-во найденных = 4; с какого номера начать = 2; размер порции = 2<br />
<br />
В последнем примере количество найденных и данные о порции повторяются с каждым результатом поиска, что является избыточным.<br />
<br />
Такой избыточности позволяют избежать применение [[фреймов]].<br />
<br />
Создадим файл example1.frm (его местоположение должно соответствовать параметру FRAMES в профиле) со следующим содержимым<br />
Вывод через фрейм... <br />
<?! 'кол-во найденных = ',v1001,'; с какого номера начать = ',v2223,'; размер порции = ',v2224,/, ?><br />
<br />
Чтобы задействовать этот фрейм, в описании профиля можно изменить значение параметра SearchFrames следующим образом:<br />
SearchFrames=example1.frm,RESULT<br />
что следует понимать так, что шлюз вернёт результат выполнения команды поиска, составленный из:<br />
* результата выполнения фрейма example1.frm<br />
* результатов работы формата, который отработает для каждого результата поиска (обозначается словом RESULT).<br />
<br />
Кроме того, чтобы измежать дублирующихся данных, в '''<tt>example1.pft</tt>''' оставим только вывод MFN:<br />
mfn,/,<br />
<br />
Результатом будет<br />
Вывод через фрейм... кол-во найденных = 4; с какого номера начать = 2; размер порции = 2<br />
0000000006<br />
0000000013<br />
<br />
===Команда показа терминов словаря – T===<br />
<br />
'''Пример команды показа терминов словаря'''<br />
<br />
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&<br />
<br />
где:<br />
* <tt>C21COM=T</tt> определяет команду,<br />
* <tt>I21DBN=IBIS</tt> базу данных,<br />
* <tt>Z21ID=1500323880383212</tt> идентификатор читателя в зашифрованном виде,<br />
* <tt>T21PRF=KT=</tt> префикс словаря,<br />
* <tt>T21TRM=a</tt> – требование терминов, начинающихся на <tt>a</tt>.<br />
<br />
Пример возврата:<br />
A20040830ARUSY|1<br />
A20041017ABELY|1<br />
A20041118ARUSY|1<br />
A2H|2<br />
A540|9<br />
A54001|7<br />
A550UTILIZATION|1<br />
AACDEMY|1<br />
AASL|2<br />
AASLPUBSANDJOURNALS|2<br />
<br />
===Добавление пользовательского параметра===<br />
<br />
Добавление пользовательского параметра осуществляется в несколько шагов:<br />
* '''добавление ''пользовательского параметра'' в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файл инициализации шлюза <tt>irbis_server.ini</tt>]]'''<br />
: Необходимо добавить описание нового ''пользовательского параметра'' в настроечный файл <tt>irbis_server.ini</tt>, задав имя и метку параметра. Для этого в секции <tt>[PARAMETRS]</tt> используются ''параметры ini файла'' <tt>PARNAME_</tt> и <tt>PARTAG_</tt> (не стоит путать термины ''пользовательские параметры'' веб-шлюза и ''параметры ini файла''), где вместо знака подчёркивания ставится номер пользовательского параметра по порядку, например:<br />
PARNAME2=C21COM<br />
PARTAG2=2222<br />
: В этом примере мы видим описание второго по порядку из определённых в секции <tt>[PARAMETRS]</tt> параметров: имя параметра <tt>C21COM</tt>, метка параметра <tt>2222</tt>. Имя и метка параметров должны быть уникальными. После того как описание ''пользовательского параметра'' добавлено необходимо изменить значение параметра <tt>PARCOUNT</tt> в секции <tt>[PARAMETRS]</tt>, его значение должно быть равно порядковому номеру последнего описания ''пользовательского параметра''.<br />
: ''Примечание:'' обратите внимание, что в файле <tt>irbis_server.ini</tt> хранятся описания не только пользовательских параметров, а присутствует также описания предустановленных параметров.<br />
* '''использование в файлах <tt>.frm</tt> команд <tt><!FORMAT=INSERT_ALL_PARAMETERS></tt> и <tt><!FORMAT=INSERT_ALL_PARAMETERS_IN_QUERY></tt>'''<br />
: Команда <tt><!FORMAT=INSERT_ALL_PARAMETERS></tt> обеспечивает вставку в код HTML-страницы всех непустых переданных веб-шлюзу параметров в виде скрытых элементов формы, например:<br />
<input type="hidden" name="PARAM_NAME" value="PARAM_VALUE"><br />
: Команда <tt><!FORMAT=INSERT_ALL_PARAMETERS_IN_QUERY></tt> вставляет в код HTML-страницы гиперссылку, содержащую все переданные веб-шлюзу параметры.<br />
<br />
===Система команд Веб-шлюза ИРБИС===<br />
<br />
Система ''команд'' Веб-шлюза ИРБИС позволяет задать собственный набор фреймов и порядок их объединения для каждой задачи. Для разных задач предусмотрены разные команды, например: для страницы приглашения к поиску, результата поиска, отбора записей в корзину заказов и т.д.<br />
<br />
==Обработка фреймов==<br />
<br />
В общем случае, веб-страница формируется путём объединения (''склеивания'') следующих частей:<br />
* ''заголовочной'' и ''подвальной'' частей, формируемых при помощи ''фреймов'' и<br />
* ''тела'' страницы, формируемого при помощи [[Язык форматирования системы ИРБИС#Понятие формата|''формата'']], который отрабатывает на наборе записей базы данных (соответствующих запросу пользователя).<br />
<br />
===Фрейм как язык разметки===<br />
<br />
Фрейм представляет собой текстовый файл, содержимое которого передаётся клиенту (в веб браузер), который также может содержать вставки, которые будут обработаны определённым образом перед передачей клиенту.<br />
<br />
Предусмотрены вставки следующих видов:<br />
* вставка на языке форматирования ИРБИС,<br />
* вложенный фрейм.<br />
<br />
'''''Вставка на языке форматирования''''' обозначается следующим образом<br />
<br />
<!FORMAT<br />
<br />
'''Пример:'''<br />
<br />
<nowiki><!FORMAT=if v3409='' then 'value=""' else 'value=','"',v3409,'"',fi></nowiki><br />
<br />
''Примечание: если вставка на языке форматирования содержит символы, кодирующиеся в UTF-8 более чем одним байтом (например, кириллицу), то формат обязательно должен начинаться с восклицательного знака. Это связано с тем, что формат в кодировке UTF-8 [[Язык форматирования системы ИРБИС#Кодировка|должен предваряться восклицательным знаком]], а все фреймы храняться именно в кодировке UTF-8.''<br />
<br />
'''Пример:'''<br />
<br />
<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><br />
<br />
'''Пример вложенного фрейма:'''<br />
<br />
<!FORMAT=if &uf('IMAIN,SHOW_DUBLIN_CORE,0') <> '0' then /'<!FILE=Dublin_Core.frm>' fi><br />
<br />
Предусмотрен '''''упрощённый синтаксис вставки на языке форматирования''''':<br />
<?!if p(v2225) then 'true' fi ?><br />
<br />
===Пример последовательности действий Веб-шлюза ИРБИС при формировании веб-страницы в ответ на запрос===<br />
<br />
Веб-шлюз ИРБИС при получении команд '''F''', '''S''', '''T''', '''Z''', '''R''' выполняет следующую последовательность действий:<br />
* Веб-шлюз получил запрос. Запрос содержит параметры <tt>C21COM</tt>, <tt>I21DBN</tt> и другие.<br />
* В файле <tt>irbis_server.ini</tt> веб-шлюз находит секцию, имя которой соответствует значению параметра <tt>I21DBN</tt>. Иными словами: с одной стороны, в качестве значения параметра <tt>I21DBN</tt> указывается имя профиля, с другой стороны, для каждого профиля в файле <tt>irbis_server.ini</tt> должна содержаться секция, имя которой совпадает с именем профиля.<br />
* В указанной секции файла <tt>irbis_server.ini</tt> веб-шлюз находит значение параметра, соответствующего указанной в параметре <tt>C21COM</tt> команде (см. таблицу ''Команды веб-шлюза ИРБИС''). Полученное значение должно представлять собой список фреймов.<br />
* Фреймы обрабатываются, и результат, представляющий собой HTML-страницу, отправляется клиенту в качестве ответа.<br />
<br />
===Примеры перехода пользователя по страницам Веб-ИРБИС===<br />
<br />
Пример запроса начальной страницы:<br />
<br />
http://localhost:8080/cgi-bin/irbis64r_15_plus/cgiirbis_64_ft.exe?C21COM=F&I21DBN=IBIS_FULLTEXT&P21DBN=IBIS&Z21ID=&S21CNR=5<br />
<br />
где указаны:<br />
* команда шлюза F (''показ страницы'')<br />
* имя профиля IBIS_FULLTEXT<br />
* база данных IBIS<br />
* авторизация не осуществлялась<br />
<br />
Параметр S21CNR не обязателен.<br />
<br />
При авторизации запрос приобретает следующий вид<br />
<br />
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<br />
<br />
где указаны:<br />
* команда шлюза F (''показ страницы'')<br />
* имя профиля AUTHOR<br />
* база данных IBIS<br />
* параметры авторизации: Z21FLAGID, фамилия читателя Z21FAMILY и идентификатор читателя Z21ID<br />
<br />
При поиске по слову "библиотека" запрос приобретает следующий вид<br />
<br />
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<br />
<br />
где указаны:<br />
* команда шлюза S (''поиск'')<br />
* имя профиля IBIS_FULLTEXT<br />
* база данных IBIS<br />
* параметры авторизации: Z21ID<br />
* текущий запрос SEARCH_STRING и предыдущий запрос FT_S21STR (одинаковые)<br />
* USES21ALL=1 (использовать параметр S21ALL, применяется в поиске связных)<br />
* S21CNR=5 (порция при показе найденных)<br />
* S21REF=10 (для правильного формирования ссылок на страницы с результатами поиска)<br />
* C21COM1<br />
* FT_PREFIX<br />
* S21FMT=briefHTML_ft<br />
* AVT_S21P03=A%3D<br />
* AVT_S21P02=1<br />
* AVT_S21LOG=1<br />
* NAME_S21P03=T%3D<br />
* NAME_S21P02=1<br />
* NAME_S21LOG=1<br />
* UDC_S21P03=U%3D<br />
* UDC_S21P02=0<br />
* UDC_S21LOG=1<br />
* IZD_S21P03=M%3D<br />
* IZD_S21P02=1<br />
* IZD_S21LOG=1<br />
* DAT_S21P03=G%3D<br />
* DAT_S21P02=1<br />
* DAT_S21LOG=5<br />
* P21DBN=IBIS<br />
* FT_S21LOG=4<br />
* FT_S21P03=K%3D<br />
* FT_S21P01=3<br />
* S21STN=1<br />
* S21COLORTERMS=1<br />
<br />
==Ссылки==<br />
<br />
См. также:<br />
* [[Веб-ИРБИС]]<br />
* [[Установка Веб-шлюза Ирбис 64]]<br />
* [[Настройка и обслуживание Веб-ИРБИС]]<br />
* [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini]]<br />
* [[Язык форматирования системы ИРБИС]]<br />
* [[Язык запросов ИРБИС]]<br />
<br />
[[Категория:Технология Веб-ИРБИС]]<br />
[[Категория:ИРБИС 64]]</div>Sokvhttp://wiki.elnit.org/index.php?title=%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F_%D0%92%D0%B5%D0%B1-%D0%98%D0%A0%D0%91%D0%98%D0%A1&diff=2454Технология Веб-ИРБИС2016-03-18T16:39:33Z<p>Sokv: /* Обработка фреймов */</p>
<hr />
<div>Технология '''''Веб-ИРБИС''''' служит для создания Веб-приложений для работы с базами данных ИРБИС.<br />
<br />
Данная технология реализована в виде одноимённого [[Веб-ИРБИС|'''''программного продукта – Веб-ИРБИС''''']].<br />
<br />
==Веб-шлюз ИРБИС==<br />
<br />
Программный модуль ''Веб-шлюз ИРБИС'' обеспечивает обработку клиентских запросов.<br />
<br />
''Веб-шлюз ИРБИС'' является шлюзом CGI.<br />
<br />
Запрос может осуществляться по методу POST или GET.<br />
<br />
===Общая схема работы Веб-шлюза ИРБИС===<br />
<br />
Последовательность операций шлюза:<br />
* Чтение параметров INI файла<br />
* Препроцессинг<br />
** Формальный контроль правильности параметров<br />
** Интерпретация поискового запроса<br />
** Авторизация<br />
** Выполнение скрипта защиты<br />
** Повторная авторизация<br />
* Выполнение поиска<br />
* Формирование ответа (объединение и обработка фреймов)<br />
* Определение HTTP заголовков на основе INI файла<br />
* Возврат ответа<br />
<br />
В случае возникновения ошибки выполнения или превышения времени обработки запроса шлюз возвращает ошибку (error.html).<br />
<br />
====Препроцессинг====<br />
<br />
=====Скрипт-защита=====<br />
<br />
Формат скрипта защиты выполняет две функции: 1) проверку поступивших параметров запроса и защиту от взлома 2) обработку и дополнение параметров.<br />
<br />
Первая строка, сформированная форматом срипт-защиты, определяет общий результат – если это 0 или файлом не было возвращено никаких значений – скрипт-защита определила ошибку, если результат 1 или файлом были возвращены другие ненулевые значения – ошибки нет. В первом случае шлюз возвращает error.html, в последнем случае шлюз читает остальные строки формата и изменяет параметры запроса на новые.<br />
<br />
Например, строка ‘SCRIPT_DONE=YES’/ задаёт параметру SCRIPT_DONE значение YES.<br />
<br />
=====Авторизация пользователя=====<br />
<br />
Авторизация даёт возможность заказывать литературу, просматривать формуляр и редактировать корзину заказов.<br />
<br />
Для авторизации используется база RDR. Авторизация происходит по идентификатору и, если в пользовательском запросе задан параметр Z21FLAGID=1, – по фамилии. После авторизации шлюз выполняет шифрование идентификатора, и зашифрованный идентификатор передаётся при переходе по страницам.<br />
<br />
====Инициализация параметров====<br />
<br />
После поступления клиентского запроса осуществляется инициализация параметров веб-шлюза на основе параметров CGI.<br />
<br />
Обрабатываемый шлюзом набор параметров определяется конфигурационным файлом Веб-шлюза ИРБИС.<br />
<br />
Эти параметры доступны в контексте фреймов.<br />
<br />
Параметры используются, в том числе, для отслеживания состояния веб-страницы. В ответ на HTTP-запрос клиента (обычно – в генерируемую html-страницу, передаваемую клиенту) может включить набор пользовательских параметров вместе с их значениями, полученными в запросе, для чего есть специальная команда.<br />
<br />
Отслеживание состояния осуществляется с использованием следующих этапов: 1) данные передаются на веб-шлюз в виде параметров запроса; 2) веб-шлюз передаёт данные вместе со сформированной страницей в скрытых полях форм HTML.<br />
<br />
====Выполнение команды====<br />
<br />
Затем шлюз переходит к выполнению команды. Команда соответствует переданному параметру C21COM.<br />
<br />
В контексте выполнения команды используются полученные параметры.<br />
<br />
Для каждой команды есть набор '''основных параметров''', логика использования которых предопределена самим веб-шлюзом.<br />
<br />
К основным параметрам шлюза относятся:<br />
* <tt>C21COM</tt> – команда, которую должен выполнить веб-шлюз.<br />
* <tt>I21DBN</tt> – имя [[Профили|профиля]]. Веб-шлюз ИРБИС в соответствии с именем профиля определяет набор [[Фреймы|фреймов]], из которых составит ответ клиенту. Веб-шлюз ИРБИС ищет названия фреймов в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файле irbis_server.ini]] в секции, название которой соответствует значению параметра <tt>I21DBN</tt> (подробнее в разделе [[#Роль фреймов в работе веб-шлюза ИРБИС|Роль фреймов в работе веб-шлюза ИРБИС]]).<br />
* <tt>P21DBN</tt> – имя базы данных.<br />
* <tt>Z21ID</tt> – значение параметра авторизации.<br />
<br />
Кроме '''основных''', есть '''пользовательские параметры''' – все остальные параметры.<br />
<br />
Особенность пользовательских параметров в том, что их набор и использование полностью могут быть определены (переопределены) пользователями системы ИРБИС:<br />
* Определение параметров даётся в конфигурационном файле Веб-шлюза ИРБИС.<br />
* Параметры доступны в виде виртуальных полей на языке форматирования в контексте фреймов.<br />
<br />
====Ответ веб-шлюза ИРБИС клиенту====<br />
<br />
Порядок формирования ответа веб-шлюза ИРБИС клиенту зависит от команды.<br />
<br />
=====Ответ с использованием фреймов=====<br />
<br />
Для команд, представленных в таблице, осуществляется генерация ответа с использованием технологии выбора и обработки фреймов.<br />
<br />
Обычно это динамически формируемая веб-страница.<br />
<br />
'''Таблица.''' Команды веб-шлюза ИРБИС.<br />
{|<br />
|<br />
{| class="standard"<br />
!Значение параметра <tt>C21COM</tt>||Описание команды||Соответствующий параметр в <tt>irbis_server.ini</tt><br />
|-<br />
|'''F'''||'''''показ''''' – команда показа страницы||ShowFrames<br />
|-<br />
|'''S'''||'''''поиск''''' – команда выполнения и показа результатов поиска||SearchFrames<br />
|-<br />
|'''T'''||'''''словарь''''' – команда показа терминов словаря||DictionryFrames<br />
|-<br />
|'''Z'''||'''''заказ''''' – команда отбора записей в корзину заказов||ZakazFrames<br />
|-<br />
|'''R'''||'''''запись''''' – команда редактуры записей||RecUpdateFrames<br />
|}<br />
|}<br />
<br />
Выбор набора фреймов зависит от: команды (параметр C21COM) и профиля (параметр I21DBN).<br />
<br />
Возможные наборы фреймов предварительно сконфигурированы и указаны в конфигурационном файле <tt>irbis_server.ini</tt>.<br />
<br />
Откуда шлюз и считывает нужный набор, в зависимости от параметров (C21COM и I21DBN).<br />
<br />
Каждой команде веб-шлюза ИРБИС соответствует имя параметра в файле <tt>irbis_server.ini</tt> (см. таблицу ''Команды веб-шлюза ИРБИС'').<br />
<br />
=====Отправка клиенту ресурсного файла=====<br />
<br />
Для команд, представленных в таблице, отправка клиенту ресурсного файла.<br />
<br />
'''Таблица.''' Команды веб-шлюза ИРБИС.<br />
{|<br />
|<br />
{| class="standard"<br />
!Значение параметра <tt>C21COM</tt>||Описание команды<br />
|-<br />
|'''E'''||'''''экспорт''''' – команда выгрузки записей<br />
|-<br />
|'''2'''||'''''файл''''' – команда чтения внешнего объекта<br />
|-<br />
|'''4'''||'''''скачать''''' – команда заимствования записи<br />
|}<br />
|}<br />
<br />
===Команда поиска – S===<br />
<br />
'''Пример поиска всех страниц одного текста PDF'''<br />
<br />
Здесь мы предполагаем, что:<br />
* Работаем в контексте базы данных IBIS.<br />
* Поисковое выражение <tt>TXT=2__$</tt> позволяет найти все страницы файла <tt>2.pdf</tt>.<br />
<br />
Чтобы создать произвольный запрос, не связанный с существующим функционалом системы, можно создать новый профиль EXAMPLE1. Для этого в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|конфигурационном файле веб-шлюза ИРБИС irbis server.ini]] нужно добавить секцию EXAMPLE1<br />
[EXAMPLE1]<br />
FRAMES=C:\irbis\irbis_plus\IRBIS64\DATAI\frames_15_plus\FullText\<br />
ShowFrames=<br />
SearchFrames=RESULT<br />
DBNAME=IBIS<br />
где значение параметра FRAMES должно соответствовать местонахождению фреймов.<br />
<br />
Для команды поиска порядок формирования ответа определяется параметром SearchFrames. И запись<br />
SearchFrames=RESULT<br />
означает, что при формировании Веб-шлюзом ответа на команду поиска не участвуют фреймы, участвует только формат, который будет указан в запросе.<br />
<br />
В качестве этого формата предлагается создать файл '''<tt>example1.pft</tt>''' со следующим содержимым<br />
<nowiki>mfn,/,</nowiki><br />
Этот формат выводит список MFN найденных записей.<br />
<br />
Теперь всё готово, чтобы выполнить запрос<br />
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<br />
<br />
В основных полях мы указываем команду поиска (S), базу данных IBIS, профиль EXAMPLE1, идентификатор пользователя.<br />
<br />
Поле S21All содержит запрос на языке запросов ИРБИС. Если его декодировать из кодировки URL, то он будет выглядеть так<br />
<nowiki>S21All=<.>TXT=2__$<.></nowiki><br />
где точка в угловых скобках заменяет двойную кавычку, являющуюся ограничителем запроса в [[Язык запросов ИРБИС|языке запросов ИРБИС]], то есть указанный запрос следует читать как<br />
"TXT=2__$"<br />
<br />
Формат вывода найденных записей, который предлагалось подготовить выше, указан в параметре S21FMT, без расширения.<br />
<br />
Результатом выполнения этого запроса будет обещанный список mfn, например<br />
0000000002<br />
0000000006<br />
0000000013<br />
0000000018<br />
<br />
Можно усложнить запрос, ограничив вывод порцией из 2 результатов, начиная со 2-го (параметры S21CNR и S21STN)<br />
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<br />
<br />
Результатом будет<br />
0000000006<br />
0000000013<br />
<br />
Можно усложнить формат вывода найденных записей '''<tt>example1.pft</tt>''', добавив информацию о количестве найденных, а также введённых порционных ограничениях<br />
<nowiki>mfn,'; кол-во найденных = ',v1001,'; с какого номера начать = ',v2223,'; размер порции = ',v2224,/,</nowiki><br />
где 1001, 2223 и 2224 – виртуальные поля, в которые шлюз помещает данные в соответствии с [[таблицей виртуальных полей шлюза]].<br />
<br />
Все данные, которые шлюз принял в виде параметров, попадают в виртуальные поля в соответствии правилами, заданными в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файле irbis_server.ini]]. Например, параметру S21CNR соответствует метка 2224, параметру S21STN – 2223.<br />
<br />
Результатом будет<br />
0000000006; кол-во найденных = 4; с какого номера начать = 2; размер порции = 2<br />
0000000013; кол-во найденных = 4; с какого номера начать = 2; размер порции = 2<br />
<br />
В последнем примере количество найденных и данные о порции повторяются с каждым результатом поиска, что является избыточным.<br />
<br />
Такой избыточности позволяют избежать применение [[фреймов]].<br />
<br />
Создадим файл example1.frm (его местоположение должно соответствовать параметру FRAMES в профиле) со следующим содержимым<br />
Вывод через фрейм... <br />
<?! 'кол-во найденных = ',v1001,'; с какого номера начать = ',v2223,'; размер порции = ',v2224,/, ?><br />
<br />
Чтобы задействовать этот фрейм, в описании профиля можно изменить значение параметра SearchFrames следующим образом:<br />
SearchFrames=example1.frm,RESULT<br />
что следует понимать так, что шлюз вернёт результат выполнения команды поиска, составленный из:<br />
* результата выполнения фрейма example1.frm<br />
* результатов работы формата, который отработает для каждого результата поиска (обозначается словом RESULT).<br />
<br />
Кроме того, чтобы измежать дублирующихся данных, в '''<tt>example1.pft</tt>''' оставим только вывод MFN:<br />
mfn,/,<br />
<br />
Результатом будет<br />
Вывод через фрейм... кол-во найденных = 4; с какого номера начать = 2; размер порции = 2<br />
0000000006<br />
0000000013<br />
<br />
===Команда показа терминов словаря – T===<br />
<br />
'''Пример команды показа терминов словаря'''<br />
<br />
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&<br />
<br />
где:<br />
* <tt>C21COM=T</tt> определяет команду,<br />
* <tt>I21DBN=IBIS</tt> базу данных,<br />
* <tt>Z21ID=1500323880383212</tt> идентификатор читателя в зашифрованном виде,<br />
* <tt>T21PRF=KT=</tt> префикс словаря,<br />
* <tt>T21TRM=a</tt> – требование терминов, начинающихся на <tt>a</tt>.<br />
<br />
Пример возврата:<br />
A20040830ARUSY|1<br />
A20041017ABELY|1<br />
A20041118ARUSY|1<br />
A2H|2<br />
A540|9<br />
A54001|7<br />
A550UTILIZATION|1<br />
AACDEMY|1<br />
AASL|2<br />
AASLPUBSANDJOURNALS|2<br />
<br />
===Добавление пользовательского параметра===<br />
<br />
Добавление пользовательского параметра осуществляется в несколько шагов:<br />
* '''добавление ''пользовательского параметра'' в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файл инициализации шлюза <tt>irbis_server.ini</tt>]]'''<br />
: Необходимо добавить описание нового ''пользовательского параметра'' в настроечный файл <tt>irbis_server.ini</tt>, задав имя и метку параметра. Для этого в секции <tt>[PARAMETRS]</tt> используются ''параметры ini файла'' <tt>PARNAME_</tt> и <tt>PARTAG_</tt> (не стоит путать термины ''пользовательские параметры'' веб-шлюза и ''параметры ini файла''), где вместо знака подчёркивания ставится номер пользовательского параметра по порядку, например:<br />
PARNAME2=C21COM<br />
PARTAG2=2222<br />
: В этом примере мы видим описание второго по порядку из определённых в секции <tt>[PARAMETRS]</tt> параметров: имя параметра <tt>C21COM</tt>, метка параметра <tt>2222</tt>. Имя и метка параметров должны быть уникальными. После того как описание ''пользовательского параметра'' добавлено необходимо изменить значение параметра <tt>PARCOUNT</tt> в секции <tt>[PARAMETRS]</tt>, его значение должно быть равно порядковому номеру последнего описания ''пользовательского параметра''.<br />
: ''Примечание:'' обратите внимание, что в файле <tt>irbis_server.ini</tt> хранятся описания не только пользовательских параметров, а присутствует также описания предустановленных параметров.<br />
* '''использование в файлах <tt>.frm</tt> команд <tt><!FORMAT=INSERT_ALL_PARAMETERS></tt> и <tt><!FORMAT=INSERT_ALL_PARAMETERS_IN_QUERY></tt>'''<br />
: Команда <tt><!FORMAT=INSERT_ALL_PARAMETERS></tt> обеспечивает вставку в код HTML-страницы всех непустых переданных веб-шлюзу параметров в виде скрытых элементов формы, например:<br />
<input type="hidden" name="PARAM_NAME" value="PARAM_VALUE"><br />
: Команда <tt><!FORMAT=INSERT_ALL_PARAMETERS_IN_QUERY></tt> вставляет в код HTML-страницы гиперссылку, содержащую все переданные веб-шлюзу параметры.<br />
<br />
===Система команд Веб-шлюза ИРБИС===<br />
<br />
Система ''команд'' Веб-шлюза ИРБИС позволяет задать собственный набор фреймов и порядок их объединения для каждой задачи. Для разных задач предусмотрены разные команды, например: для страницы приглашения к поиску, результата поиска, отбора записей в корзину заказов и т.д.<br />
<br />
==Обработка фреймов==<br />
<br />
В общем случае, веб-страница формируется путём объединения (''склеивания'') следующих частей:<br />
* ''заголовочной'' и ''подвальной'' частей, формируемых при помощи ''фреймов'' и<br />
* ''тела'' страницы, формируемого при помощи [[Язык форматирования системы ИРБИС#Понятие формата|''формата'']], который отрабатывает на наборе записей базы данных (соответствующих запросу пользователя).<br />
<br />
===Фрейм как язык разметки===<br />
<br />
Фрейм представляет собой текстовый файл, содержимое которого передаётся клиенту (в веб браузер), который также может содержать вставки, которые будут обработаны определённым образом перед передачей клиенту.<br />
<br />
Предусмотрены вставки следующих видов:<br />
* вставка на языке форматирования ИРБИС,<br />
* вложенный фрейм.<br />
<br />
'''''Вставка на языке форматирования''''' обозначается следующим образом<br />
<br />
<!FORMAT<br />
<br />
'''Пример:'''<br />
<br />
<nowiki><!FORMAT=if v3409='' then 'value=""' else 'value=','"',v3409,'"',fi></nowiki><br />
<br />
''Примечание: если вставка на языке форматирования содержит символы, кодирующиеся в UTF-8 более чем одним байтом (например, кириллицу), то формат обязательно должен начинаться с восклицательного знака. Это связано с тем, что формат в кодировке UTF-8 [[Язык форматирования системы ИРБИС#Кодировка|должен предваряться восклицательным знаком]], а все фреймы храняться именно в кодировке UTF-8.''<br />
<br />
'''Пример:'''<br />
<br />
<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><br />
<br />
Пример вложенного фрейма:<br />
<br />
<!FORMAT=if &uf('IMAIN,SHOW_DUBLIN_CORE,0') <> '0' then /'<!FILE=Dublin_Core.frm>' fi><br />
<br />
Предусмотрен '''''упрощённый синтаксис вставки на языке форматирования''''':<br />
<?!if p(v2225) then 'true' fi ?><br />
<br />
===Пример последовательности действий Веб-шлюза ИРБИС при формировании веб-страницы в ответ на запрос===<br />
<br />
Веб-шлюз ИРБИС при получении команд '''F''', '''S''', '''T''', '''Z''', '''R''' выполняет следующую последовательность действий:<br />
* Веб-шлюз получил запрос. Запрос содержит параметры <tt>C21COM</tt>, <tt>I21DBN</tt> и другие.<br />
* В файле <tt>irbis_server.ini</tt> веб-шлюз находит секцию, имя которой соответствует значению параметра <tt>I21DBN</tt>. Иными словами: с одной стороны, в качестве значения параметра <tt>I21DBN</tt> указывается имя профиля, с другой стороны, для каждого профиля в файле <tt>irbis_server.ini</tt> должна содержаться секция, имя которой совпадает с именем профиля.<br />
* В указанной секции файла <tt>irbis_server.ini</tt> веб-шлюз находит значение параметра, соответствующего указанной в параметре <tt>C21COM</tt> команде (см. таблицу ''Команды веб-шлюза ИРБИС''). Полученное значение должно представлять собой список фреймов.<br />
* Фреймы обрабатываются, и результат, представляющий собой HTML-страницу, отправляется клиенту в качестве ответа.<br />
<br />
===Примеры перехода пользователя по страницам Веб-ИРБИС===<br />
<br />
Пример запроса начальной страницы:<br />
<br />
http://localhost:8080/cgi-bin/irbis64r_15_plus/cgiirbis_64_ft.exe?C21COM=F&I21DBN=IBIS_FULLTEXT&P21DBN=IBIS&Z21ID=&S21CNR=5<br />
<br />
где указаны:<br />
* команда шлюза F (''показ страницы'')<br />
* имя профиля IBIS_FULLTEXT<br />
* база данных IBIS<br />
* авторизация не осуществлялась<br />
<br />
Параметр S21CNR не обязателен.<br />
<br />
При авторизации запрос приобретает следующий вид<br />
<br />
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<br />
<br />
где указаны:<br />
* команда шлюза F (''показ страницы'')<br />
* имя профиля AUTHOR<br />
* база данных IBIS<br />
* параметры авторизации: Z21FLAGID, фамилия читателя Z21FAMILY и идентификатор читателя Z21ID<br />
<br />
При поиске по слову "библиотека" запрос приобретает следующий вид<br />
<br />
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<br />
<br />
где указаны:<br />
* команда шлюза S (''поиск'')<br />
* имя профиля IBIS_FULLTEXT<br />
* база данных IBIS<br />
* параметры авторизации: Z21ID<br />
* текущий запрос SEARCH_STRING и предыдущий запрос FT_S21STR (одинаковые)<br />
* USES21ALL=1 (использовать параметр S21ALL, применяется в поиске связных)<br />
* S21CNR=5 (порция при показе найденных)<br />
* S21REF=10 (для правильного формирования ссылок на страницы с результатами поиска)<br />
* C21COM1<br />
* FT_PREFIX<br />
* S21FMT=briefHTML_ft<br />
* AVT_S21P03=A%3D<br />
* AVT_S21P02=1<br />
* AVT_S21LOG=1<br />
* NAME_S21P03=T%3D<br />
* NAME_S21P02=1<br />
* NAME_S21LOG=1<br />
* UDC_S21P03=U%3D<br />
* UDC_S21P02=0<br />
* UDC_S21LOG=1<br />
* IZD_S21P03=M%3D<br />
* IZD_S21P02=1<br />
* IZD_S21LOG=1<br />
* DAT_S21P03=G%3D<br />
* DAT_S21P02=1<br />
* DAT_S21LOG=5<br />
* P21DBN=IBIS<br />
* FT_S21LOG=4<br />
* FT_S21P03=K%3D<br />
* FT_S21P01=3<br />
* S21STN=1<br />
* S21COLORTERMS=1<br />
<br />
==Ссылки==<br />
<br />
См. также:<br />
* [[Веб-ИРБИС]]<br />
* [[Установка Веб-шлюза Ирбис 64]]<br />
* [[Настройка и обслуживание Веб-ИРБИС]]<br />
* [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini]]<br />
* [[Язык форматирования системы ИРБИС]]<br />
* [[Язык запросов ИРБИС]]<br />
<br />
[[Категория:Технология Веб-ИРБИС]]<br />
[[Категория:ИРБИС 64]]</div>Sokvhttp://wiki.elnit.org/index.php?title=%D0%AF%D0%B7%D1%8B%D0%BA_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%98%D0%A0%D0%91%D0%98%D0%A1&diff=2453Язык форматирования системы ИРБИС2016-03-18T16:39:28Z<p>Sokv: /* Выполнение формата */</p>
<hr />
<div>'''''Язык форматирования''''' ИРБИС – язык манипулирования данными в контексте [[Базы данных ИРБИС#Модель баз данных ИРБИС|''записи'']] базы данных, представляет собой средство, с помощью которого осуществляется разнообразное представление данных для многих операций и функций системы, в частности, для показа и печати документов, для создания словарей, для импорта/экспорта данных, для формально-логического контроля и т.д.<br />
<br />
==Общие сведения==<br />
<br />
===История появления===<br />
<br />
Язык форматирования системы ИРБИС базируется на языке форматирования системы CDS/ISIS (ЮНЕСКО).<br />
<br />
===Понятие формата===<br />
<br />
Совокупность команд и функций, записанных в соответствии с требованиями языка форматирования, называется '''''форматом'''''. В общем случае формат определяет некоторое подмножество данных из записи базы данных, которые затем могут использоваться системой для выполнения определенных функций.<br />
<br />
Формат как отдельная структура сохраняется в текстовом файле с расширением [[Файлы ИРБИС#Файлы форматов ИРБИС|<tt>.pft</tt>]]. Такой файл обычно называют '''''файл формата'''''.<br />
<br />
===Начало знакомства с языком форматирования ИРБИС===<br />
<br />
Для понимания языка форматирования необходимо быть знакомым с такими понятиями как:<br />
поле данных – структурная единица документа (записи), имеющая числовую идентификацию (метку поля) и содержащая один элемент описания (например, первый индивидуальный автор, основное заглавие и т.д.):<br />
подполе – структурная единица поля, которая определяется двумя символами, предшествующими собственно данным подполя: первый из этих символов знак ^, второй символ может быть латинской буквой (прописные и строчные не различаются) или цифрой и называется разделителем подполя.<br />
<br />
Для новичков может показаться, что некоторые форматы являются очень сложными для понимания. Однако, все форматы, даже громоздкие, состоят по сути из довольно простых команд или функций, разделенных запятыми или пробелами. Кажущаяся сложность связана с тем, что формат может состоять из многих таких команд. В связи с этим, ключом к пониманию форматов является последовательный анализ всех присутствующих в них команд.<br />
<br />
Обрабатывая формат, система работает с тремя объектами: запись (документ) базы данных, собственно формат и рабочая область, в которой размещаются выходные данные. Команды выполняются последовательно в порядке их представления в формате. Одни из команд порождают выходные данные (например, значения полей данных), другие - инициируют некоторые действия (например, переход на другую строку, создание нескольких пустых строк и т.д.). Создаваемые данные запоминаются в рабочей области в виде текстовых строк, которые затем передаются для последующей обработки, например, для печати.<br />
<br />
Все команды форматирования могут вводиться прописными или строчными буквами или их комбинацией.<br />
В форматах могут присутствовать комментарии. Признаком начала комментария является комбинация символов /*. В качестве комментария принимается часть строки от признака начала комментария до конца строки.<br />
<br />
===Выполнение формата===<br />
<br />
====Форматёр====<br />
<br />
''Форматёр'' – модуль, реализующий набор функций для обработки данных с использованием языка форматирования.<br />
<br />
В системе ИРБИС 64 присутствует несколько реализаций форматёра:<br />
* серверный форматёр – [[IRBIS64.dll#Функции форматёра|входит в библиотеку <tt>IRBIS64.dll</tt>]],<br />
* клиентский форматёр – включён в код клиентских приложений.<br />
<br />
Клиентский форматёр используется клиентскими приложениями.<br />
<br />
Серверный форматёр используется:<br />
* серверным [[АРМ Администратор]],<br />
* в некоторых случаях клиентское приложение передаёт формат на исполнение серверному форматёру, при этом взаимодействие осуществляется через [[TCP/IP сервер ИРБИС 64|сервер ИРБИС]].<br />
<br />
====Контекст форматёра====<br />
<br />
Значения глобальных переменных хранятся в конкретном запущенном экземпляре форматёра. Таким образом, область видимости переменных оказывается в непосредственной связи с экземпляром форматёра:<br />
* В рамках одного экземпляра форматёра значения глобальных переменных, инициализированные в одном формате, доступны в другом формате.<br />
* В разных экземплярах форматёра – собственные наборы глобальных переменных.<br />
<br />
Например:<br />
* В серверном [[АРМ Администратор]] с момента запуска и до закрытия приложения будет использоваться один экземпляр форматёра, соответственно для всех выполняемых данным АРМ форматов будет один набор глобальных переменных.<br />
* Для любого клиентского АРМ будет использоваться один экземпляр клиентского форматёра.<br />
* В тех случаях, когда клиентское АРМ передаёт форматы на исполнение серверному форматёру, запросы на исполнение форматов могут выполняться разными экземплярами форматёра.<br />
<br />
Таким образом, в контексте выполнения формата нельзя рассчитывать на то, что до присвоения глобальным переменным каких либо значений они будут пустыми.<br />
<br />
==Кодировка==<br />
<br />
Формат может начинаться с маркера кодировки UTF-8, в качестве данного маркера служит восклицательный знак.<br />
<br />
Если формат начинается с восклицательного знака, то система ИРБИС при чтении данного формата будет использовать кодировку UTF-8, в противном случае Windows-1251.<br />
<br />
Этот же механизм используется и при [[Технология Веб-ИРБИС#Фрейм как язык разметки|вставке формата внутри фрейма]].<br />
<br />
==Запись в базе данных, используемая в примерах==<br />
<br />
Если не оговорено противное, то все примеры по форматированию в последующих разделах ссылаются на запись, приведенную ниже. Эта запись присутствует в базе данных IBIS, поставляемой в дистрибутивном варианте системы в качестве учебной.<br />
<br />
'''MFN: 34'''<br />
600: ^AСухой П.О.^Bо нем<br />
215: ^a383^cил.24л<br />
920: PAZK<br />
999: 0000000<br />
907: ^A19941123^bdsm<br />
964: 78.09.19<br />
10: ^a5-203-01472-8^dЦ.договор.<br />
101: rus<br />
102: RU<br />
900: ^b05^c22<br />
210: ^cВоенное изд-во^aМ.^d1993<br />
700: ^aКузьмина^bЛ.М.<br />
675: 623.746<br />
675: 623.746(092) Сухой П.О.<br />
908: К89<br />
903: 623.746/К89-239165<br />
910: ^A0^BЭ93-18430^C19930830^Dхр<br />
910: ^A2^Dхр<br />
200: ^aКонструктор Сухой. Люди и самолеты<br />
<br />
==Команды вывода полей==<br />
<br />
Команды вывода полей – это команды, используемые для извлечения из записи и вывода конкретного поля или подполя. Имеется [[#Команда вывода MFN|специальная команда для извлечения и вывода номера записи MFN]], хотя, строго говоря, MFN не является полем (MFN не имеет метки).<br />
<br />
===Команда вывода поля===<br />
<br />
Для указания на необходимость вывода поля из записи необходимо записать букву '''V''', за которой должна следовать метка поля. Это может быть прописная или строчная буква. Ниже приведены примеры применения данной команды.<br />
<br />
{| class="standard"<br />
!Формат||Выходные данные<br />
|-<br />
|<tt>v210</tt>||<tt>^cВоенное изд-во^aМ.^d1993</tt><br />
|-<br />
|<tt>v200</tt>||<tt>aКонструктор Сухой. Люди и самолеты</tt><br />
|-<br />
|<tt>v700</tt>||<tt>^aКузьмина^bЛ.М.</tt><br />
|-<br />
|<tt>v600</tt>||<tt>^AСухой П.О.^Bо нем</tt><br />
|}<br />
<br />
===Команда вывода подполя===<br />
<br />
Для вывода конкретного подполя из данного поля следует добавить соответствующий разделитель подполей к метке поля. Заметим, что можно использовать специальный разделитель подполей ^* для вывода первого подполя, если оно есть. В этом случае, первому подполю необязательно должен предшествовать его разделитель. Разделитель подполей может быть прописной или строчной буквой (обязательно латинской).<br />
<br />
{| class="standard"<br />
!Формат||Выходные данные<br />
|-<br />
|<tt>v210^с</tt>||<tt>Военное изд-во</tt><br />
|-<br />
|<tt>v200^a</tt>||<tt>Конструктор Сухой. Люди и самолеты</tt><br />
|-<br />
|<tt>v700^a</tt>||<tt>Кузьмина</tt><br />
|-<br />
|<tt>v600^*</tt>||<tt>Сухой П.О.</tt><br />
|}<br />
<br />
===Вывод фрагмента поля или подполя===<br />
<br />
В некоторых случаях может возникнуть необходимость вывести часть поля, которая не является подполем, особенно тогда, когда поле имеет фиксированный формат (например, запись даты в виде ГГГГММДД). Это можно сделать командой смещение/длина, размещаемой сразу за командой вывода поля или подполя, к которому команда применяется.<br />
<br />
Эта команда имеет вид:<br />
*<смещение>.<длина><br />
где:<br />
* *<смещение> указывает позицию первого символа фрагмента, который должен быть извлечен из поля или подполя (позиции символов нумеруются с нуля, т.е. первый символ находится в позиции 0, второй - в позиции 1 и т.д.); если смещение не указано, то оно считается равным 0;<br />
* .<длина> указывает количество извлекаемых символов. Если длина опущена, то извлекается все поле (подполе) до конца, начиная с символа, указанного в смещении.<br />
<br />
Ниже приведены примеры использования команды по отношению к записи, которая в качестве поля с меткой 1 содержит значение<br />
<tt>88-Nov-05</tt>.<br />
<br />
{| class="standard"<br />
!Формат||Выходные данные<br />
|-<br />
|<tt>v1*3.3</tt>||<tt>Nov</tt><br />
|-<br />
|<tt>v1.2</tt>||<tt>88</tt><br />
|-<br />
|<tt>v1*7</tt>||<tt>05</tt><br />
|-<br />
|<tt>v1*7,v1*2.4</tt>||<tt>05-Nov</tt><br />
|-<br />
|<tt>v1*7,v1*2.5,v1.2</tt>||<tt>05-Nov-88</tt><br />
|-<br />
|<tt>v210.3</tt>||<tt>^cВ</tt><br />
|-<br />
|<tt>v210^c.3</tt>||<tt>Вое</tt><br />
|}<br />
<br />
Обратите внимание на различные способы манипулирования полями с подполями в последних двух примерах. Если производится ссылка на поле целиком (например, v210), то нулевое смещение указывает на первую фактическую позицию поля (включая возможные разделители, стоящие в начале), а при ссылке на подполе (например, v210^с) нулевое смещение указывает на первый символ данных, стоящий после разделителя подполей.<br />
<br />
===Команда вывода MFN===<br />
<br />
Для вывода номера записи в файле документов служит команда MFN, формат которой:<br />
MFN<br />
или<br />
MFN(d)<br />
где d – количество выводимых на экран цифр. Если параметр (d) опущен, то по умолчанию предполагается 6 цифр. Ниже приводятся примеры использования данной команды.<br />
<br />
{| class="standard"<br />
!Формат||Выходные данные<br />
|-<br />
|<tt>MFN</tt>||<tt>000034</tt><br />
|-<br />
|<tt>MFN(3)</tt>||<tt>034</tt><br />
|-<br />
|<tt>MFN(2)</tt>||<tt>34</tt><br />
|-<br />
|<tt>MFN(1)</tt>||<tt>3</tt><br />
|}<br />
<br />
Заметим, что для подавления в MFN впереди стоящих нулей можно использовать [[Функции языка форматирования ИРБИС#Функция F(выр-1, выр-2, выр-3)|функцию F]].<br />
<br />
==Команды режима вывода==<br />
<br />
Система может выводить данные в трех различных режимах: '''''режим проверки''''', '''''режим заголовка''''', '''''режим данных'''''.<br />
<br />
В '''''режиме проверки''''' поля выводятся в том виде, в каком они хранятся в записи. При этом система не обеспечивает никаких разделителей между полями или экземплярами повторяющихся полей. Пользователь должен обеспечить адекватное разделение полей с помощью команд размещения, литералов или повторяющихся групп. Режим обычно используется для вывода записей с целью проверки правильности введенных данных.<br />
<br />
'''''Режим заголовка''''' обычно используется для печати заголовков при выводе указателей и таблиц. Все управляющие символы, введенные вместе с данными, такие как разделители терминов (< и >) игнорируются (за исключением указанных ниже случаев), а разделители подполей заменяются знаками пунктуации.<br />
<br />
'''''Режим данных''''' похож на режим заголовка, но дополнительно после каждого поля автоматически ставится точка (.), за которой следуют два пробела (или просто два пробела, если поле заканчивается каким-либо знаком пунктуации). Отметим, однако, что эта автоматическая пунктуация подавляется, если за командой вывода поля следует [[#Литералы|суффикс-литерал]].<br />
<br />
Когда система форматирует поле, содержащее подполе, в режимах заголовка или данных, она автоматически заменяет имеющиеся разделители подполей знаками пунктуации (при этом разделитель первого подполя, если он имеется, всегда игнорируется). Специальная комбинация символов "><" заме-няется на "; " (а отдельные символы “<” и “>” подавляются), обеспечивая простой способ форматирования полей, содержащих перечень ключевых фраз, заключенных в угловые скобки. Таблица стандартного замещения разделителей подполей выглядит так:<br />
* ^a замещается на "; " <br />
* от ^b до ^i замещается на ", "<br />
* все другие замещаются на ". "<br />
<br />
Команды режима вывода представляются в виде <tt>Mmc</tt>, где:<br />
* М – признак команды режима вывода.<br />
* m следующим образом определяет режим вывода:<br />
** Р режим проверки;<br />
** H режим заголовка;<br />
** D режим данных.<br />
* с – определяет необходимость преобразования букв в прописные:<br />
** U буквы преобразуются в прописные;<br />
** L буквы преобразованию не подвергаются.<br />
<br />
Команда режима вывода может появляться в формате столько раз, сколько это нужно и действует до следующей команды режима вывода. По умолчанию система использует команду MPL. Ниже приведены примеры использования команды.<br />
<br />
{| class="standard"<br />
!Формат||Выходные данные<br />
|-<br />
|<tt>mpl,v200</tt>||<tt>^aКонструктор Сухой. Люди и самолеты</tt><br />
|-<br />
|<tt>mhl,v200</tt>||<tt>Конструктор Сухой. Люди и самолеты</tt><br />
|-<br />
|<tt>mdl,v200</tt>||<tt>Конструктор Сухой. Люди и самолеты.</tt><br />
|-<br />
|<tt>mdu,v200</tt>||<tt>КОНСТРУКТОР СУХОЙ. ЛЮДИ И САМОЛЕТЫ.</tt><br />
|-<br />
|<tt>mpl,v210</tt>||<tt>^cВоенное изд-во^aМ.^d1993</tt><br />
|-<br />
|<tt>mdl,v210</tt>||<tt>Военное изд-во; М., 1993.</tt><br />
|}<br />
<br />
==Команды горизонтального и вертикального размещения==<br />
<br />
В языке форматирования имеются следующие команды для управления горизонтальным и вертикальным размещением данных:<br />
* '''<tt>Xn</tt>''' – вставляет <tt>n</tt> пробелов;<br />
* '''<tt>Cn</tt>''' – табуляция в позицию <tt>n</tt>;<br />
* '''<tt>/</tt>''' – переход на новую строку, если предыдущая строка не была пустой;<br />
* '''<tt>#</tt>''' – безусловный переход на новую строку;<br />
* '''<tt>%</tt>''' – удаляет пустые строки (если они есть).<br />
<br />
Команда <tt>/</tt> приводит к размещению последующих данных с начала следующей строки. Подряд расположенные команды <tt>/</tt> эквивалентны одной команде <tt>/</tt>. Команда <tt>/</tt> никогда не создает пустых строк.<br />
<br />
Команда <tt>#</tt> выполняет те же действия, что и <tt>/</tt>, но переход на новую строку является безусловным.<br />
<br />
Можно использовать комбинацию <tt>/#</tt> для создания одной (и только одной) пустой строки. Комбинация <tt>##</tt> может привести к созданию одной или двух пустых строк в зависимости от того, была ли пустой текущая строка перед выполнением первой команды <tt>#</tt>.<br />
<br />
Использование команды <tt>#</tt> может вызвать затруднение в тех случаях, когда выбираемое поле оказывается пустым. Эта ситуация хорошо иллюстрируется на следующем примере:<br />
/#V10/#V20/#V30<br />
Если все поля присутствуют в документе, то в результате поля <tt>10</tt>, <tt>20</tt>, и <tt>30</tt> будут располагаться с начала строк и каждому будет предшествовать одна пустая строка. Однако, если поле <tt>20</tt> в документе отсутствует, то между <tt>10</tt> и <tt>30</tt> полями будут вставлены две пустые строки. Это может оказаться нежелательным, если действительно требуется, чтобы между полями была пропущена именно одна пустая строка, независимо от наличия или отсутствия некоторых полей. Таким образом, приведенный выше формат не приведет к желаемому результату.<br />
<br />
Эту проблему решает команда <tt>%</tt>. Ее действие заключается в подавлении всех последовательно расположенных пустых строк, если они имеются, между текущей строкой и последней непустой строкой. Таким образом, формат<br />
%##V10%##V20%##V30 ...<br />
приведет к созданию одной и только одной пустой строки между каждым полем, независимо от их наличия или отсутствия в документе.<br />
<br />
Команду <tt>Сn</tt> имеет смысл применять только в случае использования моноширинных шрифтов. Команды <tt>/</tt> <tt>#</tt> <tt>%</tt> не применимы в случае использования в форматах показа средств RTF или HTML. Команды <tt>Сn</tt> и <tt>Xn</tt> не работают в [[HTML-форматах]].<br />
<br />
==Литералы==<br />
<br />
Литерал – это строка символов, заключенная в соответствующие ограничители, которая вносится в выводимый текст в таком виде, как она приведена в формате. Литералы могут использоваться, например, для именования полей.<br />
<br />
Существуют литералы трех типов:<br />
* '''''Условный литерал''''' определяет текст, который будет выведен только в случае присутствия в записи соответствующего ему поля/подполя. Если поле является повторяющимся, то текст будет выведен только один раз, независимо от количества экземпляров поля/подполя. Условные литералы заключаются в двойные кавычки, например:<br />
"Заглавие: "<br />
* '''''Повторяющийся литерал''''' определяет текст, который будет выведен только в случае присутствия в записи соответствующего ему поля или подполя. Однако, если поле повторяющееся, литерал будет выводиться для каждого экземпляра поля/подполя. Ограничителем для повторяющихся литералов служит символ вертикальной черты:<br />
|Автор: |<br />
* '''''Безусловный литерал''''' определяет текст, который будет выведен независимо от наличия поля в записи. Безусловные литералы заключаются в одинарные кавычки, например:<br />
'Краткое содержание'<br />
или<br />
'Заголовок'<br />
<br />
Литерал не должен содержать ограничителей литерала. Например, безусловный литерал не может содержать одинарную кавычку (хотя может содержать двойные кавычки и/или вертикальные черты).<br />
<br />
Условные и/или повторяющиеся литералы связываются с полем или подполем своим расположением в формате. Литералы, предшествующие команде вывода поля/подполя, называемые '''''префикс-литералами''''', выводятся перед содержимым поля/подполя, в то время, как литералы, следующие за командой вывода поля/подполя, называемые '''''суффикс-литералами''''', выводятся после содержимого поля/подполя.<br />
<br />
Если за повторяющимся префикс-литералом непосредственно следует знак '''<tt>+</tt>''' (например, '''<tt>|xxx|+</tt>'''), то он будет выведен перед каждым, кроме первого, экземпляром поля/подполя.<br />
<br />
Если повторяющемуся суффикс-литералу непосредственно предшествует знак '''<tt>+</tt>''' (например, '''<tt>+|xxx|</tt>'''), то он будет выведен после каждого, кроме последнего, экземпляра поля/подполя.<br />
<br />
С полем/подполем может быть связан более чем один литерал. В этом случае различные литералы должны подчиняться следующим правилам и порядку:<br />
* '''префикс-литералы:'''<br />
** Один или более условных префикс-литералов. За условным префикс-литералом могут следовать другие условные префикс-литералы, команды вертикального и горизонтального размещения, и/или команды режима вывода. Все команды между первым условным префикс-литералом и соответствующей ему командой вывода поля/подполя становятся условными и будут выполнены только при наличии поля/подполя, иначе они игнорируются.<br />
** Один и только один повторяющийся префикс-литерал. Если такой литерал есть, то он должен непосредственно предшествовать соответствующей ему команде вывода поля/подполя.<br />
* '''суффикс-литералы:'''<br />
** Один и только один повторяющийся суффикс-литерал. Если такой литерал есть, то он должен следовать непосредственно за соответствующей ему командой вывода поля/подполя.<br />
** Один и только один условный суффикс-литерал. Если такой литерал есть, то он должен следовать непосредственно за повторяющимся суффикс-литералом или связанной с ним командой вывода поля/подполя.<br />
**Суффикс-литералы не должны разделяться запятыми и не должно быть запятой между командами вывода поля/подполя и первым суффикс-литералом, так как запятая обозначает конец суффикс-литералов, связанных с данной командой вывода поля/подполя.<br />
<br />
'''''Пустые литералы''''' – литералы нулевой длины, такие, как <tt>""</tt> или <tt>||</tt> вполне допустимы и могут использоваться, как префикс-литералы для обеспечения условного вертикального размещения или как суффикс-литералы для временного подавления автоматической пунктуации, которая обеспечивается в режиме данных.<br />
<br />
Литералы подвергаются преобразованию в прописные буквы, если расположены после соответствующей команды режима вывода.<br />
<br />
Примеры различных типов литералов:<br />
<br />
{| class="standard"<br />
!Формат||Выходные данные<br />
|-<br />
|<tt>'MFN:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;',mfn(3)</tt>||<tt>MFN:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;034</tt><br />
|-<br />
|<tt>mdl,"Заглавие: "v200</tt>||<tt>Заглавие: Конструктор Сухой. Люди и самолеты.</tt><br />
|-<br />
|<tt>v675</tt>||<tt>623.746623.746(092) Сухой П.О.</tt><br />
|-<br />
|<tt><nowiki>v675|; |</nowiki></tt>||<tt>623.746; 623.746(092) Сухой П.О.;</tt><br />
|-<br />
|<tt><nowiki>v675+|; |</nowiki></tt>||<tt>623.746; 623.746(092) Сухой П.О.</tt><br />
|-<br />
|<tt>|; |v675</tt>||<tt>; 623.746; 623.746(092) Сухой П.О.</tt><br />
|-<br />
|<tt>|; |+v675</tt>||<tt>623.746; 623.746(092) Сухой П.О.</tt><br />
|-<br />
|<tt><nowiki>"УДК"/v675+|; |</nowiki></tt>||<tt>УДК<br />623.746; 623.746(092) Сухой П.О.</tt><br />
|-<br />
|<tt>|(|v675|)|</tt>||<tt>(623.746)(623.746(092) Сухой П.О.)</tt><br />
|-<br />
|<tt><nowiki>"(УДК: ",v675+|; |")"</nowiki></tt>||<tt>(УДК: 623.746; 623.746(092) Сухой П.О.)</tt><br />
|-<br />
|<tt>mdl,v210</tt>||<tt>Военное изд-во; М., 1993.</tt><br />
|-<br />
|<tt>mdl,v210""</tt>||<tt>Военное изд-во; М., 1993</tt><br />
|}<br />
<br />
===Команды фиктивного вывода поля===<br />
<br />
Команды фиктивного вывода поля реализует условный вывод литералов в зависимости от наличия или отсутствия данного поля или подполя без вывода содержимого самого поля. Задаются они следующим образом: '''<tt>Dt</tt>''' или '''<tt>Dt^x</tt>''' или '''<tt>Nt</tt>''' или '''<tt>Nt^x</tt>''', где:<br />
* '''<tt>D</tt>''' указывает, что все соответствующие ей условные литералы должны выводиться только при наличии поля,<br />
* '''<tt>N</tt>''' указывает, что они должны выводиться только при отсутствии поля;<br />
* '''<tt>t</tt>''' метка поля, управляющего выводом литералов;<br />
* '''<tt>^x</tt>''' необязательный код разделителя подполя. Если он приведен, то это означает, что вывод литералов зависит от наличия или отсутствия определенного подполя (отметим, что отсутствие поля говорит и об отсутствии подполей в этом поле).<br />
<br />
Обычно команде фиктивного вывода поля предшествует, по крайней мере, один условный префикс-литерал (который может быть пустым), за которым могут следовать один или более других условных префикс-литералов, команды вертикального и горизонтального размещения и/или команды режима вывода. Команда фиктивного вывода поля не может иметь суффикс-литералов.<br />
<br />
Несколько примеров использования этих команд:<br />
<br />
{| class="standard"<br />
!Формат||Выходные данные<br />
|-<br />
|<tt>"(Отсут.)"n700,v700</tt>||<tt>Конструктор Сухой. Люди и самолеты</tt><br />
|-<br />
|<tt><nowiki>"(Отсут.)"n80,v80+|; |</nowiki></tt>||<tt>(Отсут.)</tt><br />
|-<br />
|<tt>"[нет даты]"n907^А,V907^A</tt>||<tt>19941123</tt><br />
|-<br />
|<tt>"[нет сведений]"n911,v911</tt>||<tt>[нет сведений]</tt><br />
|}<br />
<br />
==Выражения==<br />
<br />
Язык форматирования позволяет вычислять значения и/или сравнивать значения с помощью выражений. Выражения построены таким образом, что при их вычислении возвращается значение. Таким значением может быть строка символов (например, содержимое поля или литерал), тогда выражение называется строковым, либо число, тогда выражение называется числовым, либо логическое значение (истина или ложь), тогда выражение называется логическим. В системе также имеется набор функций, которые, на основе задаваемых аргументов, выполняют некоторые специфические действия и возвращают значения. Функции, возвращающие в качестве значения число, называются числовыми функциями, возвращающие строку символов - строковыми функциями, а возвращающие логическое значение - логическими функциями. Только строковые функции могут использоваться непосредственно в качестве команд форматирования. Числовые выражения могут использоваться либо в логических выражениях, либо в качестве аргументов функций. Логические выражения и логические функции могут использоваться только в контексте [[#Команда IF|команды IF]].<br />
<br />
===Числовые выражения===<br />
<br />
'''''Числовое выражение''''' формируется из операндов, которые имеют числовое значение, и [[Операторы языка форматирования ИРБИС#Арифметические операторы|арифметических операторов]] ('''<tt>+</tt>''', '''<tt>-</tt>''', '''<tt>*</tt>''', '''<tt>/</tt>''').<br />
<br />
В качестве операндов в числовых выражениях могут выступать: '''''числовые константы''''', '''''числовые функции''''', [[#Команда вывода MFN|команда вывода номера записи MFN]], числовые выражения.<br />
<br />
'''''Числовые константы''''' могут быть представлены в виде целых чисел, чисел с десятичной точкой, например <tt>5</tt>, <tt>18</tt>, <tt>98.65</tt>, или чисел в '''''экспоненциальной форме''''', например, <tt>1.5Е5</tt>, обозначающее 1.5 умноженное на 10 в 5-ой степени, т.е. 150000. Числа могут быть со знаком или без.<br />
<br />
[[#Числовые функции|'''''Числовые функции''''' рассматриваются в отдельной главе]]. Пример числовой функции <tt>val(v10)</tt>.<br />
<br />
Числовые выражения при использовании их в качестве операндов должны быть заключены в круглые скобки, например:<br />
(val(v20)-5)<br />
<br />
Отметим, что поскольку команды вывода полей (например, v10 или v10^a) дают текстовые строки, они не могут использоваться в качестве операндов числовых выражений. Однако, для преобразования содержимого поля или подполя в числовое значение может быть использована [[Функции языка форматирования ИРБИС#Функция VAL(формат)|функция VAL]].<br />
<br />
Аналогичным образом, числовое выражение не может быть непосредственно выведено на экран или печать, а должно быть предварительно преобразовано в строку символов с помощью [[Функции языка форматирования ИРБИС#Функция F(выр-1, выр-2, выр-3)|функции F]].<br />
<br />
Ниже приведены примеры числовых выражений. Предполагается, что MFN=10, v1^a=10, v1^b=20 и v2=30.<br />
<br />
{| class="standard"<br />
!Выражение||Значение<br />
|-<br />
|<tt>0.155е+3</tt>||<tt>155</tt><br />
|-<br />
|<tt>1е-3</tt>||<tt>0.001</tt><br />
|-<br />
|<tt>2*3+9</tt>||<tt>15</tt><br />
|-<br />
|<tt>2*(3+9)</tt>||<tt>24</tt><br />
|-<br />
|<tt>10-(4*(2-1))</tt>||<tt>6</tt><br />
|-<br />
|<tt>15*0.001</tt>||<tt>0.015</tt><br />
|-<br />
|<tt>mfn+100</tt>||<tt>110</tt><br />
|-<br />
|<tt>val(v2)+val(v1^a)*7.5</tt>||<tt>105</tt><br />
|-<br />
|<tt>(val(v1^a)-val(v1^b))/100</tt>||<tt>-0.1</tt><br />
|}<br />
<br />
===Строковые выражения===<br />
<br />
'''''Строковым выражением''''' являются:<br />
* [[#Литералы|Безусловный литерал]], например <tt>'некоторый текст'</tt>.<br />
* [[#Команды вывода полей|Команда вывода поля/подполя]], которая может включать [[#Вывод фрагмента поля или подполя|команду смещение/длина]], например <tt>v26^c*2.2</tt>.<br />
* [[Функции языка форматирования ИРБИС#Строковые функции|Строковая функция]], например <tt>S(v24,v25,v26)</tt>.<br />
<br />
===Логические выражения===<br />
<br />
'''''Логическое выражение''''' формируется из операндов, которые могут принимать одно из двух значений, '''истина''' или '''ложь''', и [[Операторы языка форматирования ИРБИС#Логические операторы|логических операторов]] ('''NOT''', '''AND''', '''OR'''). Логические выражения используются для вычисления истинности одного или более условий.<br />
<br />
Операндами логического выражения могут быть:<br />
* [[Операторы языка форматирования ИРБИС#Операторы отношения и выражения отношения|Выражения отношения]] – сравнивают два числовых или строковых значения и определяют, удовлетворяют ли они отношению, строятся на основе [[Операторы языка форматирования ИРБИС#Операторы отношения и выражения отношения|операторов отношения]] ('''<tt>=</tt>''', '''<tt><></tt>''', '''<tt><</tt>''', '''<tt><=</tt>''', '''<tt>></tt>''', '''<tt>>=</tt>''', '''<tt>:</tt>'''). Например <tt>mfn&nbsp;<&nbsp;10</tt>.<br />
* [[Функции языка форматирования ИРБИС#Логические функции|Логические функции]], например <tt>p(v24)</tt>.<br />
* Логические выражения.<br />
<br />
Примеры логических выражений:<br />
{| class="standard"<br />
!Выражение||Значение<br />
|-<br />
|<tt>mfn=34</tt>||<tt>Истина</tt><br />
|-<br />
|<tt>not mfn=34</tt>||<tt>Ложь</tt><br />
|-<br />
|<tt>not (not mfn=34)</tt>||<tt>Истина</tt><br />
|-<br />
|<tt>v20 = 'люди'</tt>||<tt>Ложь</tt><br />
|-<br />
|<tt>v200 : 'люди'</tt>||<tt>Истина</tt><br />
|-<br />
|<tt>v200 : 'ЛЮДИ'</tt>||<tt>Истина</tt><br />
|-<br />
|<tt>v210^c.6 = 'Военное'</tt>||<tt>Ложь</tt><br />
|-<br />
|<tt>v210^c.7 = 'Военное'</tt>||<tt>Истина</tt><br />
|-<br />
|<tt>(v200 : 'люди') AND (v210^c.7= 'Военное')</tt>||<tt>Истина</tt><br />
|}<br />
<br />
==Функции==<br />
<br />
'''''Функция''''' вычисляет ''значение'' (называемое '''''значением функции''''' или '''''возвращаемым значением'''''), которое затем подставляется вместо функции при вычислении выражения.<br />
<br />
Функции могут иметь один или более ''аргументов'', которые необходимо задать для вычисления функции. Аргументы заключаются в скобки и разделяются запятыми.<br />
<br />
Аргументы могут быть следующих трех типов: [[#Понятие формата|формат]], [[#Числовые выражения|числовое выражение]], [[#Команды вывода полей|команда вывода поля]].<br />
<br />
Аргументом функции может быть произвольный формат, который может содержать любую разрешенную команду за исключением [[Функции языка форматирования ИРБИС#Функция REF(выражение, формат)|функции REF]], в которой формат так же используется в качестве аргумента. Функции передается не сам формат, а текст, полученный в результате вычисления формата.<br />
<br />
При использовании числового выражения в качестве аргумента функции, оно сначала вычисляется, и затем вычисленное значение передается функции.<br />
<br />
В качестве аргумента могут быть команды вывода поля или подполя. Не допускается использовать в команде спецификацию смещение/длина.<br />
<br />
Список функций с их описанием приведён в статье '''[[Функции языка форматирования ИРБИС]]'''.<br />
<br />
==Форматные выходы. UNIFOR==<br />
<br />
'''''Форматные выходы''''' – вид функций, реализованных на основе определённой технологии вне рамок языка форматирования, и предназначенных для выполнения таких операций по форматированию, которые не могут быть выполнены с помощью собственно языка форматирования. Технология '''''форматных выходов''''' подразумевает реализацию определённого стандартного интерфейса передачи данных для таких функций и возврата значений. В рамках языка форматирования '''''форматные выходы''''' являются строковыми функциями с форматом в качестве аргумента.<br />
<br />
Форматные выходы имеют следующий синтаксис в языке форматирования:<br />
&имя(формат)<br />
где:<br />
* '''<tt>&</tt>''' – идентификатор вызова форматного выхода,<br />
* '''<tt>имя</tt>''' – имя форматного выхода,<br />
* '''<tt>формат</tt>''' – аргумент.<br />
<br />
К использованию предлагается [[UNIFOR|форматный выход UNIFOR]], реализующий множество функций вне базовых рамок языка форматирования.<br />
<br />
==Команда IF==<br />
<br />
Команда '''IF''' предоставляет возможность строить контекстно-зависимые форматы, то есть форматы, способные изменять выходные значения в зависимости от содержимого форматируемой записи.<br />
<br />
Команда '''IF''' записывается следующим образом:<br />
'''IF''' '''''условие''''' '''THEN''' '''''формат-1''''' '''ELSE''' '''''формат-2''''' '''FI'''<br />
где:<br />
* '''''Условие''''' – [[#Логические выражения|логическое выражение]],<br />
* '''''формат-1''''' – формат, который вычисляется в том и только том случае, когда значением логического выражения является '''истина''',<br />
* '''''формат-2''''' – формат, который вычисляется в том и только том случае, когда значением логического выражения является '''ложь'''.<br />
<br />
Фраза '''ELSE''' '''''формат-2''''' не является обязательной, и может быть опущена. Ключевые слова '''IF''', '''THEN''' и '''FI''' обязательны всегда. '''''Формат-1''''' может быть опущен, если присутствует предложение '''ELSE''' (то есть если условие истинно, то ничего не будет выведено). Таким образом, команда '''IF''' может также принимать одну из следующих дополнительных форм:<br />
'''IF ''условие'' THEN ''формат-1'' FI'''<br />
'''IF ''условие'' THEN ELSE ''формат-2'' FI'''<br />
<br />
Поскольку нет никаких ограничений на команды, которые можно использовать в '''''формате-1''''' и '''''формате-2''''', то команды '''IF''' могут быть вложены друг в друга любое количество раз. Ключевое слово '''FI''', в таком случае, должно закрывать каждую команду '''IF''' (можно рассматривать '''IF''' и '''FI''' как пару скобок). Например:<br />
if p(v1) then v24 else if p(v2) and a(v3) then v5 fi fi<br />
<br />
Команда '''IF''' особенно полезна для создания обобщенных форматов в интегрированных базах данных, которые содержат различные типы записей. В этом случае надо иметь различные метки для каждого типа записи (должно быть поле, содержащее код, идентифицирующий тип записи). Таким образом, проверяя тип документа с помощью команды '''IF''', можно порождать в одном формате специфическое форматирование записей каждого типа.<br />
<br />
==Повторяющиеся группы==<br />
<br />
===Определение повторяющейся группы===<br />
<br />
Повторяющаяся группа состоит из набора команд форматирования, заключенных в круглые скобки. Смысл этих команд обычный, за исключением того, что обработка повторяющихся полей производится особым образом.<br />
<br />
Чтобы понять концепцию повторяющейся группы, надо, прежде всего, знать, каким образом система работает с повторяющимися полями. При отсутствии каких-либо дополнительных указаний система трактует все экземпляры (в том порядке, в котором они находятся в записи) как единую строку текста.<br />
<br />
Повторяющаяся группа изменяет порядок обработки системой экземпляров повторяющихся полей таким образом, что происходит последовательная обработка отдельно каждого экземпляра повторяющегося поля.<br />
<br />
Когда система обнаруживает скобку, открывающую повторяющуюся группу, происходит следующее:<br />
# Счетчик экземпляров (повторений) устанавливается в единицу.<br />
# Заключенный в скобки формат обрабатывается таким образом, что команды вывода полей выводят только те экземпляры повторяющихся полей, которые соответствуют текущему значению счетчика экземпляров.<br />
# Если в процессе текущего просмотра всей повторяющейся группы ничего не выводится (то есть в пределах группы больше не оказалось экземпляров повторяющегося поля), то процесс обработки повторяющейся группы завершается. В противном случае значение счетчика экземпляров увеличивается на 1 и повторяется выполнение шагов 2 и 3.<br />
<br />
Отметим еще раз, что все команды форматирования внутри повторяющейся группы обрабатываются последовательно экземпляр за экземпляром (как объяснялось выше), включая, таким образом, и поля, указываемые в команде IF, выражениях и функциях, а также строковых функциях, используемых как команды. Поэтому нежелательно использовать безусловные литералы в повторяющейся группе. И если все же безусловные литералы используются, то они будут выдаваться на один раз больше, чем это надо.<br />
<br />
===Использование повторяющейся группы===<br />
<br />
В подавляющем большинстве случаев для правильной обработки повторяющихся полей достаточно использование простых команд форматирования, таких, например, как команда режима вывода или повторяющихся литералов, как это показано ниже:<br />
{| class="standard"<br />
!Формат||Выходные данные<br />
|-<br />
|<tt>mpl,v70</tt>||<tt>Grieve, B.J.Went, F.W.</tt><br />
|-<br />
|<tt>mdl,v70</tt>||<tt>Grieve, B.J. Went, F.W.</tt><br />
|-<br />
|<tt><nowiki>v70+|; |</nowiki></tt>||<tt>Grieve, B.J.; Went, F.W.</tt><br />
|}<br />
<br />
Однако, возможны случаи, когда появляется необходимость отформатировать повторяющиеся поля другим способом. Например, иногда необходимо форматировать каждый экземпляр поля с новой строки, чего можно достигнуть только с использованием повторяющейся группы, как это показано ниже:<br />
{| class="standard"<br />
!Формат||Выходные данные<br />
|-<br />
|<tt>v675/v200^a</tt>||<tt>623.746623.746(092) Сухой П.О.<br>Конструктор Сухой. Люди и самолеты</tt><br />
|-<br />
|<tt>(v675/),v200^a</tt>||<tt>623.746<br>623.746(092) Сухой П.О.<br>Конструктор Сухой. Люди и самолеты</tt><br />
|}<br />
<br />
В первом случае команда перехода на новую строку (/) выполняется после форматирования всех экземпляров поля 675, а во втором случае она выполняется после каждого экземпляра поля.<br />
<br />
Пример ниже иллюстрирует использование повторяющихся полей с подполями (предполагается, что запись содержит два экземпляра поля 20). В первом формате использование повторяющейся группы дает возможность вывести различные подполя каждого экземпляра повторяющегося поля в виде таблицы. Второй формат аналогичен первому, но не содержит повторяющейся группы.<br />
<br />
Если нужно вывести литерал перед данными, создаваемыми повторяющейся группой, то можно использовать безусловный или условный литерал. Отметим, однако, что условный литерал должен быть связан с командой вывода поля (повторяющаяся группа не является командой вывода поля). Для этой цели необходимо использовать команды фиктивного вывода поля.<br />
<br />
Содержимое записи:<br />
210 ^aNew York^сMcGraw Hill^d1988<br />
210 ^aLondon^cAcademic Press^d1975<br />
Формат 1:<br />
/(v210^a,c11,v210^c,c30,v210^d/)<br />
Вывод:<br />
New York McGraw Hill 1988<br />
London Academic Press 1975<br />
Формат 2:<br />
/v210^a,c11,v210^c,c30,v210^d/<br />
Вывод:<br />
New YorkLondon<br />
McGraw HillAcademic Press<br />
19881975<br />
<br />
Для избежания недоразумений, связанных с тонкостями использования повторяющейся группы, рекомендуется воспользоваться следующим типовым примером:<br />
(if p(v20) then ... fi)<br />
где вместо троеточия следует поставить свои команды, которые будут выполнены на каждое повторение поля 20.<br />
<br />
Если существуют дополнительные условия на вывод, то их также следует помещать в тело условного оператора в приведённом типовом примере.<br />
<br />
Например, вывод всех повторений, кроме первого, можно сделать так:<br />
(if p(v20) then if &uf('+90') <> '1' then ... fi fi)<br />
<br />
Повторяющиеся группы не могут быть вложенными (то есть повторяющаяся группа не может содержать другую повторяющуюся группу), за исключением случая, когда внутренняя группа содержится в аргументе формата функции REF. Так, например, допустимым является следующий формат:<br />
(v10,ref(val(v20),v10,(v20,v30)))<br />
<br />
но приведенный ниже формат является недопустимым, что вызовет сообщение об ошибке:<br />
(v10,(v20,v30))<br />
<br />
Использование повторяющейся группы является обязательным в следующих случаях:<br />
* Использование повторяющегося поля в качестве аргумента функции L.<br />
* Первый аргумент функции REF ссылается на повторяющееся поле.<br />
<br />
Также нужно учитывать возможность употребления повторяющейся группы, когда повторяющееся поле используется в логическом выражении команды IF.<br />
<br />
==Глобальные переменные==<br />
<br />
Для записи и чтения глобальных переменных предназначены [[UNIFOR#Функции для работы с глобальными переменными|специальные форматные выходы]].<br />
<br />
Для вывода значения глобальной переменной предназначена команда '''g''', после которой должен быть записан номер глобальной переменной.<br />
<br />
Например, команда<br />
g1<br />
выводит значение первой глобальной переменной.<br />
<br />
Команда '''g''' в некоторых случаях может служить краткой альтернативой форматным выходам для чтения глобальных переменных.<br />
<br />
Об области видимости глобальных переменных см. в [[#Контекст форматёра|подразделе ''Контекст форматёра'']].<br />
<br />
==Вложенные форматы==<br />
<br />
Механизм вложенных форматов позволяет избегать дублирования программного кода.<br />
<br />
В качестве ссылки на вложенный формат используется имя файла формата без расширения, обозначенное символами ASCII с кодами <tt>1C</tt> (File Separator) и <tt>1D</tt> (Group Separator). <tt>1C</tt> указывают непосредственно перед именем формата, а <tt>1D</tt> – непосредственно после.<br />
<br />
В процессе интерпретации вместо таких ссылок на файлы вложенных форматов вставляется их содержимое.<br />
<br />
Альтернативным способом выполнения файла форматов является использование [[UNIFOR|форматного выхода <tt>&uf('6…</tt>]].<br />
<br />
==Использование команд (тэгов) RTF и HTML==<br />
<br />
В форматах допускается использование команд RTF, обеспечивающих представление неплоских текстов, содержащих шрифтовые выделения, горизонтальную и вертикальную верстку и т.п. Форматы, в которых используются команды RTF, называются RTF-форматы.<br />
<br />
Команды RTF вводятся в формат в виде литералов.<br />
<br />
Если предполагается, что формат будет содержать RTF команды, то он должен быть целиком заключен в фигурные скобки:<br />
'{'формат '}'<br />
<br />
Все команды RTF начинаются с символа \ (обратный слеш).<br />
<br />
Любая команда RTF должна заканчиваться знаком пробела, или непосредственно за ней может следовать другая команда RTF.<br />
Перечень основных команд RTF:<br />
{| class="standard"<br />
!Команда||Назначение<br />
|-<br />
|<tt>\par</tt>||Начало нового параграфа (абзаца)<br />
|-<br />
|<tt>\liNNN</tt>||Левый отступ для всех строк параграфа – NNN (в пунктах)<br />
|-<br />
|<tt>\riNNN</tt>||Правый отступ для всех строк параграфа – NNN (в пунктах)<br />
|-<br />
|<tt>\fiNNN</tt>||Левый отступ для первой строки параграфа – NNN (в пунктах)<br />
|-<br />
|<tt>\pard</tt>||Начало форматирования нового абзаца, все предыдущие команды форматирования параграфа отменяются<br />
|-<br />
|<tt>\fsNNN</tt>||Размер шрифта – NNN (удвоенный размер в пунктах)<br />
|-<br />
|<tt>\ul \ul0</tt>||Начало и конец подчеркивания<br />
|-<br />
|<tt>\i \i0</tt>||Начало и конец курсива<br />
|-<br />
|<tt>\b \b0</tt>||Начало и конец жирности<br />
|-<br />
|<tt>\tab</tt>||Табуляция<br />
|-<br />
|<tt>\qr</tt>||Правое выравнивание строк<br />
|-<br />
|<tt>\ql</tt>||Левое выравнивание строк<br />
|-<br />
|<tt>\qc</tt>||Цетральное выравнивание строк<br />
|-<br />
|<tt>\qj</tt>||Равномерное выравнивание строк<br />
|-<br />
|<tt>\page</tt>||Переход на новую страницу<br />
|-<br />
|<tt>\txNNN</tt>||Позиция табуляция – NNN (в пунктах)<br />
|}<br />
<br />
В форматах, содержащих команды RTF, неприменимы [[#Команды горизонтального и вертикального размещения|команды вертикальной верстки]].<br />
<br />
В форматах показа могут использоваться HTML-теги в качестве альтернативы RTF-командам. Совместное использование RTF-команд и HTML-тегов недопустимо.<br />
<br />
Форматы, в которых используются HTML-теги, называются HTML-форматы.<br />
<br />
HTML-теги вводятся в формат в виде литералов.<br />
<br />
Если требуется явно определить формат как HTML-формат, необходимо в самом начале формата указать фиктивный тэг:<br />
'</>'<br />
<br />
В форматах, содержащих HTML-теги, неприменимы [[#Команды горизонтального и вертикального размещения|команды вертикальной верстки, а также команды Xn и Cn]].<br />
<br />
Предлагаются дополнительные возможности при адресации ресурсов ИРБИС в тегах <A HREF=…> и <IMG SRC=…>:<br />
<A HREF="IRBIS:N,описание_ссылки"><br />
где:<br />
* N – число, обозначающее вид ссылки. Принимает значения 0, 1, 2, 3.<br />
** Для значений 0, 1, 2 – структура и смысл ссылок аналогичен ссылкам, формируемым с помощью форматного выхода &unifor(‘+I..). Важное замечание: форматный выход &unifor(‘+I..) ПРИМЕНИМ ТОЛЬКО В RTF-форматах (т.е. в форматах с HTML-тэгами он не применим).<br />
** Значение 3 определяет ссылку на внешний объект через относительную адресацию в рамках системы ИРБИС:<br />
<A HREF="IRBIS:3,path,dbname,filename"><br />
где:<br />
* path – определяет относительный путь к внешнему объекту в рамках ИР-БИС и принимает значения: 0 – основная директория системы (для ИРБИС32 – та, где находятся исполняемые модули; для ИРБИС64 – та, где находятся ис-полняемые модули сервера); 1 – общая директория баз данных (по умолчанию \DATAI); 10 – директория конкретной БД;<br />
* dbname – имя БД (имеет смысл только при path=10). По умолчанию – предполагается текущая БД;<br />
* filename – имя файла внешнего объекта.<br />
<br />
<IMG SRC="IRBIS:path,dbname,filename"><br />
где параметры path, dbname, filename имеют тот же смысл, что указано выше, и определяют ссылку на графический ресурс (картинку) в рамках ИРБИС.<br />
<br />
Реализуется специальная возможность для отображения штрих-кодов в HTML-форматах, а именно:<br />
<IMG SRC="IRBIS:!!ШТРИХ_КОД!!"><br />
<br />
==Форматы для формально-логического контроля (ФЛК)==<br />
<br />
Для формально-логического контроля данных (как на уровне поля, так и документа в целом) применяются специальные форматы. Форматы для ФЛК используются следующим образом:<br />
* форматированию подвергается контролируемый документ;<br />
* первый символ результата форматирования определяет результат ФЛК, а именно:<br />
** 0 – означает положительный результат контроля;<br />
** 1 – означает отрицательный результат и обнаруженные ошибки считаются непреодолимыми, т.е. подлежат обязательному устранению;<br />
** 2 – означает отрицательный результат, но при этом ошибки считаются преодолимыми, т.е. их можно не исправлять.<br />
* остальной результат форматирования (начиная со второго символа) в случае отрицательного контроля выдается пользователю в качестве сообщения.<br />
<br />
Собственно форматы ФЛК, как правило, содержат команды IF. Многочисленные примеры таких форматов находятся в директории БД IBIS.<br />
<br />
==Форматы с переменными метками==<br />
<br />
В некоторых режимах работы системы применяются форматы, в которых используются, так называемые, переменные метки (например, при вводе данных через словарь – т.н. форматы для переноса данных). [[Сценарии поиска#Поиски по словарю|Исходным для таких форматов обязательно является термин словаря.]]<br />
<br />
Переменные метки обозначаются в таких форматах в виде *** (три символа ''звёздочка''). Форматы с переменными метками используются следующим образом:<br />
* Определяется первая [[Таблица выбора полей#ТВП для инвертированного файла|индексная ссылка]] для исходного термина: а именно, соответствующие номер документа (MFN), метка поля (TAG) и повторение (OCC).<br />
* Все переменные метки в формате заменяются на значение найденной метки поля (TAG) и форматированию подвергается документ с найденным номером (MFN).<br />
* В качестве результата форматирования берется строка с номером OCC (нумерация начинается с 1). Если нет строки с таким номером, результатом форматирования является пустая строка.<br />
<br />
Примеры форматов с переменными метками находятся в директории БД IBIS.<br />
<br />
==Ссылки==<br />
<br />
См. также:<br />
* [[Базы данных ИРБИС]]<br />
* [[Операторы языка форматирования ИРБИС]]<br />
* [[Функции языка форматирования ИРБИС]]<br />
* [[UNIFOR]]<br />
* <tt>[[IRBIS64.dll]]</tt><br />
* [[Язык запросов ИРБИС]]<br />
<br />
Источники информации:<br />
* [[Общее описание системы ИРБИС64]]<br />
<br />
[[Категория:Язык форматирования системы ИРБИС]]<br />
[[Категория:Анонсированные статьи]]</div>Sokvhttp://wiki.elnit.org/index.php?title=%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F_%D0%92%D0%B5%D0%B1-%D0%98%D0%A0%D0%91%D0%98%D0%A1&diff=2452Технология Веб-ИРБИС2016-03-18T16:17:01Z<p>Sokv: /* Ссылки */</p>
<hr />
<div>Технология '''''Веб-ИРБИС''''' служит для создания Веб-приложений для работы с базами данных ИРБИС.<br />
<br />
Данная технология реализована в виде одноимённого [[Веб-ИРБИС|'''''программного продукта – Веб-ИРБИС''''']].<br />
<br />
==Веб-шлюз ИРБИС==<br />
<br />
Программный модуль ''Веб-шлюз ИРБИС'' обеспечивает обработку клиентских запросов.<br />
<br />
''Веб-шлюз ИРБИС'' является шлюзом CGI.<br />
<br />
Запрос может осуществляться по методу POST или GET.<br />
<br />
===Общая схема работы Веб-шлюза ИРБИС===<br />
<br />
Последовательность операций шлюза:<br />
* Чтение параметров INI файла<br />
* Препроцессинг<br />
** Формальный контроль правильности параметров<br />
** Интерпретация поискового запроса<br />
** Авторизация<br />
** Выполнение скрипта защиты<br />
** Повторная авторизация<br />
* Выполнение поиска<br />
* Формирование ответа (объединение и обработка фреймов)<br />
* Определение HTTP заголовков на основе INI файла<br />
* Возврат ответа<br />
<br />
В случае возникновения ошибки выполнения или превышения времени обработки запроса шлюз возвращает ошибку (error.html).<br />
<br />
====Препроцессинг====<br />
<br />
=====Скрипт-защита=====<br />
<br />
Формат скрипта защиты выполняет две функции: 1) проверку поступивших параметров запроса и защиту от взлома 2) обработку и дополнение параметров.<br />
<br />
Первая строка, сформированная форматом срипт-защиты, определяет общий результат – если это 0 или файлом не было возвращено никаких значений – скрипт-защита определила ошибку, если результат 1 или файлом были возвращены другие ненулевые значения – ошибки нет. В первом случае шлюз возвращает error.html, в последнем случае шлюз читает остальные строки формата и изменяет параметры запроса на новые.<br />
<br />
Например, строка ‘SCRIPT_DONE=YES’/ задаёт параметру SCRIPT_DONE значение YES.<br />
<br />
=====Авторизация пользователя=====<br />
<br />
Авторизация даёт возможность заказывать литературу, просматривать формуляр и редактировать корзину заказов.<br />
<br />
Для авторизации используется база RDR. Авторизация происходит по идентификатору и, если в пользовательском запросе задан параметр Z21FLAGID=1, – по фамилии. После авторизации шлюз выполняет шифрование идентификатора, и зашифрованный идентификатор передаётся при переходе по страницам.<br />
<br />
====Инициализация параметров====<br />
<br />
После поступления клиентского запроса осуществляется инициализация параметров веб-шлюза на основе параметров CGI.<br />
<br />
Обрабатываемый шлюзом набор параметров определяется конфигурационным файлом Веб-шлюза ИРБИС.<br />
<br />
Эти параметры доступны в контексте фреймов.<br />
<br />
Параметры используются, в том числе, для отслеживания состояния веб-страницы. В ответ на HTTP-запрос клиента (обычно – в генерируемую html-страницу, передаваемую клиенту) может включить набор пользовательских параметров вместе с их значениями, полученными в запросе, для чего есть специальная команда.<br />
<br />
Отслеживание состояния осуществляется с использованием следующих этапов: 1) данные передаются на веб-шлюз в виде параметров запроса; 2) веб-шлюз передаёт данные вместе со сформированной страницей в скрытых полях форм HTML.<br />
<br />
====Выполнение команды====<br />
<br />
Затем шлюз переходит к выполнению команды. Команда соответствует переданному параметру C21COM.<br />
<br />
В контексте выполнения команды используются полученные параметры.<br />
<br />
Для каждой команды есть набор '''основных параметров''', логика использования которых предопределена самим веб-шлюзом.<br />
<br />
К основным параметрам шлюза относятся:<br />
* <tt>C21COM</tt> – команда, которую должен выполнить веб-шлюз.<br />
* <tt>I21DBN</tt> – имя [[Профили|профиля]]. Веб-шлюз ИРБИС в соответствии с именем профиля определяет набор [[Фреймы|фреймов]], из которых составит ответ клиенту. Веб-шлюз ИРБИС ищет названия фреймов в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файле irbis_server.ini]] в секции, название которой соответствует значению параметра <tt>I21DBN</tt> (подробнее в разделе [[#Роль фреймов в работе веб-шлюза ИРБИС|Роль фреймов в работе веб-шлюза ИРБИС]]).<br />
* <tt>P21DBN</tt> – имя базы данных.<br />
* <tt>Z21ID</tt> – значение параметра авторизации.<br />
<br />
Кроме '''основных''', есть '''пользовательские параметры''' – все остальные параметры.<br />
<br />
Особенность пользовательских параметров в том, что их набор и использование полностью могут быть определены (переопределены) пользователями системы ИРБИС:<br />
* Определение параметров даётся в конфигурационном файле Веб-шлюза ИРБИС.<br />
* Параметры доступны в виде виртуальных полей на языке форматирования в контексте фреймов.<br />
<br />
====Ответ веб-шлюза ИРБИС клиенту====<br />
<br />
Порядок формирования ответа веб-шлюза ИРБИС клиенту зависит от команды.<br />
<br />
=====Ответ с использованием фреймов=====<br />
<br />
Для команд, представленных в таблице, осуществляется генерация ответа с использованием технологии выбора и обработки фреймов.<br />
<br />
Обычно это динамически формируемая веб-страница.<br />
<br />
'''Таблица.''' Команды веб-шлюза ИРБИС.<br />
{|<br />
|<br />
{| class="standard"<br />
!Значение параметра <tt>C21COM</tt>||Описание команды||Соответствующий параметр в <tt>irbis_server.ini</tt><br />
|-<br />
|'''F'''||'''''показ''''' – команда показа страницы||ShowFrames<br />
|-<br />
|'''S'''||'''''поиск''''' – команда выполнения и показа результатов поиска||SearchFrames<br />
|-<br />
|'''T'''||'''''словарь''''' – команда показа терминов словаря||DictionryFrames<br />
|-<br />
|'''Z'''||'''''заказ''''' – команда отбора записей в корзину заказов||ZakazFrames<br />
|-<br />
|'''R'''||'''''запись''''' – команда редактуры записей||RecUpdateFrames<br />
|}<br />
|}<br />
<br />
Выбор набора фреймов зависит от: команды (параметр C21COM) и профиля (параметр I21DBN).<br />
<br />
Возможные наборы фреймов предварительно сконфигурированы и указаны в конфигурационном файле <tt>irbis_server.ini</tt>.<br />
<br />
Откуда шлюз и считывает нужный набор, в зависимости от параметров (C21COM и I21DBN).<br />
<br />
Каждой команде веб-шлюза ИРБИС соответствует имя параметра в файле <tt>irbis_server.ini</tt> (см. таблицу ''Команды веб-шлюза ИРБИС'').<br />
<br />
=====Отправка клиенту ресурсного файла=====<br />
<br />
Для команд, представленных в таблице, отправка клиенту ресурсного файла.<br />
<br />
'''Таблица.''' Команды веб-шлюза ИРБИС.<br />
{|<br />
|<br />
{| class="standard"<br />
!Значение параметра <tt>C21COM</tt>||Описание команды<br />
|-<br />
|'''E'''||'''''экспорт''''' – команда выгрузки записей<br />
|-<br />
|'''2'''||'''''файл''''' – команда чтения внешнего объекта<br />
|-<br />
|'''4'''||'''''скачать''''' – команда заимствования записи<br />
|}<br />
|}<br />
<br />
===Команда поиска – S===<br />
<br />
'''Пример поиска всех страниц одного текста PDF'''<br />
<br />
Здесь мы предполагаем, что:<br />
* Работаем в контексте базы данных IBIS.<br />
* Поисковое выражение <tt>TXT=2__$</tt> позволяет найти все страницы файла <tt>2.pdf</tt>.<br />
<br />
Чтобы создать произвольный запрос, не связанный с существующим функционалом системы, можно создать новый профиль EXAMPLE1. Для этого в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|конфигурационном файле веб-шлюза ИРБИС irbis server.ini]] нужно добавить секцию EXAMPLE1<br />
[EXAMPLE1]<br />
FRAMES=C:\irbis\irbis_plus\IRBIS64\DATAI\frames_15_plus\FullText\<br />
ShowFrames=<br />
SearchFrames=RESULT<br />
DBNAME=IBIS<br />
где значение параметра FRAMES должно соответствовать местонахождению фреймов.<br />
<br />
Для команды поиска порядок формирования ответа определяется параметром SearchFrames. И запись<br />
SearchFrames=RESULT<br />
означает, что при формировании Веб-шлюзом ответа на команду поиска не участвуют фреймы, участвует только формат, который будет указан в запросе.<br />
<br />
В качестве этого формата предлагается создать файл '''<tt>example1.pft</tt>''' со следующим содержимым<br />
<nowiki>mfn,/,</nowiki><br />
Этот формат выводит список MFN найденных записей.<br />
<br />
Теперь всё готово, чтобы выполнить запрос<br />
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<br />
<br />
В основных полях мы указываем команду поиска (S), базу данных IBIS, профиль EXAMPLE1, идентификатор пользователя.<br />
<br />
Поле S21All содержит запрос на языке запросов ИРБИС. Если его декодировать из кодировки URL, то он будет выглядеть так<br />
<nowiki>S21All=<.>TXT=2__$<.></nowiki><br />
где точка в угловых скобках заменяет двойную кавычку, являющуюся ограничителем запроса в [[Язык запросов ИРБИС|языке запросов ИРБИС]], то есть указанный запрос следует читать как<br />
"TXT=2__$"<br />
<br />
Формат вывода найденных записей, который предлагалось подготовить выше, указан в параметре S21FMT, без расширения.<br />
<br />
Результатом выполнения этого запроса будет обещанный список mfn, например<br />
0000000002<br />
0000000006<br />
0000000013<br />
0000000018<br />
<br />
Можно усложнить запрос, ограничив вывод порцией из 2 результатов, начиная со 2-го (параметры S21CNR и S21STN)<br />
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<br />
<br />
Результатом будет<br />
0000000006<br />
0000000013<br />
<br />
Можно усложнить формат вывода найденных записей '''<tt>example1.pft</tt>''', добавив информацию о количестве найденных, а также введённых порционных ограничениях<br />
<nowiki>mfn,'; кол-во найденных = ',v1001,'; с какого номера начать = ',v2223,'; размер порции = ',v2224,/,</nowiki><br />
где 1001, 2223 и 2224 – виртуальные поля, в которые шлюз помещает данные в соответствии с [[таблицей виртуальных полей шлюза]].<br />
<br />
Все данные, которые шлюз принял в виде параметров, попадают в виртуальные поля в соответствии правилами, заданными в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файле irbis_server.ini]]. Например, параметру S21CNR соответствует метка 2224, параметру S21STN – 2223.<br />
<br />
Результатом будет<br />
0000000006; кол-во найденных = 4; с какого номера начать = 2; размер порции = 2<br />
0000000013; кол-во найденных = 4; с какого номера начать = 2; размер порции = 2<br />
<br />
В последнем примере количество найденных и данные о порции повторяются с каждым результатом поиска, что является избыточным.<br />
<br />
Такой избыточности позволяют избежать применение [[фреймов]].<br />
<br />
Создадим файл example1.frm (его местоположение должно соответствовать параметру FRAMES в профиле) со следующим содержимым<br />
Вывод через фрейм... <br />
<?! 'кол-во найденных = ',v1001,'; с какого номера начать = ',v2223,'; размер порции = ',v2224,/, ?><br />
<br />
Чтобы задействовать этот фрейм, в описании профиля можно изменить значение параметра SearchFrames следующим образом:<br />
SearchFrames=example1.frm,RESULT<br />
что следует понимать так, что шлюз вернёт результат выполнения команды поиска, составленный из:<br />
* результата выполнения фрейма example1.frm<br />
* результатов работы формата, который отработает для каждого результата поиска (обозначается словом RESULT).<br />
<br />
Кроме того, чтобы измежать дублирующихся данных, в '''<tt>example1.pft</tt>''' оставим только вывод MFN:<br />
mfn,/,<br />
<br />
Результатом будет<br />
Вывод через фрейм... кол-во найденных = 4; с какого номера начать = 2; размер порции = 2<br />
0000000006<br />
0000000013<br />
<br />
===Команда показа терминов словаря – T===<br />
<br />
'''Пример команды показа терминов словаря'''<br />
<br />
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&<br />
<br />
где:<br />
* <tt>C21COM=T</tt> определяет команду,<br />
* <tt>I21DBN=IBIS</tt> базу данных,<br />
* <tt>Z21ID=1500323880383212</tt> идентификатор читателя в зашифрованном виде,<br />
* <tt>T21PRF=KT=</tt> префикс словаря,<br />
* <tt>T21TRM=a</tt> – требование терминов, начинающихся на <tt>a</tt>.<br />
<br />
Пример возврата:<br />
A20040830ARUSY|1<br />
A20041017ABELY|1<br />
A20041118ARUSY|1<br />
A2H|2<br />
A540|9<br />
A54001|7<br />
A550UTILIZATION|1<br />
AACDEMY|1<br />
AASL|2<br />
AASLPUBSANDJOURNALS|2<br />
<br />
===Добавление пользовательского параметра===<br />
<br />
Добавление пользовательского параметра осуществляется в несколько шагов:<br />
* '''добавление ''пользовательского параметра'' в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файл инициализации шлюза <tt>irbis_server.ini</tt>]]'''<br />
: Необходимо добавить описание нового ''пользовательского параметра'' в настроечный файл <tt>irbis_server.ini</tt>, задав имя и метку параметра. Для этого в секции <tt>[PARAMETRS]</tt> используются ''параметры ini файла'' <tt>PARNAME_</tt> и <tt>PARTAG_</tt> (не стоит путать термины ''пользовательские параметры'' веб-шлюза и ''параметры ini файла''), где вместо знака подчёркивания ставится номер пользовательского параметра по порядку, например:<br />
PARNAME2=C21COM<br />
PARTAG2=2222<br />
: В этом примере мы видим описание второго по порядку из определённых в секции <tt>[PARAMETRS]</tt> параметров: имя параметра <tt>C21COM</tt>, метка параметра <tt>2222</tt>. Имя и метка параметров должны быть уникальными. После того как описание ''пользовательского параметра'' добавлено необходимо изменить значение параметра <tt>PARCOUNT</tt> в секции <tt>[PARAMETRS]</tt>, его значение должно быть равно порядковому номеру последнего описания ''пользовательского параметра''.<br />
: ''Примечание:'' обратите внимание, что в файле <tt>irbis_server.ini</tt> хранятся описания не только пользовательских параметров, а присутствует также описания предустановленных параметров.<br />
* '''использование в файлах <tt>.frm</tt> команд <tt><!FORMAT=INSERT_ALL_PARAMETERS></tt> и <tt><!FORMAT=INSERT_ALL_PARAMETERS_IN_QUERY></tt>'''<br />
: Команда <tt><!FORMAT=INSERT_ALL_PARAMETERS></tt> обеспечивает вставку в код HTML-страницы всех непустых переданных веб-шлюзу параметров в виде скрытых элементов формы, например:<br />
<input type="hidden" name="PARAM_NAME" value="PARAM_VALUE"><br />
: Команда <tt><!FORMAT=INSERT_ALL_PARAMETERS_IN_QUERY></tt> вставляет в код HTML-страницы гиперссылку, содержащую все переданные веб-шлюзу параметры.<br />
<br />
===Система команд Веб-шлюза ИРБИС===<br />
<br />
Система ''команд'' Веб-шлюза ИРБИС позволяет задать собственный набор фреймов и порядок их объединения для каждой задачи. Для разных задач предусмотрены разные команды, например: для страницы приглашения к поиску, результата поиска, отбора записей в корзину заказов и т.д.<br />
<br />
==Обработка фреймов==<br />
<br />
В общем случае, веб-страница формируется путём объединения (''склеивания'') следующих частей:<br />
* ''заголовочной'' и ''подвальной'' частей, формируемых при помощи ''фреймов'' и<br />
* ''тела'' страницы, формируемого при помощи [[Язык форматирования системы ИРБИС#Понятие формата|''формата'']], который отрабатывает на наборе записей базы данных (соответствующих запросу пользователя).<br />
<br />
===Фрейм как язык разметки===<br />
<br />
Фрейм представляет собой текстовый файл, содержимое которого передаётся клиенту (в веб браузер), который также может содержать вставки, которые будут обработаны определённым образом перед передачей клиенту.<br />
<br />
Предусмотрены вставки следующих видов:<br />
* вставка на языке форматирования ИРБИС,<br />
* вложенный фрейм.<br />
<br />
'''''Вставка на языке форматирования''''' обозначается следующим образом<br />
<br />
<!FORMAT<br />
<br />
'''Пример:'''<br />
<br />
<nowiki><!FORMAT=if v3409='' then 'value=""' else 'value=','"',v3409,'"',fi></nowiki><br />
<br />
Если вставка на языке форматирования содержит символы, кодирующиеся в UTF-8 более чем одним байтом (например, кириллицу), то формат обязательно должен начинаться с восклицательного знака. Это связано с тем, что формат в кодировке UTF-8 должен предваряться восклицательным знаком, а все фреймы храняться именно в кодировке UTF-8.<br />
<br />
'''Пример:'''<br />
<br />
<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><br />
<br />
Пример вложенного фрейма:<br />
<br />
<!FORMAT=if &uf('IMAIN,SHOW_DUBLIN_CORE,0') <> '0' then /'<!FILE=Dublin_Core.frm>' fi><br />
<br />
Предусмотрен '''''упрощённый синтаксис вставки на языке форматирования''''':<br />
<?!if p(v2225) then 'true' fi ?><br />
<br />
===Пример последовательности действий Веб-шлюза ИРБИС при формировании веб-страницы в ответ на запрос===<br />
<br />
Веб-шлюз ИРБИС при получении команд '''F''', '''S''', '''T''', '''Z''', '''R''' выполняет следующую последовательность действий:<br />
* Веб-шлюз получил запрос. Запрос содержит параметры <tt>C21COM</tt>, <tt>I21DBN</tt> и другие.<br />
* В файле <tt>irbis_server.ini</tt> веб-шлюз находит секцию, имя которой соответствует значению параметра <tt>I21DBN</tt>. Иными словами: с одной стороны, в качестве значения параметра <tt>I21DBN</tt> указывается имя профиля, с другой стороны, для каждого профиля в файле <tt>irbis_server.ini</tt> должна содержаться секция, имя которой совпадает с именем профиля.<br />
* В указанной секции файла <tt>irbis_server.ini</tt> веб-шлюз находит значение параметра, соответствующего указанной в параметре <tt>C21COM</tt> команде (см. таблицу ''Команды веб-шлюза ИРБИС''). Полученное значение должно представлять собой список фреймов.<br />
* Фреймы обрабатываются, и результат, представляющий собой HTML-страницу, отправляется клиенту в качестве ответа.<br />
<br />
===Примеры перехода пользователя по страницам Веб-ИРБИС===<br />
<br />
Пример запроса начальной страницы:<br />
<br />
http://localhost:8080/cgi-bin/irbis64r_15_plus/cgiirbis_64_ft.exe?C21COM=F&I21DBN=IBIS_FULLTEXT&P21DBN=IBIS&Z21ID=&S21CNR=5<br />
<br />
где указаны:<br />
* команда шлюза F (''показ страницы'')<br />
* имя профиля IBIS_FULLTEXT<br />
* база данных IBIS<br />
* авторизация не осуществлялась<br />
<br />
Параметр S21CNR не обязателен.<br />
<br />
При авторизации запрос приобретает следующий вид<br />
<br />
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<br />
<br />
где указаны:<br />
* команда шлюза F (''показ страницы'')<br />
* имя профиля AUTHOR<br />
* база данных IBIS<br />
* параметры авторизации: Z21FLAGID, фамилия читателя Z21FAMILY и идентификатор читателя Z21ID<br />
<br />
При поиске по слову "библиотека" запрос приобретает следующий вид<br />
<br />
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<br />
<br />
где указаны:<br />
* команда шлюза S (''поиск'')<br />
* имя профиля IBIS_FULLTEXT<br />
* база данных IBIS<br />
* параметры авторизации: Z21ID<br />
* текущий запрос SEARCH_STRING и предыдущий запрос FT_S21STR (одинаковые)<br />
* USES21ALL=1 (использовать параметр S21ALL, применяется в поиске связных)<br />
* S21CNR=5 (порция при показе найденных)<br />
* S21REF=10 (для правильного формирования ссылок на страницы с результатами поиска)<br />
* C21COM1<br />
* FT_PREFIX<br />
* S21FMT=briefHTML_ft<br />
* AVT_S21P03=A%3D<br />
* AVT_S21P02=1<br />
* AVT_S21LOG=1<br />
* NAME_S21P03=T%3D<br />
* NAME_S21P02=1<br />
* NAME_S21LOG=1<br />
* UDC_S21P03=U%3D<br />
* UDC_S21P02=0<br />
* UDC_S21LOG=1<br />
* IZD_S21P03=M%3D<br />
* IZD_S21P02=1<br />
* IZD_S21LOG=1<br />
* DAT_S21P03=G%3D<br />
* DAT_S21P02=1<br />
* DAT_S21LOG=5<br />
* P21DBN=IBIS<br />
* FT_S21LOG=4<br />
* FT_S21P03=K%3D<br />
* FT_S21P01=3<br />
* S21STN=1<br />
* S21COLORTERMS=1<br />
<br />
==Ссылки==<br />
<br />
См. также:<br />
* [[Веб-ИРБИС]]<br />
* [[Установка Веб-шлюза Ирбис 64]]<br />
* [[Настройка и обслуживание Веб-ИРБИС]]<br />
* [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini]]<br />
* [[Язык форматирования системы ИРБИС]]<br />
* [[Язык запросов ИРБИС]]<br />
<br />
[[Категория:Технология Веб-ИРБИС]]<br />
[[Категория:ИРБИС 64]]</div>Sokvhttp://wiki.elnit.org/index.php?title=%D0%92%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%BE%D0%B2_%D0%B2_%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%BE%D0%B2%D1%83%D1%8E_%D0%B1%D0%B0%D0%B7%D1%83_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&diff=2451Включение текстов в полнотекстовую базу данных2016-03-09T09:50:41Z<p>Sokv: </p>
<hr />
<div>Включение текстов в базу и удаление текстов из базы приводят к изменению базы данных, при этом сами файлы полных текстов остаются в неизменном виде на файловой системе.<br />
<br />
==Правила заполнения полей полнотекстовой базы данных при включении текста в базу==<br />
<br />
'''Порядок извлечения текста и сохранение текста в 27 поле полнотекстовой базы'''<br />
<br />
Извлечение полного текста из внешнего файла обычно осуществляется однократно. При этом извлечённый текст сохраняется в поле 27. Исключение составляют те случаи, когда текст не был успешно извлечён.<br />
<br />
Поле 27 используется для хранения полного текста непосредственно в базе данных в целях оптимизации: чтобы избегать повторного извлечения текста из внешнего файла.<br />
<br />
Данное поле используется только для ссылок на страницы полного текста (страницы PDF и DJVU файлов).<br />
<br />
Каждое предложение текста сохраняется в отдельном повторении данного поля.<br />
<br />
Запись полного текста в данное поле осуществляется только в том случае, если выполняются следующие условия:<br />
* поле отсутствует (то есть, не было записано ранее при создании словаря),<br />
* текст был успешно извлечён из внешнего файла.<br />
<br />
Практические следствия использования поля 27 и его особенностей:<br />
* создание словаря становится не столь затратной операцией, для тех записей, которые содержат поле 27,<br />
* если файл PDF не содержал текстовый слой (например, был не распознан), а затем текстовый появился (был распознан позже, уже после создания словаря), то необходимо и достаточно сделать создание словаря заново, чтобы текст был всё-таки взят из файла в индекс (словарь).<br />
<br />
'''Запись прочих полей в зависимости от порядка извлечения текста'''<br />
<br />
Запись в 20, 21, 22 поля осуществляется только при извлечении текста из файла с полным текстом.<br />
<br />
==Включение в полнотекстовую базу текстов из базы данных электронного каталога==<br />
<br />
===Алгоритм получения ссылок из базы данных электронного каталога===<br />
<br />
Делается попытка получения ссылок на тексты из каждой записи базы данных электронного каталога.<br />
<br />
Получение ссылок осуществляется в соответствии с форматом, если он задан.<br />
<br />
Если формат не задан, то получение ссылок осуществляется из подполей <tt>A</tt> и <tt>I</tt> 951 поля, что соответствует местонахождению в базе данных электронного каталога [[Связывание документов базы данных ИРБИС с внешними объектами|ссылок на внешние объекты]].<br />
<br />
Формат задают при помощи параметра <tt>EC_IMPORT_PATH_FORMAT</tt> секции <tt>TEXTS</tt>.<br />
<br />
Ссылки, полученные при помощи формата, интерпретируются следующим образом: если ссылка не соответствует формату UNC, то считается относительной. URL-ссылки не допустимы.<br />
<br />
Если формат не задан, то: ссылки, полученные из подполя <tt>A</tt> считаются относительными; из подполя <tt>I</tt> – абсолютными.<br />
<br />
Относительная адресация осуществляется в соответствии с [[Относительная адресация в ИРБИС#Относительные ссылки на внешние объекты в базах данных электронного каталога и в полнотекстовых базах|правилами для относительных ссылок в полнотекстовых базах данных]].<br />
<br />
===Отличия в зависимости от версии ИРБИС===<br />
<br />
'''Начиная с [[Список изменений ИРБИС версии 2014.1|версии 2014.1]]'''<br />
<br />
Добавлена возможность получения ссылок в соответствии с форматом.<br />
<br />
'''В [[Отличия ИРБИС 2013.1 от предыдущей версии|версии 2013.1]]'''<br />
<br />
Предусмотрено включение в полнотекстовую базу данных ссылок на отдельные страницы многостраничного документа. Описание Dublin Core создаётся на основе библиографического описания, и прикрепляется к записи полнотекстовой БД, соответствующей первой странице документа.<br />
<br />
Предусмотрено включение в полнотекстовую базу данных текстов с относительными путями в автоматическом режиме при указании местонахождения текстов в 11-й строке <tt>.par</tt>-файла. Относительные ссылки (из подполя <tt>A</tt> 951 поля) преобразуются в относительные, абсолютные (из подполя <tt>I</tt>) – в абсолютные .<br />
<br />
Реализована возможность прикреплять описания Dublin Core к многостраничным документам, добавленным к БД с разбиением на страницы. Описание Dublin Core прикрепляется к записи полнотекстовой БД, соответствующей первой странице документа. Другие страницы связываются с описанием Dublin Core посредством записи словаря (инвертированного файла); для установления связи используется подполе <tt>952^b</tt>.<br />
<br />
'''До [[Отличия ИРБИС 2012.1 от предыдущей версии|версии 2012.1]] включительно'''<br />
<br />
Включение в полнотекстовую базу ссылок на отдельные страницы многостраничного документа не предусмотрено.<br />
<br />
Включение в полнотекстовую базу данных текстов с относительными путями требует ряда дополнительных шагов.<br />
<br />
Об особенностях включения текстов из электронного каталога с относительными ссылками см. [[Установка и использование ИРБИС 64 для полнотекстовых баз данных#Включение текстов из электронного каталога с относительными ссылками|в соответствующем подразделе статьи ''Установка и использование ИРБИС 64 для полнотекстовых баз данных'']]<br />
<br />
==Исключение повторного добавления текстов==<br />
<br />
При включении текстов в базу данных повторное добавление исключается.<br />
<br />
Если ссылка на текст (или страницу многостраничного документа) уже присутствует в базе данных, то данный текст пропускается.<br />
<br />
Абсолютные и относительные ссылки считаются разными, то есть один и тот же текст может быть включён в базу данных с абсолютным и относительным путём.<br />
<br />
При включении многостраничного текстового файла:<br />
* Начиная с [[Список изменений ИРБИС версии 2014.1|версии 2014.1]]: проверяется наличие последней страницы документа. Если последняя страница присутствует, то файл пропускается. Если отсутствует, то проверяется наличие каждой страницы, и отсутствующие добавляются.<br />
* До [[Отличия ИРБИС 2013.1 от предыдущей версии|версии 2013.1]] включительно: проверяется наличие каждой страницы документа, и отсутствующие добавляются.<br />
<br />
==Ссылки==<br />
<br />
См. также:<br />
* [[АРМ Администратор полнотекстовых БД]]<br />
* [[Связывание документов базы данных ИРБИС с внешними объектами]]<br />
<br />
[[Категория:АРМ Администратор]]<br />
[[Категория:Полнотекстовые базы данных ИРБИС]]<br />
[[Категория:Языки и алгоритмы ИРБИС]]</div>Sokvhttp://wiki.elnit.org/index.php?title=%D0%9F%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%BE%D0%B2%D1%8B%D0%B5_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%98%D0%A0%D0%91%D0%98%D0%A1&diff=2450Полнотекстовые базы данных ИРБИС2016-02-16T22:37:58Z<p>Sokv: /* Ссылки */</p>
<hr />
<div>''Полнотекстовые базы данных ИРБИС'' – [http://intranet.gpntb.ru/subscribe/?journal=ntb&year=2005&num=11&art=13 решение, обеспечивающее возможность ранжированного полнотекстового поиска по коллекциям текстовых документов].<br />
<br />
В основе данного решения:<br />
* программные продукты ''ИРБИС 64 для полнотекстовых баз данных'', в которых реализован [[Механизм полнотекстового поиска]] и<br />
* [[Полнотекстовая база данных (вид баз данных ИРБИС)|''полнотекстовые базы данных ИРБИС'']] – как вид [[Базы данных ИРБИС#Виды баз данных ИРБИС 64|баз данных ИРБИС 64]].<br />
<br />
==Основные возможности ИРБИС 64 по работе с полнотекстовыми базами данных==<br />
<br />
'''Возможности для создателей электронных коллекций текстовых документов''':<br />
* Сформировать полнотекстовую базу данных ИРБИС – указать текстовые документы, по которым система обеспечит возможность полнотекстового поиска.<br />
* С помощью программного обеспечения ИРБИС предоставить пользователям доступ к коллекции в локальной сети, Интернет или на CD/DVD.<br />
<br />
'''Возможности для пользователей''': получить доступ к коллекции текстовых документов для ранжированного полнотекстового поиска и просмотра найденных документов.<br />
<br />
Полнотекстовые базы данных ИРБИС обеспечивают возможность работы с текстовыми документами в форматах: HTML, TXT, RTF, PDF, DJVU, DOC, XLS, PPT.<br />
<br />
==Отличие возможности ''включения полнотекстовых документов в базу данных'' от возможности ''связывания документов базы данных с внешними объектами''==<br />
<br />
Не следует путать ''возможность включения полнотекстовых документов'' с ''возможностью [[Связывание документов базы данных ИРБИС с внешними объектами|связывания документов базы данных с внешними объектами]]''.<br />
<br />
'''Сходства возможностей:'''<br />
* Обе эти возможности позволяют установить связь документов базы данных с внешними объектами.<br />
<br />
'''Различия возможностей:'''<br />
* ''Возможность связывания документов базы данных с внешними объектами'' ограничивается обеспечением простоты перехода пользователя от документа базы данных к внешнему объекту.<br />
* ''Возможность включения полнотекстовых документов в базу данных'' обеспечивает полнотекстовый поиск, а также переход пользователя к найденным внешним объектам.<br />
<br />
==Программные продукты для работы с полнотекстовыми базами данных ИРБИС 64==<br />
<br />
Функциональность по работе с полнотекстовыми базами данных ИРБИС 64 обеспечивают следующие программные продукты:<br />
* [[АРМ Администратор полнотекстовых БД|''АРМ Администратор полнотекстовых БД'']] – рабочее место специалиста, которое позволяет формировать полнотекстовые базы данных и обслуживать их.<br />
* ''АРМ Читатель для полнотекстовых БД'' – рабочее место пользователя электронных коллекций.<br />
* [[Веб-ИРБИС#Версии Веб-шлюза ИРБИС|Веб-шлюз ИРБИС для полнотекстовых БД]] – обеспечивает доступ к коллекциям полнотекстовых документов пользователей Интернета (и/или локальной сети) с помощью веб-браузера.<br />
<br />
==Концепция полнотекстовых баз данных ИРБИС==<br />
<br />
Полнотекстовые базы данных ИРБИС отличаются возможностью индексирования текстов из внешних файлов. Что обеспечивает возможность организовать поиск этих текстов.<br />
<br />
Эта концепция позволяет реализовать перечисленные выше [[#Основные возможности ИРБИС 64 по работе с полнотекстовыми базами данных|возможности ИРБИС 64 по работе с полнотекстовыми базами данных]].<br />
<br />
Индексирование текстов из внешних файлов основывается на следующих идеях:<br />
* Связывать ''записи'' полнотекстовой базы данных с текстами из внешних файлов, чтобы воспользоваться механизмом индексирования в ИРБИС.<br />
* Реализовать специальный [[Таблица выбора полей#Метод индексирования 9|''метод индексирования 9'']], позволяющий индексировать тексты из внешних файлов, связанные с ''записями'' полнотекстовой базы данных.<br />
<br />
Для описания механизма связывания ''записи'' полнотекстовой базы данных с текстами из внешних файлов вводятся следующие понятия:<br />
* Понятие ''объекта полнотекстового поиска'' – что может быть связано с ''записью'' полнотекстовой базы данных (и впоследствии проиндексировано).<br />
* Понятие ссылки на ''объекта полнотекстового поиска'', посредством которой ''запись'' полнотекстовой базы данных связывается с ''объектом полнотекстового поиска''.<br />
<br />
===Формирование полнотекстовой базы данных===<br />
<br />
Формирование полнотекстовой базы данных предполагает добавление в полнотекстовую базу данных ''текстов'' (также принято называть ''включение текстов в базу данных'') и их последующее индексирование.<br />
<br />
Фактически, при добавлении ''текстов'', они рассматриваются как [[#Объекты полнотекстового поиска в ИРБИС|объекты полнотекстового поиска]], в соответствие каждому из которых в базе создаётся ''запись'', содержащая [[Схема полнотекстовой базы данных#Ссылка на объект полнотекстового поиска|ссылку]] на данный объект. Подробнее см. в [[Схема полнотекстовой базы данных|статье ''Схема полнотекстовой базы данных'']].<br />
<br />
Включение текстов в базу осуществляется с помощью АРМ Администратор, подробнее см. [[АРМ Администратор полнотекстовых БД#Включение текстов в полнотекстовую базу данных|в подразделе ''Включение текстов в полнотекстовую базу данных'' статьи ''АРМ Администратор полнотекстовых БД'']].<br />
<br />
===Объекты полнотекстового поиска в ИРБИС===<br />
<br />
Концепция полнотекстовых баз данных ИРБИС предусматривает следующие виды ''объектов полнотекстового поиска'':<br />
<br />
'''Внешний текстовый файл'''<br />
<br />
Файл допустимого типа. Список допустимых форматов приведён [[#Основные возможности ИРБИС 64 по работе с полнотекстовыми базами данных|в подразделе ''Основные возможности ИРБИС 64 по работе с полнотекстовыми базами данных'']].<br />
<br />
'''Отдельная страница многостраничного документа'''<br />
<br />
Отдельная страница многостраничного документа (формата PDF или DJVU).<br />
<br />
'''Файл, ассоциированный с текстом-"''подложкой''"'''<br />
<br />
Файл допустимого типа, сопровождающийся текстовым файлом, содержащим текстовый слой. Список допустимых форматов приведён [[#Основные возможности ИРБИС 64 по работе с полнотекстовыми базами данных|в подразделе ''Основные возможности ИРБИС 64 по работе с полнотекстовыми базами данных'']].<br />
<br />
Понятие ''объекта полнотекстового поиска'' является одним из ключевых в концепции полнотекстовых баз данных:<br />
* в процессе формирования в базе данных сохраняется ссылка на ''объект полнотекстового поиска'';<br />
* текст, связанный с ''объектом полнотекстового поиска'' подлежит [[Таблица выбора полей#Метод индексирования 9|индексированию]];<br />
* список ''объектов полнотекстового поиска'' (соответствующих поисковому запросу) будет выдан конечному пользователю в качестве результатов поиска.<br />
<br />
==Функциональные возможности ИРБИС 64 для полнотекстовых баз данных==<br />
<br />
===Добавление файлов в полнотекстовую базу данных===<br />
<br />
При добавлении файла в полнотекстовой базе данных создаётся запись, в которой сохраняется ссылка на внешний файл.<br />
<br />
Файлы для добавления могут быть указаны выборочно или может быть указана папка, из которой будут добавлены файлы.<br />
<br />
Можно установить список расширений, чтобы были добавлены только файлы соответствующих типов.<br />
<br />
===Добавление многостраничных документов с разбиением на страницы===<br />
<br />
Файл PDF или DJVU может быть добавлен в полнотекстовую базу с разбиением на страницы (если выбрана [[АРМ Администратор полнотекстовых БД#Каждая страница файла как отдельный документ|соответствующая опция]]).<br />
<br />
В этом случае объектом полнотекстового поиска является отдельная страница PDF или DJVU документа.<br />
<br />
В полнотекстовой базе данных создаётся запись, соответствующая каждой странице добавляемого файла, а в каждой записи сохраняется ссылка с указанием номера страницы.<br />
<br />
Если пользователь в результате поиска получил отдельную страницу текста, он имеет возможность перейти к другим страницам.<br />
<br />
''Примечание: с разбиением на страницы НЕ могут быть добавлены файлы PDF или DJVU, находящиеся в архиве.''<br />
<br />
===Индексирование полнотекстовой базы данных===<br />
<br />
Индексирование полнотекстовой базы данных – процесс наполнения словаря базы данных словами из текстов из внешних файлов, добавленных в базу данных.<br />
<br />
===Индексирование документов, из которых невозможно извлечение текста===<br />
<br />
Если при включении полнотекстового документа найдена соответствующая ему подложка, то [[#Компоненты ссылки|в соответствующем подполе базы данных сохраняется ссылка на файл подложки]]. Таким образом происходит ''ассоциация'' полнотекстового документа с соответствующей ''подложкой''.<br />
<br />
Если с полнотекстовым документом ассоциирована подложка, то при построении словаря будет использован содержащийся в подложке текст. Для показа пользователю будет использован сам включённый в базу документ.<br />
<br />
Подробнее см. [[АРМ Администратор полнотекстовых БД#Ассоциация текста-подложки с включаемым в полнотекстовую базу документом|в подразделе ''Ассоциация текста-подложки с включаемым в полнотекстовую базу документом'' статьи ''АРМ Администратор полнотекстовых БД'']].<br />
<br />
===Индексирование файлов PDF, защищённых паролем===<br />
<br />
В ИРБИС возможно индексирование файлов PDF, защищённых паролем. Предусмотрена возможность использования только одного пароля. Подробнее см. [[АРМ Администратор полнотекстовых БД#Извлечение текстовых данных из PDF-файлов, защищённых паролем|в подразделе ''Извлечение текстовых данных из PDF-файлов, защищённых паролем'' статьи ''АРМ Администратор полнотекстовых БД'']].<br />
<br />
===Поисковые возможности===<br />
<br />
В ИРБИС для полнотекстовых БД предусмотрены следующие поисковые возможности:<br />
* полнотекстовый поиск;<br />
* поиск по элементам описания полных текстов (по умолчанию предусмотрен поиск по элементам Dublin Core);<br />
* полнотекстовый поиск, дополненный ограничением по элементам описания;<br />
* возможность уточнять полнотекстовый поиск при помощи ''поиска в найденном'' по элементам описания.<br />
<br />
==Устаревшие возможности ИРБИС 64 по работе с полнотекстовыми базами данных==<br />
<br />
===Возможность размещения текстов в специально предназначенном архиве (не поддерживается с версии 2010.1)===<br />
<br />
'''''Примечание: начиная с версии 2010.1 данная возможность не поддерживается, в связи с чем не рекомендуется к использованию.'''''<br />
<br />
<small>'''Опции включения полнотекстовых документов, совместимые с данной:'''<br />
* Возможно включение как указанных пользователем документов, так и всех документов из указанной папки.<br />
<br />
'''Достоинства:'''<br />
* Компактное хранение полнотекстовых документов (это относится к документам, хорошо поддающимся сжатию при архивации).<br />
* При перемещении папки с базой данных не требуется изменений в ссылках на файлы, поскольку ссылки являются относительными (только имя документа в архиве).<br />
<br />
'''Недостатки:'''<br />
* Дополнительные затраты времени на разархивирование при обеспечении доступа к полнотекстовому документу.<br />
* Тексты не доступны через Веб-ИРБИС.</small><br />
<br />
==Ссылки==<br />
<br />
См. также:<br />
* [[АРМ Администратор полнотекстовых БД]]<br />
* [[АРМ Читатель для полнотекстовых БД]]<br />
* [[Установка и использование ИРБИС 64 для полнотекстовых баз данных]]<br />
* [[Возможности АРМ Каталогизатор по работе с полнотекстовыми базами данных]]<br />
* [[Известные проблемы и их решения, касающиеся работы с полнотекстовыми базами ИРБИС]]<br />
* [[Рекомендации по обслуживанию баз данных ИРБИС]]<br />
* [[Связывание документов базы данных ИРБИС с внешними объектами]]<br />
* [[Механизм полнотекстового поиска]]<br />
* [[Полнотекстовая база данных (вид баз данных ИРБИС)]]<br />
* [[Схема полнотекстовой базы данных]]<br />
<br />
Источники информации:<br />
* [http://irbis.gpntb.ru/read.php?48,17749 Полнотекстовые базы данных в ИРБИС64]<br />
<br />
[[Категория:Полнотекстовые базы данных ИРБИС]]<br />
[[Категория:Функциональные возможности ИРБИС]]<br />
[[Категория:Тексты документации, поставляемой с системой ИРБИС 64]]<br />
[[Категория:Анонсированные статьи]]</div>Sokvhttp://wiki.elnit.org/index.php?title=%D0%9F%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%BE%D0%B2%D1%8B%D0%B5_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%98%D0%A0%D0%91%D0%98%D0%A1&diff=2449Полнотекстовые базы данных ИРБИС2016-02-16T22:36:26Z<p>Sokv: </p>
<hr />
<div>''Полнотекстовые базы данных ИРБИС'' – [http://intranet.gpntb.ru/subscribe/?journal=ntb&year=2005&num=11&art=13 решение, обеспечивающее возможность ранжированного полнотекстового поиска по коллекциям текстовых документов].<br />
<br />
В основе данного решения:<br />
* программные продукты ''ИРБИС 64 для полнотекстовых баз данных'', в которых реализован [[Механизм полнотекстового поиска]] и<br />
* [[Полнотекстовая база данных (вид баз данных ИРБИС)|''полнотекстовые базы данных ИРБИС'']] – как вид [[Базы данных ИРБИС#Виды баз данных ИРБИС 64|баз данных ИРБИС 64]].<br />
<br />
==Основные возможности ИРБИС 64 по работе с полнотекстовыми базами данных==<br />
<br />
'''Возможности для создателей электронных коллекций текстовых документов''':<br />
* Сформировать полнотекстовую базу данных ИРБИС – указать текстовые документы, по которым система обеспечит возможность полнотекстового поиска.<br />
* С помощью программного обеспечения ИРБИС предоставить пользователям доступ к коллекции в локальной сети, Интернет или на CD/DVD.<br />
<br />
'''Возможности для пользователей''': получить доступ к коллекции текстовых документов для ранжированного полнотекстового поиска и просмотра найденных документов.<br />
<br />
Полнотекстовые базы данных ИРБИС обеспечивают возможность работы с текстовыми документами в форматах: HTML, TXT, RTF, PDF, DJVU, DOC, XLS, PPT.<br />
<br />
==Отличие возможности ''включения полнотекстовых документов в базу данных'' от возможности ''связывания документов базы данных с внешними объектами''==<br />
<br />
Не следует путать ''возможность включения полнотекстовых документов'' с ''возможностью [[Связывание документов базы данных ИРБИС с внешними объектами|связывания документов базы данных с внешними объектами]]''.<br />
<br />
'''Сходства возможностей:'''<br />
* Обе эти возможности позволяют установить связь документов базы данных с внешними объектами.<br />
<br />
'''Различия возможностей:'''<br />
* ''Возможность связывания документов базы данных с внешними объектами'' ограничивается обеспечением простоты перехода пользователя от документа базы данных к внешнему объекту.<br />
* ''Возможность включения полнотекстовых документов в базу данных'' обеспечивает полнотекстовый поиск, а также переход пользователя к найденным внешним объектам.<br />
<br />
==Программные продукты для работы с полнотекстовыми базами данных ИРБИС 64==<br />
<br />
Функциональность по работе с полнотекстовыми базами данных ИРБИС 64 обеспечивают следующие программные продукты:<br />
* [[АРМ Администратор полнотекстовых БД|''АРМ Администратор полнотекстовых БД'']] – рабочее место специалиста, которое позволяет формировать полнотекстовые базы данных и обслуживать их.<br />
* ''АРМ Читатель для полнотекстовых БД'' – рабочее место пользователя электронных коллекций.<br />
* [[Веб-ИРБИС#Версии Веб-шлюза ИРБИС|Веб-шлюз ИРБИС для полнотекстовых БД]] – обеспечивает доступ к коллекциям полнотекстовых документов пользователей Интернета (и/или локальной сети) с помощью веб-браузера.<br />
<br />
==Концепция полнотекстовых баз данных ИРБИС==<br />
<br />
Полнотекстовые базы данных ИРБИС отличаются возможностью индексирования текстов из внешних файлов. Что обеспечивает возможность организовать поиск этих текстов.<br />
<br />
Эта концепция позволяет реализовать перечисленные выше [[#Основные возможности ИРБИС 64 по работе с полнотекстовыми базами данных|возможности ИРБИС 64 по работе с полнотекстовыми базами данных]].<br />
<br />
Индексирование текстов из внешних файлов основывается на следующих идеях:<br />
* Связывать ''записи'' полнотекстовой базы данных с текстами из внешних файлов, чтобы воспользоваться механизмом индексирования в ИРБИС.<br />
* Реализовать специальный [[Таблица выбора полей#Метод индексирования 9|''метод индексирования 9'']], позволяющий индексировать тексты из внешних файлов, связанные с ''записями'' полнотекстовой базы данных.<br />
<br />
Для описания механизма связывания ''записи'' полнотекстовой базы данных с текстами из внешних файлов вводятся следующие понятия:<br />
* Понятие ''объекта полнотекстового поиска'' – что может быть связано с ''записью'' полнотекстовой базы данных (и впоследствии проиндексировано).<br />
* Понятие ссылки на ''объекта полнотекстового поиска'', посредством которой ''запись'' полнотекстовой базы данных связывается с ''объектом полнотекстового поиска''.<br />
<br />
===Формирование полнотекстовой базы данных===<br />
<br />
Формирование полнотекстовой базы данных предполагает добавление в полнотекстовую базу данных ''текстов'' (также принято называть ''включение текстов в базу данных'') и их последующее индексирование.<br />
<br />
Фактически, при добавлении ''текстов'', они рассматриваются как [[#Объекты полнотекстового поиска в ИРБИС|объекты полнотекстового поиска]], в соответствие каждому из которых в базе создаётся ''запись'', содержащая [[Схема полнотекстовой базы данных#Ссылка на объект полнотекстового поиска|ссылку]] на данный объект. Подробнее см. в [[Схема полнотекстовой базы данных|статье ''Схема полнотекстовой базы данных'']].<br />
<br />
Включение текстов в базу осуществляется с помощью АРМ Администратор, подробнее см. [[АРМ Администратор полнотекстовых БД#Включение текстов в полнотекстовую базу данных|в подразделе ''Включение текстов в полнотекстовую базу данных'' статьи ''АРМ Администратор полнотекстовых БД'']].<br />
<br />
===Объекты полнотекстового поиска в ИРБИС===<br />
<br />
Концепция полнотекстовых баз данных ИРБИС предусматривает следующие виды ''объектов полнотекстового поиска'':<br />
<br />
'''Внешний текстовый файл'''<br />
<br />
Файл допустимого типа. Список допустимых форматов приведён [[#Основные возможности ИРБИС 64 по работе с полнотекстовыми базами данных|в подразделе ''Основные возможности ИРБИС 64 по работе с полнотекстовыми базами данных'']].<br />
<br />
'''Отдельная страница многостраничного документа'''<br />
<br />
Отдельная страница многостраничного документа (формата PDF или DJVU).<br />
<br />
'''Файл, ассоциированный с текстом-"''подложкой''"'''<br />
<br />
Файл допустимого типа, сопровождающийся текстовым файлом, содержащим текстовый слой. Список допустимых форматов приведён [[#Основные возможности ИРБИС 64 по работе с полнотекстовыми базами данных|в подразделе ''Основные возможности ИРБИС 64 по работе с полнотекстовыми базами данных'']].<br />
<br />
Понятие ''объекта полнотекстового поиска'' является одним из ключевых в концепции полнотекстовых баз данных:<br />
* в процессе формирования в базе данных сохраняется ссылка на ''объект полнотекстового поиска'';<br />
* текст, связанный с ''объектом полнотекстового поиска'' подлежит [[Таблица выбора полей#Метод индексирования 9|индексированию]];<br />
* список ''объектов полнотекстового поиска'' (соответствующих поисковому запросу) будет выдан конечному пользователю в качестве результатов поиска.<br />
<br />
==Функциональные возможности ИРБИС 64 для полнотекстовых баз данных==<br />
<br />
===Добавление файлов в полнотекстовую базу данных===<br />
<br />
При добавлении файла в полнотекстовой базе данных создаётся запись, в которой сохраняется ссылка на внешний файл.<br />
<br />
Файлы для добавления могут быть указаны выборочно или может быть указана папка, из которой будут добавлены файлы.<br />
<br />
Можно установить список расширений, чтобы были добавлены только файлы соответствующих типов.<br />
<br />
===Добавление многостраничных документов с разбиением на страницы===<br />
<br />
Файл PDF или DJVU может быть добавлен в полнотекстовую базу с разбиением на страницы (если выбрана [[АРМ Администратор полнотекстовых БД#Каждая страница файла как отдельный документ|соответствующая опция]]).<br />
<br />
В этом случае объектом полнотекстового поиска является отдельная страница PDF или DJVU документа.<br />
<br />
В полнотекстовой базе данных создаётся запись, соответствующая каждой странице добавляемого файла, а в каждой записи сохраняется ссылка с указанием номера страницы.<br />
<br />
Если пользователь в результате поиска получил отдельную страницу текста, он имеет возможность перейти к другим страницам.<br />
<br />
''Примечание: с разбиением на страницы НЕ могут быть добавлены файлы PDF или DJVU, находящиеся в архиве.''<br />
<br />
===Индексирование полнотекстовой базы данных===<br />
<br />
Индексирование полнотекстовой базы данных – процесс наполнения словаря базы данных словами из текстов из внешних файлов, добавленных в базу данных.<br />
<br />
===Индексирование документов, из которых невозможно извлечение текста===<br />
<br />
Если при включении полнотекстового документа найдена соответствующая ему подложка, то [[#Компоненты ссылки|в соответствующем подполе базы данных сохраняется ссылка на файл подложки]]. Таким образом происходит ''ассоциация'' полнотекстового документа с соответствующей ''подложкой''.<br />
<br />
Если с полнотекстовым документом ассоциирована подложка, то при построении словаря будет использован содержащийся в подложке текст. Для показа пользователю будет использован сам включённый в базу документ.<br />
<br />
Подробнее см. [[АРМ Администратор полнотекстовых БД#Ассоциация текста-подложки с включаемым в полнотекстовую базу документом|в подразделе ''Ассоциация текста-подложки с включаемым в полнотекстовую базу документом'' статьи ''АРМ Администратор полнотекстовых БД'']].<br />
<br />
===Индексирование файлов PDF, защищённых паролем===<br />
<br />
В ИРБИС возможно индексирование файлов PDF, защищённых паролем. Предусмотрена возможность использования только одного пароля. Подробнее см. [[АРМ Администратор полнотекстовых БД#Извлечение текстовых данных из PDF-файлов, защищённых паролем|в подразделе ''Извлечение текстовых данных из PDF-файлов, защищённых паролем'' статьи ''АРМ Администратор полнотекстовых БД'']].<br />
<br />
===Поисковые возможности===<br />
<br />
В ИРБИС для полнотекстовых БД предусмотрены следующие поисковые возможности:<br />
* полнотекстовый поиск;<br />
* поиск по элементам описания полных текстов (по умолчанию предусмотрен поиск по элементам Dublin Core);<br />
* полнотекстовый поиск, дополненный ограничением по элементам описания;<br />
* возможность уточнять полнотекстовый поиск при помощи ''поиска в найденном'' по элементам описания.<br />
<br />
==Устаревшие возможности ИРБИС 64 по работе с полнотекстовыми базами данных==<br />
<br />
===Возможность размещения текстов в специально предназначенном архиве (не поддерживается с версии 2010.1)===<br />
<br />
'''''Примечание: начиная с версии 2010.1 данная возможность не поддерживается, в связи с чем не рекомендуется к использованию.'''''<br />
<br />
<small>'''Опции включения полнотекстовых документов, совместимые с данной:'''<br />
* Возможно включение как указанных пользователем документов, так и всех документов из указанной папки.<br />
<br />
'''Достоинства:'''<br />
* Компактное хранение полнотекстовых документов (это относится к документам, хорошо поддающимся сжатию при архивации).<br />
* При перемещении папки с базой данных не требуется изменений в ссылках на файлы, поскольку ссылки являются относительными (только имя документа в архиве).<br />
<br />
'''Недостатки:'''<br />
* Дополнительные затраты времени на разархивирование при обеспечении доступа к полнотекстовому документу.<br />
* Тексты не доступны через Веб-ИРБИС.</small><br />
<br />
==Ссылки==<br />
<br />
См. также:<br />
* [[АРМ Администратор полнотекстовых БД]]<br />
* [[АРМ Читатель для полнотекстовых БД]]<br />
* [[Установка и использование ИРБИС 64 для полнотекстовых баз данных]]<br />
* [[Возможности АРМ Каталогизатор по работе с полнотекстовыми базами данных]]<br />
* [[Известные проблемы и их решения, касающиеся работы с полнотекстовыми базами ИРБИС]]<br />
* [[Рекомендации по обслуживанию баз данных ИРБИС]]<br />
* [[Связывание документов базы данных ИРБИС с внешними объектами]]<br />
* [[Полнотекстовая база данных (вид баз данных ИРБИС)]]<br />
* [[Схема полнотекстовой базы данных]]<br />
<br />
Источники информации:<br />
* [http://irbis.gpntb.ru/read.php?48,17749 Полнотекстовые базы данных в ИРБИС64]<br />
<br />
[[Категория:Полнотекстовые базы данных ИРБИС]]<br />
[[Категория:Функциональные возможности ИРБИС]]<br />
[[Категория:Тексты документации, поставляемой с системой ИРБИС 64]]<br />
[[Категория:Анонсированные статьи]]</div>Sokvhttp://wiki.elnit.org/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0&diff=2448Механизм полнотекстового поиска2016-02-16T22:30:12Z<p>Sokv: Новая страница: «'''''Механизм полнотекстового поиска''''' в ИРБИС обеспечивает быстрый поиск по текстовым фа…»</p>
<hr />
<div>'''''Механизм полнотекстового поиска''''' в ИРБИС обеспечивает быстрый поиск по текстовым файлам, связанным с записями базы данных при помощи ссылки. Механизм основан на расширении концепций [[Индекс базы данных ИРБИС|''индекса базы данных ИРБИС'']] и [[ТВП]], служащей для определения индекса базы данных.<br />
<br />
==Метод индексирования 9==<br />
<br />
Метод индексирования 9 был разработан в качестве расширения концепции ТВП. Реализован в рамках технологии [[Полнотекстовые базы данных ИРБИС|полнотекстовых баз данных ИРБИС]], и работает только для функций создания и актуализации словаря.<br />
<br />
Создаёт элемент в соответствии со следующими правилами:<br />
* Создаёт элемент из каждого слова текста. Подробнее о выборе слов из текста см. [[Таблица выбора полей#Алгоритм выбора слов|подраздел ''Алгоритм выбора слов'' статьи ''Таблица выбора полей'']].<br />
* Текст берёт из внешнего файла в соответствии со ссылкой.<br />
* Ссылку получает из строки, созданной форматом.<br />
<br />
Подробнее о ссылках и получении текста см. в [[Схема полнотекстовой базы данных#Ссылки на полные тексты|подразделе ''Ссылки на полные тексты'' статьи ''Схема полнотекстовой базы данных'']] и [[Полнотекстовая база данных (вид баз данных ИРБИС)#Механизм доступа к объектам полнотекстового поиска|подразделе ''Механизм доступа к объектам полнотекстового поиска'' статьи ''Полнотекстовые базы данных ИРБИС'']].<br />
<br />
В процессе метода индексирования 9 задействовано несколько видов кеширования:<br />
* [[Кеширование на файловой системе страниц многостраничного документа]]. ''Примечание: начиная с [[Список изменений ИРБИС версии 2012.1|версии 2012.1]].''<br />
* Кеширование текста непосредственно в записях базы данных. ''Примечание: начиная с [[Список изменений ИРБИС версии 2014.1|версии 2014.1]].''<br />
<br />
В процессе метода индексирования 9 в записи базы данных может осуществляться запись [[Схема полнотекстовой базы данных#Технологические данные|некоторых технологических данных]].<br />
<br />
Эти технологические данные пишутся при выполнении хотя бы одного из условий (начиная с [[Список изменений ИРБИС версии 2014.1|версии 2014.1]]):<br />
* В записи базы данных отсутствует кешированный текст.<br />
* Включён параметр <tt>alwaysRefreshTextRecord</tt>.<br />
<br />
Для обеспечения возможности поиска текстов (страниц), в которых отсутствует текст, реализован механизм, который фиксирует данный факт в словаре: если перед завершением метода индексирования 9 отсутствуют элементы, которые он должен вернуть, то метод возвращает элемент <tt>NO_TEXT_AT_PAGE</tt>. ''Примечание: начиная с [[Список изменений ИРБИС версии 2014.1|версии 2014.1]].''<br />
<br />
<br />
==Ссылки==<br />
<br />
'''См. также:'''<br />
* [[Индекс базы данных ИРБИС]]<br />
<br />
[[Категория:ИРБИС 64]]<br />
[[Категория:Индекс базы данных ИРБИС]]</div>Sokvhttp://wiki.elnit.org/index.php?title=%D0%A2%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%B0_%D0%BF%D0%BE%D0%BB%D0%B5%D0%B9&diff=2447Таблица выбора полей2016-02-16T22:27:04Z<p>Sokv: /* Ссылки */</p>
<hr />
<div>'''''Таблица выбора полей (ТВП)''''' определяет правила выбора одного или нескольких '''''элементов''''' в контексте [[Базы данных ИРБИС#Виды баз данных ИРБИС 64|записи базы данных]]. '''''Элемент''''' может быть в общем виде определён как фрагмент записи, выделенный в результате определённой обработки. Хотя во многих случаях ''элементами'' будут ''элементы данных'' (поля или подполя), могут также употребляться слова, фразы или другие фрагменты данных, которые имеют определённое значение в специальных приложениях.<br />
<br />
==Применение ТВП==<br />
<br />
Выбранные элементы применяются в зависимости от конкретного варианта использования.<br />
<br />
ТВП может использоваться для переформатирования записей во время операций импорта, экспорта или копирования.<br />
<br />
===ТВП для инвертированного файла===<br />
<br />
''ТВП для инвертированного файла'' – специальная ТВП, которая [[Индекс базы данных ИРБИС|определяет содержимое ''индекса'' (''словаря'') базы данных ИРБИС]].<br />
<br />
==Общие сведения==<br />
<br />
Таблица выбора полей как отдельная структура сохраняется в текстовом файле с расширением [[Файлы ИРБИС#Файлы таблиц выбора полей (ТВП) ИРБИС|<tt>.fst</tt>]].<br />
<br />
Файл ТВП представляет собой набор строк, каждая из которых содержит следующие три элемента, разделенные знаком пробел:<br />
* '''''идентификатор поля''''' (ИП);<br />
* '''''метод индексирования''''' (МИ);<br />
* '''''формат выборки данных''''', представленный на [[Язык форматирования системы ИРБИС|языке форматирования системы ИРБИС]].<br />
<br />
Когда появляется необходимость в выборке элементов с использованием ТВП, система производит чтение требуемых записей [[Базы данных ИРБИС#Файл документов базы данных ИРБИС|файла документов]], и выполняет следующие действия по каждой записи и каждой строке ТВП:<br />
# использует ''формат выборки данных'' для извлечения и форматирования соответствующих данных из записи;<br />
# применяет указанный ''метод индексирования'' к данным, полученным с помощью предыдущего шага;<br />
# присваивает каждому элементу, полученному подобным образом, указанный ''идентификатор поля''.<br />
Процесс выборки элементов с использованием ТВП является чисто механическим, описанные шаги связаны только лишь данными, которые создаются при их выполнении. Например, тот факт, что на шаге 1 произошла выборка данных из конкретного поля, является несущественным на шаге 2. На шаге 1 могут использоваться все возможности языка форматирования для создания строки символов, которая затем поступает в распоряжение шага 2. На шаге 2 поступившие строки символов обрабатываются в соответствии с указанным методом индексирования. Методы индексирования представляют собой операции со строками символов, а не с записями или полями. Именно благодаря такому универсальному пониманию сути ТВП, предоставляется возможность использовать их для таких, на первый взгляд совершенно не связанных целей, как определение содержимого инвертированного файла и способ преобразования данных при импорте документов.<br />
<br />
В самом общем смысле ТВП представляет собой механизм порождения элементов данных на основе имеющихся, применяемый для выполнения определенных задач.<br />
<br />
==Параметры ТВП==<br />
<br />
Ниже описаны параметры строк ТВП в том порядке, в каком они обрабатываются (в строке ТВП они расположены в обратном порядке).<br />
<br />
===Формат выборки данных===<br />
<br />
'''''Формат выборки данных''''' создается с использованием средств [[Язык форматирования системы ИРБИС|языка форматирования]].<br />
<br />
Такие средства языка форматирования как средства RTF и HTML и переменные метки нельзя применять в форматах выборки ТВП.<br />
<br />
Для некоторых методов индексирования существенной является концепция ''строки''. В этом случае весьма ответственным является употребление команд перехода на новую строку.<br />
<br />
Также весьма важным является употребление команд ''режима вывода'', так как некоторые методы индексирования фактически требуют наличия конкретного режима вывода. В связи с этим, пользователь сам должен побеспокоиться, чтобы тот или иной формат выборки данных содержал необходимые команды режима вывода.<br />
<br />
Следует также отметить, что использование преобразования букв в прописные может повлиять на дальнейшую обработку данных, создаваемых с помощью ТВП. Как правило, не нужно использовать такое преобразование, то есть надо использовать режимы mpl, mhl, mdl, а не mpu, mhu, mdu. Система автоматически производит преобразование букв в прописные, когда в этом появляется необходимость. Например, все элементы, создаваемые ТВП для инвертированного файла, переводятся в прописные буквы до их размещения в словаре, даже если ТВП порождает элементы в виде строчных букв.<br />
<br />
===Методы индексирования===<br />
<br />
'''''Метод индексирования''''' определяет специфическую обработку данных, созданных форматом. Имеется девять методов индексирования. Они идентифицируются числовыми кодами от 0 до 8.<br />
<br />
====Метод индексирования 0====<br />
<br />
Создаёт элемент из каждой строки, сформированной в соответствии с форматом. Этот метод обычно используется для индексирования в целом всего поля или подполя. Следует обратить особое внимание, что система в данном случае строит элементы из строк, а не из полей. В качестве выходного результата форматирования выступает строка символов, в которой нет никакого указания на ее принадлежность (или принадлежность части строки) тому или иному полю или подполю. Поэтому следует быть особенно внимательным, чтобы формат порождал корректные данные, особенно в тех случаях, когда индексируются повторяющиеся поля и/или более одного поля. Другими словами, при использовании данного метода, выводимые в соответствии с форматом отбора данные должны быть представлены отдельной строкой для каждого индексируемого элемента.<br />
<br />
====Метод индексирования 1====<br />
<br />
Создаёт элемент из каждого подполя или строки, созданных форматом. Так как в этом случае система будет производить поиск кодов разделителей подполей в строке, созданной форматом, то для обеспечения правильной работы метода в формате должен быть указан режим проверки mpl (или вообще не указан никакой режим, так как режим проверки выбирается по умолчанию), который обеспечивает сохранность разделителей подполей в выходном результате формата. Напомним, что режимы заголовка и данных заменяют разделители подполей на знаки пунктуации. Отметим, что метод индексирования 1 позволяет сделать описание более коротким, чем метод индексирования 0.<br />
<br />
Ниже приведены примеры использования данного метода. Показано, как работает метод в режиме данных.<br />
<br />
'''Содержание поля 26 используемой в примерах записи:'''<br />
26 ^aParis^bUnesco^c1965<br />
<br />
{| class="standard"<br />
!ТВП||Результат форматирования||Порождённые ТВП элементы<br />
|-<br />
|<tt>1 1 mpl,v26</tt>||<tt>^aParis^bUnesco^c1965</tt>||<br />
{| class=""<br />
|Paris<br />
|-<br />
|Unesco<br />
|-<br />
|1965<br />
|}<br />
|-<br />
|<tt>1 0 mhl,v26^a/v26^b/v26^c</tt>||<br />
{| class=""<br />
|Paris<br />
|-<br />
|Unesco<br />
|-<br />
|1965<br />
|}<br />
||<br />
{| class=""<br />
|Paris<br />
|-<br />
|Unesco<br />
|-<br />
|1965<br />
|}<br />
|-<br />
|<tt>1 1 mdl,v26</tt>||<tt>Paris, Unesco, 1965</tt>||<tt>Paris, Unesco, 1965</tt><br />
|}<br />
<br />
====Метод индексирования 2====<br />
<br />
Создаёт элемент из каждого термина или фразы, заключенных в угловые скобки (<tt><</tt>…<tt>></tt>). Любой текст, расположенный вне скобок, не индексируется. Заметим, что данный метод требует, чтобы в формате указывался [[Язык форматирования системы ИРБИС#Команды режима вывода|режим проверки]], так как любой другой режим вывода удаляет угловые скобки. Например, текст<br />
<Отчет> по использованию <информатики> и <программирования> в <средней школе><br />
приведет к порождению следующих элементов:<br />
отчет<br />
информатики<br />
программирования<br />
средней школе<br />
<br />
====Метод индексирования 3====<br />
<br />
Создаёт элемент из каждого термина или фразы, заключенных в косые черты (<tt>/</tt>…<tt>/</tt>). Во всём остальном он работает точно так же, как и метод индексирования 2. Например, текст<br />
/Отчет/ по использованию /информатики/ и /программирования/ в /средней школе/<br />
приведет к порождению следующих элементов:<br />
отчет<br />
информатики<br />
программирования<br />
средней школе<br />
<br />
====Метод индексирования 4====<br />
<br />
Создаёт элемент из каждого слова в тексте, созданном форматом.<br />
<br />
Подробнее о выборе слов см. подраздел ''[[#Алгоритм выбора слов|Алгоритм выбора слов]]''.<br />
<br />
При использовании данного метода для индексации поля, содержащего разделители подполей, в формате выборки данных необходимо указать [[Язык форматирования системы ИРБИС#Команды режима вывода|режимы заголовка или данных]] (mhl или mdl) с тем, чтобы замена разделителей подполей произошла до индексации, так как в противном случае буква разделителя подполей будет рассматриваться как составная часть слова.<br />
<br />
====Методы индексирования 5, 6, 7, 8====<br />
<br />
Методы индексирования 5, 6, 7 и 8 аналогичны соответственно методам 1, 2, 3, 4 за исключением того, что они дополнительно предоставляют возможность присоединять к индексируемым терминам префиксы. Присоединяемый префикс определяется в формате выборки данных в виде безусловного литерала и имеет следующий вид:<br />
'dp...pd', [format]<br />
где:<br />
* <tt>d</tt> – выбранный по усмотрению пользователя ограничитель, который не попадает в текст префикса;<br />
* <tt>p..p</tt> – собственно префикс.<br />
<br />
Например, строка ТВП<br />
1 8 '/К=/',v200^a<br />
приведет к индексированию каждого слова подполя <tt>a</tt> поля 200 с предварительным присоединением к каждому термину префикса <tt>К=</tt>.<br />
<br />
Эти методы широко применяются в системе ИРБИС для определения принадлежности терминов к определенным элементам описания. Именно на основе этих методов создается модель словарей по различным элементам данных ("Авторы", "Заглавие" и т.д.). При этом при показе словарей соответствующие префиксы опускаются.<br />
<br />
====Метод индексирования 9====<br />
<br />
Метод индексирования 9 был разработан в качестве расширения концепции ТВП. Реализован в рамках технологии [[Полнотекстовые базы данных ИРБИС|полнотекстовых баз данных ИРБИС]], и работает только для функций создания и актуализации словаря.<br />
<br />
Подробнее см. [[Механизм полнотекстового поиска#Метод индексирования 9|подразделе ''Метод индексирования 9'' статьи ''Механизм полнотекстового поиска'']].<br />
<br />
===Идентификатор поля===<br />
<br />
'''''Идентификатор поля''''' – это число, которое назначается каждому элементу, создаваемому на шаге индексирования. Смысл идентификатора поля зависит от целей последующего использования ТВП. В случае [[#ТВП для инвертированного файла|использования ТВП для создания инвертированного файла]] идентификатор поля представляет собой вторую компоненту индексной ссылки для соответствующего термина. При использовании ТВП для переформатирования (импорта, экспорта, копирования), идентификатор поля представляет собой метку, присваиваемую экспортируемому, импортируемому или копируемому полю.<br />
<br />
==Алгоритм выбора слов==<br />
<br />
Выбор слов происходит при использовании методов индексирования [[#Метод индексирования 4|4]], [[#Методы индексирования 5, 6, 7, 8|8]] и [[#Метод индексирования 9|9]].<br />
<br />
Выбор слов необходим при [[Индекс базы данных ИРБИС|индексировании базы данных]].<br />
<br />
''Примечание: см. также [[Рекомендации по обслуживанию баз данных ИРБИС#Настройка процесса выбора слов в словарь базы данных|рекомендации по настройке процесса выбора слов в словарь базы данных]].''<br />
<br />
===Выбор слов из текста===<br />
<br />
Разбиение некоторого текста на слова осуществляется на основе разделения символов на '''''алфавитные''''' (являющиеся частью слова) и '''''неалфавитные'''''.<br />
<br />
Разбиение текста на слова осуществляется в соответствии со следующими правилами:<br />
* словом считается непрерывная последовательность '''''алфавитных символов''''';<br />
* '''''неалфавитные''''' символы отделяют одно слово от другого.<br />
<br />
Символ считается алфавитным, если код символа присутствует в так называемой '''''таблице алфавитных символов'''''. '''''Таблица алфавитных символов''''' присутствует в системе ИРБИС в виде [[Файлы ИРБИС#Таблица алфавитных символов|текстового файла <tt>ISISACW.TAB</tt>]].<br />
<br />
===Отбрасывание стоп-слов===<br />
<br />
Система отбрасывает стоп-слова.<br />
<br />
Список стоп-слов определён в [[Файлы ИРБИС#Файл стоп-слов|'''''файле стоп-слов''''']].<br />
<br />
==Ссылки==<br />
<br />
'''См. также:'''<br />
* [[Базы данных ИРБИС]]<br />
* [[Язык форматирования системы ИРБИС]]<br />
* [[Язык запросов ИРБИС]]<br />
* [[Индекс базы данных ИРБИС]]<br />
* [[Механизм полнотекстового поиска]]<br />
* [[Механизм актуализации записи]]<br />
<br />
'''Источники информации:'''<br />
* [[Общее описание системы ИРБИС64]]<br />
<br />
[[Категория:Языки и алгоритмы ИРБИС]]<br />
[[Категория:Базы данных ИРБИС]]<br />
[[Категория:Анонсированные статьи]]</div>Sokvhttp://wiki.elnit.org/index.php?title=%D0%A2%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%B0_%D0%BF%D0%BE%D0%BB%D0%B5%D0%B9&diff=2446Таблица выбора полей2016-02-16T22:26:07Z<p>Sokv: /* Метод индексирования 9 */</p>
<hr />
<div>'''''Таблица выбора полей (ТВП)''''' определяет правила выбора одного или нескольких '''''элементов''''' в контексте [[Базы данных ИРБИС#Виды баз данных ИРБИС 64|записи базы данных]]. '''''Элемент''''' может быть в общем виде определён как фрагмент записи, выделенный в результате определённой обработки. Хотя во многих случаях ''элементами'' будут ''элементы данных'' (поля или подполя), могут также употребляться слова, фразы или другие фрагменты данных, которые имеют определённое значение в специальных приложениях.<br />
<br />
==Применение ТВП==<br />
<br />
Выбранные элементы применяются в зависимости от конкретного варианта использования.<br />
<br />
ТВП может использоваться для переформатирования записей во время операций импорта, экспорта или копирования.<br />
<br />
===ТВП для инвертированного файла===<br />
<br />
''ТВП для инвертированного файла'' – специальная ТВП, которая [[Индекс базы данных ИРБИС|определяет содержимое ''индекса'' (''словаря'') базы данных ИРБИС]].<br />
<br />
==Общие сведения==<br />
<br />
Таблица выбора полей как отдельная структура сохраняется в текстовом файле с расширением [[Файлы ИРБИС#Файлы таблиц выбора полей (ТВП) ИРБИС|<tt>.fst</tt>]].<br />
<br />
Файл ТВП представляет собой набор строк, каждая из которых содержит следующие три элемента, разделенные знаком пробел:<br />
* '''''идентификатор поля''''' (ИП);<br />
* '''''метод индексирования''''' (МИ);<br />
* '''''формат выборки данных''''', представленный на [[Язык форматирования системы ИРБИС|языке форматирования системы ИРБИС]].<br />
<br />
Когда появляется необходимость в выборке элементов с использованием ТВП, система производит чтение требуемых записей [[Базы данных ИРБИС#Файл документов базы данных ИРБИС|файла документов]], и выполняет следующие действия по каждой записи и каждой строке ТВП:<br />
# использует ''формат выборки данных'' для извлечения и форматирования соответствующих данных из записи;<br />
# применяет указанный ''метод индексирования'' к данным, полученным с помощью предыдущего шага;<br />
# присваивает каждому элементу, полученному подобным образом, указанный ''идентификатор поля''.<br />
Процесс выборки элементов с использованием ТВП является чисто механическим, описанные шаги связаны только лишь данными, которые создаются при их выполнении. Например, тот факт, что на шаге 1 произошла выборка данных из конкретного поля, является несущественным на шаге 2. На шаге 1 могут использоваться все возможности языка форматирования для создания строки символов, которая затем поступает в распоряжение шага 2. На шаге 2 поступившие строки символов обрабатываются в соответствии с указанным методом индексирования. Методы индексирования представляют собой операции со строками символов, а не с записями или полями. Именно благодаря такому универсальному пониманию сути ТВП, предоставляется возможность использовать их для таких, на первый взгляд совершенно не связанных целей, как определение содержимого инвертированного файла и способ преобразования данных при импорте документов.<br />
<br />
В самом общем смысле ТВП представляет собой механизм порождения элементов данных на основе имеющихся, применяемый для выполнения определенных задач.<br />
<br />
==Параметры ТВП==<br />
<br />
Ниже описаны параметры строк ТВП в том порядке, в каком они обрабатываются (в строке ТВП они расположены в обратном порядке).<br />
<br />
===Формат выборки данных===<br />
<br />
'''''Формат выборки данных''''' создается с использованием средств [[Язык форматирования системы ИРБИС|языка форматирования]].<br />
<br />
Такие средства языка форматирования как средства RTF и HTML и переменные метки нельзя применять в форматах выборки ТВП.<br />
<br />
Для некоторых методов индексирования существенной является концепция ''строки''. В этом случае весьма ответственным является употребление команд перехода на новую строку.<br />
<br />
Также весьма важным является употребление команд ''режима вывода'', так как некоторые методы индексирования фактически требуют наличия конкретного режима вывода. В связи с этим, пользователь сам должен побеспокоиться, чтобы тот или иной формат выборки данных содержал необходимые команды режима вывода.<br />
<br />
Следует также отметить, что использование преобразования букв в прописные может повлиять на дальнейшую обработку данных, создаваемых с помощью ТВП. Как правило, не нужно использовать такое преобразование, то есть надо использовать режимы mpl, mhl, mdl, а не mpu, mhu, mdu. Система автоматически производит преобразование букв в прописные, когда в этом появляется необходимость. Например, все элементы, создаваемые ТВП для инвертированного файла, переводятся в прописные буквы до их размещения в словаре, даже если ТВП порождает элементы в виде строчных букв.<br />
<br />
===Методы индексирования===<br />
<br />
'''''Метод индексирования''''' определяет специфическую обработку данных, созданных форматом. Имеется девять методов индексирования. Они идентифицируются числовыми кодами от 0 до 8.<br />
<br />
====Метод индексирования 0====<br />
<br />
Создаёт элемент из каждой строки, сформированной в соответствии с форматом. Этот метод обычно используется для индексирования в целом всего поля или подполя. Следует обратить особое внимание, что система в данном случае строит элементы из строк, а не из полей. В качестве выходного результата форматирования выступает строка символов, в которой нет никакого указания на ее принадлежность (или принадлежность части строки) тому или иному полю или подполю. Поэтому следует быть особенно внимательным, чтобы формат порождал корректные данные, особенно в тех случаях, когда индексируются повторяющиеся поля и/или более одного поля. Другими словами, при использовании данного метода, выводимые в соответствии с форматом отбора данные должны быть представлены отдельной строкой для каждого индексируемого элемента.<br />
<br />
====Метод индексирования 1====<br />
<br />
Создаёт элемент из каждого подполя или строки, созданных форматом. Так как в этом случае система будет производить поиск кодов разделителей подполей в строке, созданной форматом, то для обеспечения правильной работы метода в формате должен быть указан режим проверки mpl (или вообще не указан никакой режим, так как режим проверки выбирается по умолчанию), который обеспечивает сохранность разделителей подполей в выходном результате формата. Напомним, что режимы заголовка и данных заменяют разделители подполей на знаки пунктуации. Отметим, что метод индексирования 1 позволяет сделать описание более коротким, чем метод индексирования 0.<br />
<br />
Ниже приведены примеры использования данного метода. Показано, как работает метод в режиме данных.<br />
<br />
'''Содержание поля 26 используемой в примерах записи:'''<br />
26 ^aParis^bUnesco^c1965<br />
<br />
{| class="standard"<br />
!ТВП||Результат форматирования||Порождённые ТВП элементы<br />
|-<br />
|<tt>1 1 mpl,v26</tt>||<tt>^aParis^bUnesco^c1965</tt>||<br />
{| class=""<br />
|Paris<br />
|-<br />
|Unesco<br />
|-<br />
|1965<br />
|}<br />
|-<br />
|<tt>1 0 mhl,v26^a/v26^b/v26^c</tt>||<br />
{| class=""<br />
|Paris<br />
|-<br />
|Unesco<br />
|-<br />
|1965<br />
|}<br />
||<br />
{| class=""<br />
|Paris<br />
|-<br />
|Unesco<br />
|-<br />
|1965<br />
|}<br />
|-<br />
|<tt>1 1 mdl,v26</tt>||<tt>Paris, Unesco, 1965</tt>||<tt>Paris, Unesco, 1965</tt><br />
|}<br />
<br />
====Метод индексирования 2====<br />
<br />
Создаёт элемент из каждого термина или фразы, заключенных в угловые скобки (<tt><</tt>…<tt>></tt>). Любой текст, расположенный вне скобок, не индексируется. Заметим, что данный метод требует, чтобы в формате указывался [[Язык форматирования системы ИРБИС#Команды режима вывода|режим проверки]], так как любой другой режим вывода удаляет угловые скобки. Например, текст<br />
<Отчет> по использованию <информатики> и <программирования> в <средней школе><br />
приведет к порождению следующих элементов:<br />
отчет<br />
информатики<br />
программирования<br />
средней школе<br />
<br />
====Метод индексирования 3====<br />
<br />
Создаёт элемент из каждого термина или фразы, заключенных в косые черты (<tt>/</tt>…<tt>/</tt>). Во всём остальном он работает точно так же, как и метод индексирования 2. Например, текст<br />
/Отчет/ по использованию /информатики/ и /программирования/ в /средней школе/<br />
приведет к порождению следующих элементов:<br />
отчет<br />
информатики<br />
программирования<br />
средней школе<br />
<br />
====Метод индексирования 4====<br />
<br />
Создаёт элемент из каждого слова в тексте, созданном форматом.<br />
<br />
Подробнее о выборе слов см. подраздел ''[[#Алгоритм выбора слов|Алгоритм выбора слов]]''.<br />
<br />
При использовании данного метода для индексации поля, содержащего разделители подполей, в формате выборки данных необходимо указать [[Язык форматирования системы ИРБИС#Команды режима вывода|режимы заголовка или данных]] (mhl или mdl) с тем, чтобы замена разделителей подполей произошла до индексации, так как в противном случае буква разделителя подполей будет рассматриваться как составная часть слова.<br />
<br />
====Методы индексирования 5, 6, 7, 8====<br />
<br />
Методы индексирования 5, 6, 7 и 8 аналогичны соответственно методам 1, 2, 3, 4 за исключением того, что они дополнительно предоставляют возможность присоединять к индексируемым терминам префиксы. Присоединяемый префикс определяется в формате выборки данных в виде безусловного литерала и имеет следующий вид:<br />
'dp...pd', [format]<br />
где:<br />
* <tt>d</tt> – выбранный по усмотрению пользователя ограничитель, который не попадает в текст префикса;<br />
* <tt>p..p</tt> – собственно префикс.<br />
<br />
Например, строка ТВП<br />
1 8 '/К=/',v200^a<br />
приведет к индексированию каждого слова подполя <tt>a</tt> поля 200 с предварительным присоединением к каждому термину префикса <tt>К=</tt>.<br />
<br />
Эти методы широко применяются в системе ИРБИС для определения принадлежности терминов к определенным элементам описания. Именно на основе этих методов создается модель словарей по различным элементам данных ("Авторы", "Заглавие" и т.д.). При этом при показе словарей соответствующие префиксы опускаются.<br />
<br />
====Метод индексирования 9====<br />
<br />
Метод индексирования 9 был разработан в качестве расширения концепции ТВП. Реализован в рамках технологии [[Полнотекстовые базы данных ИРБИС|полнотекстовых баз данных ИРБИС]], и работает только для функций создания и актуализации словаря.<br />
<br />
Подробнее см. [[Механизм полнотекстового поиска#Метод индексирования 9|подразделе ''Метод индексирования 9'' статьи ''Механизм полнотекстового поиска'']].<br />
<br />
===Идентификатор поля===<br />
<br />
'''''Идентификатор поля''''' – это число, которое назначается каждому элементу, создаваемому на шаге индексирования. Смысл идентификатора поля зависит от целей последующего использования ТВП. В случае [[#ТВП для инвертированного файла|использования ТВП для создания инвертированного файла]] идентификатор поля представляет собой вторую компоненту индексной ссылки для соответствующего термина. При использовании ТВП для переформатирования (импорта, экспорта, копирования), идентификатор поля представляет собой метку, присваиваемую экспортируемому, импортируемому или копируемому полю.<br />
<br />
==Алгоритм выбора слов==<br />
<br />
Выбор слов происходит при использовании методов индексирования [[#Метод индексирования 4|4]], [[#Методы индексирования 5, 6, 7, 8|8]] и [[#Метод индексирования 9|9]].<br />
<br />
Выбор слов необходим при [[Индекс базы данных ИРБИС|индексировании базы данных]].<br />
<br />
''Примечание: см. также [[Рекомендации по обслуживанию баз данных ИРБИС#Настройка процесса выбора слов в словарь базы данных|рекомендации по настройке процесса выбора слов в словарь базы данных]].''<br />
<br />
===Выбор слов из текста===<br />
<br />
Разбиение некоторого текста на слова осуществляется на основе разделения символов на '''''алфавитные''''' (являющиеся частью слова) и '''''неалфавитные'''''.<br />
<br />
Разбиение текста на слова осуществляется в соответствии со следующими правилами:<br />
* словом считается непрерывная последовательность '''''алфавитных символов''''';<br />
* '''''неалфавитные''''' символы отделяют одно слово от другого.<br />
<br />
Символ считается алфавитным, если код символа присутствует в так называемой '''''таблице алфавитных символов'''''. '''''Таблица алфавитных символов''''' присутствует в системе ИРБИС в виде [[Файлы ИРБИС#Таблица алфавитных символов|текстового файла <tt>ISISACW.TAB</tt>]].<br />
<br />
===Отбрасывание стоп-слов===<br />
<br />
Система отбрасывает стоп-слова.<br />
<br />
Список стоп-слов определён в [[Файлы ИРБИС#Файл стоп-слов|'''''файле стоп-слов''''']].<br />
<br />
==Ссылки==<br />
<br />
'''См. также:'''<br />
* [[Базы данных ИРБИС]]<br />
* [[Полнотекстовые базы данных ИРБИС]]<br />
* [[Язык форматирования системы ИРБИС]]<br />
* [[Язык запросов ИРБИС]]<br />
* [[Индекс базы данных ИРБИС]]<br />
* [[Механизм актуализации записи]]<br />
<br />
'''Источники информации:'''<br />
* [[Общее описание системы ИРБИС64]]<br />
<br />
[[Категория:Языки и алгоритмы ИРБИС]]<br />
[[Категория:Базы данных ИРБИС]]<br />
[[Категория:Анонсированные статьи]]</div>Sokvhttp://wiki.elnit.org/index.php?title=%D0%98%D0%BD%D0%B4%D0%B5%D0%BA%D1%81_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%98%D0%A0%D0%91%D0%98%D0%A1&diff=2445Индекс базы данных ИРБИС2016-02-16T22:05:54Z<p>Sokv: /* Ссылки */</p>
<hr />
<div>''Индекс'' [[Базы данных ИРБИС|базы данных ИРБИС]] – специальная структура, являющаяся частью базы данных, которая обеспечивает быстрый поиск.<br />
<br />
Термин ''словарь'' получил широкое распространение и фактически стал в ИРБИС-сообществе своего рода заменой понятию ''индекс'' (см. подраздел [[#Словарь базы данных|''Словарь базы данных'']]).<br />
<br />
В базах данных ИРБИС используется [http://ru.wikipedia.org/wiki/%D0%98%D0%BD%D0%B2%D0%B5%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81 ''инвертированный индекс''], который принято называть ''инвертированный файл'' (также используют термин ''инверсный файл'').<br />
<br />
''Индекс'' создаётся для каждой базы данных ИРБИС.<br />
<br />
Для формулировки запросов, с помощью которых выполняется быстрый поиск, служит [[Язык запросов ИРБИС|язык запросов ИРБИС]].<br />
<br />
==Словарь базы данных==<br />
<br />
Часто ''словарь'' используют как синоним понятия ''индекс'' базы данных. Хотя, строго говоря, ''словарь'' – лишь часть ''индекса'', наряду со ''списком индексных ссылок'' (см. подраздел [[#Структура индекса базы данных ИРБИС|''Структура индекса базы данных ИРБИС'']]).<br />
<br />
''Примечание: пользователям хорошо знаком словарь, представленный непосредственно в графическом интерфейсе в ряде АРМ системы ИРБИС; возможно, поэтому термин "словарь" получил широкое распространение и фактически стал в ИРБИС-сообществе своего рода заменой понятию "индекс".''<br />
<br />
==Определение ''индекса'' базы данных ИРБИС==<br />
<br />
Для построения ''индекса'' (и поддержания в актуальном состоянии) требуется его определение. Определением служат: [[#ТВП для инвертированного файла|''ТВП для инвертированного файла'']] и [[Механизм актуализации записи#Таблица актуализации|''таблица актуализации'']].<br />
<br />
===ТВП для инвертированного файла===<br />
<br />
''ТВП для инвертированного файла'' – [[ТВП]], которая задаёт правила выбора элементов для инвертированного индекса базы данных ИРБИС.<br />
<br />
В файловой структуре каждой базы предусмотрена одна ''ТВП для инвертированного файла''. Подробнее [[Файлы ИРБИС#ТВП для инвертированного файла|см. в подразделе ''ТВП для инвертированного файла'' статьи ''Файлы ИРБИС'']].<br />
<br />
[[Базы данных ИРБИС#Виды баз данных ИРБИС 64|Типовые базы данных (БД электронного каталога, полнотекстовая БД и т.д.)]] содержат в себе соответствующие типовые ''ТВП для инвертированного файла''.<br />
<br />
Также см.:<br />
* [[Рекомендации по обслуживанию баз данных ИРБИС#Внесение изменений в ТВП для инвертированного файла|подраздел ''Внесение изменений в ТВП для инвертированного файла'' статьи ''Рекомендации по обслуживанию баз данных ИРБИС'']].<br />
<br />
==Структура ''индекса'' базы данных ИРБИС==<br />
<br />
''Индекс'' представляет собой совокупность двух структур: ''словарь поисковых терминов'' в структуре бинарного дерева и список ''индексных ссылок'', соответствующих каждому термину.<br />
<br />
===Словарь поисковых терминов===<br />
<br />
Элементы, созданные посредством ''ТВП для инвертированного файла'', составляют словарь поисковых терминов для базы данных.<br />
<br />
===Список индексных ссылок===<br />
<br />
Система связывает с каждым ''поисковым термином'' список ''индексных ссылок'', обеспечивающих требуемую связь с записями. Каждый термин имеет столько ''индексных ссылок'', сколько раз он встречается в базе данных.<br />
<br />
===Структура индексной ссылки===<br />
<br />
Для поддержки развитых средств поиска, имеющихся в языке поиска, таких, например, как поиск по ключевым словам в определенных элементах описания, каждая индексная ссылка содержит помимо MFN записи некоторую дополнительную информацию, имеющую отношение к расположению термина в записи.<br />
<br />
Индексная ссылка имеет следующие 4 компоненты:<br />
# MFN записи, содержащей термин. Эта компонента вводится в состав индексной ссылки при актуализации/формировании словаря автоматически.<br />
# Идентификатор поля, используемый в процессе поиска при указании [[Язык запросов ИРБИС#Прямой поиск|квалификатора]]. Эта компонента вводится в состав индексной ссылки на основе ТВП. Обратите внимание на то, что один и тот же идентификатор поля может быть присвоен различным полям, указанным в формате выборки.<br />
# Номер экземпляра (повторения) повторяющегося поля, необходимый для осуществления поиска на уровне поля и операторов близости расположения терминов в повторяющихся полях (в АРМах ИРБИС это используется при поиске по логике «И (в поле)»). Для того, чтобы можно было использовать указанный метод поиска (обычно для этого необходим метод индексирования 4 или 8), необходимо определить формат в ТВП таким, чтобы в его выходных данных между экземплярами повторяющегося поля располагался знак процента (%), для чего нужно задать его в качестве повторяющегося суффикс-литерала. Например, строка ТВП для инвертирования повторяющегося поля 10 должна содержать формат v10|%|. Система перед обработкой каждой строки ТВП устанавливает номер повторения в 1 и затем увеличивает его на 1 всякий раз, когда в созданном форматом тексте встречается символ %.<br />
# Последовательный номер термина, необходимый для осуществления поиска по близости расположения терминов (в АРМах ИРБИС это используется при поиске по логике «И (фраза)»). Управление присвоением данного номера происходит следующим образом: он устанавливается в 1 перед обработкой каждой строки ТВП и при изменении номера повторения и увеличивается на 1 для каждого элемента, созданного указанным методом индексирования. Например, предположим, что в повторяющемся поле 331 содержится краткое содержание литературного источника, причем каждое повторение состоит из одного абзаца. Пусть данное поле проиндексировано методом 4. Если определить формат выборки данных mdl,v331|%|, то начиная с каждого абзаца краткого содержания словам будет присваиваться последовательный номер, начиная с 1 в каждом абзаце, а если бы формат выборки был равным mdl,v331, то словам присваивался бы сквозной последовательный номер по всему краткому содержанию, например, первое слово второго абзаца имело бы последовательный номер на 1 больше номера последнего слова первого абзаца.<br />
<br />
==Обслуживание индекса==<br />
<br />
Инвертированный индекс в ИРБИС не является полностью автоматизированным, и в определённых ситуациях может потребоваться вмешательство администратора баз данных ИРБИС.<br />
<br />
Могут возникнуть следующие ситуации, требующие обслуживания индекса:<br />
* Новые записи, введенные в файл документов, недоступны при поиске.<br />
* Записи, которые подвергались модификации, доступными при поиске, но под старыми элементами доступа.<br />
* Удаленные записи все еще зарегистрированы под их элементами доступа, однако сами записи не отображаются.<br />
* ''ТВП для инвертированного файла'' была изменена (результаты поиска остались прежними).<br />
<br />
В системе ИРБИС имеются две операции, которые приводят индекс базы данных в актуальное состояние, соответствующее ''ТВП для инвертированного файла'' и содержимому базы данных: это операции ''создания словаря'' и ''актуализации словаря''. Их отличие заключается в алгоритме и особенностях применения.<br />
<br />
===Флаг актуализации===<br />
<br />
Флаг актуализации позволяет отмечать каждую запись базы данных как ''актуализированную'' или ''неактуализированную'', при этом считается, что:<br />
* запись ''актуализирована'' – значит инвертированный индекс отражает её содержимое;<br />
* запись ''неактуализирована'' – значит инвертированный индекс НЕ отражает её содержимое.<br />
<br />
Благодаря использованию в системе ИРБИС данного флага возможно:<br />
* установить факт наличия ''неактуализированных'' записей и, соответственно, сделать вывод о необходимости привести ''инвертированный индекс'' в актуальное состояние;<br />
* посчитать соотношение ''актуализированных'' и ''неактуализированных'' записей, в соответствии с которым принимать решение о приведении ''инвертированного индекса'' в актуальное состояние с помощью ''создания словаря'' или ''актуализации''.<br />
<br />
===Создание словаря===<br />
<br />
Создание [[#Словарь базы данных ИРБИС (инвертированный файл)|словаря]] – это создание инвертированного индекса с использованием [[Таблица выбора полей#ТВП для инвертированного файла|''ТВП для инвертированного файла'']] на основе всех ''записей'' (''документов'') базы данных.<br />
<br />
Типичные примеры ситуаций, в которых выполняют создание словаря:<br />
* имеется значительное количество неактуализированных записей по сравнению с общим количеством записей в базе данных;<br />
* было добавлено значительное количество текстов в полнотекстовую базу данных;<br />
* была изменена ''ТВП для инвертированного файла''.<br />
<br />
Создание словаря [[АРМ Администратор#Создание словаря базы данных ИРБИС|осуществляется с помощью АРМ Администратор]]. Ознакомьтесь с [[Рекомендации по обслуживанию баз данных ИРБИС#Создание словаря базы данных ИРБИС|рекомендациями по созданию словаря]].<br />
<br />
Алгоритм создания словаря предусматривает три этапа, которые могут быть выполнены по отдельности:<br />
* отбор<br />
* сортировка<br />
* загрузка.<br />
<br />
===Актуализация словаря===<br />
<br />
Актуализация [[#Словарь базы данных ИРБИС (инвертированный файл)|словаря]] – это приведение инвертированного индекса в актуальное состояние на основании документов, для которых по каким-либо причинам (авария, [[Модуль глобальной корректировки базы данных|глобальная корректировка]], импорт и копирование через АРМ Администратор) не выполнялась автоматическая актуализация при их вводе/корректировке.<br />
<br />
Типичные примеры ситуаций, в которых выполняют создание словаря:<br />
* количество неактуализированных записей невелико по сравнению с общим количеством записей в базе данных.<br />
<br />
Актуализация [[АРМ Администратор#Актуализация словаря базы данных ИРБИС|осуществляется с помощью АРМ Администратор]]. Ознакомьтесь с [[Рекомендации по обслуживанию баз данных ИРБИС#Актуализация словаря базы данных ИРБИС|рекомендациями по актуализации словаря]].<br />
<br />
Описание механизма актуализации инвертированного файла в связи с изменением отдельной записи см. в статье [[Механизм актуализации записи]].<br />
<br />
===Реорганизация словаря===<br />
<br />
Реорганизация словаря представляет собой структурное перестроение ''инвертированного файла'' с целью уменьшения размера файла и повышения быстродействия работы с ним.<br />
<br />
Возникновение необходимости реорганизации словаря связано с тем, что в результате выполнения актуализации словаря может происходить усложнение структуры инвертированного файла и появление «пустот», которые реорганизация устраняет.<br />
<br />
Реорганизация словаря [[АРМ Администратор#Реорганизация словаря базы данных ИРБИС|осуществляется с помощью АРМ Администратор]]. Ознакомьтесь с [[Рекомендации по обслуживанию баз данных ИРБИС#Реорганизация словаря базы данных ИРБИС|рекомендациями по реорганизации словаря]].<br />
<br />
==Файлы ''индекса'' базы данных ИРБИС==<br />
<br />
''Индекс'' базы данных ИРБИС хранится на файловой системе в виде трёх файлов: ''словарь поисковых терминов'' в файлах <tt>.n01</tt> и <tt>.l01</tt>; список ''индексных ссылок'' в файле <tt>.ifp</tt>.<br />
<br />
В бинарном дереве файл с расширением <tt>.n01</tt> содержит узлы дерева и файл с расширением <tt>.l01</tt> – листья. Записи с листьями указывают на файл ссылок <tt>.ifp</tt>.<br />
<br />
Об особенностях размещения файлов <tt>.n01</tt>, <tt>.l01</tt> и <tt>.ifp</tt> см. [[Файлы ИРБИС#Файлы баз данных ИРБИС|подраздел ''Файлы баз данных ИРБИС'' статьи ''Файлы ИРБИС'']].<br />
<br />
Взаимосвязи между файлами <tt>.n01</tt> и <tt>.l01</tt> обеспечиваются ссылками, которые представляют собой относительные адреса соответствующих записей. Относительный адрес это порядковый номер записи в данном файле.<br />
<br />
Структура записи одинакова для <tt>.n01</tt> и <tt>.l01</tt> файлов. Размер (длина) записи зависит от реализации (512, 1024, 2048, 4096). Таким образом, максимальный размер файлов <tt>.l01</tt> и <tt>.n01</tt> определяется как 2 Гб * размер записи. В данной реализации размер записи 2048.<br />
<br />
Адрес корневой записи файла <tt>.n01</tt> сохраняется как номер первой записи.<br />
<br />
Смещение на запись в файле <tt>.ifp</tt> сохраняется в файле <tt>.l01</tt> и имеет длину 64 байта (в данной реализации используется только младшее слово этого смещения).<br />
<br />
===Формат файлов <tt>.n01</tt> и <tt>.l01</tt>===<br />
<br />
Файлы состоят из записей (блоков) постоянной длины. Записи состоят из трех частей: лидера, справочника и ключей переменной длины.<br />
<br />
Формат лидера записи:<br />
{| class="standard"<br />
!Число бит||Параметр||Описание<br />
|-<br />
|32||NUMBER||номер записи (начиная с 1; в <tt>.n01</tt> файле номер первой записи равен номеру корневой записи дерева)<br />
|-<br />
|32||PREV||номер предыдущей записи (если нет = -1)<br />
|-<br />
|32||NEXT||номер следующей записи (если нет = -1)<br />
|-<br />
|16||TERMS||число ключей в записи<br />
|-<br />
|16||OFFSET_FREE||смещение на свободную позицию в записи (от начала записи)<br />
|}<br />
<br />
Справочник это таблица, определяющая поисковый термин. Каждый ключ переменной длины, который есть в записи, представлен в справочнике одним вхождением следующего формата:<br />
{| class="standard"<br />
!Число бит||Параметр||Описание<br />
|-<br />
|16||LEN||длина ключа<br />
|-<br />
|16||OFFSET_KEY||смещение на ключ (от начала записи)<br />
|-<br />
|32||LOW||В <tt>.n01</tt> файле: ссылка на запись файла <tt>.n01</tt> (если LOW > 0) или файла <tt>.l01</tt> (если LOW < 0), у которых 1-й ключ равен данному.<br />
<br />
Положительное значение LOW определяет ветку индекса иерархически более низкого уровня. Самый низкий уровень индекса (LOW < 0) соответствует ссылкам на записи (листья) файла <tt>.l01</tt>.<br />
<br />
В <tt>.l01</tt> файле: младшее слово 8-байтового смещения на ссылочную запись в <tt>.ifp</tt>.<br />
|-<br />
|32||HIGH||В <tt>.n01</tt> файле: всегда 0.<br />
<br />
В <tt>.l01</tt> файле: старшее слово 8 байтового смещения на ссылочную запись в <tt>.ifp</tt>.<br />
|}<br />
<br />
Ключи переменной длины записываются начиная с конца записи, так что порядок входов, соответствующих им, определяется алфавитным порядком ключей. Сами ключи располагаются вплотную друг к другу без разделителей в порядке поступления на запись.<br />
<br />
* '''Длина справочника''' 12 * TERMS.<br />
* '''Длина ключей''' = [Размер записи] – OFSET_FREE.<br />
* '''Размер свободного места в записи''' = 16 + 12 * TERMS - [длина ключей].<br />
* '''Размер записи''' зависит от реализации и может быть равен в байтах: 512, 1024, 2048, 4096.<br />
<br />
===Формат файла <tt>.ifp</tt>===<br />
<br />
Файл содержит список ссылок для каждого термина словаря.<br />
<br />
Список ссылок может быть представлен в 2-х различных форматах. Выбор формата размещения ссылок осуществляется при загрузке словаря из файла <tt>.lk1</tt> (этот файл формируется после отбора и сортировки терминов) в зависимости от общего числа ссылок для данного термина. Обыкновенный формат – это заголовок блока и набор упорядоченных ссылок. По превышении определенного числа ссылок (MIN_POSTINGS_IN_BLOCK – в данной реализации 256) формат включает специальный блок и набор блоков обыкновенного формата размер которых определяется по следующей схеме: блоки 4, 8, 16, 32 Кб для общего числа ссылок соответственно 256-32000, 32000-64000, 64000-128000, 128000 и более.<br />
<br />
Такая схема оптимизирует работу с диском в процессе инвертирования записи в базах данных, характеризующихся большим количеством ссылок на термин.<br />
<br />
====Обыкновенный формат записи <tt>.ifp</tt>====<br />
<br />
Запись состоит из заголовка и упорядоченного набора ссылок.<br />
<br />
Ссылка имеет следующий формат:<br />
{| class="standard"<br />
!Число бит||Параметр||Описание<br />
|-<br />
|32||PMFN||номер записи<br />
|-<br />
|32||PTAG||идентификатор поля, назначенный при отборе терминов в словарь<br />
|-<br />
|32||POCC||номер повторения<br />
|-<br />
|32||PCNT||номер термина в поле<br />
|}<br />
<br />
Заголовок имеет следующий формат:<br />
{| class="standard"<br />
!Число бит||Параметр||Описание<br />
|-<br />
|32||LOW||младшее слово смещения на следующую запись (если нет 0)<br />
|-<br />
|32||HIGH||старшее слово смещения на следующую запись (если нет 0)<br />
|-<br />
|32||TOTP||общее число ссылок для данного термина (только в первой записи); число ссылок в данном блоке (в следующих записях)<br />
|-<br />
|32||SEGP||число ссылок в данном блоке<br />
|-<br />
|32||SEGC||вместимость записи в ссылках<br />
|}<br />
<br />
Признак последнего блока – LOW = HIGH = -1<br />
<br />
====Специальный формат записи <tt>.ifp</tt>====<br />
<br />
В этом случае первой записью является специальный блок, который представляет собой заголовок (обыкновенного формата), в котором смещения имеют специальные значения = -1001, и набор вхождений следующего формата:<br />
{| class="standard"<br />
!Число бит||Параметр||Описание<br />
|-<br />
|32||POSTING||1-я ссылка из записи обыкновенного формата<br />
|-<br />
|32||LOW||младшее слово смещения на следующую запись (если нет 0)<br />
|-<br />
|32||HIGH||старшее слово смещения на следующую запись (если нет 0)<br />
|}<br />
<br />
Число вхождений кратно 4. Записи, на которые ссылается специальный блок связаны между собой как описано выше. Общее количество ссылок для данного термина сохраняется только в специальном блоке.<br />
<br />
====Модификация записей файла <tt>.ifp</tt>====<br />
<br />
При выполнении актуализации инвертированного файла могут создаваться новые дополнительные записи при добавлении новых ссылок. В этом случае создается новая запись размером, равным общему количеству ссылок, если нет специального блока, и размером, равным количеству ссылок в данной записи, если есть. Новая запись создается таким образом, чтобы не нарушалась возрастающая последовательность следования ссылок. Новая запись связывается с существующими через поле NXT_, ссылки распределяются равномерно между старой и новой записью.<br />
<br />
==Ссылки==<br />
<br />
'''См. также:'''<br />
* [[Базы данных ИРБИС]]<br />
* [[Язык запросов ИРБИС]]<br />
* [[Таблица выбора полей]]<br />
* [[Механизм актуализации записи]]<br />
* [[Механизм полнотекстового поиска]]<br />
* [[Файлы ИРБИС]]<br />
* [http://nbuv.gov.ua/books/19/isis/24.htm The UNESCO micro CDS/ISIS Software. Приложение 7. Структура инвертированного файла и форматы записей]<br />
* [[Сценарии поиска]]<br />
<br />
'''Источники информации:'''<br />
* [[Общее описание системы ИРБИС64]]<br />
* [http://lib.omgtu.ru/irb/doc/irbis128.doc ИРБИС 64/128. Общее описание системы]<br />
<br />
[[Категория:ИРБИС 64]]<br />
[[Категория:Индекс базы данных ИРБИС]]<br />
[[Категория:Файлы ИРБИС]]<br />
[[Категория:Анонсированные статьи]]</div>Sokvhttp://wiki.elnit.org/index.php?title=%D0%A7%D0%90%D0%92%D0%9E_%D0%BF%D0%BE_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B5_%D1%81_%D0%98%D0%A0%D0%91%D0%98%D0%A1&diff=2444ЧАВО по работе с ИРБИС2016-02-16T21:39:56Z<p>Sokv: </p>
<hr />
<div>==Общие сведения об ИРБИС==<br />
<br />
===Что такое ИРБИС?===<br />
<br />
Система автоматизации библиотек ИРБИС представляет собой типовое интегрированное решение для автоматизации библиотечных технологий и предназначена для использования в библиотеках любого типа и профиля.<br />
<br />
Существует несколько поколений ИРБИС. Поколения ИРБИС в порядке их появления: ИРБИС для MS DOS, ИРБИС 32, ИРБИС 64, ИРБИС 128.<br />
<br />
=== Основные характеристики ===<br />
<br />
Основные характеристики изложены [http://www.elnit.org/sistema-irbis/osnovnie-charakteristiki.html на официальном сайте Ассоциации ЭБНИТ] и в [[Общее описание системы ИРБИС64|Общем описании системы]] ({{Ссылка на открытый FTP|filename=irbis64_2008.doc|text=доступно на FTP-сервере}}).<br />
<br />
Система полностью совместима с российским и международными форматами представления библиографических данных RUSMARC/UNIMARC/MARC21 на основе средств двухсторонней конверсии данных.<br />
<br />
Система позволяет создавать и поддерживать любое количество [[Базы данных электронного каталога системы ИРБИС|баз данных, составляющих Электронный каталог]] или представляющих собой проблемно-ориентированные библиографические базы данных.<br />
<br />
В системе реализован быстрый поиск по любым элементам описания и их сочетаниям на основе технологии, подразумевающей автоматическое [[Индекс базы данных ИРБИС|индексирование (формирование словаря)]] базы данных.<br />
<br />
Средства каталогизации позволяют обрабатывать и описывать любые виды изданий, включая нетрадиционные, такие как аудио- и видеоматериалы, компьютерные файлы и программы, картографические материалы, ноты и т.д.<br />
<br />
Система предлагает средства для заимствования готовых библиографических описаний из корпоративных ресурсов через Интернет.<br />
<br />
Система поддерживает традиционные "бумажные" технологии, предоставляя возможности для получения широкого спектра выходных форм: начиная с листов заказа и книги суммарного учета и кончая указателями и всеми видами каталожных карточек.<br />
<br />
Система предлагает средства для ведения и использования Авторитетных файлов, баз данных УДК, ББК, ГРНТИ и Тезауруса.<br />
<br />
Система включает технологии, ориентированные на использование штрих-кодов и радиометок на экземплярах изданий и читательских билетах.<br />
<br />
Система включает средства, которые позволяют использовать в качестве иллюстративного материала [[Связывание документов базы данных ИРБИС с внешними объектами|любые внешние по отношению к библиографическому документу объекты]], такие как полные тексты, графика, таблицы, аудио- и видеоматериалы, а также ресурсы Интернет.<br />
<br />
Система поддерживает многоязычие (т.е. ввод данных на любых языках) на основе UNICODE.<br />
<br />
Система предлагает средства для перевода пользовательских интерфейсов на другие языки.<br />
<br />
Система предлагает большой набор сервисных средств, обеспечивающих удобство и наглядность пользовательских интерфейсов, упрощающих процесс ввода, исключающих ошибки и дублирование информации.<br />
<br />
Система обладает широкими возможностями для адаптации ее к условиям работы конкретной библиотеки на основе инструментальных средств настройки и профилей пользователей.<br />
<br />
===Чем отличаются ИРБИС 32, ИРБИС 64 и ИРБИС 128?===<br />
<br />
Обозначения поколений системы ИРБИС, числа 32, 64 и 128 условны.<br />
<br />
ИРБИС 64 и ИРБИС 32 на данный момент являются наиболее распространёнными. ИРБИС 128 – передовой проект, находящийся в стадии активного развития. Однако, многие функциональные возможности, предоставляемые ИРБИС 64, пока отсутствуют в ИРБИС 128.<br />
<br />
ИРБИС 32 – система с файл-серверной архитектурой.<br />
<br />
[[ИРБИС 64]] – система с клиент-серверной архитектурой.<br />
<br />
Подробнее об отличиях ИРБИС 32 и ИРБИС 64 [http://irbis.gpntb.ru/read.php?2,29131,29197 см. соответствующую тему на форуме ИРБИС].<br />
<br />
Об особенностях ИРБИС 128 [http://irbis.gpntb.ru/read.php?45,33437,page=1 см. тему ''ИРБИС-128'' на форуме ИРБИС].<br />
<br />
===Список основных модулей ИРБИС 64===<br />
<br />
В состав системы [[ИРБИС 64]] входят следующие модули и автоматизированные рабочие места (АРМ):<br />
* [[TCP/IP сервер ИРБИС 64]], включающий средства мониторинга выполняемых процессов, авторизации пользователей и протоколирования их действий;<br />
* [[АРМ Администратор]] – рабочее место специалиста, выполняющего системные операции над базами данных в целом, направленные на поддержание их в актуальном и сохранном состоянии;<br />
* [[АРМ Каталогизатор]] – рабочее место библиотечного работника, выполняющего функции по формированию (пополнению и корректировке) ''электронного каталога'' и других баз данных системы;<br />
* [[АРМ Комплектатор]] – рабочее место библиотечного работника, выполняющего функции по комплектованию и учету фондов библиотеки на основе ведения специальной базы данных;<br />
* [[АРМ Читатель]] – рабочее место конечного пользователя электронного каталога, предназначенное для всеобъемлющего поиска в Электронном каталоге, просмотра/печати найденной информации и формирования заказа на выдачу найденной литературы;<br />
* [[АРМ Книговыдача]] – рабочее место библиотечного работника, выполняющего функции по выдаче и возврату литературы;<br />
* [[АРМ Книгообеспеченность]] – модуль для решения задачи книгообеспеченности для вузовских библиотек.<br />
* [[АРМ Корректор]] – модуль для автоматического поиска и исправления ошибок в базах данных ИРБИС (в том числе БД электронного каталога, читателей, комплектования и книгообеспеченности).<br />
<br />
===Что такое Веб-ИРБИС?===<br />
<br />
'''''Веб-ИРБИС – программный продукт''''', обеспечивающий доступ пользователей через веб-браузер к базам данных ИРБИС: электронным каталогам, другим библиографическим базам и электронным коллекциям полнотекстовых документов.<br />
<br />
Также см. [[Веб-ИРБИС]].<br />
<br />
===Демонстрационные версии ИРБИС===<br />
<br />
Демонстрационные версии ИРБИС есть на FTP-сервере [ftp://ftp.gpntb.ru ftp://ftp.gpntb.ru].<br />
<br />
Демонстрационных версий веб-шлюза ИРБИС не существует. Получить представление о работе веб-шлюза ИРБИС можно на примере [http://librarynew.gpntb.ru/cgi/irbis64r_simplesite/cgiirbis_64.exe?C21COM=F&I21DBN=IBIS&P21DBN=IBIS&S21CNR=&Z21ID= электронного каталога ГПНТБ]. Пример реализации полнотекстовых баз данных ИРБИС в вебе на основе веб-шлюза ИРБИС также [http://library.gpntb.ru/cgibin/irbis64_fulltexts/irbis64_fulltext_web.cgi?com=sf&frameslist=cgi_mainform.pft есть на сайте ГПНТБ]. Следует иметь в виду, что последний пример представляет собой переделанную версию пользовательского интерфейса, оригинальный интерфейс выглядит примерно так же, как и [http://librarynew.gpntb.ru/cgi/irbis64r_simplesite/cgiirbis_64.exe?C21COM=F&I21DBN=IBIS&P21DBN=IBIS&S21CNR=&Z21ID= электронный каталог ГПНТБ].<br />
<br />
Демо-версии ИРБИС отличаются от полноценных надписью ''Демонстрационная версия'' в заголовке окна, ограничением на количество записей в базе данных и ограничением периода работы, обычно в течение года с момента выхода очередной версии.<br />
<br />
===Источники информации о системе ИРБИС===<br />
<br />
[http://www.elnit.org http://www.elnit.org] – официальный сайт Ассоциации ЭБНИТ, разработчиков системы ИРБИС.<br />
<br />
[http://irbis.gpntb.ru http://irbis.gpntb.ru] – форум с участием разработчиков ИРБИС.<br />
<br />
====Документация, поставляемая с системой ИРБИС====<br />
<br />
Документация, поставляемая с системой ИРБИС, состоит из следующих документов:<br />
* [[Общее описание системы ИРБИС64|Общее описание системы]] ({{Ссылка на открытый FTP|filename=irbis64_2008.doc|text=доступно на FTP-сервере}}) включает основные сведения о системе, описание основных АРМов и модулей. В качестве приложений дается описание инструментальных средств, необходимых для самостоятельной настройки и конфигурирования системы.<br />
* Техническая документация WEB ИРБИС64 и WEB ИРБИС32. [http://irbis.gpntb.ru/read.php?21,62125 Последняя версия документа доступна на форуме ИРБИС.]<br />
* [[Документация, поставляемая с системой ИРБИС#Инструкция по переходу на новую версию программного обеспечения ИРБИС 64|Инструкция по переходу на новую версию программного обеспечения ИРБИС 64]]<br />
* [[Документация, поставляемая с системой ИРБИС#История версий ИРБИС 64|История версий ИРБИС 64]]<br />
и [[Документация, поставляемая с системой ИРБИС|другие документы]].<br />
<br />
====Другие источники информации====<br />
<br />
[http://lib.omgtu.ru/irb/doc/irbis128.doc ''ИРБИС 64/128. Общее описание системы''].<br />
<br />
[http://nucleonics.fatal.ru/irbis.htm http://nucleonics.fatal.ru/irbis.htm] – справка по системе ИРБИС, доступная ''online'' в формате HTML, а также для скачивания в формате <tt>.chm</tt>. Основана на поставляющейся с ИРБИС 64 документацией.<br />
<br />
[http://wiki.elnit.org http://wiki.elnit.org] – вики-документация по системе автоматизации библиотек ИРБИС.<br />
<br />
[ftp://ftp.gpntb.ru ftp://ftp.gpntb.ru] – FTP-сервер с демонстрационными версиями ИРБИС и другими материалами.<br />
<br />
[http://nbuv.gov.ua/books/19/isis/index.html Документация по системе CDS/ISIS.] Не имеет прямого отношения к системе ИРБИС, но может быть полезной.<br />
<br />
[http://irbis.gpntb.ru/file.php?0,file=5484 Ещё один вариант документации по системе CDS/ISIS.] Примечание: переходя по этой ссылке получаете ответ ''Ссылаться на файлы в этом форуме не разрешено''. Для того, чтобы всё-таки открыть документацию устанавливаете курсор в адресную строку и нажимаете ''Enter'' – работает в Firefox.<br />
<br />
===Какие существуют ограничения на размер базы данных в ИРБИС 64?===<br />
<br />
В ИРБИС 64 существует ограничение на размер базы данных в 4 294 967 296 записей. Информацию о других ограничениях можно найти [[Базы данных ИРБИС#Базы данных ИРБИС 64|в соответствующем разделе статьи Базы данных ИРБИС]].<br />
<br />
Максимальный известный объем базы данных, реально работающий под управлением сервера ИРБИС 64, составляет около 11 миллионов записей.<br />
<br />
===Программное и техническое обеспечение===<br />
<br />
Система работает в архитектуре клиент-сервер, обеспечивая взаимодействие клиентских приложений (пользовательских АРМ) и [[TCP/IP сервер ИРБИС 64|сервера баз данных на основе протокола TCP/IP]] как в локальных, так и в глобальных сетях.<br />
<br />
Программное обеспечение ИРБИС использует [[Базы данных ИРБИС|базы данных ИРБИС]].<br />
<br />
Оригинальное программное обеспечение написано на Delphi.<br />
<br />
Платформой для клиентских мест и сервера является операционная система Windows 2000/ХР/NT и выше.<br />
<br />
==Сленг ИРБИСоводов==<br />
<br />
Опыт показывает, что человеку со стороны, начинающему работу с системой ИРБИС, может быть трудно разобраться в инструкциях и рекомендациях опытных ИРБИСоводов, которые часто изобилуют специфическими терминами. В результате появляется необходимость в словарях терминов, принятых в сообществе ИРБИС (например, [http://irbis.gpntb.ru/read.php?35,20753 Терминология Ирбис] на форуме).<br />
<br />
На данном ресурсе также появилась необходимость в словаре для создания цельной связной системы текстов (см. [[О проекте вики-документации по САБ ИРБИС#Использование специфической терминологии ИРБИС|подраздел ''Использование специфической терминологии ИРБИС'' статьи ''О проекте вики-документации по САБ ИРБИС'']]).<br />
<br />
В этом подразделе приведён словарь наиболее распространённых специфических терминов, используемых сообществом ИРБИС.<br />
<br />
===Вложенный рабочий лист===<br />
<br />
'''''Вложенный рабочий лист''''' (также называют ''рабочий лист подполей'') – средство, служащее для обеспечения ввода/корректировки ''подполей'', в совокупности составляющих определённое ''поле'' в ''записи'' в базе данных ИРБИС. Для того чтобы избавить пользователя от необходимости вводить разделители подполей (т.е. необходимости знать внутреннюю структуру полей), а также для наглядности и удобства ввода, служат вложенные РЛ. По своей структуре вложенный РЛ представляет собой табличную форму, аналогичную одной странице ''рабочего листа ввода''.<br />
<br />
===Документ (применительно к базе данных)===<br />
<br />
'''''Документ (применительно к базе данных)''''' – ''запись'' базы данных ИРБИС.<br />
<br />
===Инвертированный файл===<br />
<br />
'''''Инвертированный файл''''' – так принято называть [[Индекс базы данных ИРБИС|''индекс'']] базы данных ИРБИС. ''Инвертированный файл'' – НЕ значит один файл на файловой системе, и фактически состоит из трёх файлов: <tt>.n01</tt>, <tt>.l01</tt> и <tt>.ifp</tt> (см. [[Индекс базы данных ИРБИС#Файлы индекса базы данных ИРБИС|подраздел ''Файлы индекса базы данных ИРБИС'' статьи ''Индекс базы данных ИРБИС'']]).<br />
<br />
===ПБД===<br />
<br />
'''''ПБД''''' – см. [[#Полнотекстовая база данных|''полнотекстовая база данных'']].<br />
<br />
===Переформатирование===<br />
<br />
'''''Переформатирование''''' – процесс преобразования ''записи'' базы данных ИРБИС на основе правил, заданных ''[[ТВП]]''.<br />
<br />
===Подполе===<br />
<br />
'''''Подполе''''' – именованная часть ''поля'', наименьший структурный элемент в [[Базы данных ИРБИС#Модель баз данных ИРБИС|модели баз данных ИРБИС]].<br />
<br />
===Полнотекстовая база данных===<br />
<br />
'''''Полнотекстовая база данных''''' – см. [[Полнотекстовые базы данных ИРБИС]].<br />
<br />
===Рабочий лист===<br />
<br />
'''''Рабочий лист''''' – см. ''рабочий лист ввода'' и ''вложенный рабочий лист''.<br />
<br />
===Рабочий лист ввода===<br />
<br />
'''''Рабочий лист ввода''''' (также называют ''рабочий лист полей'') – средство, служащее для обеспечения ввода/корректировки полей, в совокупности составляющих ''запись'' в базе данных ИРБИС. ''Рабочий лист ввода'' определяется при помощи структуры, которая задаёт: набор ''страниц'' и наборы ''полей'', относящихся к заданным ''страницам''. В зависимости от базы данных система предлагает набор ''рабочих листов''. В случае [[Базы данных электронного каталога системы ИРБИС|базы данных электронного каталога]] система предлагает набор ''рабочих листов'', предназначенных для ввода/корректировки различных видов библиографического описания.<br />
<br />
===Рабочий лист подполей===<br />
<br />
'''''Рабочий лист подполей''''' – см. ''вложенный рабочий лист''.<br />
<br />
===Рабочий лист полей===<br />
<br />
'''''Рабочий лист полей''''' – см. ''рабочий лист ввода''.<br />
<br />
===РЛ===<br />
<br />
'''''РЛ''''' – см. ''рабочий лист ввода'' и ''вложенный рабочий лист''.<br />
<br />
===Словарь===<br />
<br />
'''''Словарь''''' – [[Индекс базы данных ИРБИС|индекс базы данных ИРБИС]].<br />
<br />
===Справочник===<br />
<br />
'''''[[Справочники|Справочник]]''''' используется для представления в системе ИРБИС списка или иерархической структуры, состоящих из элементов вида ''код'' – ''значение'': для ввода, хранения, обработки и вывода таких кодированных элементов.<br />
<br />
===Сценарий поиска===<br />
<br />
'''''[[Сценарии поиска|Сценарий поиска]]''''' – представляет собой совокупность параметров, которые определяют возможности поиска в определенной базе данных. Понятие ''сценарий поиска'' имеет отношение к [[АРМ Читатель]] и [[АРМ Каталогизатор]]. В виде набора соответствующих параметров [[Параметры настройки системы (информация сверена с базой HLPINI)#Сценарии поиска|содержится в файлах настройки системы файле]].<br />
<br />
===Таблица актуализации===<br />
<br />
'''''[[Механизм актуализации записи#Таблица актуализации|Таблица актуализации]]''''' – часть [[Индекс базы данных ИРБИС#Определение индекса базы данных ИРБИС|определения индекса базы данных ИРБИС]].<br />
<br />
===Таблица выбора полей===<br />
<br />
'''''[[ТВП|Таблица выбора полей]]''''' (принято сокращение ''ТВП'') – набор правил, служащий для: 1) создания набора терминов инвертированного файла (''словаря'') на основе ''записи'' или 2) переформатирования – преобразования ''записи'' базы данных ИРБИС (используется во время операций импорта, экспорта или копирования).<br />
<br />
===ТВП===<br />
<br />
'''''[[ТВП]]''''' – принятое сокращение термина ''таблица выбора полей''.<br />
<br />
===Формат===<br />
<br />
'''''[[Язык форматирования системы ИРБИС#Понятие формата|Формат]]''''' – совокупность команд и функций, записанных в соответствии с требованиями ''языка форматирования''.<br />
<br />
===Форматёр===<br />
<br />
[[Язык форматирования системы ИРБИС#Форматёр|'''''Форматёр''''']] - модуль, служащий для выполнения формата.<br />
<br />
===Язык форматирования системы ИРБИС===<br />
<br />
'''''[[Язык форматирования системы ИРБИС]]''''' – язык манипулирования данными ИРБИС.<br />
<br />
==Установка, настройка и обслуживание системы ИРБИС==<br />
<br />
===Как установить ИРБИС?===<br />
<br />
См. статьи:<br />
* [[Установка продуктов ИРБИС]],<br />
* [[Установка Веб-шлюза Ирбис 64]],<br />
* [[Установка и использование ИРБИС 64 для полнотекстовых баз данных]].<br />
<br />
===Каков основной механизм настройки системы ИРБИС?===<br />
<br />
В основном настройка системы ИРБИС 64 осуществляется внесением изменений в [[Файлы ИРБИС#Конфигурационные файлы ИРБИС|конфигурационные (инициализационные) файлы]] и справочники системы.<br />
<br />
===Как изменить заголовок на странице электронного каталога?===<br />
<br />
После установки Веб-шлюза ИРБИС в качестве заголовка страницы электронного каталога фигурирует "Государственная публичная научно-техническая библиотека России". Изменить заголовок можно в фрейме <tt>header_1.frm</tt> (краткое описание фрейма см. [[Файлы ИРБИС#Фреймы|по ссылке]]).<br />
<br />
===Как изменить названия баз данных, которые видит пользователь системы ИРБИС?===<br />
<br />
В ИРБИС для любого АРМ существует соответствующий справочник, в котором заданы: список доступных баз данных и названия баз данных, которые видит пользователь. [[Файлы ИРБИС#Справочники, определяющие списки доступных баз данных ИРБИС для Веб-ИРБИС|Справочники, определяющие списки доступных баз данных в Веб-ИРБИС описаны отдельно.]]<br />
<br />
Путём внесения изменений в эти справочники можно регулировать:<br />
* список баз данных, доступных при использовании соответствующего АРМ;<br />
* названия баз данных, которые увидит пользователь соответствующего АРМ.<br />
<br />
Подробнее см. [[Файлы ИРБИС#Справочники, определяющие списки доступных баз данных ИРБИС для различных АРМ ИРБИС|в статье '''Файлы ИРБИС''' раздел '''Справочники, определяющие списки доступных баз данных ИРБИС для различных АРМ ИРБИС''']]).<br />
<br />
Об изменении списка доступных баз данных в интерфейсе пользователя Веб-ИРБИС см. в [[Настройка и обслуживание Веб-ИРБИС#Список доступных читателю баз данных|разделе '''Список доступных читателю баз данных''' статьи '''Настройка и обслуживание Веб-ИРБИС''']].<br />
<br />
===Как изменить список доступных пользователям системы ИРБИС баз данных?===<br />
<br />
См. [[#Как изменить названия баз данных, которые видит пользователь системы ИРБИС?|выше в этой же статье раздел '''Как изменить названия баз данных, которые видит пользователь системы ИРБИС?''']]<br />
<br />
===Как восстановить базу данных ИРБИС?===<br />
<br />
Воспользуйтесь рекомендациями [[Рекомендации по обслуживанию баз данных ИРБИС#Рекомендации по восстановлению базы данных в случае ее разрушения|по восстановлению базы данных в случае ее разрушения]].<br />
<br />
===Как правильно осуществлять резервное копирование баз данных ИРБИС?===<br />
<br />
Резервное копирование входит в список минимальных обязанностей администратора системы ИРБИС. Рекомендуется [http://irbis.gpntb.ru/read.php?35,33321 ознакомиться со взглядом на резервное копирование с этой точки зрения на форуме ИРБИС].<br />
<br />
Наличие актуальной (т.е. соответствующей последним изменениям) резервной копии файла документов гарантирует полное восстановление базы данных в случае ее разрушения. Воспользуйтесь рекомендациями [[Рекомендации по обслуживанию баз данных ИРБИС#Резервное копирование файла документов базы данных ИРБИС|по резервному копированию файла документов базы данных ИРБИС]].<br />
<br />
В случае использования полнотекстовых баз данных также требуется создавать резервные копии полнотекстовых документов.<br />
<br />
===Какой алгоритм разбиения текста на слова при создании словаря? Возможна ли настройка работы этого алгоритма?===<br />
<br />
См. [[ТВП#Алгоритм выбора слов|подраздел ''Алгоритм выбора слов'' статьи ''Таблица выбора полей'']] и [[Рекомендации по обслуживанию баз данных ИРБИС#Настройка процесса выбора слов в словарь базы данных|подраздел ''Настройка процесса выбора слов в словарь базы данных'' статьи ''Рекомендации по обслуживанию баз данных ИРБИС'']].<br />
<br />
Обсуждения на форуме: [http://irbis.gpntb.ru/read.php?48,20476 1].<br />
<br />
==="Кракозябры" в графическом интерфейсе ИРБИС===<br />
<br />
См. форум ИРБИС: [http://irbis.gpntb.ru/read.php?35,19193 Поддержка русского языка в Windows 2003 server], [http://irbis.gpntb.ru/read.php?10,43075 Виртуальная клавиатура], [http://irbis.gpntb.ru/read.php?33,52700 Ошибка. Кодировка меню].<br />
<br />
Решение этой проблемы для Windows 7 см. [[Известные проблемы и их решения, касающиеся работы с полнотекстовыми базами ИРБИС#"Кракозябры" в графическом интерфейсе АРМ Читатель для полнотекстовых баз данных в Windows 7|в подразделе ''"Кракозябры" в графическом интерфейсе АРМ Читатель для полнотекстовых баз данных в Windows 7'' статьи ''Известные проблемы и их решения, касающиеся работы с полнотекстовыми базами ИРБИС'']].<br />
<br />
==Функциональные возможности ИРБИС==<br />
<br />
===Есть база данных электронного каталога со ссылками на полные тексты. Как включить эти тексты в полнотекстовую базу?===<br />
<br />
В АРМ Администратор полнотекстовых БД предусмотрена возможность [[АРМ Администратор полнотекстовых БД#Включение текстов из электронного каталога|включения текстов из электронного каталога]].<br />
<br />
===Какие возможности предоставляет система ИРБИС для поиска по полным текстам?===<br />
<br />
Для обеспечения ранжированного полнотекстового поиска разработано программное решение [[Полнотекстовые базы данных ИРБИС]].<br />
<br />
Кроме того, возможен ранжированный полнотекстовый поиск по полным текстам, прикрепленным в качестве [[Связывание документов базы данных ИРБИС с внешними объектами|внешних объектов]] к [[Базы данных электронного каталога системы ИРБИС|базам данных электронного каталога]]. Для использования этой возможности требуется [[АРМ Администратор полнотекстовых БД|АРМ Администратор полнотекстовых БД]]. Подробнее об этой возможности [[Связывание документов базы данных ИРБИС с внешними объектами#Поиск в базе данных электронного каталога по словам полного текста, связанного с базой в качестве внешнего объекта|см. в статье '''Связывание документов базы данных ИРБИС с внешними объектами''' раздел '''Поиск в базе данных электронного каталога по словам полного текста, связанного с базой в качестве внешнего объекта''']].<br />
<br />
==Веб-ИРБИС и Z-ИРБИС==<br />
<br />
===Как установить Веб-шлюз Ирбис?===<br />
<br />
Воспользуйтесь инструкцией [[Установка Веб-шлюза Ирбис 64]].<br />
<br />
===Как сделать Веб-шлюз ИРБИС доступным через Интернет, если Веб-ИРБИС уже развёрнут на сервере, не доступном через Интернет?===<br />
<br />
Воспользуйтесь инструкцией [[Настройка веб-сервера Apache в качестве прокси сервера]].<br />
<br />
===Как изменить список доступных читателю баз данных?===<br />
<br />
Об изменении списка доступных баз данных в интерфейсе пользователя Веб-ИРБИС см. в [[Настройка и обслуживание Веб-ИРБИС#Список доступных читателю баз данных|разделе '''Список доступных читателю баз данных''' статьи '''Настройка и обслуживание Веб-ИРБИС''']].<br />
<br />
===Как сконфигурировать веб-шлюз Ирбис для его включения в Ирбис корпорацию?===<br />
<br />
Воспользуйтесь инструкцией [[Распределённый поиск в Ирбис#Краткая инструкция по конфигурированию веб-шлюза Ирбис для его включения в Ирбис корпорацию|по конфигурированию веб-шлюза Ирбис для его включения в Ирбис корпорацию]].<br />
<br />
==Базы данных электронного каталога ИРБИС==<br />
<br />
===Какие существуют возможности использования тезауруса в ИРБИС?===<br />
<br />
В ИРБИС есть несколько реализаций тезауруса: базы данных TEZ и URUB.<br />
<br />
Основное отличие TEZ и URUB следующее: в TEZ с дескриптором может быть связан только один вышестоящий дескриптор, в URUB с дескриптором могут быть связаны несколько вышестоящих дескрипторов.<br />
<br />
Также предусмотрена возможность использования [[MeSH]] (медицинские предметные рубрики).<br />
<br />
Подробнее об использовании тезауруса в ИРБИС см. статью на форуме [http://irbis.gpntb.ru/read.php?10,46024 Тезаурус в ИРБИС: проблемы применения].<br />
<br />
==Полнотекстовые базы данных ИРБИС==<br />
<br />
===Что такое ''полнотекстовые базы данных ИРБИС''?===<br />
<br />
См. [[Полнотекстовые базы данных ИРБИС]].<br />
<br />
===Как происходит выпуск версий и обновлений ИРБИС для ПБД?===<br />
<br />
Каждый распространяемый дистрибутив ИРБИС для ПБД соответствует последней выпущенной версии.<br />
<br />
Обозначение номера версии имеет следующий вид:<br />
YYYY.N<br />
где<br />
* YYYY — год выпуска версии<br />
* N — номер версии в данном году (может быть 1, 2 и т.д.)<br />
<br />
В последнее время в течение года выходит одна версия, и её выпуск приходится на конец года.<br />
<br />
В дальнейшем, обычно до момента выхода следующей версии, могут выходить обновления.<br />
<br />
Обновления распространяются следующим образом:<br />
* Выпускается ''пакет обновлений'' (совокупность обновлённых файлов). ''Пакет обновлений'' предназначен для обновления уже развёрнутых экземпляров системы ИРБИС. Процесс обновления заключается в том, что администратор копирует файлы из пакета обновления в систему ИРБИС (заменяет устаревшие файлы).<br />
* Распространяемые дистрибутивы содержат все обновления (существующие на момент отправки дистрибутива).<br />
<br />
[[Отличия ИРБИС 2013.1 от предыдущей версии#Выпуск и обозначение обновлений|К версии 2013.1 устоялась определённая практика выпуска и обозначения обновлений.]]<br />
<br />
===Какие предъявляются технические требования к файлам формата PDF при их включении в полнотекстовые базы данных ИРБИС?===<br />
<br />
Требования к файлам формата PDF при их включении в полнотекстовые базы данных ИРБИС проистекают из технических ограничений при извлечении текста, а также при разбиении на страницы (если включение осуществляется с разбиением на страницы).<br />
<br />
Наличие текстовых данных и то, что они могут быть корректно извлечены, можно проверить с помощью программы Acrobat Reader. Такие текстовые данные должны выделяться мышью побуквенно; слова из такого текста должен находить Arcobat Reader своей встроенной системой поиска.<br />
<br />
Ссылки на обсуждения на форуме ИРБИС по теме данного вопроса:<br />
* [http://irbis.gpntb.ru/read.php?48,49325 Проблема с PDF!]<br />
* [http://irbis.gpntb.ru/read.php?48,50169 Pdf и словарь]<br />
<br />
===Как правильно сформировать полнотекстовую базу данных ИРБИС?===<br />
<br />
См. [[Установка и использование ИРБИС 64 для полнотекстовых баз данных]].<br />
<br />
===В АРМ Читатель для полнотекстовых баз данных не открываются полнотекстовые документы формата PDF. Как исправить эту проблему?===<br />
<br />
Воспользуйтесь [[Известные проблемы и их решения, касающиеся работы с полнотекстовыми базами ИРБИС#В АРМ Читатель для полнотекстовых баз данных не открываются полнотекстовые документы формата PDF|рекомендациями по решению данной проблемы]].<br />
<br />
===В АРМ Читатель для полнотекстовых баз данных документы формата DOC открываются в отдельном окне. Как исправить эту проблему?===<br />
<br />
Воспользуйтесь [[Известные проблемы и их решения, касающиеся работы с полнотекстовыми базами ИРБИС#В АРМ Читатель для полнотекстовых баз данных документы формата DOC открываются в отдельном окне|рекомендациями по решению данной проблемы]].<br />
<br />
===При создании словаря появляется сообщение об ошибке ''Exception EOleSysError in module docs2text.exe...''===<br />
<br />
Воспользуйтесь [[Известные проблемы и их решения, касающиеся работы с полнотекстовыми базами ИРБИС#При создании словаря появляется сообщение об ошибке Exception EOleSysError in module docs2text.exe...|рекомендациями по решению данной проблемы]].<br />
<br />
===Не добавляются полнотекстовые документы. Как разобраться, в чём причина ошибки?===<br />
<br />
Найти причину ошибки поможет [[Установка и использование ИРБИС 64 для полнотекстовых баз данных#Известные проблемы и особенности процессов добавления полнотекстовых документов в базу и создания словаря|описание известных проблемы и особенностей процессов добавления полнотекстовых документов в базу и создания словаря]].<br />
<br />
===Не создаётся / не актуализируется словарь. Как разобраться, в чём причина ошибки?===<br />
<br />
Найти причину ошибки поможет [[Установка и использование ИРБИС 64 для полнотекстовых баз данных#Известные проблемы и особенности процессов добавления полнотекстовых документов в базу и создания словаря|описание известных проблемы и особенностей процессов добавления полнотекстовых документов в базу и создания словаря]].<br />
<br />
==АРМ Каталогизатор ИРБИС==<br />
<br />
===Как изменить список доступных выходных форм, как изменить или создать новые выходные формы?===<br />
<br />
Об изменении списка доступных выходных форм [[Выходные формы#Конфигурирование списков выходных форм, доступных в АРМ Каталогизатор|см. в статье Выходные формы]].<br />
<br />
Для создания и редактирования выходных табличных форм можно воспользоваться инструментом [[Выходные формы#Генератор табличных форм|Генератор табличных форм]].<br />
<br />
==Поисковый механизм и словарь баз данных ИРБИС==<br />
<br />
===Почему изменение файла <tt>.fst</tt> не приводит к изменению словаря базы данных?===<br />
<br />
В версии 2012.1 был изменён механизм актуализации записи, в связи с чем для ИРБИС версии 2012.1 и старше в случае необходимости изменения таблицы выбора полей для инвертированного файла следует внести изменения в файл <tt>.ifs</tt>.<br />
<br />
Файл <tt><имя_БД>.fst</tt> '''остаётся обязательным''' в структуре базы данных, в отличие от таблицы актуализации <tt><имя_БД>.ifs</tt>. (См. также [http://irbis.gpntb.ru/read.php?3,76647 информацию на форуме].)<br />
<br />
Подробнее см. в статье [[Механизм актуализации записи]].<br />
<br />
[[Категория:Работа с ИРБИС]]<br />
[[Категория:Анонсированные статьи]]<br />
[[Категория:Общие сведения об ИРБИС]]</div>Sokvhttp://wiki.elnit.org/index.php?title=%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_%D0%98%D0%A0%D0%91%D0%98%D0%A1_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B8_2014.1&diff=2443Список изменений ИРБИС версии 2014.12015-12-09T15:52:55Z<p>Sokv: </p>
<hr />
<div>==Продукты ИРБИС для работы с полнотекстовыми базами данных==<br />
<br />
===Версия 2014.1 от 2014-12-28===<br />
<br />
====Доработки АРМ Администратор и АРМ Читатель для полнотекстовых БД====<br />
<br />
'''Доработка ''Формы добавления текстов'':'''<br />
<br />
* Обеспечена "отзывчивость" формы для полнотекстовых баз данных со значительным количеством текстов (тысячи). На форме в списке добавленных по умолчанию отображается только часть текстов: в количестве, не превышающем значение, указанное в параметре <tt>FT_LIST_PORTION_SIZE</tt> секции <tt>MAIN</tt> (отсутствие параметра эквивалентно указанию 1000). При необходимости показа большего количества текстов можно воспользоваться кнопкой ''Показать больше текстов''.<br />
<br />
* Повышена выразительность: теперь в таблице одному PDF файлу соответствует одна запись (не показывается ссылка на каждую страницу PDF-файла).<br />
<br />
'''Доработки, касающиеся оптимизации процессов включения текстов в ПБД и создания словаря:'''<br />
<br />
* Оптимизирован процесс создания словаря: при создании словаря текстовый слой сохраняется в БД, если не был сохранён ранее; если текстовый слой ранее был сохранён в БД, то он не извлекается. Это позволяет избежать повторного извлечения текста из тех текстовых документов, из которых он был извлечён ранее. Например, это ускоряет процесс создания словаря при повторном ''Создании словаря заново'' (после добавления текстов в БД).<br/>Для хранения текстового слоя в БД [[#Изменения схемы полнотекстовой БД|добавлено поле 27]].<br/>Также, если текстовый слой ранее был сохранён в БД, то не обновляются: индекс естественно-тематического классификатора (поле 21), первые строки текста (поле 22), количество слов в тексте (поле 20). Соответственно, утратил актуальность параметр <tt>isNeedRefreshBriefText</tt>.<br />
<br />
* Алгоритм [[Включение текстов в полнотекстовую базу данных#Включение в полнотекстовую базу текстов из базы данных электронного каталога|импорта текстов из электронного каталога]] изменён таким образом, что ссылки могут быть сгенерированы в соответствии с указанным форматом. См. [[Включение текстов в полнотекстовую базу данных#Алгоритм получения ссылок из базы данных электронного каталога|подраздел ''Алгоритм получения ссылок из базы данных электронного каталога'' статьи ''Включение текстов в полнотекстовую базу данных'']].<br />
<br />
* При включении текста в полнотекстовую базу [[Включение текстов в полнотекстовую базу данных#Исключение повторного добавления текстов|оптимизирована проверка присутствия текста в БД для многостраничного документа]]:<br />
** Определяется номер последней страницы в документе (равный количеству страниц). Если количество страниц не удалось определить (для DJVU не определяется), то номер последней страницы считается равным 1.<br />
** Если последняя страница присутствует в базе, то считается, что данный многостраничный документ присутствует, и он пропускается.<br />
** В противном случае производится попытка добавить каждую страницу документа.<br />
<br />
* Для файлов PDF при добавлении документа не производится разбиение на страницы. Впрочем, нельзя однозначно считать это оптимизацией. Поскольку извлечённые страницы сохраняются в кеше (до закрытия АРМ Администратор, или на постоянной основе, если настроен кеш). При построении словаря всё равно возникает необходимость извлекать страницы. Разница в том, процесс отбора может быть многопроцессным. С другой стороны, в зависимости от настроек, при отборе может происходить разбиение на страницы (что быстрее, но теряет силу аргумент ускорения за счёт многопроцессного отбора), или извлекаться отдельные страницы (что значительно медленнее).<br />
<br />
'''Прочие доработки:'''<br />
<br />
* Текст NO_TEXT_AT_PAGE для нераспознанных страниц и соответствующий параметр.<br />
<br />
====Изменения схемы полнотекстовой БД====<br />
<br />
* [[Добавлено поле 27.]]<br />
<br />
====Совместимость с предыдущими версиями====<br />
<br />
АРМ Администратор, АРМ Читатель для полнотекстовых БД и Веб-шлюз ИРБИС для полнотекстовых БД не совместимы с библиотекой <tt>irbis64.dll</tt> предыдущих версий.<br />
<br />
Библиотека <tt>irbis64.dll</tt> не совместима с АРМ Администратор, АРМ Читатель для полнотекстовых БД и Веб-шлюз ИРБИС для полнотекстовых БД предыдущих версий.<br />
<br />
====Список обновлённых файлов в дистрибутиве====<br />
<br />
* <tt>Irbis64_FullTextAdministrator.exe</tt><br />
* <tt>Irbis64_FullTextReader.exe</tt><br />
* <tt>irbis64.dll</tt><br />
<br />
У данных запускаемых файлов и dll отсутствует совместимость с запускаемыми файлами и dll предыдущих версий.<br />
<br />
====Список изменений в конфигурационных файлах====<br />
<br />
=====<tt>irbisa_fulltext.ini</tt>=====<br />
<br />
[main]<br />
# FT_LIST_PORTION_SIZE - отсутствует в исходной конфигурации<br />
<br />
[texts]<br />
# EC_IMPORT_PATH_FORMAT - отсутствует в исходной конфигурации<br />
# NO_TEXT_AT_PAGE - отсутствует в исходной конфигурации<br />
# alwaysRefreshTextRecord - отсутствует в исходной конфигурации<br />
# isNeedRefreshBriefText - утратил актуальность, убран из исходной конфигурации<br />
# method9_tryNotUseDirectDBAccess - утратил актуальность, убран из исходной конфигурации<br />
<br />
===Версия 2014.1 of 2015-01-21 (D1)===<br />
<br />
В АРМ Администратор исправлена ошибка создания словаря с символами юникода (внесённая с выпуском версии 2014.1 и обычно проявляющаяся для текстов на языках кроме русского и английского). Для исправления необходимо: обновить версию системы ИРБИС ПБД, для уже созданных баз – создать словарь заново.<br />
<br />
В АРМ Читатель для полнотекстовых БД приведён в соответствие отображаемый номер версии.<br />
<br />
====Список обновлённых файлов в дистрибутиве====<br />
<br />
* <tt>Irbis64_FullTextAdministrator.exe</tt><br />
* <tt>Irbis64_FullTextReader.exe</tt><br />
<br />
===Версия 2014.1 of 2015-01-30 (D1+)===<br />
<br />
Исправлена ошибка в Веб-шлюзе ИРБИС (внесённая с выпуском версии 2014.1; проблемы с постраничным отображением текстов PDF при использовании абсолютных путей).<br />
<br />
Для демонстрационной базы словарь создан заново, чтобы обеспечить показ новых возможностей версии 2014.1.<br />
<br />
В АРМ Администратор исправлена ошибка - восстановлена возможность удаления текстов из полнотекстовой базы данных.<br />
<br />
====Список обновлённых файлов в дистрибутиве====<br />
<br />
* <tt>Irbis64_FullTextAdministrator.exe</tt><br />
* Демонстрационная полнотекстовая база (файлы базы данных).<br />
* Файлы Веб-ИРБИС<br />
<br />
===Изменения в составе дистрибутива от 2015-02-19===<br />
<br />
Исправлена ошибка, связанная с невозможностью установить веб-шлюз ИРБИС в случае поставки, в которую не входит АРМ Читатель для полнотекстовых БД (см. [http://irbis.gpntb.ru/read.php?48,93002 описание ошибки на форуме]).<br />
<br />
Теперь в поставку в любом случае входит конфигурационный файл для АРМ Читатель для полнотекстовых БД.<br />
<br />
===Версия 2014.1 of 2015-02-27 (D1+)===<br />
<br />
Исправлена ошибка распараллеливания отбора при создании словаря. В дистрибутив включён недостающий файл.<br />
<br />
====Список обновлённых файлов в дистрибутиве====<br />
<br />
Добавлен:<br />
* <tt>IrbisMultiLoad.exe</tt><br />
<br />
===Версия 2014.1 of 2015-03-19 (D1+)===<br />
<br />
В АРМ Администратор исправлена ошибка, проявляющаяся как отсутствие возможности использовать справочники, размещённые в папке DEPOSIT (см. [http://irbis.gpntb.ru/read.php?48,95192 обращение на форуме]).<br />
<br />
====Список обновлённых файлов в дистрибутиве====<br />
<br />
* <tt>Irbis64_FullTextAdministrator.exe</tt><br />
<br />
===Версия 2014.1 of 2015-03-31 (D1+)===<br />
<br />
<small><strike>В АРМ Администратор восстановлена работоспособность актуализации (см. [http://irbis.gpntb.ru/read.php?48,94111 обращение на форуме]).</strike></small><br />
<br />
В АРМ Администратор восстановлена работоспособность распараллеливания в процессе отбора (см. [http://irbis.gpntb.ru/read.php?48,95192 обращение на форуме]).<br />
<br />
====Список обновлённых файлов в дистрибутиве====<br />
<br />
* <tt>Irbis64_FullTextAdministrator.exe</tt><br />
<br />
===Версия 2014.1 of 2015-04-15 (D1+)===<br />
<br />
В дистрибутив возвращён АРМ Читатель для полнотекстовых БД полной версии (некоторое время всем пользователям распространялась демо-версия АРМ).<br />
<br />
====Список обновлённых файлов в дистрибутиве====<br />
<br />
* <tt>Irbis64_FullTextReader.exe</tt><br />
<br />
===Версия 2014.1 of 2015-07-23 (D2)===<br />
<br />
В АРМ Администратор восстановлена работоспособность актуализации (см. [http://irbis.gpntb.ru/read.php?48,94111 обращение на форуме]).<br />
<br />
Исправлена ошибка, связанная с невозможностью добавить текст в полнотекстовую базу повторно, после того как он был однажды добавлен и удалён.<br />
<br />
Также см. [http://irbis.gpntb.ru/read.php?48,97817 ветку о выпуске обновления на форуме].<br />
<br />
====Список обновлённых файлов в дистрибутиве====<br />
<br />
* <tt>Irbis64_FullTextAdministrator.exe</tt><br />
* <tt>irbis64.dll</tt><br />
<br />
===Версия 2014.1 of 2015-12-08 (D3)===<br />
<br />
Исправлена ошибка в алгоритме формирования словаря.<br />
<br />
====Список обновлённых файлов в дистрибутиве====<br />
<br />
* <tt>Irbis64_FullTextAdministrator.exe</tt><br />
<br />
==Ссылки==<br />
<br />
'''См. также:'''<br />
* [[Документация, поставляемая с системой ИРБИС#История версий ИРБИС 64|История версий ИРБИС 64]]<br />
* [[Список изменений ИРБИС версии 2013.1]]<br />
<br />
[[Категория:Продукты ИРБИС]]<br />
[[Категория:Разработка ИРБИС]]</div>Sokvhttp://wiki.elnit.org/index.php?title=UNIFOR&diff=2442UNIFOR2015-12-03T13:14:51Z<p>Sokv: </p>
<hr />
<div>UNIFOR – [[Язык форматирования системы ИРБИС#Форматные выходы. UNIFOR|''форматный выход'']], реализующий множество функций вне базовых рамок [[Язык форматирования системы ИРБИС|языка форматирования]].<br />
<br />
В статье для удобства перечень форматных выходов UNIFOR разбит на категории.<br />
<br />
==Использование UNIFOR==<br />
<br />
UNIFOR имеет следующий синтаксис в языке форматирования (в полной или сокращённой форме):<br />
&unifor(формат)<br />
&uf(формат)<br />
где:<br />
* '''<tt>&</tt>''' – идентификатор вызова форматного выхода,<br />
* '''<tt>unifor</tt>''' – имя форматного выхода (соответственно '''<tt>uf</tt>''' – сокращённое имя),<br />
* '''<tt>формат</tt>''' – аргумент.<br />
<br />
Рекомендуется использовать сокращённую форму вызова UNIFOR. Сокращённая форма по действию ничем не отличается от полной формы, зато позволяет сократить размер формата и повысить его читаемость.<br />
<br />
Вид реализуемой функции определяется первыми символами строки, которая формируется в результате выполнения формата, передаваемого в качестве аргумента.<br />
<br />
===Передача параметров===<br />
<br />
Во многих функциях, которые позволяет реализовать форматный выход UNIFOR, для передачи параметра неизвестной длины используется уникальный разделитель. Значение параметра должно быть окружено таким уникальным разделителем слева и справа.<br />
<br />
Например, если исходная строка<br />
!AAAA!BBBB<br />
то в качестве уникального разделителя выступает символ<br />
!<br />
значение параметра<br />
AAAA<br />
а оставшаяся часть исходной строки<br />
BBBB<br />
<br />
==Перечень функций UNIFOR с примерами их применения==<br />
<br />
===Функции для обработки строк===<br />
<br />
====Обычные функции для обработки строк====<br />
<br />
{{Описание функции UNIFOR<br />
|name=+95<br />
|title=Вернуть длину исходной строки<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
|sectionLevel======<br />
}}<br />
<br />
+95<строка><br />
<br />
{{Описание функции UNIFOR<br />
|name=+96<br />
|title=Вернуть часть строки<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
|sectionLevel======<br />
}}<br />
<br />
+96A*SSS.NNN#<строка><br />
где:<br />
* A – направление: 0 – с начала строки; 1 – с конца;<br />
* SSS – смещение;<br />
* NNN – кол-во символов.<br />
<br />
'''Примеры:'''<br />
&uf('+960*0.4#'v100)<br />
&uf('+960*5.4#'v100)<br />
&uf('+961*0.4#'v100)<br />
<br />
{{Описание функции UNIFOR<br />
|name=Q<br />
|title=Вернуть заданную строку в нижнем регистре<br />
|sectionLevel======<br />
}}<br />
<br />
Q<строка><br />
<br />
'''Примеры:'''<br />
&unifor("Q"v200)<br />
<br />
{{Описание функции UNIFOR<br />
|name=+97<br />
|title=Вернуть заданную строку в верхнем регистре<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
|sectionLevel======<br />
}}<br />
<br />
+97<строка><br />
<br />
{{Описание функции UNIFOR<br />
|name=+98<br />
|title=Заменить в заданной строке один символ на другой<br />
|description=Заменить в заданной строке один символ на другой (регистр учитывается)<br />
|versionFilename=RELEASE_7_2.doc<br />
|versionText=2007.2<br />
|sectionLevel======<br />
}}<br />
<br />
+98ab<строка><br />
где:<br />
* a – заменяемый символ;<br />
* b – заменяющий символ.<br />
<br />
'''Примеры:'''<br />
<br />
В результате выполнения формата<br />
&uf('+98 0',f(1,5,0))<br />
получится значение<br />
00001<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9F<br />
|title=Вернуть ANSI-символ с заданным кодом<br />
|versionFilename=RELEASE_8_1.doc<br />
|versionText=2008.1<br />
|sectionLevel======<br />
}}<br />
<br />
+9F<код><br />
<br />
'''Примеры:'''<br />
<br />
Такой форматный выход может пригодиться, например, когда надо вывести в литерале символ, совпадающий с ограничителями литерала.<br />
<br />
Для формата<br />
<br />
'11111',&Uf('+9F39'),'22222'<br />
<br />
результат расформатирования будет<br />
<br />
11111'22222<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9I<br />
|title=Заменить в исходных данных некоторую заданную последовательность символов другой заданной последовательностью символов<br />
|versionFilename=RELEASE_9_1.doc<br />
|versionText=2009.1<br />
|sectionLevel======<br />
}}<br />
<br />
+9I!AAAA!/BBBB/<данные><br />
где <tt>АААА</tt> – последовательность символов, подлежащая замене; <tt>ВВВВ</tt> – заменяющая последовательность символов; символ <tt>!</tt> – уникальный разделитель, отсутствующий в строке <tt>АААА</tt>; символ <tt>/</tt> – уникальный разделитель, отсутствующий в строке <tt>ВВВВ</tt>. <tt>ВВВВ</tt> может быть пустым значением, в этом случае последовательность <tt>АААА</tt> будет удаляться. Обрабатываются ВСЕ (а не только первое) вхождения <tt>АААА</tt> в исходные данные. В качестве разделителей можно использовать ТОЛЬКО символы стандартного набора (с кодом менее 128).<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9S<br />
|title=Найти подстроку<br />
|description=Возвращает позицию первого символа найденного вхождения подстроки в исходную строку. Считается, что символы в строке нумеруются с 1. Если подстрока не найдена, то возвращает 0. ''Комментарий: следует отметить, что в функции {{Описание функции UNIFOR (ссылка)|name=+96|title=Вернуть часть строки}} указывают смещение, а не позицию символа''<br />
|versionFilename=RELEASE_13_1.doc<br />
|versionText=2013.1<br />
|sectionLevel======<br />
}}<br />
<br />
+9S!подстрока!<исходная_строка><br />
где <tt>подстрока</tt> – подстрока, которую нужно найти; <tt><исходная_строка></tt> – исходная строка для поиска; символ <tt>!</tt> – уникальный разделитель, отсутствующий в искомой подстроке.<br />
<br />
====Функции для работы со словами====<br />
<br />
{{Описание функции UNIFOR<br />
|name=E<br />
|title=Вернуть заданное количество слов с начала строки<br />
|sectionLevel======<br />
}}<br />
<br />
EN<строка><br />
где <tt>N</tt> – количество слов (одна цифра).<br />
<br />
<br />
'''Примеры:'''<br />
&unifor("E3"v200^a)<br />
<br />
{{Описание функции UNIFOR<br />
|name=F<br />
|title=Вернуть часть строки, начиная со следующего слова после указанного и до конца строки<br />
|sectionLevel======<br />
}}<br />
<br />
FN<строка><br />
где <tt>N</tt> – количество слов (одна цифра).<br />
<br />
'''Примеры:'''<br />
&unifor("F3"v200^a)<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9G<br />
|title=Преобразовать заданную строку в список слов<br />
|versionFilename=RELEASE_8_1.doc<br />
|versionText=2008.1<br />
|sectionLevel======<br />
}}<br />
<br />
+9G<строка><br />
<br />
Границы слов определяются на основе [[Файлы ИРБИС#Таблица алфавитных символов|таблицы алфавитных символов]].<br />
<br />
====Дополнительные функции для обработки строк====<br />
<br />
{{Описание функции UNIFOR<br />
|name=+3E<br />
|title=Кодирование данных для представления в URL<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
|sectionLevel======<br />
}}<br />
<br />
+3E<данные><br />
<br />
'''Примеры:'''<br />
&unifor('+3E',v1007)<br />
<br />
{{Описание функции UNIFOR<br />
|name=+3D<br />
|title=Декодирование данных из URL<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
|sectionLevel======<br />
}}<br />
<br />
+3D<данные><br />
<br />
{{Описание функции UNIFOR<br />
|name=+3+<br />
|title=Перевод знака <tt>+</tt> в <tt>%2B</tt><br />
|sectionLevel======<br />
}}<br />
<br />
+3+<данные><br />
<br />
{{Описание функции UNIFOR<br />
|name=+3U<br />
|title=Кодирование строки в UTF-8<br />
|sectionLevel======<br />
}}<br />
<br />
+3U<данные><br />
<br />
{{Описание функции UNIFOR<br />
|name=+3W<br />
|title=Декодирование строки из UTF-8<br />
|sectionLevel======<br />
}}<br />
<br />
+3W<данные><br />
<br />
{{Описание функции UNIFOR<br />
|name=T<br />
|title=Транслитерация кириллических символов с помощью латиницы<br />
|sectionLevel======<br />
}}<br />
<br />
TN<строка><br />
где N – вид таблицы транслитерации (0 или 1).<br />
<br />
'''Примеры:'''<br />
&unifor("T0"V200)<br />
<br />
{{Описание функции UNIFOR<br />
|name=G<br />
|title=Вернуть часть строки до или начиная с заданного символа<br />
|sectionLevel======<br />
}}<br />
<br />
GNA<строка><br />
где:<br />
* N может принимать значения:<br />
** 0 (или A) – до заданного символа не включая его;<br />
** 1 (или B) – начиная с заданного символа;<br />
** 2 (или C) – после заданного символа;<br />
** 3 (или D) – после последнего вхождения заданного символа;<br />
** 4 (или E) – до последнего вхождения заданного символа (включая его);<br />
** 5 – до последнего вхождения заданного символа (не включая его).<br />
* А – заданный символ. Символ обозначает самого себя, кроме # (обозначает любую цифру) и $ (обозначает любую букву).<br />
<br />
''Примечание: функция G5 присутствует в версиях ИРБИС с {{Ссылка на открытый FTP<br />
|filename=RELEASE_15_1.doc<br />
|text=2015.1<br />
}}.''<br />
<br />
'''Примеры:'''<br />
&unifor("G0#"v700)<br />
&unifor("G1-"v700^a)<br />
&unifor("G2-"v700^a)<br />
<br />
Пример получения ссылки на файл из подполя 952^U полнотекстовой БД для файлов, добавленных с разбиением и без<br />
&uf('G0:',&uf('G4:',&uf('G2:',&uf('G2:',v952^U))))<br />
<br />
{{Описание функции UNIFOR<br />
|name=9<br />
|title=Удалить двойные кавычки из заданной строки<br />
|sectionLevel======<br />
}}<br />
<br />
9<исх.строка><br />
<br />
'''Примеры:'''<br />
&unifor("9"v200^a)<br />
<br />
{{Описание функции UNIFOR<br />
|name=X<br />
|title=Удаление из заданной строки фрагментов, выделенных угловыми скобками <><br />
|sectionLevel======<br />
}}<br />
<br />
X<строка><br />
<br />
'''Примеры:'''<br />
&unifor("X"v200)<br />
<br />
{{Описание функции UNIFOR<br />
|name=+S<br />
|title=<nowiki>Выводит нужную часть текста (до знака "=", или после него) в заголовках, описанных по принципу <NNN=KKK></nowiki><br />
|versionText=не установленно, предположительно давно<br />
|sectionLevel======<br />
}}<br />
<br />
+SN[строка]<br />
где N может принимать значения 0 для вывода текста после знака "=", и 1 для вывода текста перед знаком "=".<br />
<br />
Выдержка из документации (см. {{Ссылка на открытый FTP|filename=RELEASE_2_2.doc|text=Файл описания релиза 2002.2}}<br />
и [http://nucleonics.fatal.ru/irbis/irbishelp.html?wci004010200000.htm документацию на http://nucleonics.fatal.ru]):<br />
* Для книг, описанных «Под заглавием», которые начинаются с числительного, обозначенного цифрами, начальный элемент сортировки и авторский знак должны формироваться по словесному обозначению числительного. В связи с этим Пользователь должен ввести дополнительную разметку типа <NNN=Текст>, где «Текст», стоящий после знака «=», — это словесное значение числительного NNN, используемое взамен его для формирования авторского знака и/или в качестве начального элемента сортировки. Например, заглавие 1000 и одна ночь, размеченное как <1000=тысяча> и одна ночь, для формирования авторского знака и сортировки будет представлено как «тысяча и одна ночь», а для печати как «1000 и одна ночь».<br />
* Для биографических и биобиблиографических изданий, описанных под заглавием, начинающимся с имени лица, которому оно посвящено, авторский знак и начальный элемент сортировки должны формироваться на фамилию. В связи с этим Пользователь также должен ввести дополнительную разметку типа <AAA=Текст>, где «Текст», стоя-щий после знака «=», — это фамилия, используемая (взамен части ААА) для формирования авторского знака и/или начального элемента сортировки. Например, заглавие Антон Павлович Чехов может быть размечено как <Антон Павлович Чехов=Чехов Антон Павлович> (в сортировку пойдет «Чехов Антон Павлович», на печать «Антон Павлович Чехов»). Заметим, что разметка типа <Антон=Чехов> Павлович Чехов даст правильный авторский знак (Чехов Павлович Чехов), но может дать ошибки в сортировке.<br />
<br />
'''Примеры:'''<br />
<br />
Пример входной строки:<br />
<br />
<1=Первое> апреля<br />
<br />
Примеры использования функции:<br />
<br />
&uf('+s0'v200^a)<br />
&uf('+s1'v200^a)<br />
<br />
Пример расформатирования:<br />
<br />
Первое апреля<br />
1 апреля<br />
<br />
{{Описание функции UNIFOR<br />
|name==<br />
|title=Сравнить заданное значение с маской<br />
|description=Возвращаемое значение: 1 – в случае положительного результата сравнения; 0 – в случае отрицательного<br />
|versionFilename=RELEASE_8_1.doc<br />
|versionText=2008.1<br />
|sectionLevel======<br />
}}<br />
<br />
=!<маска>!<значение><br />
<br />
<tt>!</tt> – уникальный разделитель (может быть любым символом). Маска может содержать принятые символы маскирования <tt>*</tt> и <tt>?</tt>. В общем случае маска может содержать несколько масок, отделенных друг от друга символом вертикальной черты <tt>|</tt>.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+\<br />
|title=Преобразование строки, удваивающее обратный слэш, или обратное<br />
|description=Преобразование строки, удваивающее обратный слэш, или обратное<br />
|sectionLevel======<br />
}}<br />
<br />
+\N<строка><br />
<br />
где:<br />
* N может принимать значения<br />
** 0 - удвоение знаков обратного слэш;<br />
** 1 - преобразование удвоенных знаков слэш в одинарные.<br />
<br />
'''Примеры:'''<br />
<br />
Результатом формата<br />
&uf('+\0c:\example.txt')<br />
будет строка<br />
c:\\example.txt<br />
<br />
Результатом формата<br />
&uf('+\1c:\\example.txt')<br />
будет строка<br />
c:\example.txt<br />
<br />
<br />
{{Описание функции UNIFOR<br />
|name=+R<br />
|title=Усекает строку справа до точки. Используется для отсечения одного уровня в рубриках ГРНТИ<br />
|description=Усечение кода рубрики в рубрикаторе ГРНТИ до вышестоящего<br />
|sectionLevel======<br />
}}<br />
<br />
+\R<строка><br />
<br />
'''Примеры:'''<br />
<br />
формат<br />
&unifor("+R"v3) <br />
исходная строка<br />
02.61.45<br />
результирующая строка<br />
02.61<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9R<br />
|title=Преобразование римского числа в арабское<br />
|versionFilename=RELEASE_11_1.doc<br />
|versionText=2011.1<br />
|sectionLevel======<br />
}}<br />
<br />
+9R<римское_число><br />
<br />
{{Описание функции UNIFOR<br />
|name=+9X<br />
|title=Преобразование арабского числа в римское<br />
|versionFilename=RELEASE_11_1.doc<br />
|versionText=2011.1<br />
|sectionLevel======<br />
}}<br />
<br />
+9X<арабское_число><br />
<br />
===Функции для работы с датой и временем===<br />
<br />
{{Описание функции UNIFOR<br />
|name=3<br />
|title=Выдача данных, связанных с датой и временем<br />
|description=Выдача данных, связанных с датой и временем<br />
}}<br />
<br />
Имеются следующие подфункции:<br />
* '''<tt>3</tt>''' – выдать текущую дату в виде ГГГГММДД. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>30</tt>''' – выдать текущий год в виде ГГГГ. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>31</tt>''' – выдать текущий месяц в виде ММ (с лидирующим нулем). ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>32</tt>''' – выдать текущий день в виде ДД (с лидирующим нулем). ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>33</tt>''' – выдать текущий год в виде ГГ. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>34</tt>''' – выдать текущий месяц в виде М (без лидирующего нуля). ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>35</tt>''' – выдать текущий день в виде Д (без лидирующего нуля). ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>36MM</tt>''' – выдать по заданному номеру месяца его название на русском языке в именительном падеже. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>37MM</tt>''' – выдать по заданному номеру месяца его название на русском языке в родительном падеже. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>38MM</tt>''' – выдать по заданному номеру месяца его название на английском языке. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>39</tt>''' – выдать текущее время. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>3А</tt>''' – выдать номер текущего дня от начала года. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>3BГГГГММДД/ддд</tt>''' – прибавить/вычесть из заданной даты в виде ГГГГММДД заданное количество дней (ддд – может быть отрицательным) и вернуть полученную дату в виде ГГГГММДД. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_7_2.doc|text=2007.2}}.</small>''<br />
* '''<tt>3СГГГГММДД/ГГГГММДД</tt>''' – вычесть из одной даты в виде ГГГГММДД другую дату в виде ГГГГММДД и вернуть разницу в виде количества дней. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_7_2.doc|text=2007.2}}.</small>''<br />
* '''<tt>3JГГГГММДД</tt>''' – переводит заданную юлианскую дату ГГГГММДД в грегорианскую. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_9_1.doc|text=2009.1}}.</small>''<br />
<br />
'''Примеры:'''<br />
<br />
&unifor('36',&unifor('34'))<br />
<br />
Вычесть из текущей даты сто дней:<br />
&uf('3B',&uf('3'),'/-100')<br />
<br />
Количество дней с 1 января 1900 года до сегодняшнего дня:<br />
&uf('3С',&uf('3'),'/19000101')<br />
<br />
===Функции для работы с глобальными переменными===<br />
<br />
Дополнительно о глобальных переменных см. [[Язык форматирования системы ИРБИС#Глобальные переменные|в подразделе ''Глобальные переменные'' статьи ''Язык форматирования системы ИРБИС'']].<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7<br />
|title=Очистить (опустошить) все глобальные переменные<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7<br />
<br />
'''Примеры:'''<br />
&unifor('+7')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7R<br />
|title=Чтение глобальной переменной<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7RNNN,nnn<br />
где:<br />
* NNN – номер переменной.<br />
* nnn – номер повторения. По умолчанию – номер текущего повторения в повторяющейся группе.<br />
Эквивалентная конструкция языка форматирования GNNN.<br />
<br />
'''Примеры:'''<br />
&unifor('+7R100')<br />
эквивалентная конструкция языка форматирования:<br />
G100<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7W<br />
|title=Запись глобальной переменной<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7WNNN#SSSS<br />
где:<br />
* NNN – номер переменной;<br />
* SSSS – список строк (результат расформатирования); каждая строка становится отдельным повторением.<br />
<br />
'''Примеры:'''<br />
&unifor('+7W100#',(v910/))<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7U<br />
|title=Добавление повторений глобальной переменной<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7UNNN#SSSS<br />
где:<br />
* NNN – номер переменной;<br />
* SSSS – список строк (результат расформатирования); каждая строка становится отдельным повторением.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7M<br />
|title=Логическое перемножение повторений двух переменных<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7MNNN#MMM<br />
Результат перемножения записывается в первую переменную.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7S<br />
|title=Логическое вычитание повторений двух переменных<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7SNNN#MMM<br />
Результат вычитания записывается в первую переменную.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7A<br />
|title=Логическое сложение повторений двух переменных<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7ANNN#MMM<br />
Результат сложения записывается в первую переменную.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7G<br />
|title=Исключение неоригинальных повторений переменной<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7GNNN<br />
Результат исключения записывается в ту же переменную.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7T<br />
|title=Сортировка повторений переменной<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7TNNN<br />
Результат сортировки записывается в ту же переменную.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+99<br />
|title=Групповая установка глобальных переменных<br />
|description=Групповая установка глобальных переменных. Применяется для ИРБИС-Навигатора. Исходная строка закодирована с помощью URL-кодировки. После раскодировки рассматривается как список строк (аналогично <tt>TStringList.Text</tt> в Delphi). Каждая строка этого списка имеет структуру: <tt>NNN#<значение_глобальной_переменной_NNN><tt><br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
}}<br />
<br />
+99<br />
<br />
===Функции для работы с базой данных===<br />
<br />
{{Описание функции UNIFOR<br />
|name=0<br />
|title=Выдать содержимое документа полностью в формате RTF<br />
|description=Выдать содержимое документа полностью (формат ALLl)<br />
}}<br />
0<br />
<br />
'''Примеры:'''<br />
&unifor('0')<br />
<br />
'''Результат расформатирования:'''<br />
\b #910/1:_\b0 ^YДА^PНЮАУ - каф. кримінального права\par \b #920/1:_\b0 ATHRA\par \b #210/1:_\b0 ^AТацій^BВ. Я.^GВасиль Якович^8ukr\par \b #710/1:_\b0 ^AТаций^BВ. Я.^GВасилий Яковлевич^8rus\par \b #907/1:_\b0 ^A20110301^B111\par \b #907/2:_\b0 ^A20110419^BZhukovskaya\par \b #710/2:_\b0 ^ATatsiy^BV.^8eng\par \b #907/3:_\b0 ^A20110421^BZhukovskaya\par \b #907/4:_\b0 ^A20111108^B111\par <br />
<br />
{{Описание функции UNIFOR<br />
|name=+0<br />
|title=Выдать содержимое документа полностью во внутреннем представлении<br />
|description=Выдать содержимое документа полностью (формат ALLl)<br />
}}<br />
+0<br />
<br />
'''Результат расформатирования:'''<br />
0<br />
2#0<br />
0#1<br />
910#^YДА^PНЮАУ - каф. кримінального права<br />
920#ATHRA<br />
210#^AТацій^BВ. Я.^GВасиль Якович^8ukr<br />
710#^AТаций^BВ. Я.^GВасилий Яковлевич^8rus<br />
907#^A20110301^B111<br />
907#^A20110419^BZhukovskaya<br />
710#^ATatsiy^BV.^8eng<br />
907#^A20110421^BZhukovskaya<br />
907#^A20111108^B111<br />
<br />
{{Описание функции UNIFOR<br />
|name=++0<br />
|title=Выдать содержимое документа полностью – только содержимое полей<br />
|description=Выдать содержимое документа полностью (формат ALLl)<br />
}}<br />
++0<br />
<br />
{{Описание функции UNIFOR<br />
|name=+@<br />
|title=Выдать содержимое документа полностью в формате JSON<br />
|versionFilename=RELEASE_2014_1.doc<br />
|versionText=2014.1<br />
|sectionLevel=====<br />
}}<br />
+@<br />
<br />
{{Описание функции UNIFOR<br />
|name=+N<br />
|title=Выдать количество повторений поля<br />
|description=Выдать количество повторений поля, метка которого указана после идентификатора функции<br />
}}<br />
+N<br />
<br />
'''Примеры:'''<br />
&unifor('+N910')<br />
<br />
{{Описание функции UNIFOR<br />
|name=A<br />
|title=Выдать заданное повторение поля<br />
}}<br />
<br />
AV<tag>^<delim>*<offset>.<length>#<occur><br />
где:<br />
* <tt><tag></tt> – метка поля;<br />
* <tt><delim></tt> – разделитель подполя;<br />
* <tt><offset></tt> – смещение;<br />
* <tt><length></tt> – длина;<br />
* <tt><occur></tt> – номер повторения.<br />
<br />
'''Примеры:'''<br />
&unifor('Av200#2')<br />
&unifor('Av910^a#5')<br />
&unifor('Av10^b*2.10#2')<br />
<br />
{{Описание функции UNIFOR<br />
|name=P<br />
|title=Выдать заданное оригинальное повторение поля<br />
|formatSeeAlsoName=A<br />
|formatSeeAlsoTitle=Выдать заданное повторение поля<br />
|exampleSeeAlsoName=A<br />
|exampleSeeAlsoTitle=Выдать заданное повторение поля<br />
}}<br />
<br />
{{Описание функции UNIFOR<br />
|name=+E<br />
|title=Возвращает порядковый номер заданного поля в записи<br />
|description=Возвращает порядковый номер заданного поля в записи. При отсутствии в записи заданного поля возвращается пустота<br />
|versionFilename=RELEASE_9_1.doc<br />
|versionText=2009.1<br />
}}<br />
<br />
+Etag#occ<br />
где:<br />
* tag – метка поля;<br />
* occ – номер повторения поля (по умолчанию – 1). Может принимать значение <tt>*</tt> – это означает номер текущего повторения в повторяющейся группе.<br />
<br />
{{Описание функции UNIFOR<br />
|name=K<br />
|title=Раскодировка через справочник<br />
|description=Возвращает значение из справочника, соответствующее переданному коду (иными словами, осуществляется раскодировка)<br />
}}<br />
<br />
K<имя_справочника><разделитель><исх_значение><br />
<br />
<разделитель> между <имя_справочника> и <исх_значение> может быть двух видов:<br />
\ - раскодировка с учетом регистра,<br />
! - раскодировка без учета регистра.<br />
<br />
'''Примеры:'''<br />
&unifor("Kjz.mnu\"v101)<br />
&uf('kFIO_SF.MNU!'&uf('av907^b#1'))<br />
<br />
{{Описание функции UNIFOR<br />
|name=I<br />
|title=Вернуть параметр из INI-файла<br />
}}<br />
<br />
I<SECTION>,<PAR_NAME>,<DE-FAULT_VALUE><br />
<br />
'''Примеры:'''<br />
&unifor('IPRIVATE,NAME,NONAME')<br />
<br />
{{Описание функции UNIFOR<br />
|name=1<br />
|title=Вернуть заданный подэлемент<br />
}}<br />
<br />
1NCXY?V<tag>^<delim>*<offset>.<length>#<occur><br />
где:<br />
* N – номер повторения подэлемента; если указана * – номер подэлемента совпадает со счетчиком повторяющейся группы.<br />
* ХY – разделители между подэлементами.<br />
* С – принимает значения: R – разделители справа от каждого подэлемента, кроме последнего; L – разделители слева от каждого подэлемента; D – каждый подэлемент заключен слева разделителем Х и справа – Y.<br />
* ? – символ-разделитель.<br />
* Остальные параметры аналогичны параметрам для функции {{Описание функции UNIFOR (ссылка)|name=A|title=Выдать заданное повторение поля}}.<br />
<br />
'''Примеры:'''<br />
(/&unifor('1*R; ?v910^h#1'))<br />
<br />
{{Описание функции UNIFOR<br />
|name=J<br />
|title=Вернуть кол-во ссылок для заданного термина<br />
}}<br />
<br />
J<dbn>,<термин><br />
<dbn> – имя БД; по умолчанию используется текущая.<br />
<br />
'''Примеры:'''<br />
&unifor('JBOOK,',"A="v200^a)<br />
<br />
{{Описание функции UNIFOR<br />
|name=D<br />
|title=Форматирование документа из другой БД<br />
|description=Форматирование документа из другой БД (REF на другую БД – отношение «от одного к одному»)<br />
}}<br />
<br />
D<dbn>,<@mfn|/termin/>,<@имя_формата|формат|*><br />
Передаются три параметра, разделенные запятой:<br />
* Первый – имя БД;<br />
* Второй – или непосредственно MFN с предшествующим символом @ или термин, ссылающийся на документ (термин – заключается в ограничительные символы);<br />
* Третий – или имя формата с предшествующим символом @ или непосредственно формат.<br />
Если задается *, данные выводятся по прямой ссылке (метка поля, номер повторения).<br />
<br />
'''Примеры:'''<br />
&unifor('DBOOK,/K=AAA/,v200')<br />
<br />
{{Описание функции UNIFOR<br />
|name=7<br />
|title=Расформатирование группы связанных документов из другой БД<br />
|description=Расформатирование группы связанных документов из другой БД (отношение «от одного к многим»)<br />
Функция обеспечивает возможность связать запись с рядом других записей по какому бы то ни было общему признаку. К примеру, можно отобрать все записи с определенным заглавие, индексом УДК/ББК, ключевым словом. <br />
|versionFilename=RELEASE_4_1.doc<br />
|versionText=2004.1<br />
}}<br />
<br />
7<имя_БД>,</termin/>,<@имя_формата|формат|*><br />
где:<br />
* имя_БД – имя базы данных, из которой будут браться связанные документы; по умолчанию используется текущая БД.<br />
* /termin/ – ключевой термин, на основе которого отбираются связанные документы; термин заключается в уникальные ограничители (например. /), в качестве которых используется символ, не входящий (гарантированно) в термин.<br />
* @имя_формата|формат|* – имя формата или формат в явном виде, в соответствии с которым будут расформатироваться связанные документы. Если задается имя формата, то он берется из директории БД, заданной параметром <имя_БД>. Если задается *, данные выводятся по прямой ссылке (метка поля, номер повторения).<br />
<br />
'''Примеры:'''<br />
&unifor('7TEST,',"/T="v200^a"/",',v903"\par "')<br />
<br />
&uf(|7EK,!FAK=23.01!,&uf('av907^A#1'),&uf('6brief')/|d90),<br />
<br />
{{Описание функции UNIFOR<br />
|name=!<br />
|title=Команда постредактуры: очистить результат расформатирования от двойных разделителей<br />
|description=Команда постредактуры: очистить результат расформатирования от двойных разделителей (двойных точек или двойных конструкций <. – >). Имеет смысл использовать один раз в любом месте формата<br />
|versionFilename=RELEASE_4_1.doc<br />
|versionText=2004.1<br />
}}<br />
<br />
!<br />
<br />
'''Примеры:'''<br />
&unifor('!')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+F<br />
|title=Команда постредактуры: очистить результат расформатирования от RTF-конструкций<br />
|description=Команда постредактуры: очистить результат расформатирования от RTF-конструкций. Имеет смысл использовать один раз в любом месте формата<br />
|versionFilename=RELEASE_4_1.doc<br />
|versionText=2004.1<br />
}}<br />
<br />
+F<br />
<br />
'''Примеры:'''<br />
&unifor('+F')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1O<br />
|title=Групповая мультираскодировка списка<br />
}}<br />
<br />
+1O<MNU>|SSSS<br />
где:<br />
* <MNU> имя справочника (с расширением).<br />
* SSSS – список строк (результат расформатирования.<br />
<br />
'''Примеры:'''<br />
&unifor('+1Omhr.mnu|',(v910^m/))<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1I<br />
|title=Исключение неоригинальных значений из списка<br />
}}<br />
<br />
+1ISSSS<br />
где параметры аналогичны описанным для функции {{Описание функции UNIFOR (ссылка)|name=+1O|title=Групповая мультираскодировка списка}}<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1V<br />
|title=Сортировка списка<br />
}}<br />
<br />
+1VSSSS<br />
где параметры аналогичны описанным для функции {{Описание функции UNIFOR (ссылка)|name=+1O|title=Групповая мультираскодировка списка}}<br />
<br />
{{Описание функции UNIFOR<br />
|name=+I<br />
|title=Формирования ссылки (гиперссылки)<br />
|versionFilename=RELEASE_4_1.doc<br />
|versionText=2004.1<br />
}}<br />
<br />
+I/содержание_ссылки/название_ссылки<br />
'''/содержание_ссылки/''' – внутренние данные ссылки, ограниченные уникальным разделителем. Имеют структуру<br />
NNN,HHH,<параметры><br />
где:<br />
* NNN – тип ссылки, возможные значения: <br />
** 0 – ссылки на внешние объекты;<br />
** 1 – ссылка на связанный документ (возможно в другой БД) – "от одного к одному";<br />
** 2 – ссылка на связанные документы (возможно в другой БД) – "от одного к многим";<br />
* HHH – экранная подсказка, может иметь вид: @iii – где <tt>iii</tt> – номер текста в файле IRBISMSG.TXT, \text\ – собственно текст подсказки в уникальных ограничителях.<br />
'''<параметры>''':<br />
* Для ссылок типа 0 представляет собой в общем виде URL внешнего объекта (в том числе – полный путь на файл).<br />
* Для ссылок типа 1 и 2 <параметры> имеют следующую структуру:<br />
имя_БД,имя_формата,termin<br />
где:<br />
* имя_БД – имя базы данных, из которой будут браться связанные документы; по умолчанию используется текущая БД.<br />
* имя_формата – имя формата, в соответствии с которым будут расформатироваться связанные документы. (по умолчанию – используется оптимизированный формат).<br />
* termin – ключевой термин, на основе которого отбираются (ищутся) связанные документы.<br />
<br />
<br />
'''Примеры:'''<br />
&unifor('+I?0,,'v951^i'?',v951^t,|INTERNET|n951^t)<br />
&unifor(|+I?1,,,,I=|v421^w|?|,v421^a)<br />
<br />
{{Описание функции UNIFOR<br />
|name=+6<br />
|title=Выдать статус записи<br />
|description=Выдать статус записи. Если запись логически удаленная, возвращается 0, в противном случае – 1<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+6<br />
<br />
'''Примеры:'''<br />
… if &unifor('+6')='0' then 'запись логически удаленная' fi …<br />
<br />
{{Описание функции UNIFOR<br />
|name=+D<br />
|title=Выдать имя базы данных<br />
|description=Возвращает имя текущей базы данных<br />
}}<br />
<br />
+D<br />
<br />
'''Примеры:'''<br />
… &unifor('+D') …<br />
<br />
{{Описание функции UNIFOR<br />
|name=2<br />
|title=Вернуть последний номер MFN в базе +1 <br />
|description=Возвращает последний номер MFN в текущей базе данных, увеличенный на единицу (MAX_MFN) + 1). В общем случае параметр имеет вид 2N, где N - выводимое количество символов, обрезанное до необходимой длинны справа.<br />
}}<br />
<br />
'''Пример:'''<br />
&unifor('2'), &unifor('27')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9V<br />
|title=Вернуть номер поколения ИРБИС<br />
|description=Возвращает поколение системы, в которой осуществляется расформатирование. Может быть полезен при разработке единых форматов, которые по-разному выполняются в ИРБИС 32 и ИРБИС 64<br />
|versionFilename=RELEASE_11_1.doc<br />
|versionText=2011.1<br />
}}<br />
<br />
+9V<br />
который возвращает:<br />
* 32 – если форматирование выполняется в ИРБИС 32;<br />
* 64 – если в ИРБИС 64 (и ИРБИС 128).<br />
<br />
{{Описание функции UNIFOR<br />
|name=4N<br />
|title=Форматировать предыдущую копию текущей записи<br />
|versionFilename=RELEASE_11_1.doc<br />
|versionText=2011.1<br />
}}<br />
<br />
4N,Format<br />
где: <br />
* <tt>N</tt> – номер копии (в обратном порядке, т.е. если N=1 – это один шаг назад, N=2 – два шага назад и т.д.). Может принимать значение * – это указывает на последнюю копию. Если N – пустое значение, то в случае повторяющейся группы в качестве значения N берется НОМЕР ТЕКУЩЕГО ПОВТОРЕНИЯ, в противном случае берется первая копия;<br />
* <tt>Format</tt> – формат; может задаваться непосредственно или в виде @имя_формата.<br />
<br />
Если не задается ни <tt>N</tt> ни <tt>Format</tt>, т.е. &unifor('4'), то возвращается количество предыдущих копий. <br />
Если запись не имеет предыдущих копий, то &unifor('4') возвращает 0, а все остальные конструкции &unifor('4...') возвращают пустоту.<br />
<br />
'''Примеры:'''<br />
&unifor('41,@brief') <br />
(...&unifor('4,v200^a')...) <br />
&unifor('4*,(v910/)')<br />
<br />
Примечание: в связи с этим см. также новую команду глобальной корректировки – ВОССТАНОВИТЬ ПРЕДЫДУЩУЮ КОПИЮ.<br />
<br />
===Функции для работы с повторяющимися группами===<br />
<br />
Дополнительно о повторяющихся группах см. [[Язык форматирования системы ИРБИС#Повторяющиеся группы|в подразделе ''Повторяющиеся группы'' статьи ''Язык форматирования системы ИРБИС'']].<br />
<br />
{{Описание функции UNIFOR<br />
|name=+4<br />
|title=Выдача метки, порядкового номера и значения поля в соответствии с индексом (номером повторения) повторяющейся группы<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+4XY <br />
где:<br />
* Х принимает три значения: T – выдать метку; F – выдать значение поле; N – выдать порядковый номер поля в записи (отличается от индекса повторения, если Y принимает значение 1); <br />
* Y принимает значения: 0 – поля выдаются в порядке расположения в записи; 1 – поля выдаются в порядке возрастания меток (по умолчанию 0).<br />
<br />
'''Примеры:'''<br />
(…&unifor('+4T1'),'_' &unifor('+4N1'),': ', &unifor('+4F1'),'<br>'…)<br />
<br />
{{Описание функции UNIFOR<br />
|name=+5<br />
|title=Выдача элемента списка/справочника в соответствии с индексом (номером повторения) повторяющейся группы<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+5Х<имя_справочника/списка> <br />
где Х принимает значения: Т – выдать значение; F – выдать пояснение (имеет смысл, если задается справочник, т.е. файл с расширением MNU).<br />
<br />
'''Примеры:'''<br />
…(…&unifor('+5Tfield.mnu'),' – ',&unifor('+5Ffield.mnu'),'<br>'…)<br />
<br />
{{Описание функции UNIFOR<br />
|name=+90<br />
|title=Вернуть номер текущего повторения в повторяющейся группе<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
}}<br />
<br />
+90<br />
<br />
===Функции для работы с базой данных электронного каталога===<br />
<br />
{{Описание функции UNIFOR<br />
|name=B<br />
|title=Выдать библиографическую свертку документа<br />
}}<br />
<br />
B<br />
<br />
'''Примеры:'''<br />
&unifor('B')<br />
<br />
{{Описание функции UNIFOR<br />
|name=C<br />
|title=Контроль ISSN/ISBN<br />
|description=Контроль ISSN/ISBN. Возвращаемое значение: 0 – при положительном результате, 1 – при отрицательном<br />
}}<br />
<br />
С<ISSN/ISBN><br />
<br />
'''Примеры:'''<br />
&unifor("C"v10^a)<br />
<br />
{{Описание функции UNIFOR<br />
|name=L<br />
|title=Вернуть окончание термина<br />
}}<br />
<br />
L<начало_термина><br />
<br />
'''Примеры:'''<br />
&unifor("L"v101)<br />
<br />
{{Описание функции UNIFOR<br />
|name=U<br />
|title=Кумуляция номеров журналов<br />
}}<br />
<br />
U<strbase>,<stradd><br />
где:<br />
* <strbase> – исходная кумулированная строка.<br />
* <stradd> – кумулируемые номера.<br />
<br />
'''Примеры:'''<br />
&unifor("U"v909^h",12")<br />
<br />
{{Описание функции UNIFOR<br />
|name=V<br />
|title=Декумуляция номеров журналов<br />
}}<br />
<br />
V<strbase><br />
где:<br />
<strbase> – исходная строка для декумуляции.<br />
<br />
'''Примеры:'''<br />
&unifor("V"v909^h")<br />
<br />
{{Описание функции UNIFOR<br />
|name=W<br />
|title=Контроль кумуляции<br />
}}<br />
<br />
W<strbadd>,<strbase><br />
где:<br />
* <strbase> – исходная кумулированная строка.<br />
* <stradd> – кумулируемый номер.<br />
'''Возвращаемые значения:'''<br />
* 0 – если <stradd> не присутствует в <strbase>.<br />
* 1 – если <stradd> присутствует в <strbase>.<br />
<br />
'''Примеры:'''<br />
&unifor("W12,"v909^h)<br />
<br />
{{Описание функции UNIFOR<br />
|name=O<br />
|title=Вывод сведений о всех экземплярах по всем местам хранения<br />
}}<br />
<br />
'''Пример:'''<br />
&unifor('O')<br />
<br />
<br />
{{Описание функции UNIFOR<br />
|name=Y<br />
|title=Возвращает данные о всех свободных (не выданных) экземплярах по всем местах хранения<br />
}}<br />
<br />
'''Пример:'''<br />
&unifor('Y')<br />
<br />
===Функции для работы с файлами===<br />
<br />
{{Описание функции UNIFOR<br />
|name=+91<br />
|title=Вернуть имя файла из заданного полного пути/имени<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
}}<br />
<br />
+91<br />
<br />
{{Описание функции UNIFOR<br />
|name=+92<br />
|title=Вернуть путь из заданного полного пути/имени<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
}}<br />
<br />
+92<br />
<br />
{{Описание функции UNIFOR<br />
|name=+93<br />
|title=Вернуть расширение из заданного полного пути/имени<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
}}<br />
<br />
+93<br />
<br />
{{Описание функции UNIFOR<br />
|name=+94<br />
|title=Вернуть имя диска из заданного полного пути/имени<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
}}<br />
<br />
+94<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9L<br />
|title=Проверить наличие файла/корректность URL<br />
|versionFilename=RELEASE_13_1.doc<br />
|versionText=2013.1<br />
}}<br />
<br />
+9L<path>,<dbname>,<filename><br />
где:<br />
* <tt><path></tt> – определяет путь к файлу и принимает значения: <tt>0</tt> – папка, в которой установлена серверная часть ИРБИС (<tt><IRBIS_SERVER_ROOT></tt>); <tt>1</tt> – общая директория баз данных (по умолчанию <tt><IRBIS_SERVER_ROOT>\DATAI</tt>); <tt>2,3,10</tt> – папка БД <dbname>; <tt>11</tt> – абсолютный путь/URL.<br />
* <tt><dbname></tt> – имя БД (имеет смысл только при <tt>path=2,3,10</tt>).<br />
* <tt><filename></tt> – путь и имя файла или URL.<br />
<br />
Функция возвращает:<br />
0 – если файл отсутствует/некорректный URL;<br />
1 – если файл присутствует/корректный URL.<br />
<br />
'''Примеры:'''<br />
&uf('+9L1,,\deposit\rksu.fst') <br />
(....&uf('+9L10,',&uf('+D'),',',v951^A)....)<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9C<br />
|title=Вставить данные из заданного текстового файла<br />
}}<br />
<br />
+9С<path>,<dbname>,<filename><br />
где:<br />
* <tt><path></tt> – определяет путь к файлу и принимает значения: <tt>0</tt> – основная директория системы (для ИРБИС32 – та, где находятся исполняемые модули; для ИРБИС64 – та, где находятся исполняемые модули сервера); <tt>1</tt> – общая директория баз данных (по умолчанию \DATAI); <tt>10</tt> – директория конкретной БД;<br />
* <tt><dbname></tt> – имя БД (имеет смысл только при <tt>path=10</tt>). По умолчанию – предполагается текущая БД;<br />
* <tt><filename></tt> – имя файла;<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9A<br />
|title=Вернуть размер файла в байтах. <br />
}}<br />
<br />
+9A<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9D<br />
|title=Сохранить заданный внутренний двоичный объект в заданном файле<br />
|versionFilename=RELEASE_6_2.doc<br />
|versionText=2006.2<br />
}}<br />
<br />
+9DNN#<полный путь><br />
где <tt>NN</tt> – номер внутреннего двоичного объекта.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9J<br />
|title=Представить заданный двоичный файл в кодированном виде<br />
|description=Представить заданный двоичный файл в виде: <tt>^A<тип_файла>^B<данные файла перекодированные на основе URLEncode></tt><br />
|versionFilename=RELEASE_10_1.doc<br />
|versionText=2010.1<br />
}}<br />
<br />
+9J<полный путь и имя файла><br />
<br />
Имя файла может задаваться в виде маски, в этом случае использоваться будет первый найденный соответствующей маске файл.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9K<br />
|title=Удалить заданный файл<br />
|description=Удалить заданный файл. Если имя файла задано в виде маски, то удаляться будут все соответствующие маске файлы<br />
|versionFilename=RELEASE_10_1.doc<br />
|versionText=2010.1<br />
}}<br />
<br />
+9K<полный путь и имя файла><br />
<br />
===Функции, используемые только в глобальной корректировке===<br />
<br />
{{Описание функции UNIFOR<br />
|name=Z<br />
|title=Размножение экземпляров<br />
|description=Размножение экземпляров. Функция ничего не возвращает. Можно применять только в глобальной корректировке<br />
}}<br />
<br />
Z<br />
<br />
'''Примеры:'''<br />
&unifor('Z')<br />
<br />
{{Описание функции UNIFOR<br />
|name=M<br />
|title=Отсортировать повторения заданного поля<br />
|description=Отсортировать повторения заданного поля (имеется в виду строковая сортировка) – функция ничего не возвращает. Можно применять только в глобальной корректировке<br />
}}<br />
<br />
MX<tag>^<delims><br />
где:<br />
* X – вид сортировки: I – по возрастанию; D – по убыванию.<br />
* <tag> – метка поля.<br />
* <delims> – разделители подполей, определяющих ключ сортировки.<br />
<br />
'''Примеры:'''<br />
&unifor('MI910^BD')<br />
<br />
===Выполнить внешнюю программу===<br />
<br />
{{Описание функции UNIFOR<br />
|name=6<br />
|title=Выполнить формат<br />
}}<br />
<br />
6<имя файла формата><br />
где <tt><имя файла формата></tt> – имя [[Язык форматирования системы ИРБИС#Понятие формата|файла формата]], указывается без расширения. Файл формата будет найден по заданному имени, обязательному расширению <tt>.pft</tt> и местоположению: в [[Файлы ИРБИС#Файлы баз данных ИРБИС|папке базы данных]], а если там нет, то в папке [[Файлы ИРБИС#Основные обозначения|<tt><IRBIS_SERVER_ROOT>\Deposit</tt>]].<br />
<br />
Альтернативным способом выполнения файла форматов является использование [[Язык форматирования системы ИРБИС#Вложенные форматы|вложенных форматов]].<br />
<br />
{{Описание функции UNIFOR<br />
|name=+2<br />
|title=Выполнить внешнее приложение<br />
|description=Выполняет внешнее приложение. Всё, что после +2 – параметры командной строки. <br />
}}<br />
<br />
'''Примеры:'''<br />
&unifor('+2cmd')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+8<br />
|title=Вызвать функцию из внешней DLL<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
}}<br />
<br />
+8<имя_DLL>,<имя_функции>,<передаваемые_данные><br />
<br />
Внешние функции должны ОБЯЗАТЕЛЬНО иметь следующую структуру:<br />
<br />
* в случае Pascal<br />
test_function1(buf1,buf2: Pchar; bufsize: integer): integer; <br />
<br />
* в случае C<br />
int test_function1(char *buf1, char *buf2, int bufsize) <br />
где: buf1 – передаваемые данные (входные), buf2 – возвращаемые данные (выходные), bufsize – размер выходного буфера (buf2). В ИРБИС64 данные передаются и возвращаются в UTF8. Возврат функции: 0 – нормальное завершение; любое другое значение – ненормальное. В случае нестандартного вызова функций из DLL (по Pascal-правилам) надо указывать символ * перед именем DLL:<br />
&unifor('+8*<имя_DLL>,<имя_функции>,.... <br />
<br />
Следует помнить, что имя функции в вызове надо указывать строго в соответствии с тем, как она экспортирована из DLL, большие и маленькие буквы различаются.<br />
<br />
'''Примеры:'''<br />
<br />
В вызываемую функцию передается заглавие:<br />
&unifor('+8test_dll,test_function1,',v200^a)<br />
<br />
Передаются повторения 910 поля:<br />
(&unifor('+8test_dll,test_function2,',v910))<br />
<br />
Передается вся текущая запись:<br />
(&unifor('+8test_dll,test_function2,',&unifor('+0')))<br />
<br />
===Функции, не вошедшие в другие категории===<br />
<br />
{{Описание функции UNIFOR<br />
|name=S<br />
|title=Универсальный счетчик<br />
}}<br />
<br />
SN<br />
где:<br />
* N=0 – обнулить счетчик.<br />
* N=1..9 – увеличить значение счетчика на со-отв. значение.<br />
* N=A – вернуть значение счетчика – арабскими цифрами.<br />
* N=X – вернуть значение счетчика – римскими цифрами.<br />
<br />
'''Примеры:'''<br />
&unifor('S0')<br />
&unifor('S1')<br />
&unifor('SA')<br />
<br />
{{Описание функции UNIFOR<br />
|name=R<br />
|title=Генерация случайного числа<br />
}}<br />
<br />
RNN<br />
где NN – кол-во знаков в случайном числе (по умолчанию – 6).<br />
<br />
'''Примеры:'''<br />
&unifor('R')<br />
&unifor('R4')<br />
<br />
{{Описание функции UNIFOR<br />
|name=[<br />
|title=Чистка данных от команд контекстного выделения<br />
|versionFilename=RELEASE_8_1.doc<br />
|versionText=2008.1<br />
}}<br />
<br />
[<br />
<br />
'''Примеры:'''<br />
&unifor('[')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+3G<br />
|title=<nowiki>Вывод количества документов, найденных во внешней базе по команде G.(команда возвращает строку RESULT=[кол-во найденных по запросу документов])</nowiki><br />
}}<br />
<br />
+3G[URL к внешнему сайту WEB ИРБИС, с запросом G]<br />
<br />
{{Описание функции UNIFOR<br />
|name=+3S<br />
|title=<nowiki>Расформатирует найденные по запросу записи. Если [количество выводимых записей]=0, то возвращает только количество найденных по запросу документов</nowiki><br />
}}<br />
<br />
+3S[имя базы],[количество выводимых записей],[ограничитель][формат][ограничитель],[формат или @имя файла с форматом]<br />
<br />
{{Описание функции UNIFOR<br />
|name=+3C<br />
|title=Функция введена для оптимизации скорости проверки наличия текста в полнотекстовой базе данных<br />
|description=Функция предназначена для обрезания перед помещением в словарь базы данных значения, формируемого путём соединения префикса <tt>TXT=</tt> и содержимого подполя ^B ссылки на текстовый файл полнотекстовой базы. Подробнее см. [[Схема полнотекстовой базы данных#Префикс TXT| в подразделе ''Префикс TXT'' статьи ''Схема полнотекстовой базы данных'']]<br />
|versionFilename=RELEASE_13_1.doc<br />
|versionText=2013.1<br />
}}<br />
<br />
==Устаревшие, не рекомендованные к использованию UNIFOR'ы==<br />
<br />
===Устаревшие функции для работы с глобальными переменными===<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1<br />
|title=Очистить (опустошить) все глобальные переменные<br />
}}<br />
<br />
+1<br />
<br />
'''Примеры:'''<br />
&unifor('+1')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1R<br />
|title=Чтение глобальных переменных<br />
|versionFilename=RELEASE_4_1.doc<br />
|versionText=2004.1<br />
}}<br />
<br />
+1RNNN,nnn<br />
где:<br />
* NNN – номер первой или единственной переменной, возможна конструкция *+-<число>. * – номер текущего повторения в повторяющейся группе.<br />
* nnn – кол-во переменных (по умолчанию 1).<br />
<br />
<br />
'''Примеры:'''<br />
&unifor('+1R100,2')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1W<br />
|title=Запись в глобальные переменные<br />
|versionFilename=RELEASE_4_1.doc<br />
|versionText=2004.1<br />
}}<br />
<br />
+1WNNN,MMM#SSSS<br />
где:<br />
* NNN – номер первой или единственной переменной, возможна конструкция *+-<число>. * – номер текущего повторения в повторяющейся группе.<br />
* MMM – номер переменной для сохранения кол-ва записанных переменных (по умолчанию не используется).<br />
* SSSS – список строк (результат расформатирования). Если задан MMM – каждая строка пишется в отдельную переменную, в противном случае все пишется в одну переменную.<br />
<br />
'''Примеры:'''<br />
&unifor('+1W100,0#',(v910/))<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1K<br />
|title=Групповая мультираскодировка переменных<br />
}}<br />
<br />
+1K<MNU>|NNN,nnn<br />
где:<br />
* NNN – номер первой или единственной переменной.<br />
* nnn – кол-во переменных (по умолчанию 1).<br />
<br />
'''Примеры:'''<br />
&unifor('+1Kmhr.mnu|100,10')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1M<br />
|title=Перемножение двух списков (групп переменных)<br />
}}<br />
<br />
+1MNNN,nnn#MMM,mmm<br />
где параметры аналогичны описанным для функции {{Описание функции UNIFOR (ссылка)|name=+1K|title=Групповая мультираскодировка переменных}}.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1S<br />
|title=Вычитание списков (групп переменных)<br />
}}<br />
<br />
+1SNNN,nnn#MMM,mmm<br />
где параметры аналогичны описанным для функции {{Описание функции UNIFOR (ссылка)|name=+1K|title=Групповая мультираскодировка переменных}}<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1A<br />
|title=Сложение списков (групп переменных)<br />
}}<br />
<br />
+1ANNN,nnn#MMM,mmm<br />
где параметры аналогичны описанным для функции {{Описание функции UNIFOR (ссылка)|name=+1K|title=Групповая мультираскодировка переменных}}<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1G<br />
|title=Исключение неоригинальных значений из группы переменных<br />
}}<br />
<br />
+1GNNN,nnn<br />
где параметры аналогичны описанным для функции {{Описание функции UNIFOR (ссылка)|name=+1K|title=Групповая мультираскодировка переменных}}<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1T<br />
|title=Сортировка группы переменных<br />
}}<br />
<br />
+1TNNN,nnn<br />
где параметры аналогичны описанным для функции {{Описание функции UNIFOR (ссылка)|name=+1K|title=Групповая мультираскодировка переменных}}<br />
<br />
==Неописанные UNIFOR'ы==<br />
<br />
<br />
<br />
{{Описание функции UNIFOR<br />
|name=Неописанный UNIFOR &unifor('11R^c?v210*2')<br />
|title=<br />
|versionFilename=<br />
|versionText=<br />
|sectionLevel======<br />
}}<br />
<br />
<br />
<br />
{{Описание функции UNIFOR<br />
|name=Неописанный UNIFOR &umarci('1200#h#2')<br />
|title=<br />
|versionFilename=<br />
|versionText=<br />
|sectionLevel======<br />
}}<br />
<br />
<br />
<br />
{{Описание функции UNIFOR<br />
|name=Неописанный UNIFOR &umarci('2210#^c')<br />
|title=<br />
|versionFilename=<br />
|versionText=<br />
|sectionLevel======<br />
}}<br />
<br />
<br />
{{Описание функции UNIFOR<br />
|name=Неописанный UNIFOR &umarci('3210#2#^c')<br />
|title=<br />
|versionFilename=<br />
|versionText=<br />
|sectionLevel======<br />
}}<br />
<br />
==Ссылки==<br />
<br />
См. также:<br />
* [[Язык форматирования системы ИРБИС]]<br />
* [[Операторы языка форматирования ИРБИС]]<br />
* [[Функции языка форматирования ИРБИС]]<br />
<br />
Источники информации:<br />
* [[Общее описание системы ИРБИС64]]<br />
* ''Техническая документация WEB ИРБИС64 и WEB ИРБИС32''. [http://irbis.gpntb.ru/read.php?21,62125 Актуальная версия документа доступна на форуме.]<br />
* [[Документация, поставляемая с системой ИРБИС#История версий ИРБИС|История версий ИРБИС (файл <tt>RELEASE_OVERALL.doc</tt>)]] версии 2008.1<br />
* {{Ссылка на открытый FTP|filename=RELEASE_13_1.doc|text=Файл описания релиза 2009.1}}<br />
* {{Ссылка на открытый FTP|filename=RELEASE_13_1.doc|text=Файл описания релиза 2010.1}}<br />
* {{Ссылка на открытый FTP|filename=RELEASE_13_1.doc|text=Файл описания релиза 2011.1}}<br />
* {{Ссылка на открытый FTP|filename=RELEASE_13_1.doc|text=Файл описания релиза 2013.1}}<br />
<br />
[[Категория:Язык форматирования системы ИРБИС]]<br />
[[Категория:Анонсированные статьи]]</div>Sokvhttp://wiki.elnit.org/index.php?title=UNIFOR&diff=2441UNIFOR2015-11-06T15:12:48Z<p>Sokv: /* Функции для работы с базой данных */</p>
<hr />
<div>UNIFOR – [[Язык форматирования системы ИРБИС#Форматные выходы. UNIFOR|''форматный выход'']], реализующий множество функций вне базовых рамок [[Язык форматирования системы ИРБИС|языка форматирования]].<br />
<br />
В статье для удобства перечень форматных выходов UNIFOR разбит на категории.<br />
<br />
==Использование UNIFOR==<br />
<br />
UNIFOR имеет следующий синтаксис в языке форматирования (в полной или сокращённой форме):<br />
&unifor(формат)<br />
&uf(формат)<br />
где:<br />
* '''<tt>&</tt>''' – идентификатор вызова форматного выхода,<br />
* '''<tt>unifor</tt>''' – имя форматного выхода (соответственно '''<tt>uf</tt>''' – сокращённое имя),<br />
* '''<tt>формат</tt>''' – аргумент.<br />
<br />
Рекомендуется использовать сокращённую форму вызова UNIFOR. Сокращённая форма по действию ничем не отличается от полной формы, зато позволяет сократить размер формата и повысить его читаемость.<br />
<br />
Вид реализуемой функции определяется первыми символами строки, которая формируется в результате выполнения формата, передаваемого в качестве аргумента.<br />
<br />
===Передача параметров===<br />
<br />
Во многих функциях, которые позволяет реализовать форматный выход UNIFOR, для передачи параметра неизвестной длины используется уникальный разделитель. Значение параметра должно быть окружено таким уникальным разделителем слева и справа.<br />
<br />
Например, если исходная строка<br />
!AAAA!BBBB<br />
то в качестве уникального разделителя выступает символ<br />
!<br />
значение параметра<br />
AAAA<br />
а оставшаяся часть исходной строки<br />
BBBB<br />
<br />
==Перечень функций UNIFOR с примерами их применения==<br />
<br />
===Функции для обработки строк===<br />
<br />
====Обычные функции для обработки строк====<br />
<br />
{{Описание функции UNIFOR<br />
|name=+95<br />
|title=Вернуть длину исходной строки<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
|sectionLevel======<br />
}}<br />
<br />
+95<строка><br />
<br />
{{Описание функции UNIFOR<br />
|name=+96<br />
|title=Вернуть часть строки<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
|sectionLevel======<br />
}}<br />
<br />
+96A*SSS.NNN#<строка><br />
где:<br />
* A – направление: 0 – с начала строки; 1 – с конца;<br />
* SSS – смещение;<br />
* NNN – кол-во символов.<br />
<br />
'''Примеры:'''<br />
&uf('+960*0.4#'v100)<br />
&uf('+960*5.4#'v100)<br />
&uf('+961*0.4#'v100)<br />
<br />
{{Описание функции UNIFOR<br />
|name=Q<br />
|title=Вернуть заданную строку в нижнем регистре<br />
|sectionLevel======<br />
}}<br />
<br />
Q<строка><br />
<br />
'''Примеры:'''<br />
&unifor("Q"v200)<br />
<br />
{{Описание функции UNIFOR<br />
|name=+97<br />
|title=Вернуть заданную строку в верхнем регистре<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
|sectionLevel======<br />
}}<br />
<br />
+97<строка><br />
<br />
{{Описание функции UNIFOR<br />
|name=+98<br />
|title=Заменить в заданной строке один символ на другой<br />
|description=Заменить в заданной строке один символ на другой (регистр учитывается)<br />
|versionFilename=RELEASE_7_2.doc<br />
|versionText=2007.2<br />
|sectionLevel======<br />
}}<br />
<br />
+98ab<строка><br />
где:<br />
* a – заменяемый символ;<br />
* b – заменяющий символ.<br />
<br />
'''Примеры:'''<br />
<br />
В результате выполнения формата<br />
&uf('+98 0',f(1,5,0))<br />
получится значение<br />
00001<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9F<br />
|title=Вернуть ANSI-символ с заданным кодом<br />
|versionFilename=RELEASE_8_1.doc<br />
|versionText=2008.1<br />
|sectionLevel======<br />
}}<br />
<br />
+9F<код><br />
<br />
'''Примеры:'''<br />
<br />
Такой форматный выход может пригодиться, например, когда надо вывести в литерале символ, совпадающий с ограничителями литерала.<br />
<br />
Для формата<br />
<br />
'11111',&Uf('+9F39'),'22222'<br />
<br />
результат расформатирования будет<br />
<br />
11111'22222<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9I<br />
|title=Заменить в исходных данных некоторую заданную последовательность символов другой заданной последовательностью символов<br />
|versionFilename=RELEASE_9_1.doc<br />
|versionText=2009.1<br />
|sectionLevel======<br />
}}<br />
<br />
+9I!AAAA!/BBBB/<данные><br />
где <tt>АААА</tt> – последовательность символов, подлежащая замене; <tt>ВВВВ</tt> – заменяющая последовательность символов; символ <tt>!</tt> – уникальный разделитель, отсутствующий в строке <tt>АААА</tt>; символ <tt>/</tt> – уникальный разделитель, отсутствующий в строке <tt>ВВВВ</tt>. <tt>ВВВВ</tt> может быть пустым значением, в этом случае последовательность <tt>АААА</tt> будет удаляться. Обрабатываются ВСЕ (а не только первое) вхождения <tt>АААА</tt> в исходные данные. В качестве разделителей можно использовать ТОЛЬКО символы стандартного набора (с кодом менее 128).<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9S<br />
|title=Найти подстроку<br />
|description=Возвращает позицию первого символа найденного вхождения подстроки в исходную строку. Считается, что символы в строке нумеруются с 1. Если подстрока не найдена, то возвращает 0. ''Комментарий: следует отметить, что в функции {{Описание функции UNIFOR (ссылка)|name=+96|title=Вернуть часть строки}} указывают смещение, а не позицию символа''<br />
|versionFilename=RELEASE_13_1.doc<br />
|versionText=2013.1<br />
|sectionLevel======<br />
}}<br />
<br />
+9S!подстрока!<исходная_строка><br />
где <tt>подстрока</tt> – подстрока, которую нужно найти; <tt><исходная_строка></tt> – исходная строка для поиска; символ <tt>!</tt> – уникальный разделитель, отсутствующий в искомой подстроке.<br />
<br />
====Функции для работы со словами====<br />
<br />
{{Описание функции UNIFOR<br />
|name=E<br />
|title=Вернуть заданное количество слов с начала строки<br />
|sectionLevel======<br />
}}<br />
<br />
EN<строка><br />
где <tt>N</tt> – количество слов (одна цифра).<br />
<br />
<br />
'''Примеры:'''<br />
&unifor("E3"v200^a)<br />
<br />
{{Описание функции UNIFOR<br />
|name=F<br />
|title=Вернуть часть строки, начиная со следующего слова после указанного и до конца строки<br />
|sectionLevel======<br />
}}<br />
<br />
FN<строка><br />
где <tt>N</tt> – количество слов (одна цифра).<br />
<br />
'''Примеры:'''<br />
&unifor("F3"v200^a)<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9G<br />
|title=Преобразовать заданную строку в список слов<br />
|versionFilename=RELEASE_8_1.doc<br />
|versionText=2008.1<br />
|sectionLevel======<br />
}}<br />
<br />
+9G<строка><br />
<br />
Границы слов определяются на основе [[Файлы ИРБИС#Таблица алфавитных символов|таблицы алфавитных символов]].<br />
<br />
====Дополнительные функции для обработки строк====<br />
<br />
{{Описание функции UNIFOR<br />
|name=+3E<br />
|title=Кодирование данных для представления в URL<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
|sectionLevel======<br />
}}<br />
<br />
+3E<данные><br />
<br />
'''Примеры:'''<br />
&unifor('+3E',v1007)<br />
<br />
{{Описание функции UNIFOR<br />
|name=+3D<br />
|title=Декодирование данных из URL<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
|sectionLevel======<br />
}}<br />
<br />
+3D<данные><br />
<br />
{{Описание функции UNIFOR<br />
|name=+3+<br />
|title=Перевод знака <tt>+</tt> в <tt>%2B</tt><br />
|sectionLevel======<br />
}}<br />
<br />
+3+<данные><br />
<br />
{{Описание функции UNIFOR<br />
|name=+3U<br />
|title=Кодирование строки в UTF-8<br />
|sectionLevel======<br />
}}<br />
<br />
+3U<данные><br />
<br />
{{Описание функции UNIFOR<br />
|name=+3W<br />
|title=Декодирование строки из UTF-8<br />
|sectionLevel======<br />
}}<br />
<br />
+3W<данные><br />
<br />
{{Описание функции UNIFOR<br />
|name=T<br />
|title=Транслитерация кириллических символов с помощью латиницы<br />
|sectionLevel======<br />
}}<br />
<br />
TN<строка><br />
где N – вид таблицы транслитерации (0 или 1).<br />
<br />
'''Примеры:'''<br />
&unifor("T0"V200)<br />
<br />
{{Описание функции UNIFOR<br />
|name=G<br />
|title=Вернуть часть строки до или начиная с заданного символа<br />
|sectionLevel======<br />
}}<br />
<br />
GNA<строка><br />
где:<br />
* N может принимать значения:<br />
** 0 (или A) – до заданного символа не включая его;<br />
** 1 (или B) – начиная с заданного символа;<br />
** 2 (или C) – после заданного символа;<br />
** 3 (или D) – после последнего вхождения заданного символа;<br />
** 4 (или E) – до последнего вхождения заданного символа (включая его);<br />
** 5 – до последнего вхождения заданного символа (не включая его).<br />
* А – заданный символ. Символ обозначает самого себя, кроме # (обозначает любую цифру) и $ (обозначает любую букву).<br />
<br />
''Примечание: функция G5 присутствует в версиях ИРБИС с {{Ссылка на открытый FTP<br />
|filename=RELEASE_15_1.doc<br />
|text=2015.1<br />
}}.''<br />
<br />
'''Примеры:'''<br />
&unifor("G0#"v700)<br />
&unifor("G1-"v700^a)<br />
&unifor("G2-"v700^a)<br />
<br />
Пример получения ссылки на файл из подполя 952^U полнотекстовой БД для файлов, добавленных с разбиением и без<br />
&uf('G0:',&uf('G4:',&uf('G2:',&uf('G2:',v952^U))))<br />
<br />
{{Описание функции UNIFOR<br />
|name=9<br />
|title=Удалить двойные кавычки из заданной строки<br />
|sectionLevel======<br />
}}<br />
<br />
9<исх.строка><br />
<br />
'''Примеры:'''<br />
&unifor("9"v200^a)<br />
<br />
{{Описание функции UNIFOR<br />
|name=X<br />
|title=Удаление из заданной строки фрагментов, выделенных угловыми скобками <><br />
|sectionLevel======<br />
}}<br />
<br />
X<строка><br />
<br />
'''Примеры:'''<br />
&unifor("X"v200)<br />
<br />
{{Описание функции UNIFOR<br />
|name=+S<br />
|title=<nowiki>Выводит нужную часть текста (до знака "=", или после него) в заголовках, описанных по принципу <NNN=KKK></nowiki><br />
|versionText=не установленно, предположительно давно<br />
|sectionLevel======<br />
}}<br />
<br />
+SN[строка]<br />
где N может принимать значения 0 для вывода текста после знака "=", и 1 для вывода текста перед знаком "=".<br />
<br />
Выдержка из документации (см. {{Ссылка на открытый FTP|filename=RELEASE_2_2.doc|text=Файл описания релиза 2002.2}}<br />
и [http://nucleonics.fatal.ru/irbis/irbishelp.html?wci004010200000.htm документацию на http://nucleonics.fatal.ru]):<br />
* Для книг, описанных «Под заглавием», которые начинаются с числительного, обозначенного цифрами, начальный элемент сортировки и авторский знак должны формироваться по словесному обозначению числительного. В связи с этим Пользователь должен ввести дополнительную разметку типа <NNN=Текст>, где «Текст», стоящий после знака «=», — это словесное значение числительного NNN, используемое взамен его для формирования авторского знака и/или в качестве начального элемента сортировки. Например, заглавие 1000 и одна ночь, размеченное как <1000=тысяча> и одна ночь, для формирования авторского знака и сортировки будет представлено как «тысяча и одна ночь», а для печати как «1000 и одна ночь».<br />
* Для биографических и биобиблиографических изданий, описанных под заглавием, начинающимся с имени лица, которому оно посвящено, авторский знак и начальный элемент сортировки должны формироваться на фамилию. В связи с этим Пользователь также должен ввести дополнительную разметку типа <AAA=Текст>, где «Текст», стоя-щий после знака «=», — это фамилия, используемая (взамен части ААА) для формирования авторского знака и/или начального элемента сортировки. Например, заглавие Антон Павлович Чехов может быть размечено как <Антон Павлович Чехов=Чехов Антон Павлович> (в сортировку пойдет «Чехов Антон Павлович», на печать «Антон Павлович Чехов»). Заметим, что разметка типа <Антон=Чехов> Павлович Чехов даст правильный авторский знак (Чехов Павлович Чехов), но может дать ошибки в сортировке.<br />
<br />
'''Примеры:'''<br />
<br />
Пример входной строки:<br />
<br />
<1=Первое> апреля<br />
<br />
Примеры использования функции:<br />
<br />
&uf('+s0'v200^a)<br />
&uf('+s1'v200^a)<br />
<br />
Пример расформатирования:<br />
<br />
Первое апреля<br />
1 апреля<br />
<br />
{{Описание функции UNIFOR<br />
|name==<br />
|title=Сравнить заданное значение с маской<br />
|description=Возвращаемое значение: 1 – в случае положительного результата сравнения; 0 – в случае отрицательного<br />
|versionFilename=RELEASE_8_1.doc<br />
|versionText=2008.1<br />
|sectionLevel======<br />
}}<br />
<br />
=!<маска>!<значение><br />
<br />
<tt>!</tt> – уникальный разделитель (может быть любым символом). Маска может содержать принятые символы маскирования <tt>*</tt> и <tt>?</tt>. В общем случае маска может содержать несколько масок, отделенных друг от друга символом вертикальной черты <tt>|</tt>.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+\<br />
|title=Преобразование строки, удваивающее обратный слэш, или обратное<br />
|description=Преобразование строки, удваивающее обратный слэш, или обратное<br />
|sectionLevel======<br />
}}<br />
<br />
+\N<строка><br />
<br />
где:<br />
* N может принимать значения<br />
** 0 - удвоение знаков обратного слэш;<br />
** 1 - преобразование удвоенных знаков слэш в одинарные.<br />
<br />
'''Примеры:'''<br />
<br />
Результатом формата<br />
&uf('+\0c:\example.txt')<br />
будет строка<br />
c:\\example.txt<br />
<br />
Результатом формата<br />
&uf('+\1c:\\example.txt')<br />
будет строка<br />
c:\example.txt<br />
<br />
<br />
{{Описание функции UNIFOR<br />
|name=+R<br />
|title=Усекает строку справа до точки. Используется для отсечения одного уровня в рубриках ГРНТИ<br />
|description=Усечение кода рубрики в рубрикаторе ГРНТИ до вышестоящего<br />
|sectionLevel======<br />
}}<br />
<br />
+\R<строка><br />
<br />
'''Примеры:'''<br />
<br />
формат<br />
&unifor("+R"v3) <br />
исходная строка<br />
02.61.45<br />
результирующая строка<br />
02.61<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9R<br />
|title=Преобразование римского числа в арабское<br />
|versionFilename=RELEASE_11_1.doc<br />
|versionText=2011.1<br />
|sectionLevel======<br />
}}<br />
<br />
+9R<римское_число><br />
<br />
{{Описание функции UNIFOR<br />
|name=+9X<br />
|title=Преобразование арабского числа в римское<br />
|versionFilename=RELEASE_11_1.doc<br />
|versionText=2011.1<br />
|sectionLevel======<br />
}}<br />
<br />
+9X<арабское_число><br />
<br />
===Функции для работы с датой и временем===<br />
<br />
{{Описание функции UNIFOR<br />
|name=3<br />
|title=Выдача данных, связанных с датой и временем<br />
|description=Выдача данных, связанных с датой и временем<br />
}}<br />
<br />
Имеются следующие подфункции:<br />
* '''<tt>3</tt>''' – выдать текущую дату в виде ГГГГММДД. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>30</tt>''' – выдать текущий год в виде ГГГГ. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>31</tt>''' – выдать текущий месяц в виде ММ (с лидирующим нулем). ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>32</tt>''' – выдать текущий день в виде ДД (с лидирующим нулем). ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>33</tt>''' – выдать текущий год в виде ГГ. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>34</tt>''' – выдать текущий месяц в виде М (без лидирующего нуля). ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>35</tt>''' – выдать текущий день в виде Д (без лидирующего нуля). ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>36MM</tt>''' – выдать по заданному номеру месяца его название на русском языке в именительном падеже. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>37MM</tt>''' – выдать по заданному номеру месяца его название на русском языке в родительном падеже. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>38MM</tt>''' – выдать по заданному номеру месяца его название на английском языке. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>39</tt>''' – выдать текущее время. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>3А</tt>''' – выдать номер текущего дня от начала года. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>3BГГГГММДД/ддд</tt>''' – прибавить/вычесть из заданной даты в виде ГГГГММДД заданное количество дней (ддд – может быть отрицательным) и вернуть полученную дату в виде ГГГГММДД. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_7_2.doc|text=2007.2}}.</small>''<br />
* '''<tt>3СГГГГММДД/ГГГГММДД</tt>''' – вычесть из одной даты в виде ГГГГММДД другую дату в виде ГГГГММДД и вернуть разницу в виде количества дней. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_7_2.doc|text=2007.2}}.</small>''<br />
* '''<tt>3JГГГГММДД</tt>''' – переводит заданную юлианскую дату ГГГГММДД в грегорианскую. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_9_1.doc|text=2009.1}}.</small>''<br />
<br />
'''Примеры:'''<br />
<br />
&unifor('36',&unifor('34'))<br />
<br />
Вычесть из текущей даты сто дней:<br />
&uf('3B',&uf('3'),'/-100')<br />
<br />
Количество дней с 1 января 1900 года до сегодняшнего дня:<br />
&uf('3С',&uf('3'),'/19000101')<br />
<br />
===Функции для работы с глобальными переменными===<br />
<br />
Дополнительно о глобальных переменных см. [[Язык форматирования системы ИРБИС#Глобальные переменные|в подразделе ''Глобальные переменные'' статьи ''Язык форматирования системы ИРБИС'']].<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7<br />
|title=Очистить (опустошить) все глобальные переменные<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7<br />
<br />
'''Примеры:'''<br />
&unifor('+7')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7R<br />
|title=Чтение глобальной переменной<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7RNNN,nnn<br />
где:<br />
* NNN – номер переменной.<br />
* nnn – номер повторения. По умолчанию – номер текущего повторения в повторяющейся группе.<br />
Эквивалентная конструкция языка форматирования GNNN.<br />
<br />
'''Примеры:'''<br />
&unifor('+7R100')<br />
эквивалентная конструкция языка форматирования:<br />
G100<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7W<br />
|title=Запись глобальной переменной<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7WNNN#SSSS<br />
где:<br />
* NNN – номер переменной;<br />
* SSSS – список строк (результат расформатирования); каждая строка становится отдельным повторением.<br />
<br />
'''Примеры:'''<br />
&unifor('+7W100#',(v910/))<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7U<br />
|title=Добавление повторений глобальной переменной<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7UNNN#SSSS<br />
где:<br />
* NNN – номер переменной;<br />
* SSSS – список строк (результат расформатирования); каждая строка становится отдельным повторением.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7M<br />
|title=Логическое перемножение повторений двух переменных<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7MNNN#MMM<br />
Результат перемножения записывается в первую переменную.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7S<br />
|title=Логическое вычитание повторений двух переменных<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7SNNN#MMM<br />
Результат вычитания записывается в первую переменную.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7A<br />
|title=Логическое сложение повторений двух переменных<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7ANNN#MMM<br />
Результат сложения записывается в первую переменную.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7G<br />
|title=Исключение неоригинальных повторений переменной<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7GNNN<br />
Результат исключения записывается в ту же переменную.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7T<br />
|title=Сортировка повторений переменной<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7TNNN<br />
Результат сортировки записывается в ту же переменную.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+99<br />
|title=Групповая установка глобальных переменных<br />
|description=Групповая установка глобальных переменных. Применяется для ИРБИС-Навигатора. Исходная строка закодирована с помощью URL-кодировки. После раскодировки рассматривается как список строк (аналогично <tt>TStringList.Text</tt> в Delphi). Каждая строка этого списка имеет структуру: <tt>NNN#<значение_глобальной_переменной_NNN><tt><br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
}}<br />
<br />
+99<br />
<br />
===Функции для работы с базой данных===<br />
<br />
{{Описание функции UNIFOR<br />
|name=0<br />
|title=Выдать содержимое документа полностью в формате RTF<br />
|description=Выдать содержимое документа полностью (формат ALLl)<br />
}}<br />
0<br />
<br />
'''Примеры:'''<br />
&unifor('0')<br />
<br />
'''Результат расформатирования:'''<br />
\b #910/1:_\b0 ^YДА^PНЮАУ - каф. кримінального права\par \b #920/1:_\b0 ATHRA\par \b #210/1:_\b0 ^AТацій^BВ. Я.^GВасиль Якович^8ukr\par \b #710/1:_\b0 ^AТаций^BВ. Я.^GВасилий Яковлевич^8rus\par \b #907/1:_\b0 ^A20110301^B111\par \b #907/2:_\b0 ^A20110419^BZhukovskaya\par \b #710/2:_\b0 ^ATatsiy^BV.^8eng\par \b #907/3:_\b0 ^A20110421^BZhukovskaya\par \b #907/4:_\b0 ^A20111108^B111\par <br />
<br />
{{Описание функции UNIFOR<br />
|name=+0<br />
|title=Выдать содержимое документа полностью во внутреннем представлении<br />
|description=Выдать содержимое документа полностью (формат ALLl)<br />
}}<br />
+0<br />
<br />
'''Результат расформатирования:'''<br />
0<br />
2#0<br />
0#1<br />
910#^YДА^PНЮАУ - каф. кримінального права<br />
920#ATHRA<br />
210#^AТацій^BВ. Я.^GВасиль Якович^8ukr<br />
710#^AТаций^BВ. Я.^GВасилий Яковлевич^8rus<br />
907#^A20110301^B111<br />
907#^A20110419^BZhukovskaya<br />
710#^ATatsiy^BV.^8eng<br />
907#^A20110421^BZhukovskaya<br />
907#^A20111108^B111<br />
<br />
{{Описание функции UNIFOR<br />
|name=+@<br />
|title=Выдать содержимое документа полностью в формате JSON<br />
|versionFilename=RELEASE_2014_1.doc<br />
|versionText=2014.1<br />
|sectionLevel=====<br />
}}<br />
+@<br />
<br />
{{Описание функции UNIFOR<br />
|name=+N<br />
|title=Выдать количество повторений поля<br />
|description=Выдать количество повторений поля, метка которого указана после идентификатора функции<br />
}}<br />
+N<br />
<br />
'''Примеры:'''<br />
&unifor('+N910')<br />
<br />
{{Описание функции UNIFOR<br />
|name=A<br />
|title=Выдать заданное повторение поля<br />
}}<br />
<br />
AV<tag>^<delim>*<offset>.<length>#<occur><br />
где:<br />
* <tt><tag></tt> – метка поля;<br />
* <tt><delim></tt> – разделитель подполя;<br />
* <tt><offset></tt> – смещение;<br />
* <tt><length></tt> – длина;<br />
* <tt><occur></tt> – номер повторения.<br />
<br />
'''Примеры:'''<br />
&unifor('Av200#2')<br />
&unifor('Av910^a#5')<br />
&unifor('Av10^b*2.10#2')<br />
<br />
{{Описание функции UNIFOR<br />
|name=P<br />
|title=Выдать заданное оригинальное повторение поля<br />
|formatSeeAlsoName=A<br />
|formatSeeAlsoTitle=Выдать заданное повторение поля<br />
|exampleSeeAlsoName=A<br />
|exampleSeeAlsoTitle=Выдать заданное повторение поля<br />
}}<br />
<br />
{{Описание функции UNIFOR<br />
|name=+E<br />
|title=Возвращает порядковый номер заданного поля в записи<br />
|description=Возвращает порядковый номер заданного поля в записи. При отсутствии в записи заданного поля возвращается пустота<br />
|versionFilename=RELEASE_9_1.doc<br />
|versionText=2009.1<br />
}}<br />
<br />
+Etag#occ<br />
где:<br />
* tag – метка поля;<br />
* occ – номер повторения поля (по умолчанию – 1). Может принимать значение <tt>*</tt> – это означает номер текущего повторения в повторяющейся группе.<br />
<br />
{{Описание функции UNIFOR<br />
|name=K<br />
|title=Раскодировка через справочник<br />
|description=Возвращает значение из справочника, соответствующее переданному коду (иными словами, осуществляется раскодировка)<br />
}}<br />
<br />
K<имя_справочника><разделитель><исх_значение><br />
<br />
<разделитель> между <имя_справочника> и <исх_значение> может быть двух видов:<br />
\ - раскодировка с учетом регистра,<br />
! - раскодировка без учета регистра.<br />
<br />
'''Примеры:'''<br />
&unifor("Kjz.mnu\"v101)<br />
&uf('kFIO_SF.MNU!'&uf('av907^b#1'))<br />
<br />
{{Описание функции UNIFOR<br />
|name=I<br />
|title=Вернуть параметр из INI-файла<br />
}}<br />
<br />
I<SECTION>,<PAR_NAME>,<DE-FAULT_VALUE><br />
<br />
'''Примеры:'''<br />
&unifor('IPRIVATE,NAME,NONAME')<br />
<br />
{{Описание функции UNIFOR<br />
|name=1<br />
|title=Вернуть заданный подэлемент<br />
}}<br />
<br />
1NCXY?V<tag>^<delim>*<offset>.<length>#<occur><br />
где:<br />
* N – номер повторения подэлемента; если указана * – номер подэлемента совпадает со счетчиком повторяющейся группы.<br />
* ХY – разделители между подэлементами.<br />
* С – принимает значения: R – разделители справа от каждого подэлемента, кроме последнего; L – разделители слева от каждого подэлемента; D – каждый подэлемент заключен слева разделителем Х и справа – Y.<br />
* ? – символ-разделитель.<br />
* Остальные параметры аналогичны параметрам для функции {{Описание функции UNIFOR (ссылка)|name=A|title=Выдать заданное повторение поля}}.<br />
<br />
'''Примеры:'''<br />
(/&unifor('1*R; ?v910^h#1'))<br />
<br />
{{Описание функции UNIFOR<br />
|name=J<br />
|title=Вернуть кол-во ссылок для заданного термина<br />
}}<br />
<br />
J<dbn>,<термин><br />
<dbn> – имя БД; по умолчанию используется текущая.<br />
<br />
'''Примеры:'''<br />
&unifor('JBOOK,',"A="v200^a)<br />
<br />
{{Описание функции UNIFOR<br />
|name=D<br />
|title=Форматирование документа из другой БД<br />
|description=Форматирование документа из другой БД (REF на другую БД – отношение «от одного к одному»)<br />
}}<br />
<br />
D<dbn>,<@mfn|/termin/>,<@имя_формата|формат|*><br />
Передаются три параметра, разделенные запятой:<br />
* Первый – имя БД;<br />
* Второй – или непосредственно MFN с предшествующим символом @ или термин, ссылающийся на документ (термин – заключается в ограничительные символы);<br />
* Третий – или имя формата с предшествующим символом @ или непосредственно формат.<br />
Если задается *, данные выводятся по прямой ссылке (метка поля, номер повторения).<br />
<br />
'''Примеры:'''<br />
&unifor('DBOOK,/K=AAA/,v200')<br />
<br />
{{Описание функции UNIFOR<br />
|name=7<br />
|title=Расформатирование группы связанных документов из другой БД<br />
|description=Расформатирование группы связанных документов из другой БД (отношение «от одного к многим»)<br />
Функция обеспечивает возможность связать запись с рядом других записей по какому бы то ни было общему признаку. К примеру, можно отобрать все записи с определенным заглавие, индексом УДК/ББК, ключевым словом. <br />
|versionFilename=RELEASE_4_1.doc<br />
|versionText=2004.1<br />
}}<br />
<br />
7<имя_БД>,</termin/>,<@имя_формата|формат|*><br />
где:<br />
* имя_БД – имя базы данных, из которой будут браться связанные документы; по умолчанию используется текущая БД.<br />
* /termin/ – ключевой термин, на основе которого отбираются связанные документы; термин заключается в уникальные ограничители (например. /), в качестве которых используется символ, не входящий (гарантированно) в термин.<br />
* @имя_формата|формат|* – имя формата или формат в явном виде, в соответствии с которым будут расформатироваться связанные документы. Если задается имя формата, то он берется из директории БД, заданной параметром <имя_БД>. Если задается *, данные выводятся по прямой ссылке (метка поля, номер повторения).<br />
<br />
'''Примеры:'''<br />
&unifor('7TEST,',"/T="v200^a"/",',v903"\par "')<br />
<br />
&uf(|7EK,!FAK=23.01!,&uf('av907^A#1'),&uf('6brief')/|d90),<br />
<br />
{{Описание функции UNIFOR<br />
|name=!<br />
|title=Команда постредактуры: очистить результат расформатирования от двойных разделителей<br />
|description=Команда постредактуры: очистить результат расформатирования от двойных разделителей (двойных точек или двойных конструкций <. – >). Имеет смысл использовать один раз в любом месте формата<br />
|versionFilename=RELEASE_4_1.doc<br />
|versionText=2004.1<br />
}}<br />
<br />
!<br />
<br />
'''Примеры:'''<br />
&unifor('!')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+F<br />
|title=Команда постредактуры: очистить результат расформатирования от RTF-конструкций<br />
|description=Команда постредактуры: очистить результат расформатирования от RTF-конструкций. Имеет смысл использовать один раз в любом месте формата<br />
|versionFilename=RELEASE_4_1.doc<br />
|versionText=2004.1<br />
}}<br />
<br />
+F<br />
<br />
'''Примеры:'''<br />
&unifor('+F')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1O<br />
|title=Групповая мультираскодировка списка<br />
}}<br />
<br />
+1O<MNU>|SSSS<br />
где:<br />
* <MNU> имя справочника (с расширением).<br />
* SSSS – список строк (результат расформатирования.<br />
<br />
'''Примеры:'''<br />
&unifor('+1Omhr.mnu|',(v910^m/))<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1I<br />
|title=Исключение неоригинальных значений из списка<br />
}}<br />
<br />
+1ISSSS<br />
где параметры аналогичны описанным для функции {{Описание функции UNIFOR (ссылка)|name=+1O|title=Групповая мультираскодировка списка}}<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1V<br />
|title=Сортировка списка<br />
}}<br />
<br />
+1VSSSS<br />
где параметры аналогичны описанным для функции {{Описание функции UNIFOR (ссылка)|name=+1O|title=Групповая мультираскодировка списка}}<br />
<br />
{{Описание функции UNIFOR<br />
|name=+I<br />
|title=Формирования ссылки (гиперссылки)<br />
|versionFilename=RELEASE_4_1.doc<br />
|versionText=2004.1<br />
}}<br />
<br />
+I/содержание_ссылки/название_ссылки<br />
'''/содержание_ссылки/''' – внутренние данные ссылки, ограниченные уникальным разделителем. Имеют структуру<br />
NNN,HHH,<параметры><br />
где:<br />
* NNN – тип ссылки, возможные значения: <br />
** 0 – ссылки на внешние объекты;<br />
** 1 – ссылка на связанный документ (возможно в другой БД) – "от одного к одному";<br />
** 2 – ссылка на связанные документы (возможно в другой БД) – "от одного к многим";<br />
* HHH – экранная подсказка, может иметь вид: @iii – где <tt>iii</tt> – номер текста в файле IRBISMSG.TXT, \text\ – собственно текст подсказки в уникальных ограничителях.<br />
'''<параметры>''':<br />
* Для ссылок типа 0 представляет собой в общем виде URL внешнего объекта (в том числе – полный путь на файл).<br />
* Для ссылок типа 1 и 2 <параметры> имеют следующую структуру:<br />
имя_БД,имя_формата,termin<br />
где:<br />
* имя_БД – имя базы данных, из которой будут браться связанные документы; по умолчанию используется текущая БД.<br />
* имя_формата – имя формата, в соответствии с которым будут расформатироваться связанные документы. (по умолчанию – используется оптимизированный формат).<br />
* termin – ключевой термин, на основе которого отбираются (ищутся) связанные документы.<br />
<br />
<br />
'''Примеры:'''<br />
&unifor('+I?0,,'v951^i'?',v951^t,|INTERNET|n951^t)<br />
&unifor(|+I?1,,,,I=|v421^w|?|,v421^a)<br />
<br />
{{Описание функции UNIFOR<br />
|name=+6<br />
|title=Выдать статус записи<br />
|description=Выдать статус записи. Если запись логически удаленная, возвращается 0, в противном случае – 1<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+6<br />
<br />
'''Примеры:'''<br />
… if &unifor('+6')='0' then 'запись логически удаленная' fi …<br />
<br />
{{Описание функции UNIFOR<br />
|name=+D<br />
|title=Выдать имя базы данных<br />
|description=Возвращает имя текущей базы данных<br />
}}<br />
<br />
+D<br />
<br />
'''Примеры:'''<br />
… &unifor('+D') …<br />
<br />
{{Описание функции UNIFOR<br />
|name=2<br />
|title=Вернуть последний номер MFN в базе +1 <br />
|description=Возвращает последний номер MFN в текущей базе данных, увеличенный на единицу (MAX_MFN) + 1). В общем случае параметр имеет вид 2N, где N - выводимое количество символов, обрезанное до необходимой длинны справа.<br />
}}<br />
<br />
'''Пример:'''<br />
&unifor('2'), &unifor('27')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9V<br />
|title=Вернуть номер поколения ИРБИС<br />
|description=Возвращает поколение системы, в которой осуществляется расформатирование. Может быть полезен при разработке единых форматов, которые по-разному выполняются в ИРБИС 32 и ИРБИС 64<br />
|versionFilename=RELEASE_11_1.doc<br />
|versionText=2011.1<br />
}}<br />
<br />
+9V<br />
который возвращает:<br />
* 32 – если форматирование выполняется в ИРБИС 32;<br />
* 64 – если в ИРБИС 64 (и ИРБИС 128).<br />
<br />
{{Описание функции UNIFOR<br />
|name=4N<br />
|title=Форматировать предыдущую копию текущей записи<br />
|versionFilename=RELEASE_11_1.doc<br />
|versionText=2011.1<br />
}}<br />
<br />
4N,Format<br />
где: <br />
* <tt>N</tt> – номер копии (в обратном порядке, т.е. если N=1 – это один шаг назад, N=2 – два шага назад и т.д.). Может принимать значение * – это указывает на последнюю копию. Если N – пустое значение, то в случае повторяющейся группы в качестве значения N берется НОМЕР ТЕКУЩЕГО ПОВТОРЕНИЯ, в противном случае берется первая копия;<br />
* <tt>Format</tt> – формат; может задаваться непосредственно или в виде @имя_формата.<br />
<br />
Если не задается ни <tt>N</tt> ни <tt>Format</tt>, т.е. &unifor('4'), то возвращается количество предыдущих копий. <br />
Если запись не имеет предыдущих копий, то &unifor('4') возвращает 0, а все остальные конструкции &unifor('4...') возвращают пустоту.<br />
<br />
'''Примеры:'''<br />
&unifor('41,@brief') <br />
(...&unifor('4,v200^a')...) <br />
&unifor('4*,(v910/)')<br />
<br />
Примечание: в связи с этим см. также новую команду глобальной корректировки – ВОССТАНОВИТЬ ПРЕДЫДУЩУЮ КОПИЮ.<br />
<br />
===Функции для работы с повторяющимися группами===<br />
<br />
Дополнительно о повторяющихся группах см. [[Язык форматирования системы ИРБИС#Повторяющиеся группы|в подразделе ''Повторяющиеся группы'' статьи ''Язык форматирования системы ИРБИС'']].<br />
<br />
{{Описание функции UNIFOR<br />
|name=+4<br />
|title=Выдача метки, порядкового номера и значения поля в соответствии с индексом (номером повторения) повторяющейся группы<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+4XY <br />
где:<br />
* Х принимает три значения: T – выдать метку; F – выдать значение поле; N – выдать порядковый номер поля в записи (отличается от индекса повторения, если Y принимает значение 1); <br />
* Y принимает значения: 0 – поля выдаются в порядке расположения в записи; 1 – поля выдаются в порядке возрастания меток (по умолчанию 0).<br />
<br />
'''Примеры:'''<br />
(…&unifor('+4T1'),'_' &unifor('+4N1'),': ', &unifor('+4F1'),'<br>'…)<br />
<br />
{{Описание функции UNIFOR<br />
|name=+5<br />
|title=Выдача элемента списка/справочника в соответствии с индексом (номером повторения) повторяющейся группы<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+5Х<имя_справочника/списка> <br />
где Х принимает значения: Т – выдать значение; F – выдать пояснение (имеет смысл, если задается справочник, т.е. файл с расширением MNU).<br />
<br />
'''Примеры:'''<br />
…(…&unifor('+5Tfield.mnu'),' – ',&unifor('+5Ffield.mnu'),'<br>'…)<br />
<br />
{{Описание функции UNIFOR<br />
|name=+90<br />
|title=Вернуть номер текущего повторения в повторяющейся группе<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
}}<br />
<br />
+90<br />
<br />
===Функции для работы с базой данных электронного каталога===<br />
<br />
{{Описание функции UNIFOR<br />
|name=B<br />
|title=Выдать библиографическую свертку документа<br />
}}<br />
<br />
B<br />
<br />
'''Примеры:'''<br />
&unifor('B')<br />
<br />
{{Описание функции UNIFOR<br />
|name=C<br />
|title=Контроль ISSN/ISBN<br />
|description=Контроль ISSN/ISBN. Возвращаемое значение: 0 – при положительном результате, 1 – при отрицательном<br />
}}<br />
<br />
С<ISSN/ISBN><br />
<br />
'''Примеры:'''<br />
&unifor("C"v10^a)<br />
<br />
{{Описание функции UNIFOR<br />
|name=L<br />
|title=Вернуть окончание термина<br />
}}<br />
<br />
L<начало_термина><br />
<br />
'''Примеры:'''<br />
&unifor("L"v101)<br />
<br />
{{Описание функции UNIFOR<br />
|name=U<br />
|title=Кумуляция номеров журналов<br />
}}<br />
<br />
U<strbase>,<stradd><br />
где:<br />
* <strbase> – исходная кумулированная строка.<br />
* <stradd> – кумулируемые номера.<br />
<br />
'''Примеры:'''<br />
&unifor("U"v909^h",12")<br />
<br />
{{Описание функции UNIFOR<br />
|name=V<br />
|title=Декумуляция номеров журналов<br />
}}<br />
<br />
V<strbase><br />
где:<br />
<strbase> – исходная строка для декумуляции.<br />
<br />
'''Примеры:'''<br />
&unifor("V"v909^h")<br />
<br />
{{Описание функции UNIFOR<br />
|name=W<br />
|title=Контроль кумуляции<br />
}}<br />
<br />
W<strbadd>,<strbase><br />
где:<br />
* <strbase> – исходная кумулированная строка.<br />
* <stradd> – кумулируемый номер.<br />
'''Возвращаемые значения:'''<br />
* 0 – если <stradd> не присутствует в <strbase>.<br />
* 1 – если <stradd> присутствует в <strbase>.<br />
<br />
'''Примеры:'''<br />
&unifor("W12,"v909^h)<br />
<br />
{{Описание функции UNIFOR<br />
|name=O<br />
|title=Вывод сведений о всех экземплярах по всем местам хранения<br />
}}<br />
<br />
'''Пример:'''<br />
&unifor('O')<br />
<br />
<br />
{{Описание функции UNIFOR<br />
|name=Y<br />
|title=Возвращает данные о всех свободных (не выданных) экземплярах по всем местах хранения<br />
}}<br />
<br />
'''Пример:'''<br />
&unifor('Y')<br />
<br />
===Функции для работы с файлами===<br />
<br />
{{Описание функции UNIFOR<br />
|name=+91<br />
|title=Вернуть имя файла из заданного полного пути/имени<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
}}<br />
<br />
+91<br />
<br />
{{Описание функции UNIFOR<br />
|name=+92<br />
|title=Вернуть путь из заданного полного пути/имени<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
}}<br />
<br />
+92<br />
<br />
{{Описание функции UNIFOR<br />
|name=+93<br />
|title=Вернуть расширение из заданного полного пути/имени<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
}}<br />
<br />
+93<br />
<br />
{{Описание функции UNIFOR<br />
|name=+94<br />
|title=Вернуть имя диска из заданного полного пути/имени<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
}}<br />
<br />
+94<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9L<br />
|title=Проверить наличие файла/корректность URL<br />
|versionFilename=RELEASE_13_1.doc<br />
|versionText=2013.1<br />
}}<br />
<br />
+9L<path>,<dbname>,<filename><br />
где:<br />
* <tt><path></tt> – определяет путь к файлу и принимает значения: <tt>0</tt> – папка, в которой установлена серверная часть ИРБИС (<tt><IRBIS_SERVER_ROOT></tt>); <tt>1</tt> – общая директория баз данных (по умолчанию <tt><IRBIS_SERVER_ROOT>\DATAI</tt>); <tt>2,3,10</tt> – папка БД <dbname>; <tt>11</tt> – абсолютный путь/URL.<br />
* <tt><dbname></tt> – имя БД (имеет смысл только при <tt>path=2,3,10</tt>).<br />
* <tt><filename></tt> – путь и имя файла или URL.<br />
<br />
Функция возвращает:<br />
0 – если файл отсутствует/некорректный URL;<br />
1 – если файл присутствует/корректный URL.<br />
<br />
'''Примеры:'''<br />
&uf('+9L1,,\deposit\rksu.fst') <br />
(....&uf('+9L10,',&uf('+D'),',',v951^A)....)<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9C<br />
|title=Вставить данные из заданного текстового файла<br />
}}<br />
<br />
+9С<path>,<dbname>,<filename><br />
где:<br />
* <tt><path></tt> – определяет путь к файлу и принимает значения: <tt>0</tt> – основная директория системы (для ИРБИС32 – та, где находятся исполняемые модули; для ИРБИС64 – та, где находятся исполняемые модули сервера); <tt>1</tt> – общая директория баз данных (по умолчанию \DATAI); <tt>10</tt> – директория конкретной БД;<br />
* <tt><dbname></tt> – имя БД (имеет смысл только при <tt>path=10</tt>). По умолчанию – предполагается текущая БД;<br />
* <tt><filename></tt> – имя файла;<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9A<br />
|title=Вернуть размер файла в байтах. <br />
}}<br />
<br />
+9A<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9D<br />
|title=Сохранить заданный внутренний двоичный объект в заданном файле<br />
|versionFilename=RELEASE_6_2.doc<br />
|versionText=2006.2<br />
}}<br />
<br />
+9DNN#<полный путь><br />
где <tt>NN</tt> – номер внутреннего двоичного объекта.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9J<br />
|title=Представить заданный двоичный файл в кодированном виде<br />
|description=Представить заданный двоичный файл в виде: <tt>^A<тип_файла>^B<данные файла перекодированные на основе URLEncode></tt><br />
|versionFilename=RELEASE_10_1.doc<br />
|versionText=2010.1<br />
}}<br />
<br />
+9J<полный путь и имя файла><br />
<br />
Имя файла может задаваться в виде маски, в этом случае использоваться будет первый найденный соответствующей маске файл.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9K<br />
|title=Удалить заданный файл<br />
|description=Удалить заданный файл. Если имя файла задано в виде маски, то удаляться будут все соответствующие маске файлы<br />
|versionFilename=RELEASE_10_1.doc<br />
|versionText=2010.1<br />
}}<br />
<br />
+9K<полный путь и имя файла><br />
<br />
===Функции, используемые только в глобальной корректировке===<br />
<br />
{{Описание функции UNIFOR<br />
|name=Z<br />
|title=Размножение экземпляров<br />
|description=Размножение экземпляров. Функция ничего не возвращает. Можно применять только в глобальной корректировке<br />
}}<br />
<br />
Z<br />
<br />
'''Примеры:'''<br />
&unifor('Z')<br />
<br />
{{Описание функции UNIFOR<br />
|name=M<br />
|title=Отсортировать повторения заданного поля<br />
|description=Отсортировать повторения заданного поля (имеется в виду строковая сортировка) – функция ничего не возвращает. Можно применять только в глобальной корректировке<br />
}}<br />
<br />
MX<tag>^<delims><br />
где:<br />
* X – вид сортировки: I – по возрастанию; D – по убыванию.<br />
* <tag> – метка поля.<br />
* <delims> – разделители подполей, определяющих ключ сортировки.<br />
<br />
'''Примеры:'''<br />
&unifor('MI910^BD')<br />
<br />
===Выполнить внешнюю программу===<br />
<br />
{{Описание функции UNIFOR<br />
|name=6<br />
|title=Выполнить формат<br />
}}<br />
<br />
6<имя файла формата><br />
где <tt><имя файла формата></tt> – имя [[Язык форматирования системы ИРБИС#Понятие формата|файла формата]], указывается без расширения. Файл формата будет найден по заданному имени, обязательному расширению <tt>.pft</tt> и местоположению: в [[Файлы ИРБИС#Файлы баз данных ИРБИС|папке базы данных]], а если там нет, то в папке [[Файлы ИРБИС#Основные обозначения|<tt><IRBIS_SERVER_ROOT>\Deposit</tt>]].<br />
<br />
Альтернативным способом выполнения файла форматов является использование [[Язык форматирования системы ИРБИС#Вложенные форматы|вложенных форматов]].<br />
<br />
{{Описание функции UNIFOR<br />
|name=+2<br />
|title=Выполнить внешнее приложение<br />
|description=Выполняет внешнее приложение. Всё, что после +2 – параметры командной строки. <br />
}}<br />
<br />
'''Примеры:'''<br />
&unifor('+2cmd')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+8<br />
|title=Вызвать функцию из внешней DLL<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
}}<br />
<br />
+8<имя_DLL>,<имя_функции>,<передаваемые_данные><br />
<br />
Внешние функции должны ОБЯЗАТЕЛЬНО иметь следующую структуру:<br />
<br />
* в случае Pascal<br />
test_function1(buf1,buf2: Pchar; bufsize: integer): integer; <br />
<br />
* в случае C<br />
int test_function1(char *buf1, char *buf2, int bufsize) <br />
где: buf1 – передаваемые данные (входные), buf2 – возвращаемые данные (выходные), bufsize – размер выходного буфера (buf2). В ИРБИС64 данные передаются и возвращаются в UTF8. Возврат функции: 0 – нормальное завершение; любое другое значение – ненормальное. В случае нестандартного вызова функций из DLL (по Pascal-правилам) надо указывать символ * перед именем DLL:<br />
&unifor('+8*<имя_DLL>,<имя_функции>,.... <br />
<br />
Следует помнить, что имя функции в вызове надо указывать строго в соответствии с тем, как она экспортирована из DLL, большие и маленькие буквы различаются.<br />
<br />
'''Примеры:'''<br />
<br />
В вызываемую функцию передается заглавие:<br />
&unifor('+8test_dll,test_function1,',v200^a)<br />
<br />
Передаются повторения 910 поля:<br />
(&unifor('+8test_dll,test_function2,',v910))<br />
<br />
Передается вся текущая запись:<br />
(&unifor('+8test_dll,test_function2,',&unifor('+0')))<br />
<br />
===Функции, не вошедшие в другие категории===<br />
<br />
{{Описание функции UNIFOR<br />
|name=S<br />
|title=Универсальный счетчик<br />
}}<br />
<br />
SN<br />
где:<br />
* N=0 – обнулить счетчик.<br />
* N=1..9 – увеличить значение счетчика на со-отв. значение.<br />
* N=A – вернуть значение счетчика – арабскими цифрами.<br />
* N=X – вернуть значение счетчика – римскими цифрами.<br />
<br />
'''Примеры:'''<br />
&unifor('S0')<br />
&unifor('S1')<br />
&unifor('SA')<br />
<br />
{{Описание функции UNIFOR<br />
|name=R<br />
|title=Генерация случайного числа<br />
}}<br />
<br />
RNN<br />
где NN – кол-во знаков в случайном числе (по умолчанию – 6).<br />
<br />
'''Примеры:'''<br />
&unifor('R')<br />
&unifor('R4')<br />
<br />
{{Описание функции UNIFOR<br />
|name=[<br />
|title=Чистка данных от команд контекстного выделения<br />
|versionFilename=RELEASE_8_1.doc<br />
|versionText=2008.1<br />
}}<br />
<br />
[<br />
<br />
'''Примеры:'''<br />
&unifor('[')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+3G<br />
|title=<nowiki>Вывод количества документов, найденных во внешней базе по команде G.(команда возвращает строку RESULT=[кол-во найденных по запросу документов])</nowiki><br />
}}<br />
<br />
+3G[URL к внешнему сайту WEB ИРБИС, с запросом G]<br />
<br />
{{Описание функции UNIFOR<br />
|name=+3S<br />
|title=<nowiki>Расформатирует найденные по запросу записи. Если [количество выводимых записей]=0, то возвращает только количество найденных по запросу документов</nowiki><br />
}}<br />
<br />
+3S[имя базы],[количество выводимых записей],[ограничитель][формат][ограничитель],[формат или @имя файла с форматом]<br />
<br />
{{Описание функции UNIFOR<br />
|name=+3C<br />
|title=Функция введена для оптимизации скорости проверки наличия текста в полнотекстовой базе данных<br />
|description=Функция предназначена для обрезания перед помещением в словарь базы данных значения, формируемого путём соединения префикса <tt>TXT=</tt> и содержимого подполя ^B ссылки на текстовый файл полнотекстовой базы. Подробнее см. [[Схема полнотекстовой базы данных#Префикс TXT| в подразделе ''Префикс TXT'' статьи ''Схема полнотекстовой базы данных'']]<br />
|versionFilename=RELEASE_13_1.doc<br />
|versionText=2013.1<br />
}}<br />
<br />
==Устаревшие, не рекомендованные к использованию UNIFOR'ы==<br />
<br />
===Устаревшие функции для работы с глобальными переменными===<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1<br />
|title=Очистить (опустошить) все глобальные переменные<br />
}}<br />
<br />
+1<br />
<br />
'''Примеры:'''<br />
&unifor('+1')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1R<br />
|title=Чтение глобальных переменных<br />
|versionFilename=RELEASE_4_1.doc<br />
|versionText=2004.1<br />
}}<br />
<br />
+1RNNN,nnn<br />
где:<br />
* NNN – номер первой или единственной переменной, возможна конструкция *+-<число>. * – номер текущего повторения в повторяющейся группе.<br />
* nnn – кол-во переменных (по умолчанию 1).<br />
<br />
<br />
'''Примеры:'''<br />
&unifor('+1R100,2')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1W<br />
|title=Запись в глобальные переменные<br />
|versionFilename=RELEASE_4_1.doc<br />
|versionText=2004.1<br />
}}<br />
<br />
+1WNNN,MMM#SSSS<br />
где:<br />
* NNN – номер первой или единственной переменной, возможна конструкция *+-<число>. * – номер текущего повторения в повторяющейся группе.<br />
* MMM – номер переменной для сохранения кол-ва записанных переменных (по умолчанию не используется).<br />
* SSSS – список строк (результат расформатирования). Если задан MMM – каждая строка пишется в отдельную переменную, в противном случае все пишется в одну переменную.<br />
<br />
'''Примеры:'''<br />
&unifor('+1W100,0#',(v910/))<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1K<br />
|title=Групповая мультираскодировка переменных<br />
}}<br />
<br />
+1K<MNU>|NNN,nnn<br />
где:<br />
* NNN – номер первой или единственной переменной.<br />
* nnn – кол-во переменных (по умолчанию 1).<br />
<br />
'''Примеры:'''<br />
&unifor('+1Kmhr.mnu|100,10')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1M<br />
|title=Перемножение двух списков (групп переменных)<br />
}}<br />
<br />
+1MNNN,nnn#MMM,mmm<br />
где параметры аналогичны описанным для функции {{Описание функции UNIFOR (ссылка)|name=+1K|title=Групповая мультираскодировка переменных}}.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1S<br />
|title=Вычитание списков (групп переменных)<br />
}}<br />
<br />
+1SNNN,nnn#MMM,mmm<br />
где параметры аналогичны описанным для функции {{Описание функции UNIFOR (ссылка)|name=+1K|title=Групповая мультираскодировка переменных}}<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1A<br />
|title=Сложение списков (групп переменных)<br />
}}<br />
<br />
+1ANNN,nnn#MMM,mmm<br />
где параметры аналогичны описанным для функции {{Описание функции UNIFOR (ссылка)|name=+1K|title=Групповая мультираскодировка переменных}}<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1G<br />
|title=Исключение неоригинальных значений из группы переменных<br />
}}<br />
<br />
+1GNNN,nnn<br />
где параметры аналогичны описанным для функции {{Описание функции UNIFOR (ссылка)|name=+1K|title=Групповая мультираскодировка переменных}}<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1T<br />
|title=Сортировка группы переменных<br />
}}<br />
<br />
+1TNNN,nnn<br />
где параметры аналогичны описанным для функции {{Описание функции UNIFOR (ссылка)|name=+1K|title=Групповая мультираскодировка переменных}}<br />
<br />
==Неописанные UNIFOR'ы==<br />
<br />
<br />
<br />
{{Описание функции UNIFOR<br />
|name=Неописанный UNIFOR &unifor('11R^c?v210*2')<br />
|title=<br />
|versionFilename=<br />
|versionText=<br />
|sectionLevel======<br />
}}<br />
<br />
<br />
<br />
{{Описание функции UNIFOR<br />
|name=Неописанный UNIFOR &umarci('1200#h#2')<br />
|title=<br />
|versionFilename=<br />
|versionText=<br />
|sectionLevel======<br />
}}<br />
<br />
<br />
<br />
{{Описание функции UNIFOR<br />
|name=Неописанный UNIFOR &umarci('2210#^c')<br />
|title=<br />
|versionFilename=<br />
|versionText=<br />
|sectionLevel======<br />
}}<br />
<br />
<br />
{{Описание функции UNIFOR<br />
|name=Неописанный UNIFOR &umarci('3210#2#^c')<br />
|title=<br />
|versionFilename=<br />
|versionText=<br />
|sectionLevel======<br />
}}<br />
<br />
==Ссылки==<br />
<br />
См. также:<br />
* [[Язык форматирования системы ИРБИС]]<br />
* [[Операторы языка форматирования ИРБИС]]<br />
* [[Функции языка форматирования ИРБИС]]<br />
<br />
Источники информации:<br />
* [[Общее описание системы ИРБИС64]]<br />
* ''Техническая документация WEB ИРБИС64 и WEB ИРБИС32''. [http://irbis.gpntb.ru/read.php?21,62125 Актуальная версия документа доступна на форуме.]<br />
* [[Документация, поставляемая с системой ИРБИС#История версий ИРБИС|История версий ИРБИС (файл <tt>RELEASE_OVERALL.doc</tt>)]] версии 2008.1<br />
* {{Ссылка на открытый FTP|filename=RELEASE_13_1.doc|text=Файл описания релиза 2009.1}}<br />
* {{Ссылка на открытый FTP|filename=RELEASE_13_1.doc|text=Файл описания релиза 2010.1}}<br />
* {{Ссылка на открытый FTP|filename=RELEASE_13_1.doc|text=Файл описания релиза 2011.1}}<br />
* {{Ссылка на открытый FTP|filename=RELEASE_13_1.doc|text=Файл описания релиза 2013.1}}<br />
<br />
[[Категория:Язык форматирования системы ИРБИС]]<br />
[[Категория:Анонсированные статьи]]</div>Sokvhttp://wiki.elnit.org/index.php?title=UNIFOR&diff=2440UNIFOR2015-11-06T15:06:08Z<p>Sokv: /* Дополнительные функции для обработки строк */</p>
<hr />
<div>UNIFOR – [[Язык форматирования системы ИРБИС#Форматные выходы. UNIFOR|''форматный выход'']], реализующий множество функций вне базовых рамок [[Язык форматирования системы ИРБИС|языка форматирования]].<br />
<br />
В статье для удобства перечень форматных выходов UNIFOR разбит на категории.<br />
<br />
==Использование UNIFOR==<br />
<br />
UNIFOR имеет следующий синтаксис в языке форматирования (в полной или сокращённой форме):<br />
&unifor(формат)<br />
&uf(формат)<br />
где:<br />
* '''<tt>&</tt>''' – идентификатор вызова форматного выхода,<br />
* '''<tt>unifor</tt>''' – имя форматного выхода (соответственно '''<tt>uf</tt>''' – сокращённое имя),<br />
* '''<tt>формат</tt>''' – аргумент.<br />
<br />
Рекомендуется использовать сокращённую форму вызова UNIFOR. Сокращённая форма по действию ничем не отличается от полной формы, зато позволяет сократить размер формата и повысить его читаемость.<br />
<br />
Вид реализуемой функции определяется первыми символами строки, которая формируется в результате выполнения формата, передаваемого в качестве аргумента.<br />
<br />
===Передача параметров===<br />
<br />
Во многих функциях, которые позволяет реализовать форматный выход UNIFOR, для передачи параметра неизвестной длины используется уникальный разделитель. Значение параметра должно быть окружено таким уникальным разделителем слева и справа.<br />
<br />
Например, если исходная строка<br />
!AAAA!BBBB<br />
то в качестве уникального разделителя выступает символ<br />
!<br />
значение параметра<br />
AAAA<br />
а оставшаяся часть исходной строки<br />
BBBB<br />
<br />
==Перечень функций UNIFOR с примерами их применения==<br />
<br />
===Функции для обработки строк===<br />
<br />
====Обычные функции для обработки строк====<br />
<br />
{{Описание функции UNIFOR<br />
|name=+95<br />
|title=Вернуть длину исходной строки<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
|sectionLevel======<br />
}}<br />
<br />
+95<строка><br />
<br />
{{Описание функции UNIFOR<br />
|name=+96<br />
|title=Вернуть часть строки<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
|sectionLevel======<br />
}}<br />
<br />
+96A*SSS.NNN#<строка><br />
где:<br />
* A – направление: 0 – с начала строки; 1 – с конца;<br />
* SSS – смещение;<br />
* NNN – кол-во символов.<br />
<br />
'''Примеры:'''<br />
&uf('+960*0.4#'v100)<br />
&uf('+960*5.4#'v100)<br />
&uf('+961*0.4#'v100)<br />
<br />
{{Описание функции UNIFOR<br />
|name=Q<br />
|title=Вернуть заданную строку в нижнем регистре<br />
|sectionLevel======<br />
}}<br />
<br />
Q<строка><br />
<br />
'''Примеры:'''<br />
&unifor("Q"v200)<br />
<br />
{{Описание функции UNIFOR<br />
|name=+97<br />
|title=Вернуть заданную строку в верхнем регистре<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
|sectionLevel======<br />
}}<br />
<br />
+97<строка><br />
<br />
{{Описание функции UNIFOR<br />
|name=+98<br />
|title=Заменить в заданной строке один символ на другой<br />
|description=Заменить в заданной строке один символ на другой (регистр учитывается)<br />
|versionFilename=RELEASE_7_2.doc<br />
|versionText=2007.2<br />
|sectionLevel======<br />
}}<br />
<br />
+98ab<строка><br />
где:<br />
* a – заменяемый символ;<br />
* b – заменяющий символ.<br />
<br />
'''Примеры:'''<br />
<br />
В результате выполнения формата<br />
&uf('+98 0',f(1,5,0))<br />
получится значение<br />
00001<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9F<br />
|title=Вернуть ANSI-символ с заданным кодом<br />
|versionFilename=RELEASE_8_1.doc<br />
|versionText=2008.1<br />
|sectionLevel======<br />
}}<br />
<br />
+9F<код><br />
<br />
'''Примеры:'''<br />
<br />
Такой форматный выход может пригодиться, например, когда надо вывести в литерале символ, совпадающий с ограничителями литерала.<br />
<br />
Для формата<br />
<br />
'11111',&Uf('+9F39'),'22222'<br />
<br />
результат расформатирования будет<br />
<br />
11111'22222<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9I<br />
|title=Заменить в исходных данных некоторую заданную последовательность символов другой заданной последовательностью символов<br />
|versionFilename=RELEASE_9_1.doc<br />
|versionText=2009.1<br />
|sectionLevel======<br />
}}<br />
<br />
+9I!AAAA!/BBBB/<данные><br />
где <tt>АААА</tt> – последовательность символов, подлежащая замене; <tt>ВВВВ</tt> – заменяющая последовательность символов; символ <tt>!</tt> – уникальный разделитель, отсутствующий в строке <tt>АААА</tt>; символ <tt>/</tt> – уникальный разделитель, отсутствующий в строке <tt>ВВВВ</tt>. <tt>ВВВВ</tt> может быть пустым значением, в этом случае последовательность <tt>АААА</tt> будет удаляться. Обрабатываются ВСЕ (а не только первое) вхождения <tt>АААА</tt> в исходные данные. В качестве разделителей можно использовать ТОЛЬКО символы стандартного набора (с кодом менее 128).<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9S<br />
|title=Найти подстроку<br />
|description=Возвращает позицию первого символа найденного вхождения подстроки в исходную строку. Считается, что символы в строке нумеруются с 1. Если подстрока не найдена, то возвращает 0. ''Комментарий: следует отметить, что в функции {{Описание функции UNIFOR (ссылка)|name=+96|title=Вернуть часть строки}} указывают смещение, а не позицию символа''<br />
|versionFilename=RELEASE_13_1.doc<br />
|versionText=2013.1<br />
|sectionLevel======<br />
}}<br />
<br />
+9S!подстрока!<исходная_строка><br />
где <tt>подстрока</tt> – подстрока, которую нужно найти; <tt><исходная_строка></tt> – исходная строка для поиска; символ <tt>!</tt> – уникальный разделитель, отсутствующий в искомой подстроке.<br />
<br />
====Функции для работы со словами====<br />
<br />
{{Описание функции UNIFOR<br />
|name=E<br />
|title=Вернуть заданное количество слов с начала строки<br />
|sectionLevel======<br />
}}<br />
<br />
EN<строка><br />
где <tt>N</tt> – количество слов (одна цифра).<br />
<br />
<br />
'''Примеры:'''<br />
&unifor("E3"v200^a)<br />
<br />
{{Описание функции UNIFOR<br />
|name=F<br />
|title=Вернуть часть строки, начиная со следующего слова после указанного и до конца строки<br />
|sectionLevel======<br />
}}<br />
<br />
FN<строка><br />
где <tt>N</tt> – количество слов (одна цифра).<br />
<br />
'''Примеры:'''<br />
&unifor("F3"v200^a)<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9G<br />
|title=Преобразовать заданную строку в список слов<br />
|versionFilename=RELEASE_8_1.doc<br />
|versionText=2008.1<br />
|sectionLevel======<br />
}}<br />
<br />
+9G<строка><br />
<br />
Границы слов определяются на основе [[Файлы ИРБИС#Таблица алфавитных символов|таблицы алфавитных символов]].<br />
<br />
====Дополнительные функции для обработки строк====<br />
<br />
{{Описание функции UNIFOR<br />
|name=+3E<br />
|title=Кодирование данных для представления в URL<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
|sectionLevel======<br />
}}<br />
<br />
+3E<данные><br />
<br />
'''Примеры:'''<br />
&unifor('+3E',v1007)<br />
<br />
{{Описание функции UNIFOR<br />
|name=+3D<br />
|title=Декодирование данных из URL<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
|sectionLevel======<br />
}}<br />
<br />
+3D<данные><br />
<br />
{{Описание функции UNIFOR<br />
|name=+3+<br />
|title=Перевод знака <tt>+</tt> в <tt>%2B</tt><br />
|sectionLevel======<br />
}}<br />
<br />
+3+<данные><br />
<br />
{{Описание функции UNIFOR<br />
|name=+3U<br />
|title=Кодирование строки в UTF-8<br />
|sectionLevel======<br />
}}<br />
<br />
+3U<данные><br />
<br />
{{Описание функции UNIFOR<br />
|name=+3W<br />
|title=Декодирование строки из UTF-8<br />
|sectionLevel======<br />
}}<br />
<br />
+3W<данные><br />
<br />
{{Описание функции UNIFOR<br />
|name=T<br />
|title=Транслитерация кириллических символов с помощью латиницы<br />
|sectionLevel======<br />
}}<br />
<br />
TN<строка><br />
где N – вид таблицы транслитерации (0 или 1).<br />
<br />
'''Примеры:'''<br />
&unifor("T0"V200)<br />
<br />
{{Описание функции UNIFOR<br />
|name=G<br />
|title=Вернуть часть строки до или начиная с заданного символа<br />
|sectionLevel======<br />
}}<br />
<br />
GNA<строка><br />
где:<br />
* N может принимать значения:<br />
** 0 (или A) – до заданного символа не включая его;<br />
** 1 (или B) – начиная с заданного символа;<br />
** 2 (или C) – после заданного символа;<br />
** 3 (или D) – после последнего вхождения заданного символа;<br />
** 4 (или E) – до последнего вхождения заданного символа (включая его);<br />
** 5 – до последнего вхождения заданного символа (не включая его).<br />
* А – заданный символ. Символ обозначает самого себя, кроме # (обозначает любую цифру) и $ (обозначает любую букву).<br />
<br />
''Примечание: функция G5 присутствует в версиях ИРБИС с {{Ссылка на открытый FTP<br />
|filename=RELEASE_15_1.doc<br />
|text=2015.1<br />
}}.''<br />
<br />
'''Примеры:'''<br />
&unifor("G0#"v700)<br />
&unifor("G1-"v700^a)<br />
&unifor("G2-"v700^a)<br />
<br />
Пример получения ссылки на файл из подполя 952^U полнотекстовой БД для файлов, добавленных с разбиением и без<br />
&uf('G0:',&uf('G4:',&uf('G2:',&uf('G2:',v952^U))))<br />
<br />
{{Описание функции UNIFOR<br />
|name=9<br />
|title=Удалить двойные кавычки из заданной строки<br />
|sectionLevel======<br />
}}<br />
<br />
9<исх.строка><br />
<br />
'''Примеры:'''<br />
&unifor("9"v200^a)<br />
<br />
{{Описание функции UNIFOR<br />
|name=X<br />
|title=Удаление из заданной строки фрагментов, выделенных угловыми скобками <><br />
|sectionLevel======<br />
}}<br />
<br />
X<строка><br />
<br />
'''Примеры:'''<br />
&unifor("X"v200)<br />
<br />
{{Описание функции UNIFOR<br />
|name=+S<br />
|title=<nowiki>Выводит нужную часть текста (до знака "=", или после него) в заголовках, описанных по принципу <NNN=KKK></nowiki><br />
|versionText=не установленно, предположительно давно<br />
|sectionLevel======<br />
}}<br />
<br />
+SN[строка]<br />
где N может принимать значения 0 для вывода текста после знака "=", и 1 для вывода текста перед знаком "=".<br />
<br />
Выдержка из документации (см. {{Ссылка на открытый FTP|filename=RELEASE_2_2.doc|text=Файл описания релиза 2002.2}}<br />
и [http://nucleonics.fatal.ru/irbis/irbishelp.html?wci004010200000.htm документацию на http://nucleonics.fatal.ru]):<br />
* Для книг, описанных «Под заглавием», которые начинаются с числительного, обозначенного цифрами, начальный элемент сортировки и авторский знак должны формироваться по словесному обозначению числительного. В связи с этим Пользователь должен ввести дополнительную разметку типа <NNN=Текст>, где «Текст», стоящий после знака «=», — это словесное значение числительного NNN, используемое взамен его для формирования авторского знака и/или в качестве начального элемента сортировки. Например, заглавие 1000 и одна ночь, размеченное как <1000=тысяча> и одна ночь, для формирования авторского знака и сортировки будет представлено как «тысяча и одна ночь», а для печати как «1000 и одна ночь».<br />
* Для биографических и биобиблиографических изданий, описанных под заглавием, начинающимся с имени лица, которому оно посвящено, авторский знак и начальный элемент сортировки должны формироваться на фамилию. В связи с этим Пользователь также должен ввести дополнительную разметку типа <AAA=Текст>, где «Текст», стоя-щий после знака «=», — это фамилия, используемая (взамен части ААА) для формирования авторского знака и/или начального элемента сортировки. Например, заглавие Антон Павлович Чехов может быть размечено как <Антон Павлович Чехов=Чехов Антон Павлович> (в сортировку пойдет «Чехов Антон Павлович», на печать «Антон Павлович Чехов»). Заметим, что разметка типа <Антон=Чехов> Павлович Чехов даст правильный авторский знак (Чехов Павлович Чехов), но может дать ошибки в сортировке.<br />
<br />
'''Примеры:'''<br />
<br />
Пример входной строки:<br />
<br />
<1=Первое> апреля<br />
<br />
Примеры использования функции:<br />
<br />
&uf('+s0'v200^a)<br />
&uf('+s1'v200^a)<br />
<br />
Пример расформатирования:<br />
<br />
Первое апреля<br />
1 апреля<br />
<br />
{{Описание функции UNIFOR<br />
|name==<br />
|title=Сравнить заданное значение с маской<br />
|description=Возвращаемое значение: 1 – в случае положительного результата сравнения; 0 – в случае отрицательного<br />
|versionFilename=RELEASE_8_1.doc<br />
|versionText=2008.1<br />
|sectionLevel======<br />
}}<br />
<br />
=!<маска>!<значение><br />
<br />
<tt>!</tt> – уникальный разделитель (может быть любым символом). Маска может содержать принятые символы маскирования <tt>*</tt> и <tt>?</tt>. В общем случае маска может содержать несколько масок, отделенных друг от друга символом вертикальной черты <tt>|</tt>.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+\<br />
|title=Преобразование строки, удваивающее обратный слэш, или обратное<br />
|description=Преобразование строки, удваивающее обратный слэш, или обратное<br />
|sectionLevel======<br />
}}<br />
<br />
+\N<строка><br />
<br />
где:<br />
* N может принимать значения<br />
** 0 - удвоение знаков обратного слэш;<br />
** 1 - преобразование удвоенных знаков слэш в одинарные.<br />
<br />
'''Примеры:'''<br />
<br />
Результатом формата<br />
&uf('+\0c:\example.txt')<br />
будет строка<br />
c:\\example.txt<br />
<br />
Результатом формата<br />
&uf('+\1c:\\example.txt')<br />
будет строка<br />
c:\example.txt<br />
<br />
<br />
{{Описание функции UNIFOR<br />
|name=+R<br />
|title=Усекает строку справа до точки. Используется для отсечения одного уровня в рубриках ГРНТИ<br />
|description=Усечение кода рубрики в рубрикаторе ГРНТИ до вышестоящего<br />
|sectionLevel======<br />
}}<br />
<br />
+\R<строка><br />
<br />
'''Примеры:'''<br />
<br />
формат<br />
&unifor("+R"v3) <br />
исходная строка<br />
02.61.45<br />
результирующая строка<br />
02.61<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9R<br />
|title=Преобразование римского числа в арабское<br />
|versionFilename=RELEASE_11_1.doc<br />
|versionText=2011.1<br />
|sectionLevel======<br />
}}<br />
<br />
+9R<римское_число><br />
<br />
{{Описание функции UNIFOR<br />
|name=+9X<br />
|title=Преобразование арабского числа в римское<br />
|versionFilename=RELEASE_11_1.doc<br />
|versionText=2011.1<br />
|sectionLevel======<br />
}}<br />
<br />
+9X<арабское_число><br />
<br />
===Функции для работы с датой и временем===<br />
<br />
{{Описание функции UNIFOR<br />
|name=3<br />
|title=Выдача данных, связанных с датой и временем<br />
|description=Выдача данных, связанных с датой и временем<br />
}}<br />
<br />
Имеются следующие подфункции:<br />
* '''<tt>3</tt>''' – выдать текущую дату в виде ГГГГММДД. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>30</tt>''' – выдать текущий год в виде ГГГГ. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>31</tt>''' – выдать текущий месяц в виде ММ (с лидирующим нулем). ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>32</tt>''' – выдать текущий день в виде ДД (с лидирующим нулем). ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>33</tt>''' – выдать текущий год в виде ГГ. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>34</tt>''' – выдать текущий месяц в виде М (без лидирующего нуля). ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>35</tt>''' – выдать текущий день в виде Д (без лидирующего нуля). ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>36MM</tt>''' – выдать по заданному номеру месяца его название на русском языке в именительном падеже. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>37MM</tt>''' – выдать по заданному номеру месяца его название на русском языке в родительном падеже. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>38MM</tt>''' – выдать по заданному номеру месяца его название на английском языке. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>39</tt>''' – выдать текущее время. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>3А</tt>''' – выдать номер текущего дня от начала года. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>3BГГГГММДД/ддд</tt>''' – прибавить/вычесть из заданной даты в виде ГГГГММДД заданное количество дней (ддд – может быть отрицательным) и вернуть полученную дату в виде ГГГГММДД. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_7_2.doc|text=2007.2}}.</small>''<br />
* '''<tt>3СГГГГММДД/ГГГГММДД</tt>''' – вычесть из одной даты в виде ГГГГММДД другую дату в виде ГГГГММДД и вернуть разницу в виде количества дней. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_7_2.doc|text=2007.2}}.</small>''<br />
* '''<tt>3JГГГГММДД</tt>''' – переводит заданную юлианскую дату ГГГГММДД в грегорианскую. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_9_1.doc|text=2009.1}}.</small>''<br />
<br />
'''Примеры:'''<br />
<br />
&unifor('36',&unifor('34'))<br />
<br />
Вычесть из текущей даты сто дней:<br />
&uf('3B',&uf('3'),'/-100')<br />
<br />
Количество дней с 1 января 1900 года до сегодняшнего дня:<br />
&uf('3С',&uf('3'),'/19000101')<br />
<br />
===Функции для работы с глобальными переменными===<br />
<br />
Дополнительно о глобальных переменных см. [[Язык форматирования системы ИРБИС#Глобальные переменные|в подразделе ''Глобальные переменные'' статьи ''Язык форматирования системы ИРБИС'']].<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7<br />
|title=Очистить (опустошить) все глобальные переменные<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7<br />
<br />
'''Примеры:'''<br />
&unifor('+7')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7R<br />
|title=Чтение глобальной переменной<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7RNNN,nnn<br />
где:<br />
* NNN – номер переменной.<br />
* nnn – номер повторения. По умолчанию – номер текущего повторения в повторяющейся группе.<br />
Эквивалентная конструкция языка форматирования GNNN.<br />
<br />
'''Примеры:'''<br />
&unifor('+7R100')<br />
эквивалентная конструкция языка форматирования:<br />
G100<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7W<br />
|title=Запись глобальной переменной<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7WNNN#SSSS<br />
где:<br />
* NNN – номер переменной;<br />
* SSSS – список строк (результат расформатирования); каждая строка становится отдельным повторением.<br />
<br />
'''Примеры:'''<br />
&unifor('+7W100#',(v910/))<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7U<br />
|title=Добавление повторений глобальной переменной<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7UNNN#SSSS<br />
где:<br />
* NNN – номер переменной;<br />
* SSSS – список строк (результат расформатирования); каждая строка становится отдельным повторением.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7M<br />
|title=Логическое перемножение повторений двух переменных<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7MNNN#MMM<br />
Результат перемножения записывается в первую переменную.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7S<br />
|title=Логическое вычитание повторений двух переменных<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7SNNN#MMM<br />
Результат вычитания записывается в первую переменную.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7A<br />
|title=Логическое сложение повторений двух переменных<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7ANNN#MMM<br />
Результат сложения записывается в первую переменную.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7G<br />
|title=Исключение неоригинальных повторений переменной<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7GNNN<br />
Результат исключения записывается в ту же переменную.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7T<br />
|title=Сортировка повторений переменной<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7TNNN<br />
Результат сортировки записывается в ту же переменную.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+99<br />
|title=Групповая установка глобальных переменных<br />
|description=Групповая установка глобальных переменных. Применяется для ИРБИС-Навигатора. Исходная строка закодирована с помощью URL-кодировки. После раскодировки рассматривается как список строк (аналогично <tt>TStringList.Text</tt> в Delphi). Каждая строка этого списка имеет структуру: <tt>NNN#<значение_глобальной_переменной_NNN><tt><br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
}}<br />
<br />
+99<br />
<br />
===Функции для работы с базой данных===<br />
<br />
{{Описание функции UNIFOR<br />
|name=0<br />
|title=Выдать содержимое документа полностью в формате RTF<br />
|description=Выдать содержимое документа полностью (формат ALLl)<br />
}}<br />
0<br />
<br />
'''Примеры:'''<br />
&unifor('0')<br />
<br />
'''Результат расформатирования:'''<br />
\b #910/1:_\b0 ^YДА^PНЮАУ - каф. кримінального права\par \b #920/1:_\b0 ATHRA\par \b #210/1:_\b0 ^AТацій^BВ. Я.^GВасиль Якович^8ukr\par \b #710/1:_\b0 ^AТаций^BВ. Я.^GВасилий Яковлевич^8rus\par \b #907/1:_\b0 ^A20110301^B111\par \b #907/2:_\b0 ^A20110419^BZhukovskaya\par \b #710/2:_\b0 ^ATatsiy^BV.^8eng\par \b #907/3:_\b0 ^A20110421^BZhukovskaya\par \b #907/4:_\b0 ^A20111108^B111\par <br />
<br />
{{Описание функции UNIFOR<br />
|name=+0<br />
|title=Выдать содержимое документа полностью во внутреннем представлении<br />
|description=Выдать содержимое документа полностью (формат ALLl)<br />
}}<br />
+0<br />
<br />
'''Результат расформатирования:'''<br />
0<br />
2#0<br />
0#1<br />
910#^YДА^PНЮАУ - каф. кримінального права<br />
920#ATHRA<br />
210#^AТацій^BВ. Я.^GВасиль Якович^8ukr<br />
710#^AТаций^BВ. Я.^GВасилий Яковлевич^8rus<br />
907#^A20110301^B111<br />
907#^A20110419^BZhukovskaya<br />
710#^ATatsiy^BV.^8eng<br />
907#^A20110421^BZhukovskaya<br />
907#^A20111108^B111<br />
<br />
{{Описание функции UNIFOR<br />
|name=+@<br />
|title=Выдать содержимое документа полностью в формате JSON<br />
|versionFilename=RELEASE_2014_1.doc<br />
|versionText=2014.1<br />
|sectionLevel=====<br />
}}<br />
+@<br />
<br />
{{Описание функции UNIFOR<br />
|name=+N<br />
|title=Выдать количество повторений поля<br />
|description=Выдать количество повторений поля, метка которого указана после идентификатора функции<br />
}}<br />
+N<br />
<br />
'''Примеры:'''<br />
&unifor('+N910')<br />
<br />
{{Описание функции UNIFOR<br />
|name=A<br />
|title=Выдать заданное повторение поля<br />
}}<br />
<br />
AV<tag>^<delim>*<offset>.<length>#<occur><br />
где:<br />
* <tt><tag></tt> – метка поля;<br />
* <tt><delim></tt> – разделитель подполя;<br />
* <tt><offset></tt> – смещение;<br />
* <tt><length></tt> – длина;<br />
* <tt><occur></tt> – номер повторения.<br />
<br />
'''Примеры:'''<br />
&unifor('Av200#2')<br />
&unifor('Av910^a#5')<br />
&unifor('Av10^b*2.10#2')<br />
<br />
{{Описание функции UNIFOR<br />
|name=P<br />
|title=Выдать заданное оригинальное повторение поля<br />
|formatSeeAlsoName=A<br />
|formatSeeAlsoTitle=Выдать заданное повторение поля<br />
|exampleSeeAlsoName=A<br />
|exampleSeeAlsoTitle=Выдать заданное повторение поля<br />
}}<br />
<br />
{{Описание функции UNIFOR<br />
|name=+E<br />
|title=Возвращает порядковый номер заданного поля в записи<br />
|description=Возвращает порядковый номер заданного поля в записи. При отсутствии в записи заданного поля возвращается пустота<br />
|versionFilename=RELEASE_9_1.doc<br />
|versionText=2009.1<br />
}}<br />
<br />
+Etag#occ<br />
где:<br />
* tag – метка поля;<br />
* occ – номер повторения поля (по умолчанию – 1). Может принимать значение <tt>*</tt> – это означает номер текущего повторения в повторяющейся группе.<br />
<br />
{{Описание функции UNIFOR<br />
|name=K<br />
|title=Раскодировка через справочник<br />
|description=Возвращает значение из справочника, соответствующее переданному коду (иными словами, осуществляется раскодировка)<br />
}}<br />
<br />
K<имя_справочника><разделитель><исх_значение><br />
<br />
<разделитель> между <имя_справочника> и <исх_значение> может быть двух видов:<br />
\ - раскодировка с учетом регистра,<br />
! - раскодировка без учета регистра.<br />
<br />
'''Примеры:'''<br />
&unifor("Kjz.mnu\"v101)<br />
&uf('kFIO_SF.MNU!'&uf('av907^b#1'))<br />
<br />
{{Описание функции UNIFOR<br />
|name=I<br />
|title=Вернуть параметр из INI-файла<br />
}}<br />
<br />
I<SECTION>,<PAR_NAME>,<DE-FAULT_VALUE><br />
<br />
'''Примеры:'''<br />
&unifor('IPRIVATE,NAME,NONAME')<br />
<br />
{{Описание функции UNIFOR<br />
|name=1<br />
|title=Вернуть заданный подэлемент<br />
}}<br />
<br />
1NCXY?V<tag>^<delim>*<offset>.<length>#<occur><br />
где:<br />
* N – номер повторения подэлемента; если указана * – номер подэлемента совпадает со счетчиком повторяющейся группы.<br />
* ХY – разделители между подэлементами.<br />
* С – принимает значения: R – разделители справа от каждого подэлемента, кроме последнего; L – разделители слева от каждого подэлемента; D – каждый подэлемент заключен слева разделителем Х и справа – Y.<br />
* ? – символ-разделитель.<br />
* Остальные параметры аналогичны параметрам для функции {{Описание функции UNIFOR (ссылка)|name=A|title=Выдать заданное повторение поля}}.<br />
<br />
'''Примеры:'''<br />
(/&unifor('1*R; ?v910^h#1'))<br />
<br />
{{Описание функции UNIFOR<br />
|name=J<br />
|title=Вернуть кол-во ссылок для заданного термина<br />
}}<br />
<br />
J<dbn>,<термин><br />
<dbn> – имя БД; по умолчанию используется текущая.<br />
<br />
'''Примеры:'''<br />
&unifor('JBOOK,',"A="v200^a)<br />
<br />
{{Описание функции UNIFOR<br />
|name=D<br />
|title=Форматирование документа из другой БД<br />
|description=Форматирование документа из другой БД (REF на другую БД – отношение «от одного к одному»)<br />
}}<br />
<br />
D<dbn>,<@mfn|/termin/>,<@имя_формата|формат|*><br />
Передаются три параметра, разделенные запятой:<br />
* Первый – имя БД;<br />
* Второй – или непосредственно MFN с предшествующим символом @ или термин, ссылающийся на документ (термин – заключается в ограничительные символы);<br />
* Третий – или имя формата с предшествующим символом @ или непосредственно формат.<br />
Если задается *, данные выводятся по прямой ссылке (метка поля, номер повторения).<br />
<br />
'''Примеры:'''<br />
&unifor('DBOOK,/K=AAA/,v200')<br />
<br />
{{Описание функции UNIFOR<br />
|name=7<br />
|title=Расформатирование группы связанных документов из другой БД<br />
|description=Расформатирование группы связанных документов из другой БД (отношение «от одного к многим»)<br />
Функция обеспечивает возможность связать запись с рядом других записей по какому бы то ни было общему признаку. К примеру, можно отобрать все записи с определенным заглавие, индексом УДК/ББК, ключевым словом. <br />
|versionFilename=RELEASE_4_1.doc<br />
|versionText=2004.1<br />
}}<br />
<br />
7<имя_БД>,</termin/>,<@имя_формата|формат|*><br />
где:<br />
* имя_БД – имя базы данных, из которой будут браться связанные документы; по умолчанию используется текущая БД.<br />
* /termin/ – ключевой термин, на основе которого отбираются связанные документы; термин заключается в уникальные ограничители (например. /), в качестве которых используется символ, не входящий (гарантированно) в термин.<br />
* @имя_формата|формат|* – имя формата или формат в явном виде, в соответствии с которым будут расформатироваться связанные документы. Если задается имя формата, то он берется из директории БД, заданной параметром <имя_БД>. Если задается *, данные выводятся по прямой ссылке (метка поля, номер повторения).<br />
<br />
'''Примеры:'''<br />
&unifor('7TEST,',"/T="v200^a"/",',v903"\par "')<br />
<br />
&uf(|7EK,!FAK=23.01!,&uf('av907^A#1'),&uf('6brief')/|d90),<br />
<br />
{{Описание функции UNIFOR<br />
|name=!<br />
|title=Команда постредактуры: очистить результат расформатирования от двойных разделителей<br />
|description=Команда постредактуры: очистить результат расформатирования от двойных разделителей (двойных точек или двойных конструкций <. – >). Имеет смысл использовать один раз в любом месте формата<br />
|versionFilename=RELEASE_4_1.doc<br />
|versionText=2004.1<br />
}}<br />
<br />
!<br />
<br />
'''Примеры:'''<br />
&unifor('!')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+F<br />
|title=Команда постредактуры: очистить результат расформатирования от RTF-конструкций<br />
|description=Команда постредактуры: очистить результат расформатирования от RTF-конструкций. Имеет смысл использовать один раз в любом месте формата<br />
|versionFilename=RELEASE_4_1.doc<br />
|versionText=2004.1<br />
}}<br />
<br />
+F<br />
<br />
'''Примеры:'''<br />
&unifor('+F')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1O<br />
|title=Групповая мультираскодировка списка<br />
}}<br />
<br />
+1O<MNU>|SSSS<br />
где:<br />
* <MNU> имя справочника (с расширением).<br />
* SSSS – список строк (результат расформатирования.<br />
<br />
'''Примеры:'''<br />
&unifor('+1Omhr.mnu|',(v910^m/))<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1I<br />
|title=Исключение неоригинальных значений из списка<br />
}}<br />
<br />
+1ISSSS<br />
где параметры аналогичны описанным для функции {{Описание функции UNIFOR (ссылка)|name=+1O|title=Групповая мультираскодировка списка}}<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1V<br />
|title=Сортировка списка<br />
}}<br />
<br />
+1VSSSS<br />
где параметры аналогичны описанным для функции {{Описание функции UNIFOR (ссылка)|name=+1O|title=Групповая мультираскодировка списка}}<br />
<br />
{{Описание функции UNIFOR<br />
|name=+I<br />
|title=Формирования ссылки (гиперссылки)<br />
|versionFilename=RELEASE_4_1.doc<br />
|versionText=2004.1<br />
}}<br />
<br />
+I/содержание_ссылки/название_ссылки<br />
'''/содержание_ссылки/''' – внутренние данные ссылки, ограниченные уникальным разделителем. Имеют структуру<br />
NNN,HHH,<параметры><br />
где:<br />
* NNN – тип ссылки, возможные значения: <br />
** 0 – ссылки на внешние объекты;<br />
** 1 – ссылка на связанный документ (возможно в другой БД) – "от одного к одному";<br />
** 2 – ссылка на связанные документы (возможно в другой БД) – "от одного к многим";<br />
* HHH – экранная подсказка, может иметь вид: @iii – где <tt>iii</tt> – номер текста в файле IRBISMSG.TXT, \text\ – собственно текст подсказки в уникальных ограничителях.<br />
'''<параметры>''':<br />
* Для ссылок типа 0 представляет собой в общем виде URL внешнего объекта (в том числе – полный путь на файл).<br />
* Для ссылок типа 1 и 2 <параметры> имеют следующую структуру:<br />
имя_БД,имя_формата,termin<br />
где:<br />
* имя_БД – имя базы данных, из которой будут браться связанные документы; по умолчанию используется текущая БД.<br />
* имя_формата – имя формата, в соответствии с которым будут расформатироваться связанные документы. (по умолчанию – используется оптимизированный формат).<br />
* termin – ключевой термин, на основе которого отбираются (ищутся) связанные документы.<br />
<br />
<br />
'''Примеры:'''<br />
&unifor('+I?0,,'v951^i'?',v951^t,|INTERNET|n951^t)<br />
&unifor(|+I?1,,,,I=|v421^w|?|,v421^a)<br />
<br />
{{Описание функции UNIFOR<br />
|name=+6<br />
|title=Выдать статус записи<br />
|description=Выдать статус записи. Если запись логически удаленная, возвращается 0, в противном случае – 1<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+6<br />
<br />
'''Примеры:'''<br />
… if &unifor('+6')='0' then 'запись логически удаленная' fi …<br />
<br />
{{Описание функции UNIFOR<br />
|name=+D<br />
|title=Выдать имя базы данных<br />
|description=Возвращает имя текущей базы данных<br />
}}<br />
<br />
+D<br />
<br />
'''Примеры:'''<br />
… &unifor('+D') …<br />
<br />
{{Описание функции UNIFOR<br />
|name=2<br />
|title=Вернуть количество записей в базе +1 <br />
|description=Возвращает количество записей в текущей базе данных, увеличенное на единицу (MAX_MFN) + 1). В общем случае параметр имеет вид 2N, где N - выводимое количество символов, обрезанное до необходимой длинны справа.<br />
}}<br />
<br />
'''Пример:'''<br />
&unifor('2'), &unifor('27')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9V<br />
|title=Вернуть номер поколения ИРБИС<br />
|description=Возвращает поколение системы, в которой осуществляется расформатирование. Может быть полезен при разработке единых форматов, которые по-разному выполняются в ИРБИС 32 и ИРБИС 64<br />
|versionFilename=RELEASE_11_1.doc<br />
|versionText=2011.1<br />
}}<br />
<br />
+9V<br />
который возвращает:<br />
* 32 – если форматирование выполняется в ИРБИС 32;<br />
* 64 – если в ИРБИС 64 (и ИРБИС 128).<br />
<br />
{{Описание функции UNIFOR<br />
|name=4N<br />
|title=Форматировать предыдущую копию текущей записи<br />
|versionFilename=RELEASE_11_1.doc<br />
|versionText=2011.1<br />
}}<br />
<br />
4N,Format<br />
где: <br />
* <tt>N</tt> – номер копии (в обратном порядке, т.е. если N=1 – это один шаг назад, N=2 – два шага назад и т.д.). Может принимать значение * – это указывает на последнюю копию. Если N – пустое значение, то в случае повторяющейся группы в качестве значения N берется НОМЕР ТЕКУЩЕГО ПОВТОРЕНИЯ, в противном случае берется первая копия;<br />
* <tt>Format</tt> – формат; может задаваться непосредственно или в виде @имя_формата.<br />
<br />
Если не задается ни <tt>N</tt> ни <tt>Format</tt>, т.е. &unifor('4'), то возвращается количество предыдущих копий. <br />
Если запись не имеет предыдущих копий, то &unifor('4') возвращает 0, а все остальные конструкции &unifor('4...') возвращают пустоту.<br />
<br />
'''Примеры:'''<br />
&unifor('41,@brief') <br />
(...&unifor('4,v200^a')...) <br />
&unifor('4*,(v910/)')<br />
<br />
Примечание: в связи с этим см. также новую команду глобальной корректировки – ВОССТАНОВИТЬ ПРЕДЫДУЩУЮ КОПИЮ.<br />
<br />
===Функции для работы с повторяющимися группами===<br />
<br />
Дополнительно о повторяющихся группах см. [[Язык форматирования системы ИРБИС#Повторяющиеся группы|в подразделе ''Повторяющиеся группы'' статьи ''Язык форматирования системы ИРБИС'']].<br />
<br />
{{Описание функции UNIFOR<br />
|name=+4<br />
|title=Выдача метки, порядкового номера и значения поля в соответствии с индексом (номером повторения) повторяющейся группы<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+4XY <br />
где:<br />
* Х принимает три значения: T – выдать метку; F – выдать значение поле; N – выдать порядковый номер поля в записи (отличается от индекса повторения, если Y принимает значение 1); <br />
* Y принимает значения: 0 – поля выдаются в порядке расположения в записи; 1 – поля выдаются в порядке возрастания меток (по умолчанию 0).<br />
<br />
'''Примеры:'''<br />
(…&unifor('+4T1'),'_' &unifor('+4N1'),': ', &unifor('+4F1'),'<br>'…)<br />
<br />
{{Описание функции UNIFOR<br />
|name=+5<br />
|title=Выдача элемента списка/справочника в соответствии с индексом (номером повторения) повторяющейся группы<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+5Х<имя_справочника/списка> <br />
где Х принимает значения: Т – выдать значение; F – выдать пояснение (имеет смысл, если задается справочник, т.е. файл с расширением MNU).<br />
<br />
'''Примеры:'''<br />
…(…&unifor('+5Tfield.mnu'),' – ',&unifor('+5Ffield.mnu'),'<br>'…)<br />
<br />
{{Описание функции UNIFOR<br />
|name=+90<br />
|title=Вернуть номер текущего повторения в повторяющейся группе<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
}}<br />
<br />
+90<br />
<br />
===Функции для работы с базой данных электронного каталога===<br />
<br />
{{Описание функции UNIFOR<br />
|name=B<br />
|title=Выдать библиографическую свертку документа<br />
}}<br />
<br />
B<br />
<br />
'''Примеры:'''<br />
&unifor('B')<br />
<br />
{{Описание функции UNIFOR<br />
|name=C<br />
|title=Контроль ISSN/ISBN<br />
|description=Контроль ISSN/ISBN. Возвращаемое значение: 0 – при положительном результате, 1 – при отрицательном<br />
}}<br />
<br />
С<ISSN/ISBN><br />
<br />
'''Примеры:'''<br />
&unifor("C"v10^a)<br />
<br />
{{Описание функции UNIFOR<br />
|name=L<br />
|title=Вернуть окончание термина<br />
}}<br />
<br />
L<начало_термина><br />
<br />
'''Примеры:'''<br />
&unifor("L"v101)<br />
<br />
{{Описание функции UNIFOR<br />
|name=U<br />
|title=Кумуляция номеров журналов<br />
}}<br />
<br />
U<strbase>,<stradd><br />
где:<br />
* <strbase> – исходная кумулированная строка.<br />
* <stradd> – кумулируемые номера.<br />
<br />
'''Примеры:'''<br />
&unifor("U"v909^h",12")<br />
<br />
{{Описание функции UNIFOR<br />
|name=V<br />
|title=Декумуляция номеров журналов<br />
}}<br />
<br />
V<strbase><br />
где:<br />
<strbase> – исходная строка для декумуляции.<br />
<br />
'''Примеры:'''<br />
&unifor("V"v909^h")<br />
<br />
{{Описание функции UNIFOR<br />
|name=W<br />
|title=Контроль кумуляции<br />
}}<br />
<br />
W<strbadd>,<strbase><br />
где:<br />
* <strbase> – исходная кумулированная строка.<br />
* <stradd> – кумулируемый номер.<br />
'''Возвращаемые значения:'''<br />
* 0 – если <stradd> не присутствует в <strbase>.<br />
* 1 – если <stradd> присутствует в <strbase>.<br />
<br />
'''Примеры:'''<br />
&unifor("W12,"v909^h)<br />
<br />
{{Описание функции UNIFOR<br />
|name=O<br />
|title=Вывод сведений о всех экземплярах по всем местам хранения<br />
}}<br />
<br />
'''Пример:'''<br />
&unifor('O')<br />
<br />
<br />
{{Описание функции UNIFOR<br />
|name=Y<br />
|title=Возвращает данные о всех свободных (не выданных) экземплярах по всем местах хранения<br />
}}<br />
<br />
'''Пример:'''<br />
&unifor('Y')<br />
<br />
===Функции для работы с файлами===<br />
<br />
{{Описание функции UNIFOR<br />
|name=+91<br />
|title=Вернуть имя файла из заданного полного пути/имени<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
}}<br />
<br />
+91<br />
<br />
{{Описание функции UNIFOR<br />
|name=+92<br />
|title=Вернуть путь из заданного полного пути/имени<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
}}<br />
<br />
+92<br />
<br />
{{Описание функции UNIFOR<br />
|name=+93<br />
|title=Вернуть расширение из заданного полного пути/имени<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
}}<br />
<br />
+93<br />
<br />
{{Описание функции UNIFOR<br />
|name=+94<br />
|title=Вернуть имя диска из заданного полного пути/имени<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
}}<br />
<br />
+94<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9L<br />
|title=Проверить наличие файла/корректность URL<br />
|versionFilename=RELEASE_13_1.doc<br />
|versionText=2013.1<br />
}}<br />
<br />
+9L<path>,<dbname>,<filename><br />
где:<br />
* <tt><path></tt> – определяет путь к файлу и принимает значения: <tt>0</tt> – папка, в которой установлена серверная часть ИРБИС (<tt><IRBIS_SERVER_ROOT></tt>); <tt>1</tt> – общая директория баз данных (по умолчанию <tt><IRBIS_SERVER_ROOT>\DATAI</tt>); <tt>2,3,10</tt> – папка БД <dbname>; <tt>11</tt> – абсолютный путь/URL.<br />
* <tt><dbname></tt> – имя БД (имеет смысл только при <tt>path=2,3,10</tt>).<br />
* <tt><filename></tt> – путь и имя файла или URL.<br />
<br />
Функция возвращает:<br />
0 – если файл отсутствует/некорректный URL;<br />
1 – если файл присутствует/корректный URL.<br />
<br />
'''Примеры:'''<br />
&uf('+9L1,,\deposit\rksu.fst') <br />
(....&uf('+9L10,',&uf('+D'),',',v951^A)....)<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9C<br />
|title=Вставить данные из заданного текстового файла<br />
}}<br />
<br />
+9С<path>,<dbname>,<filename><br />
где:<br />
* <tt><path></tt> – определяет путь к файлу и принимает значения: <tt>0</tt> – основная директория системы (для ИРБИС32 – та, где находятся исполняемые модули; для ИРБИС64 – та, где находятся исполняемые модули сервера); <tt>1</tt> – общая директория баз данных (по умолчанию \DATAI); <tt>10</tt> – директория конкретной БД;<br />
* <tt><dbname></tt> – имя БД (имеет смысл только при <tt>path=10</tt>). По умолчанию – предполагается текущая БД;<br />
* <tt><filename></tt> – имя файла;<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9A<br />
|title=Вернуть размер файла в байтах. <br />
}}<br />
<br />
+9A<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9D<br />
|title=Сохранить заданный внутренний двоичный объект в заданном файле<br />
|versionFilename=RELEASE_6_2.doc<br />
|versionText=2006.2<br />
}}<br />
<br />
+9DNN#<полный путь><br />
где <tt>NN</tt> – номер внутреннего двоичного объекта.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9J<br />
|title=Представить заданный двоичный файл в кодированном виде<br />
|description=Представить заданный двоичный файл в виде: <tt>^A<тип_файла>^B<данные файла перекодированные на основе URLEncode></tt><br />
|versionFilename=RELEASE_10_1.doc<br />
|versionText=2010.1<br />
}}<br />
<br />
+9J<полный путь и имя файла><br />
<br />
Имя файла может задаваться в виде маски, в этом случае использоваться будет первый найденный соответствующей маске файл.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9K<br />
|title=Удалить заданный файл<br />
|description=Удалить заданный файл. Если имя файла задано в виде маски, то удаляться будут все соответствующие маске файлы<br />
|versionFilename=RELEASE_10_1.doc<br />
|versionText=2010.1<br />
}}<br />
<br />
+9K<полный путь и имя файла><br />
<br />
===Функции, используемые только в глобальной корректировке===<br />
<br />
{{Описание функции UNIFOR<br />
|name=Z<br />
|title=Размножение экземпляров<br />
|description=Размножение экземпляров. Функция ничего не возвращает. Можно применять только в глобальной корректировке<br />
}}<br />
<br />
Z<br />
<br />
'''Примеры:'''<br />
&unifor('Z')<br />
<br />
{{Описание функции UNIFOR<br />
|name=M<br />
|title=Отсортировать повторения заданного поля<br />
|description=Отсортировать повторения заданного поля (имеется в виду строковая сортировка) – функция ничего не возвращает. Можно применять только в глобальной корректировке<br />
}}<br />
<br />
MX<tag>^<delims><br />
где:<br />
* X – вид сортировки: I – по возрастанию; D – по убыванию.<br />
* <tag> – метка поля.<br />
* <delims> – разделители подполей, определяющих ключ сортировки.<br />
<br />
'''Примеры:'''<br />
&unifor('MI910^BD')<br />
<br />
===Выполнить внешнюю программу===<br />
<br />
{{Описание функции UNIFOR<br />
|name=6<br />
|title=Выполнить формат<br />
}}<br />
<br />
6<имя файла формата><br />
где <tt><имя файла формата></tt> – имя [[Язык форматирования системы ИРБИС#Понятие формата|файла формата]], указывается без расширения. Файл формата будет найден по заданному имени, обязательному расширению <tt>.pft</tt> и местоположению: в [[Файлы ИРБИС#Файлы баз данных ИРБИС|папке базы данных]], а если там нет, то в папке [[Файлы ИРБИС#Основные обозначения|<tt><IRBIS_SERVER_ROOT>\Deposit</tt>]].<br />
<br />
Альтернативным способом выполнения файла форматов является использование [[Язык форматирования системы ИРБИС#Вложенные форматы|вложенных форматов]].<br />
<br />
{{Описание функции UNIFOR<br />
|name=+2<br />
|title=Выполнить внешнее приложение<br />
|description=Выполняет внешнее приложение. Всё, что после +2 – параметры командной строки. <br />
}}<br />
<br />
'''Примеры:'''<br />
&unifor('+2cmd')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+8<br />
|title=Вызвать функцию из внешней DLL<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
}}<br />
<br />
+8<имя_DLL>,<имя_функции>,<передаваемые_данные><br />
<br />
Внешние функции должны ОБЯЗАТЕЛЬНО иметь следующую структуру:<br />
<br />
* в случае Pascal<br />
test_function1(buf1,buf2: Pchar; bufsize: integer): integer; <br />
<br />
* в случае C<br />
int test_function1(char *buf1, char *buf2, int bufsize) <br />
где: buf1 – передаваемые данные (входные), buf2 – возвращаемые данные (выходные), bufsize – размер выходного буфера (buf2). В ИРБИС64 данные передаются и возвращаются в UTF8. Возврат функции: 0 – нормальное завершение; любое другое значение – ненормальное. В случае нестандартного вызова функций из DLL (по Pascal-правилам) надо указывать символ * перед именем DLL:<br />
&unifor('+8*<имя_DLL>,<имя_функции>,.... <br />
<br />
Следует помнить, что имя функции в вызове надо указывать строго в соответствии с тем, как она экспортирована из DLL, большие и маленькие буквы различаются.<br />
<br />
'''Примеры:'''<br />
<br />
В вызываемую функцию передается заглавие:<br />
&unifor('+8test_dll,test_function1,',v200^a)<br />
<br />
Передаются повторения 910 поля:<br />
(&unifor('+8test_dll,test_function2,',v910))<br />
<br />
Передается вся текущая запись:<br />
(&unifor('+8test_dll,test_function2,',&unifor('+0')))<br />
<br />
===Функции, не вошедшие в другие категории===<br />
<br />
{{Описание функции UNIFOR<br />
|name=S<br />
|title=Универсальный счетчик<br />
}}<br />
<br />
SN<br />
где:<br />
* N=0 – обнулить счетчик.<br />
* N=1..9 – увеличить значение счетчика на со-отв. значение.<br />
* N=A – вернуть значение счетчика – арабскими цифрами.<br />
* N=X – вернуть значение счетчика – римскими цифрами.<br />
<br />
'''Примеры:'''<br />
&unifor('S0')<br />
&unifor('S1')<br />
&unifor('SA')<br />
<br />
{{Описание функции UNIFOR<br />
|name=R<br />
|title=Генерация случайного числа<br />
}}<br />
<br />
RNN<br />
где NN – кол-во знаков в случайном числе (по умолчанию – 6).<br />
<br />
'''Примеры:'''<br />
&unifor('R')<br />
&unifor('R4')<br />
<br />
{{Описание функции UNIFOR<br />
|name=[<br />
|title=Чистка данных от команд контекстного выделения<br />
|versionFilename=RELEASE_8_1.doc<br />
|versionText=2008.1<br />
}}<br />
<br />
[<br />
<br />
'''Примеры:'''<br />
&unifor('[')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+3G<br />
|title=<nowiki>Вывод количества документов, найденных во внешней базе по команде G.(команда возвращает строку RESULT=[кол-во найденных по запросу документов])</nowiki><br />
}}<br />
<br />
+3G[URL к внешнему сайту WEB ИРБИС, с запросом G]<br />
<br />
{{Описание функции UNIFOR<br />
|name=+3S<br />
|title=<nowiki>Расформатирует найденные по запросу записи. Если [количество выводимых записей]=0, то возвращает только количество найденных по запросу документов</nowiki><br />
}}<br />
<br />
+3S[имя базы],[количество выводимых записей],[ограничитель][формат][ограничитель],[формат или @имя файла с форматом]<br />
<br />
{{Описание функции UNIFOR<br />
|name=+3C<br />
|title=Функция введена для оптимизации скорости проверки наличия текста в полнотекстовой базе данных<br />
|description=Функция предназначена для обрезания перед помещением в словарь базы данных значения, формируемого путём соединения префикса <tt>TXT=</tt> и содержимого подполя ^B ссылки на текстовый файл полнотекстовой базы. Подробнее см. [[Схема полнотекстовой базы данных#Префикс TXT| в подразделе ''Префикс TXT'' статьи ''Схема полнотекстовой базы данных'']]<br />
|versionFilename=RELEASE_13_1.doc<br />
|versionText=2013.1<br />
}}<br />
<br />
==Устаревшие, не рекомендованные к использованию UNIFOR'ы==<br />
<br />
===Устаревшие функции для работы с глобальными переменными===<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1<br />
|title=Очистить (опустошить) все глобальные переменные<br />
}}<br />
<br />
+1<br />
<br />
'''Примеры:'''<br />
&unifor('+1')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1R<br />
|title=Чтение глобальных переменных<br />
|versionFilename=RELEASE_4_1.doc<br />
|versionText=2004.1<br />
}}<br />
<br />
+1RNNN,nnn<br />
где:<br />
* NNN – номер первой или единственной переменной, возможна конструкция *+-<число>. * – номер текущего повторения в повторяющейся группе.<br />
* nnn – кол-во переменных (по умолчанию 1).<br />
<br />
<br />
'''Примеры:'''<br />
&unifor('+1R100,2')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1W<br />
|title=Запись в глобальные переменные<br />
|versionFilename=RELEASE_4_1.doc<br />
|versionText=2004.1<br />
}}<br />
<br />
+1WNNN,MMM#SSSS<br />
где:<br />
* NNN – номер первой или единственной переменной, возможна конструкция *+-<число>. * – номер текущего повторения в повторяющейся группе.<br />
* MMM – номер переменной для сохранения кол-ва записанных переменных (по умолчанию не используется).<br />
* SSSS – список строк (результат расформатирования). Если задан MMM – каждая строка пишется в отдельную переменную, в противном случае все пишется в одну переменную.<br />
<br />
'''Примеры:'''<br />
&unifor('+1W100,0#',(v910/))<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1K<br />
|title=Групповая мультираскодировка переменных<br />
}}<br />
<br />
+1K<MNU>|NNN,nnn<br />
где:<br />
* NNN – номер первой или единственной переменной.<br />
* nnn – кол-во переменных (по умолчанию 1).<br />
<br />
'''Примеры:'''<br />
&unifor('+1Kmhr.mnu|100,10')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1M<br />
|title=Перемножение двух списков (групп переменных)<br />
}}<br />
<br />
+1MNNN,nnn#MMM,mmm<br />
где параметры аналогичны описанным для функции {{Описание функции UNIFOR (ссылка)|name=+1K|title=Групповая мультираскодировка переменных}}.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1S<br />
|title=Вычитание списков (групп переменных)<br />
}}<br />
<br />
+1SNNN,nnn#MMM,mmm<br />
где параметры аналогичны описанным для функции {{Описание функции UNIFOR (ссылка)|name=+1K|title=Групповая мультираскодировка переменных}}<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1A<br />
|title=Сложение списков (групп переменных)<br />
}}<br />
<br />
+1ANNN,nnn#MMM,mmm<br />
где параметры аналогичны описанным для функции {{Описание функции UNIFOR (ссылка)|name=+1K|title=Групповая мультираскодировка переменных}}<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1G<br />
|title=Исключение неоригинальных значений из группы переменных<br />
}}<br />
<br />
+1GNNN,nnn<br />
где параметры аналогичны описанным для функции {{Описание функции UNIFOR (ссылка)|name=+1K|title=Групповая мультираскодировка переменных}}<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1T<br />
|title=Сортировка группы переменных<br />
}}<br />
<br />
+1TNNN,nnn<br />
где параметры аналогичны описанным для функции {{Описание функции UNIFOR (ссылка)|name=+1K|title=Групповая мультираскодировка переменных}}<br />
<br />
==Неописанные UNIFOR'ы==<br />
<br />
<br />
<br />
{{Описание функции UNIFOR<br />
|name=Неописанный UNIFOR &unifor('11R^c?v210*2')<br />
|title=<br />
|versionFilename=<br />
|versionText=<br />
|sectionLevel======<br />
}}<br />
<br />
<br />
<br />
{{Описание функции UNIFOR<br />
|name=Неописанный UNIFOR &umarci('1200#h#2')<br />
|title=<br />
|versionFilename=<br />
|versionText=<br />
|sectionLevel======<br />
}}<br />
<br />
<br />
<br />
{{Описание функции UNIFOR<br />
|name=Неописанный UNIFOR &umarci('2210#^c')<br />
|title=<br />
|versionFilename=<br />
|versionText=<br />
|sectionLevel======<br />
}}<br />
<br />
<br />
{{Описание функции UNIFOR<br />
|name=Неописанный UNIFOR &umarci('3210#2#^c')<br />
|title=<br />
|versionFilename=<br />
|versionText=<br />
|sectionLevel======<br />
}}<br />
<br />
==Ссылки==<br />
<br />
См. также:<br />
* [[Язык форматирования системы ИРБИС]]<br />
* [[Операторы языка форматирования ИРБИС]]<br />
* [[Функции языка форматирования ИРБИС]]<br />
<br />
Источники информации:<br />
* [[Общее описание системы ИРБИС64]]<br />
* ''Техническая документация WEB ИРБИС64 и WEB ИРБИС32''. [http://irbis.gpntb.ru/read.php?21,62125 Актуальная версия документа доступна на форуме.]<br />
* [[Документация, поставляемая с системой ИРБИС#История версий ИРБИС|История версий ИРБИС (файл <tt>RELEASE_OVERALL.doc</tt>)]] версии 2008.1<br />
* {{Ссылка на открытый FTP|filename=RELEASE_13_1.doc|text=Файл описания релиза 2009.1}}<br />
* {{Ссылка на открытый FTP|filename=RELEASE_13_1.doc|text=Файл описания релиза 2010.1}}<br />
* {{Ссылка на открытый FTP|filename=RELEASE_13_1.doc|text=Файл описания релиза 2011.1}}<br />
* {{Ссылка на открытый FTP|filename=RELEASE_13_1.doc|text=Файл описания релиза 2013.1}}<br />
<br />
[[Категория:Язык форматирования системы ИРБИС]]<br />
[[Категория:Анонсированные статьи]]</div>Sokvhttp://wiki.elnit.org/index.php?title=%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F_%D0%92%D0%B5%D0%B1-%D0%98%D0%A0%D0%91%D0%98%D0%A1&diff=2439Технология Веб-ИРБИС2015-10-07T18:23:20Z<p>Sokv: </p>
<hr />
<div>Технология '''''Веб-ИРБИС''''' служит для создания Веб-приложений для работы с базами данных ИРБИС.<br />
<br />
Данная технология реализована в виде одноимённого [[Веб-ИРБИС|'''''программного продукта – Веб-ИРБИС''''']].<br />
<br />
==Веб-шлюз ИРБИС==<br />
<br />
Программный модуль ''Веб-шлюз ИРБИС'' обеспечивает обработку клиентских запросов.<br />
<br />
''Веб-шлюз ИРБИС'' является шлюзом CGI.<br />
<br />
Запрос может осуществляться по методу POST или GET.<br />
<br />
===Общая схема работы Веб-шлюза ИРБИС===<br />
<br />
Последовательность операций шлюза:<br />
* Чтение параметров INI файла<br />
* Препроцессинг<br />
** Формальный контроль правильности параметров<br />
** Интерпретация поискового запроса<br />
** Авторизация<br />
** Выполнение скрипта защиты<br />
** Повторная авторизация<br />
* Выполнение поиска<br />
* Формирование ответа (объединение и обработка фреймов)<br />
* Определение HTTP заголовков на основе INI файла<br />
* Возврат ответа<br />
<br />
В случае возникновения ошибки выполнения или превышения времени обработки запроса шлюз возвращает ошибку (error.html).<br />
<br />
====Препроцессинг====<br />
<br />
=====Скрипт-защита=====<br />
<br />
Формат скрипта защиты выполняет две функции: 1) проверку поступивших параметров запроса и защиту от взлома 2) обработку и дополнение параметров.<br />
<br />
Первая строка, сформированная форматом срипт-защиты, определяет общий результат – если это 0 или файлом не было возвращено никаких значений – скрипт-защита определила ошибку, если результат 1 или файлом были возвращены другие ненулевые значения – ошибки нет. В первом случае шлюз возвращает error.html, в последнем случае шлюз читает остальные строки формата и изменяет параметры запроса на новые.<br />
<br />
Например, строка ‘SCRIPT_DONE=YES’/ задаёт параметру SCRIPT_DONE значение YES.<br />
<br />
=====Авторизация пользователя=====<br />
<br />
Авторизация даёт возможность заказывать литературу, просматривать формуляр и редактировать корзину заказов.<br />
<br />
Для авторизации используется база RDR. Авторизация происходит по идентификатору и, если в пользовательском запросе задан параметр Z21FLAGID=1, – по фамилии. После авторизации шлюз выполняет шифрование идентификатора, и зашифрованный идентификатор передаётся при переходе по страницам.<br />
<br />
====Инициализация параметров====<br />
<br />
После поступления клиентского запроса осуществляется инициализация параметров веб-шлюза на основе параметров CGI.<br />
<br />
Обрабатываемый шлюзом набор параметров определяется конфигурационным файлом Веб-шлюза ИРБИС.<br />
<br />
Эти параметры доступны в контексте фреймов.<br />
<br />
Параметры используются, в том числе, для отслеживания состояния веб-страницы. В ответ на HTTP-запрос клиента (обычно – в генерируемую html-страницу, передаваемую клиенту) может включить набор пользовательских параметров вместе с их значениями, полученными в запросе, для чего есть специальная команда.<br />
<br />
Отслеживание состояния осуществляется с использованием следующих этапов: 1) данные передаются на веб-шлюз в виде параметров запроса; 2) веб-шлюз передаёт данные вместе со сформированной страницей в скрытых полях форм HTML.<br />
<br />
====Выполнение команды====<br />
<br />
Затем шлюз переходит к выполнению команды. Команда соответствует переданному параметру C21COM.<br />
<br />
В контексте выполнения команды используются полученные параметры.<br />
<br />
Для каждой команды есть набор '''основных параметров''', логика использования которых предопределена самим веб-шлюзом.<br />
<br />
К основным параметрам шлюза относятся:<br />
* <tt>C21COM</tt> – команда, которую должен выполнить веб-шлюз.<br />
* <tt>I21DBN</tt> – имя [[Профили|профиля]]. Веб-шлюз ИРБИС в соответствии с именем профиля определяет набор [[Фреймы|фреймов]], из которых составит ответ клиенту. Веб-шлюз ИРБИС ищет названия фреймов в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файле irbis_server.ini]] в секции, название которой соответствует значению параметра <tt>I21DBN</tt> (подробнее в разделе [[#Роль фреймов в работе веб-шлюза ИРБИС|Роль фреймов в работе веб-шлюза ИРБИС]]).<br />
* <tt>P21DBN</tt> – имя базы данных.<br />
* <tt>Z21ID</tt> – значение параметра авторизации.<br />
<br />
Кроме '''основных''', есть '''пользовательские параметры''' – все остальные параметры.<br />
<br />
Особенность пользовательских параметров в том, что их набор и использование полностью могут быть определены (переопределены) пользователями системы ИРБИС:<br />
* Определение параметров даётся в конфигурационном файле Веб-шлюза ИРБИС.<br />
* Параметры доступны в виде виртуальных полей на языке форматирования в контексте фреймов.<br />
<br />
====Ответ веб-шлюза ИРБИС клиенту====<br />
<br />
Порядок формирования ответа веб-шлюза ИРБИС клиенту зависит от команды.<br />
<br />
=====Ответ с использованием фреймов=====<br />
<br />
Для команд, представленных в таблице, осуществляется генерация ответа с использованием технологии выбора и обработки фреймов.<br />
<br />
Обычно это динамически формируемая веб-страница.<br />
<br />
'''Таблица.''' Команды веб-шлюза ИРБИС.<br />
{|<br />
|<br />
{| class="standard"<br />
!Значение параметра <tt>C21COM</tt>||Описание команды||Соответствующий параметр в <tt>irbis_server.ini</tt><br />
|-<br />
|'''F'''||'''''показ''''' – команда показа страницы||ShowFrames<br />
|-<br />
|'''S'''||'''''поиск''''' – команда выполнения и показа результатов поиска||SearchFrames<br />
|-<br />
|'''T'''||'''''словарь''''' – команда показа терминов словаря||DictionryFrames<br />
|-<br />
|'''Z'''||'''''заказ''''' – команда отбора записей в корзину заказов||ZakazFrames<br />
|-<br />
|'''R'''||'''''запись''''' – команда редактуры записей||RecUpdateFrames<br />
|}<br />
|}<br />
<br />
Выбор набора фреймов зависит от: команды (параметр C21COM) и профиля (параметр I21DBN).<br />
<br />
Возможные наборы фреймов предварительно сконфигурированы и указаны в конфигурационном файле <tt>irbis_server.ini</tt>.<br />
<br />
Откуда шлюз и считывает нужный набор, в зависимости от параметров (C21COM и I21DBN).<br />
<br />
Каждой команде веб-шлюза ИРБИС соответствует имя параметра в файле <tt>irbis_server.ini</tt> (см. таблицу ''Команды веб-шлюза ИРБИС'').<br />
<br />
=====Отправка клиенту ресурсного файла=====<br />
<br />
Для команд, представленных в таблице, отправка клиенту ресурсного файла.<br />
<br />
'''Таблица.''' Команды веб-шлюза ИРБИС.<br />
{|<br />
|<br />
{| class="standard"<br />
!Значение параметра <tt>C21COM</tt>||Описание команды<br />
|-<br />
|'''E'''||'''''экспорт''''' – команда выгрузки записей<br />
|-<br />
|'''2'''||'''''файл''''' – команда чтения внешнего объекта<br />
|-<br />
|'''4'''||'''''скачать''''' – команда заимствования записи<br />
|}<br />
|}<br />
<br />
===Команда поиска – S===<br />
<br />
'''Пример поиска всех страниц одного текста PDF'''<br />
<br />
Здесь мы предполагаем, что:<br />
* Работаем в контексте базы данных IBIS.<br />
* Поисковое выражение <tt>TXT=2__$</tt> позволяет найти все страницы файла <tt>2.pdf</tt>.<br />
<br />
Чтобы создать произвольный запрос, не связанный с существующим функционалом системы, можно создать новый профиль EXAMPLE1. Для этого в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|конфигурационном файле веб-шлюза ИРБИС irbis server.ini]] нужно добавить секцию EXAMPLE1<br />
[EXAMPLE1]<br />
FRAMES=C:\irbis\irbis_plus\IRBIS64\DATAI\frames_15_plus\FullText\<br />
ShowFrames=<br />
SearchFrames=RESULT<br />
DBNAME=IBIS<br />
где значение параметра FRAMES должно соответствовать местонахождению фреймов.<br />
<br />
Для команды поиска порядок формирования ответа определяется параметром SearchFrames. И запись<br />
SearchFrames=RESULT<br />
означает, что при формировании Веб-шлюзом ответа на команду поиска не участвуют фреймы, участвует только формат, который будет указан в запросе.<br />
<br />
В качестве этого формата предлагается создать файл '''<tt>example1.pft</tt>''' со следующим содержимым<br />
<nowiki>mfn,/,</nowiki><br />
Этот формат выводит список MFN найденных записей.<br />
<br />
Теперь всё готово, чтобы выполнить запрос<br />
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<br />
<br />
В основных полях мы указываем команду поиска (S), базу данных IBIS, профиль EXAMPLE1, идентификатор пользователя.<br />
<br />
Поле S21All содержит запрос на языке запросов ИРБИС. Если его декодировать из кодировки URL, то он будет выглядеть так<br />
<nowiki>S21All=<.>TXT=2__$<.></nowiki><br />
где точка в угловых скобках заменяет двойную кавычку, являющуюся ограничителем запроса в [[Язык запросов ИРБИС|языке запросов ИРБИС]], то есть указанный запрос следует читать как<br />
"TXT=2__$"<br />
<br />
Формат вывода найденных записей, который предлагалось подготовить выше, указан в параметре S21FMT, без расширения.<br />
<br />
Результатом выполнения этого запроса будет обещанный список mfn, например<br />
0000000002<br />
0000000006<br />
0000000013<br />
0000000018<br />
<br />
Можно усложнить запрос, ограничив вывод порцией из 2 результатов, начиная со 2-го (параметры S21CNR и S21STN)<br />
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<br />
<br />
Результатом будет<br />
0000000006<br />
0000000013<br />
<br />
Можно усложнить формат вывода найденных записей '''<tt>example1.pft</tt>''', добавив информацию о количестве найденных, а также введённых порционных ограничениях<br />
<nowiki>mfn,'; кол-во найденных = ',v1001,'; с какого номера начать = ',v2223,'; размер порции = ',v2224,/,</nowiki><br />
где 1001, 2223 и 2224 – виртуальные поля, в которые шлюз помещает данные в соответствии с [[таблицей виртуальных полей шлюза]].<br />
<br />
Все данные, которые шлюз принял в виде параметров, попадают в виртуальные поля в соответствии правилами, заданными в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файле irbis_server.ini]]. Например, параметру S21CNR соответствует метка 2224, параметру S21STN – 2223.<br />
<br />
Результатом будет<br />
0000000006; кол-во найденных = 4; с какого номера начать = 2; размер порции = 2<br />
0000000013; кол-во найденных = 4; с какого номера начать = 2; размер порции = 2<br />
<br />
В последнем примере количество найденных и данные о порции повторяются с каждым результатом поиска, что является избыточным.<br />
<br />
Такой избыточности позволяют избежать применение [[фреймов]].<br />
<br />
Создадим файл example1.frm (его местоположение должно соответствовать параметру FRAMES в профиле) со следующим содержимым<br />
Вывод через фрейм... <br />
<?! 'кол-во найденных = ',v1001,'; с какого номера начать = ',v2223,'; размер порции = ',v2224,/, ?><br />
<br />
Чтобы задействовать этот фрейм, в описании профиля можно изменить значение параметра SearchFrames следующим образом:<br />
SearchFrames=example1.frm,RESULT<br />
что следует понимать так, что шлюз вернёт результат выполнения команды поиска, составленный из:<br />
* результата выполнения фрейма example1.frm<br />
* результатов работы формата, который отработает для каждого результата поиска (обозначается словом RESULT).<br />
<br />
Кроме того, чтобы измежать дублирующихся данных, в '''<tt>example1.pft</tt>''' оставим только вывод MFN:<br />
mfn,/,<br />
<br />
Результатом будет<br />
Вывод через фрейм... кол-во найденных = 4; с какого номера начать = 2; размер порции = 2<br />
0000000006<br />
0000000013<br />
<br />
===Команда показа терминов словаря – T===<br />
<br />
'''Пример команды показа терминов словаря'''<br />
<br />
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&<br />
<br />
где:<br />
* <tt>C21COM=T</tt> определяет команду,<br />
* <tt>I21DBN=IBIS</tt> базу данных,<br />
* <tt>Z21ID=1500323880383212</tt> идентификатор читателя в зашифрованном виде,<br />
* <tt>T21PRF=KT=</tt> префикс словаря,<br />
* <tt>T21TRM=a</tt> – требование терминов, начинающихся на <tt>a</tt>.<br />
<br />
Пример возврата:<br />
A20040830ARUSY|1<br />
A20041017ABELY|1<br />
A20041118ARUSY|1<br />
A2H|2<br />
A540|9<br />
A54001|7<br />
A550UTILIZATION|1<br />
AACDEMY|1<br />
AASL|2<br />
AASLPUBSANDJOURNALS|2<br />
<br />
===Добавление пользовательского параметра===<br />
<br />
Добавление пользовательского параметра осуществляется в несколько шагов:<br />
* '''добавление ''пользовательского параметра'' в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файл инициализации шлюза <tt>irbis_server.ini</tt>]]'''<br />
: Необходимо добавить описание нового ''пользовательского параметра'' в настроечный файл <tt>irbis_server.ini</tt>, задав имя и метку параметра. Для этого в секции <tt>[PARAMETRS]</tt> используются ''параметры ini файла'' <tt>PARNAME_</tt> и <tt>PARTAG_</tt> (не стоит путать термины ''пользовательские параметры'' веб-шлюза и ''параметры ini файла''), где вместо знака подчёркивания ставится номер пользовательского параметра по порядку, например:<br />
PARNAME2=C21COM<br />
PARTAG2=2222<br />
: В этом примере мы видим описание второго по порядку из определённых в секции <tt>[PARAMETRS]</tt> параметров: имя параметра <tt>C21COM</tt>, метка параметра <tt>2222</tt>. Имя и метка параметров должны быть уникальными. После того как описание ''пользовательского параметра'' добавлено необходимо изменить значение параметра <tt>PARCOUNT</tt> в секции <tt>[PARAMETRS]</tt>, его значение должно быть равно порядковому номеру последнего описания ''пользовательского параметра''.<br />
: ''Примечание:'' обратите внимание, что в файле <tt>irbis_server.ini</tt> хранятся описания не только пользовательских параметров, а присутствует также описания предустановленных параметров.<br />
* '''использование в файлах <tt>.frm</tt> команд <tt><!FORMAT=INSERT_ALL_PARAMETERS></tt> и <tt><!FORMAT=INSERT_ALL_PARAMETERS_IN_QUERY></tt>'''<br />
: Команда <tt><!FORMAT=INSERT_ALL_PARAMETERS></tt> обеспечивает вставку в код HTML-страницы всех непустых переданных веб-шлюзу параметров в виде скрытых элементов формы, например:<br />
<input type="hidden" name="PARAM_NAME" value="PARAM_VALUE"><br />
: Команда <tt><!FORMAT=INSERT_ALL_PARAMETERS_IN_QUERY></tt> вставляет в код HTML-страницы гиперссылку, содержащую все переданные веб-шлюзу параметры.<br />
<br />
===Система команд Веб-шлюза ИРБИС===<br />
<br />
Система ''команд'' Веб-шлюза ИРБИС позволяет задать собственный набор фреймов и порядок их объединения для каждой задачи. Для разных задач предусмотрены разные команды, например: для страницы приглашения к поиску, результата поиска, отбора записей в корзину заказов и т.д.<br />
<br />
==Обработка фреймов==<br />
<br />
В общем случае, веб-страница формируется путём объединения (''склеивания'') следующих частей:<br />
* ''заголовочной'' и ''подвальной'' частей, формируемых при помощи ''фреймов'' и<br />
* ''тела'' страницы, формируемого при помощи [[Язык форматирования системы ИРБИС#Понятие формата|''формата'']], который отрабатывает на наборе записей базы данных (соответствующих запросу пользователя).<br />
<br />
===Фрейм как язык разметки===<br />
<br />
Фрейм представляет собой текстовый файл, содержимое которого передаётся клиенту (в веб браузер), который также может содержать вставки, которые будут обработаны определённым образом перед передачей клиенту.<br />
<br />
Предусмотрены вставки следующих видов:<br />
* вставка на языке форматирования ИРБИС,<br />
* вложенный фрейм.<br />
<br />
'''''Вставка на языке форматирования''''' обозначается следующим образом<br />
<br />
<!FORMAT<br />
<br />
'''Пример:'''<br />
<br />
<nowiki><!FORMAT=if v3409='' then 'value=""' else 'value=','"',v3409,'"',fi></nowiki><br />
<br />
Если вставка на языке форматирования содержит символы, кодирующиеся в UTF-8 более чем одним байтом (например, кириллицу), то формат обязательно должен начинаться с восклицательного знака. Это связано с тем, что формат в кодировке UTF-8 должен предваряться восклицательным знаком, а все фреймы храняться именно в кодировке UTF-8.<br />
<br />
'''Пример:'''<br />
<br />
<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><br />
<br />
Пример вложенного фрейма:<br />
<br />
<!FORMAT=if &uf('IMAIN,SHOW_DUBLIN_CORE,0') <> '0' then /'<!FILE=Dublin_Core.frm>' fi><br />
<br />
Предусмотрен '''''упрощённый синтаксис вставки на языке форматирования''''':<br />
<?!if p(v2225) then 'true' fi ?><br />
<br />
===Пример последовательности действий Веб-шлюза ИРБИС при формировании веб-страницы в ответ на запрос===<br />
<br />
Веб-шлюз ИРБИС при получении команд '''F''', '''S''', '''T''', '''Z''', '''R''' выполняет следующую последовательность действий:<br />
* Веб-шлюз получил запрос. Запрос содержит параметры <tt>C21COM</tt>, <tt>I21DBN</tt> и другие.<br />
* В файле <tt>irbis_server.ini</tt> веб-шлюз находит секцию, имя которой соответствует значению параметра <tt>I21DBN</tt>. Иными словами: с одной стороны, в качестве значения параметра <tt>I21DBN</tt> указывается имя профиля, с другой стороны, для каждого профиля в файле <tt>irbis_server.ini</tt> должна содержаться секция, имя которой совпадает с именем профиля.<br />
* В указанной секции файла <tt>irbis_server.ini</tt> веб-шлюз находит значение параметра, соответствующего указанной в параметре <tt>C21COM</tt> команде (см. таблицу ''Команды веб-шлюза ИРБИС''). Полученное значение должно представлять собой список фреймов.<br />
* Фреймы обрабатываются, и результат, представляющий собой HTML-страницу, отправляется клиенту в качестве ответа.<br />
<br />
===Примеры перехода пользователя по страницам Веб-ИРБИС===<br />
<br />
Пример запроса начальной страницы:<br />
<br />
http://localhost:8080/cgi-bin/irbis64r_15_plus/cgiirbis_64_ft.exe?C21COM=F&I21DBN=IBIS_FULLTEXT&P21DBN=IBIS&Z21ID=&S21CNR=5<br />
<br />
где указаны:<br />
* команда шлюза F (''показ страницы'')<br />
* имя профиля IBIS_FULLTEXT<br />
* база данных IBIS<br />
* авторизация не осуществлялась<br />
<br />
Параметр S21CNR не обязателен.<br />
<br />
При авторизации запрос приобретает следующий вид<br />
<br />
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<br />
<br />
где указаны:<br />
* команда шлюза F (''показ страницы'')<br />
* имя профиля AUTHOR<br />
* база данных IBIS<br />
* параметры авторизации: Z21FLAGID, фамилия читателя Z21FAMILY и идентификатор читателя Z21ID<br />
<br />
При поиске по слову "библиотека" запрос приобретает следующий вид<br />
<br />
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<br />
<br />
где указаны:<br />
* команда шлюза S (''поиск'')<br />
* имя профиля IBIS_FULLTEXT<br />
* база данных IBIS<br />
* параметры авторизации: Z21ID<br />
* текущий запрос SEARCH_STRING и предыдущий запрос FT_S21STR (одинаковые)<br />
* USES21ALL=1 (использовать параметр S21ALL, применяется в поиске связных)<br />
* S21CNR=5 (порция при показе найденных)<br />
* S21REF=10 (для правильного формирования ссылок на страницы с результатами поиска)<br />
* C21COM1<br />
* FT_PREFIX<br />
* S21FMT=briefHTML_ft<br />
* AVT_S21P03=A%3D<br />
* AVT_S21P02=1<br />
* AVT_S21LOG=1<br />
* NAME_S21P03=T%3D<br />
* NAME_S21P02=1<br />
* NAME_S21LOG=1<br />
* UDC_S21P03=U%3D<br />
* UDC_S21P02=0<br />
* UDC_S21LOG=1<br />
* IZD_S21P03=M%3D<br />
* IZD_S21P02=1<br />
* IZD_S21LOG=1<br />
* DAT_S21P03=G%3D<br />
* DAT_S21P02=1<br />
* DAT_S21LOG=5<br />
* P21DBN=IBIS<br />
* FT_S21LOG=4<br />
* FT_S21P03=K%3D<br />
* FT_S21P01=3<br />
* S21STN=1<br />
* S21COLORTERMS=1<br />
<br />
==Ссылки==<br />
<br />
См. также:<br />
* [[Веб-ИРБИС]]<br />
* [[Установка Веб-шлюза Ирбис 64]]<br />
* [[Настройка и обслуживание Веб-ИРБИС]]<br />
* [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini]]<br />
* [[Язык запросов ИРБИС]]<br />
<br />
[[Категория:Технология Веб-ИРБИС]]<br />
[[Категория:ИРБИС 64]]</div>Sokvhttp://wiki.elnit.org/index.php?title=UNIFOR&diff=2438UNIFOR2015-09-17T11:59:38Z<p>Sokv: </p>
<hr />
<div>UNIFOR – [[Язык форматирования системы ИРБИС#Форматные выходы. UNIFOR|''форматный выход'']], реализующий множество функций вне базовых рамок [[Язык форматирования системы ИРБИС|языка форматирования]].<br />
<br />
В статье для удобства перечень форматных выходов UNIFOR разбит на категории.<br />
<br />
==Использование UNIFOR==<br />
<br />
UNIFOR имеет следующий синтаксис в языке форматирования (в полной или сокращённой форме):<br />
&unifor(формат)<br />
&uf(формат)<br />
где:<br />
* '''<tt>&</tt>''' – идентификатор вызова форматного выхода,<br />
* '''<tt>unifor</tt>''' – имя форматного выхода (соответственно '''<tt>uf</tt>''' – сокращённое имя),<br />
* '''<tt>формат</tt>''' – аргумент.<br />
<br />
Рекомендуется использовать сокращённую форму вызова UNIFOR. Сокращённая форма по действию ничем не отличается от полной формы, зато позволяет сократить размер формата и повысить его читаемость.<br />
<br />
Вид реализуемой функции определяется первыми символами строки, которая формируется в результате выполнения формата, передаваемого в качестве аргумента.<br />
<br />
===Передача параметров===<br />
<br />
Во многих функциях, которые позволяет реализовать форматный выход UNIFOR, для передачи параметра неизвестной длины используется уникальный разделитель. Значение параметра должно быть окружено таким уникальным разделителем слева и справа.<br />
<br />
Например, если исходная строка<br />
!AAAA!BBBB<br />
то в качестве уникального разделителя выступает символ<br />
!<br />
значение параметра<br />
AAAA<br />
а оставшаяся часть исходной строки<br />
BBBB<br />
<br />
==Перечень функций UNIFOR с примерами их применения==<br />
<br />
===Функции для обработки строк===<br />
<br />
====Обычные функции для обработки строк====<br />
<br />
{{Описание функции UNIFOR<br />
|name=+95<br />
|title=Вернуть длину исходной строки<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
|sectionLevel======<br />
}}<br />
<br />
+95<строка><br />
<br />
{{Описание функции UNIFOR<br />
|name=+96<br />
|title=Вернуть часть строки<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
|sectionLevel======<br />
}}<br />
<br />
+96A*SSS.NNN#<строка><br />
где:<br />
* A – направление: 0 – с начала строки; 1 – с конца;<br />
* SSS – смещение;<br />
* NNN – кол-во символов.<br />
<br />
'''Примеры:'''<br />
&uf('+960*0.4#'v100)<br />
&uf('+960*5.4#'v100)<br />
&uf('+961*0.4#'v100)<br />
<br />
{{Описание функции UNIFOR<br />
|name=Q<br />
|title=Вернуть заданную строку в нижнем регистре<br />
|sectionLevel======<br />
}}<br />
<br />
Q<строка><br />
<br />
'''Примеры:'''<br />
&unifor("Q"v200)<br />
<br />
{{Описание функции UNIFOR<br />
|name=+97<br />
|title=Вернуть заданную строку в верхнем регистре<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
|sectionLevel======<br />
}}<br />
<br />
+97<строка><br />
<br />
{{Описание функции UNIFOR<br />
|name=+98<br />
|title=Заменить в заданной строке один символ на другой<br />
|description=Заменить в заданной строке один символ на другой (регистр учитывается)<br />
|versionFilename=RELEASE_7_2.doc<br />
|versionText=2007.2<br />
|sectionLevel======<br />
}}<br />
<br />
+98ab<строка><br />
где:<br />
* a – заменяемый символ;<br />
* b – заменяющий символ.<br />
<br />
'''Примеры:'''<br />
<br />
В результате выполнения формата<br />
&uf('+98 0',f(1,5,0))<br />
получится значение<br />
00001<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9F<br />
|title=Вернуть ANSI-символ с заданным кодом<br />
|versionFilename=RELEASE_8_1.doc<br />
|versionText=2008.1<br />
|sectionLevel======<br />
}}<br />
<br />
+9F<код><br />
<br />
'''Примеры:'''<br />
<br />
Такой форматный выход может пригодиться, например, когда надо вывести в литерале символ, совпадающий с ограничителями литерала.<br />
<br />
Для формата<br />
<br />
'11111',&Uf('+9F39'),'22222'<br />
<br />
результат расформатирования будет<br />
<br />
11111'22222<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9I<br />
|title=Заменить в исходных данных некоторую заданную последовательность символов другой заданной последовательностью символов<br />
|versionFilename=RELEASE_9_1.doc<br />
|versionText=2009.1<br />
|sectionLevel======<br />
}}<br />
<br />
+9I!AAAA!/BBBB/<данные><br />
где <tt>АААА</tt> – последовательность символов, подлежащая замене; <tt>ВВВВ</tt> – заменяющая последовательность символов; символ <tt>!</tt> – уникальный разделитель, отсутствующий в строке <tt>АААА</tt>; символ <tt>/</tt> – уникальный разделитель, отсутствующий в строке <tt>ВВВВ</tt>. <tt>ВВВВ</tt> может быть пустым значением, в этом случае последовательность <tt>АААА</tt> будет удаляться. Обрабатываются ВСЕ (а не только первое) вхождения <tt>АААА</tt> в исходные данные. В качестве разделителей можно использовать ТОЛЬКО символы стандартного набора (с кодом менее 128).<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9S<br />
|title=Найти подстроку<br />
|description=Возвращает позицию первого символа найденного вхождения подстроки в исходную строку. Считается, что символы в строке нумеруются с 1. Если подстрока не найдена, то возвращает 0. ''Комментарий: следует отметить, что в функции {{Описание функции UNIFOR (ссылка)|name=+96|title=Вернуть часть строки}} указывают смещение, а не позицию символа''<br />
|versionFilename=RELEASE_13_1.doc<br />
|versionText=2013.1<br />
|sectionLevel======<br />
}}<br />
<br />
+9S!подстрока!<исходная_строка><br />
где <tt>подстрока</tt> – подстрока, которую нужно найти; <tt><исходная_строка></tt> – исходная строка для поиска; символ <tt>!</tt> – уникальный разделитель, отсутствующий в искомой подстроке.<br />
<br />
====Функции для работы со словами====<br />
<br />
{{Описание функции UNIFOR<br />
|name=E<br />
|title=Вернуть заданное количество слов с начала строки<br />
|sectionLevel======<br />
}}<br />
<br />
EN<строка><br />
где <tt>N</tt> – количество слов (одна цифра).<br />
<br />
<br />
'''Примеры:'''<br />
&unifor("E3"v200^a)<br />
<br />
{{Описание функции UNIFOR<br />
|name=F<br />
|title=Вернуть часть строки, начиная со следующего слова после указанного и до конца строки<br />
|sectionLevel======<br />
}}<br />
<br />
FN<строка><br />
где <tt>N</tt> – количество слов (одна цифра).<br />
<br />
'''Примеры:'''<br />
&unifor("F3"v200^a)<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9G<br />
|title=Преобразовать заданную строку в список слов<br />
|versionFilename=RELEASE_8_1.doc<br />
|versionText=2008.1<br />
|sectionLevel======<br />
}}<br />
<br />
+9G<строка><br />
<br />
Границы слов определяются на основе [[Файлы ИРБИС#Таблица алфавитных символов|таблицы алфавитных символов]].<br />
<br />
====Дополнительные функции для обработки строк====<br />
<br />
{{Описание функции UNIFOR<br />
|name=+3E<br />
|title=Кодирование данных для представления в URL<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
|sectionLevel======<br />
}}<br />
<br />
+3E<данные><br />
<br />
'''Примеры:'''<br />
&unifor('+3E',v1007)<br />
<br />
{{Описание функции UNIFOR<br />
|name=+3D<br />
|title=Декодирование данных из URL<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
|sectionLevel======<br />
}}<br />
<br />
+3D<данные><br />
<br />
{{Описание функции UNIFOR<br />
|name=+3+<br />
|title=Перевод знака <tt>+</tt> в <tt>%2B</tt><br />
|sectionLevel======<br />
}}<br />
<br />
+3+<данные><br />
<br />
{{Описание функции UNIFOR<br />
|name=+3U<br />
|title=Кодирование строки в UTF-8<br />
|sectionLevel======<br />
}}<br />
<br />
+3U<данные><br />
<br />
{{Описание функции UNIFOR<br />
|name=+3W<br />
|title=Декодирование строки из UTF-8<br />
|sectionLevel======<br />
}}<br />
<br />
+3W<данные><br />
<br />
{{Описание функции UNIFOR<br />
|name=T<br />
|title=Транслитерация кириллических символов с помощью латиницы<br />
|sectionLevel======<br />
}}<br />
<br />
TN<строка><br />
где N – вид таблицы транслитерации (0 или 1).<br />
<br />
'''Примеры:'''<br />
&unifor("T0"V200)<br />
<br />
{{Описание функции UNIFOR<br />
|name=G<br />
|title=Вернуть часть строки до или начиная с заданного символа<br />
|sectionLevel======<br />
}}<br />
<br />
GNA<строка><br />
где:<br />
* N может принимать значения:<br />
** 0 (или A) – до заданного символа не включая его;<br />
** 1 (или B) – начиная с заданного символа;<br />
** 2 (или C) – после заданного символа;<br />
** 3 (или D) – после последнего вхождения заданного символа;<br />
** 4 (или E) – до последнего вхождения заданного символа (включая его).<br />
* А – заданный символ. Символ обозначает самого себя, кроме # (обозначает любую цифру) и $ (обозначает любую букву).<br />
<br />
'''Примеры:'''<br />
&unifor("G0#"v700)<br />
&unifor("G1-"v700^a)<br />
&unifor("G2-"v700^a)<br />
<br />
Пример получения ссылки на файл из подполя 952^U полнотекстовой БД для файлов, добавленных с разбиением и без<br />
&uf('G0:',&uf('G4:',&uf('G2:',&uf('G2:',v952^U))))<br />
<br />
{{Описание функции UNIFOR<br />
|name=9<br />
|title=Удалить двойные кавычки из заданной строки<br />
|sectionLevel======<br />
}}<br />
<br />
9<исх.строка><br />
<br />
'''Примеры:'''<br />
&unifor("9"v200^a)<br />
<br />
{{Описание функции UNIFOR<br />
|name=X<br />
|title=Удаление из заданной строки фрагментов, выделенных угловыми скобками <><br />
|sectionLevel======<br />
}}<br />
<br />
X<строка><br />
<br />
'''Примеры:'''<br />
&unifor("X"v200)<br />
<br />
{{Описание функции UNIFOR<br />
|name=+S<br />
|title=<nowiki>Выводит нужную часть текста (до знака "=", или после него) в заголовках, описанных по принципу <NNN=KKK></nowiki><br />
|versionText=не установленно, предположительно давно<br />
|sectionLevel======<br />
}}<br />
<br />
+SN[строка]<br />
где N может принимать значения 0 для вывода текста после знака "=", и 1 для вывода текста перед знаком "=".<br />
<br />
Выдержка из документации (см. {{Ссылка на открытый FTP|filename=RELEASE_2_2.doc|text=Файл описания релиза 2002.2}}<br />
и [http://nucleonics.fatal.ru/irbis/irbishelp.html?wci004010200000.htm документацию на http://nucleonics.fatal.ru]):<br />
* Для книг, описанных «Под заглавием», которые начинаются с числительного, обозначенного цифрами, начальный элемент сортировки и авторский знак должны формироваться по словесному обозначению числительного. В связи с этим Пользователь должен ввести дополнительную разметку типа <NNN=Текст>, где «Текст», стоящий после знака «=», — это словесное значение числительного NNN, используемое взамен его для формирования авторского знака и/или в качестве начального элемента сортировки. Например, заглавие 1000 и одна ночь, размеченное как <1000=тысяча> и одна ночь, для формирования авторского знака и сортировки будет представлено как «тысяча и одна ночь», а для печати как «1000 и одна ночь».<br />
* Для биографических и биобиблиографических изданий, описанных под заглавием, начинающимся с имени лица, которому оно посвящено, авторский знак и начальный элемент сортировки должны формироваться на фамилию. В связи с этим Пользователь также должен ввести дополнительную разметку типа <AAA=Текст>, где «Текст», стоя-щий после знака «=», — это фамилия, используемая (взамен части ААА) для формирования авторского знака и/или начального элемента сортировки. Например, заглавие Антон Павлович Чехов может быть размечено как <Антон Павлович Чехов=Чехов Антон Павлович> (в сортировку пойдет «Чехов Антон Павлович», на печать «Антон Павлович Чехов»). Заметим, что разметка типа <Антон=Чехов> Павлович Чехов даст правильный авторский знак (Чехов Павлович Чехов), но может дать ошибки в сортировке.<br />
<br />
'''Примеры:'''<br />
<br />
Пример входной строки:<br />
<br />
<1=Первое> апреля<br />
<br />
Примеры использования функции:<br />
<br />
&uf('+s0'v200^a)<br />
&uf('+s1'v200^a)<br />
<br />
Пример расформатирования:<br />
<br />
Первое апреля<br />
1 апреля<br />
<br />
{{Описание функции UNIFOR<br />
|name==<br />
|title=Сравнить заданное значение с маской<br />
|description=Возвращаемое значение: 1 – в случае положительного результата сравнения; 0 – в случае отрицательного<br />
|versionFilename=RELEASE_8_1.doc<br />
|versionText=2008.1<br />
|sectionLevel======<br />
}}<br />
<br />
=!<маска>!<значение><br />
<br />
<tt>!</tt> – уникальный разделитель (может быть любым символом). Маска может содержать принятые символы маскирования <tt>*</tt> и <tt>?</tt>. В общем случае маска может содержать несколько масок, отделенных друг от друга символом вертикальной черты <tt>|</tt>.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+\<br />
|title=Преобразование строки, удваивающее обратный слэш, или обратное<br />
|description=Преобразование строки, удваивающее обратный слэш, или обратное<br />
|sectionLevel======<br />
}}<br />
<br />
+\N<строка><br />
<br />
где:<br />
* N может принимать значения<br />
** 0 - удвоение знаков обратного слэш;<br />
** 1 - преобразование удвоенных знаков слэш в одинарные.<br />
<br />
'''Примеры:'''<br />
<br />
Результатом формата<br />
&uf('+\0c:\example.txt')<br />
будет строка<br />
c:\\example.txt<br />
<br />
Результатом формата<br />
&uf('+\1c:\\example.txt')<br />
будет строка<br />
c:\example.txt<br />
<br />
<br />
{{Описание функции UNIFOR<br />
|name=+R<br />
|title=Усекает строку справа до точки. Используется для отсечения одного уровня в рубриках ГРНТИ<br />
|description=Усечение кода рубрики в рубрикаторе ГРНТИ до вышестоящего<br />
|sectionLevel======<br />
}}<br />
<br />
+\R<строка><br />
<br />
'''Примеры:'''<br />
<br />
формат<br />
&unifor("+R"v3) <br />
исходная строка<br />
02.61.45<br />
результирующая строка<br />
02.61<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9R<br />
|title=Преобразование римского числа в арабское<br />
|versionFilename=RELEASE_11_1.doc<br />
|versionText=2011.1<br />
|sectionLevel======<br />
}}<br />
<br />
+9R<римское_число><br />
<br />
{{Описание функции UNIFOR<br />
|name=+9X<br />
|title=Преобразование арабского числа в римское<br />
|versionFilename=RELEASE_11_1.doc<br />
|versionText=2011.1<br />
|sectionLevel======<br />
}}<br />
<br />
+9X<арабское_число><br />
<br />
===Функции для работы с датой и временем===<br />
<br />
{{Описание функции UNIFOR<br />
|name=3<br />
|title=Выдача данных, связанных с датой и временем<br />
|description=Выдача данных, связанных с датой и временем<br />
}}<br />
<br />
Имеются следующие подфункции:<br />
* '''<tt>3</tt>''' – выдать текущую дату в виде ГГГГММДД. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>30</tt>''' – выдать текущий год в виде ГГГГ. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>31</tt>''' – выдать текущий месяц в виде ММ (с лидирующим нулем). ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>32</tt>''' – выдать текущий день в виде ДД (с лидирующим нулем). ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>33</tt>''' – выдать текущий год в виде ГГ. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>34</tt>''' – выдать текущий месяц в виде М (без лидирующего нуля). ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>35</tt>''' – выдать текущий день в виде Д (без лидирующего нуля). ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>36MM</tt>''' – выдать по заданному номеру месяца его название на русском языке в именительном падеже. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>37MM</tt>''' – выдать по заданному номеру месяца его название на русском языке в родительном падеже. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>38MM</tt>''' – выдать по заданному номеру месяца его название на английском языке. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>39</tt>''' – выдать текущее время. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>3А</tt>''' – выдать номер текущего дня от начала года. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_4_1.doc|text=2004.1}}.</small>''<br />
* '''<tt>3BГГГГММДД/ддд</tt>''' – прибавить/вычесть из заданной даты в виде ГГГГММДД заданное количество дней (ддд – может быть отрицательным) и вернуть полученную дату в виде ГГГГММДД. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_7_2.doc|text=2007.2}}.</small>''<br />
* '''<tt>3СГГГГММДД/ГГГГММДД</tt>''' – вычесть из одной даты в виде ГГГГММДД другую дату в виде ГГГГММДД и вернуть разницу в виде количества дней. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_7_2.doc|text=2007.2}}.</small>''<br />
* '''<tt>3JГГГГММДД</tt>''' – переводит заданную юлианскую дату ГГГГММДД в грегорианскую. ''<small>Присутствует в версиях ИРБИС с {{Ссылка на открытый FTP|filename=RELEASE_9_1.doc|text=2009.1}}.</small>''<br />
<br />
'''Примеры:'''<br />
<br />
&unifor('36',&unifor('34'))<br />
<br />
Вычесть из текущей даты сто дней:<br />
&uf('3B',&uf('3'),'/-100')<br />
<br />
Количество дней с 1 января 1900 года до сегодняшнего дня:<br />
&uf('3С',&uf('3'),'/19000101')<br />
<br />
===Функции для работы с глобальными переменными===<br />
<br />
Дополнительно о глобальных переменных см. [[Язык форматирования системы ИРБИС#Глобальные переменные|в подразделе ''Глобальные переменные'' статьи ''Язык форматирования системы ИРБИС'']].<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7<br />
|title=Очистить (опустошить) все глобальные переменные<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7<br />
<br />
'''Примеры:'''<br />
&unifor('+7')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7R<br />
|title=Чтение глобальной переменной<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7RNNN,nnn<br />
где:<br />
* NNN – номер переменной.<br />
* nnn – номер повторения. По умолчанию – номер текущего повторения в повторяющейся группе.<br />
Эквивалентная конструкция языка форматирования GNNN.<br />
<br />
'''Примеры:'''<br />
&unifor('+7R100')<br />
эквивалентная конструкция языка форматирования:<br />
G100<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7W<br />
|title=Запись глобальной переменной<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7WNNN#SSSS<br />
где:<br />
* NNN – номер переменной;<br />
* SSSS – список строк (результат расформатирования); каждая строка становится отдельным повторением.<br />
<br />
'''Примеры:'''<br />
&unifor('+7W100#',(v910/))<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7U<br />
|title=Добавление повторений глобальной переменной<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7UNNN#SSSS<br />
где:<br />
* NNN – номер переменной;<br />
* SSSS – список строк (результат расформатирования); каждая строка становится отдельным повторением.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7M<br />
|title=Логическое перемножение повторений двух переменных<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7MNNN#MMM<br />
Результат перемножения записывается в первую переменную.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7S<br />
|title=Логическое вычитание повторений двух переменных<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7SNNN#MMM<br />
Результат вычитания записывается в первую переменную.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7A<br />
|title=Логическое сложение повторений двух переменных<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7ANNN#MMM<br />
Результат сложения записывается в первую переменную.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7G<br />
|title=Исключение неоригинальных повторений переменной<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7GNNN<br />
Результат исключения записывается в ту же переменную.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+7T<br />
|title=Сортировка повторений переменной<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+7TNNN<br />
Результат сортировки записывается в ту же переменную.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+99<br />
|title=Групповая установка глобальных переменных<br />
|description=Групповая установка глобальных переменных. Применяется для ИРБИС-Навигатора. Исходная строка закодирована с помощью URL-кодировки. После раскодировки рассматривается как список строк (аналогично <tt>TStringList.Text</tt> в Delphi). Каждая строка этого списка имеет структуру: <tt>NNN#<значение_глобальной_переменной_NNN><tt><br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
}}<br />
<br />
+99<br />
<br />
===Функции для работы с базой данных===<br />
<br />
{{Описание функции UNIFOR<br />
|name=0<br />
|title=Выдать содержимое документа полностью в формате RTF<br />
|description=Выдать содержимое документа полностью (формат ALLl)<br />
}}<br />
0<br />
<br />
'''Примеры:'''<br />
&unifor('0')<br />
<br />
'''Результат расформатирования:'''<br />
\b #910/1:_\b0 ^YДА^PНЮАУ - каф. кримінального права\par \b #920/1:_\b0 ATHRA\par \b #210/1:_\b0 ^AТацій^BВ. Я.^GВасиль Якович^8ukr\par \b #710/1:_\b0 ^AТаций^BВ. Я.^GВасилий Яковлевич^8rus\par \b #907/1:_\b0 ^A20110301^B111\par \b #907/2:_\b0 ^A20110419^BZhukovskaya\par \b #710/2:_\b0 ^ATatsiy^BV.^8eng\par \b #907/3:_\b0 ^A20110421^BZhukovskaya\par \b #907/4:_\b0 ^A20111108^B111\par <br />
<br />
{{Описание функции UNIFOR<br />
|name=+0<br />
|title=Выдать содержимое документа полностью во внутреннем представлении<br />
|description=Выдать содержимое документа полностью (формат ALLl)<br />
}}<br />
+0<br />
<br />
'''Результат расформатирования:'''<br />
0<br />
2#0<br />
0#1<br />
910#^YДА^PНЮАУ - каф. кримінального права<br />
920#ATHRA<br />
210#^AТацій^BВ. Я.^GВасиль Якович^8ukr<br />
710#^AТаций^BВ. Я.^GВасилий Яковлевич^8rus<br />
907#^A20110301^B111<br />
907#^A20110419^BZhukovskaya<br />
710#^ATatsiy^BV.^8eng<br />
907#^A20110421^BZhukovskaya<br />
907#^A20111108^B111<br />
<br />
{{Описание функции UNIFOR<br />
|name=+@<br />
|title=Выдать содержимое документа полностью в формате JSON<br />
|versionFilename=RELEASE_2014_1.doc<br />
|versionText=2014.1<br />
|sectionLevel=====<br />
}}<br />
+@<br />
<br />
{{Описание функции UNIFOR<br />
|name=+N<br />
|title=Выдать количество повторений поля<br />
|description=Выдать количество повторений поля, метка которого указана после идентификатора функции<br />
}}<br />
+N<br />
<br />
'''Примеры:'''<br />
&unifor('+N910')<br />
<br />
{{Описание функции UNIFOR<br />
|name=A<br />
|title=Выдать заданное повторение поля<br />
}}<br />
<br />
AV<tag>^<delim>*<offset>.<length>#<occur><br />
где:<br />
* <tt><tag></tt> – метка поля;<br />
* <tt><delim></tt> – разделитель подполя;<br />
* <tt><offset></tt> – смещение;<br />
* <tt><length></tt> – длина;<br />
* <tt><occur></tt> – номер повторения.<br />
<br />
'''Примеры:'''<br />
&unifor('Av200#2')<br />
&unifor('Av910^a#5')<br />
&unifor('Av10^b*2.10#2')<br />
<br />
{{Описание функции UNIFOR<br />
|name=P<br />
|title=Выдать заданное оригинальное повторение поля<br />
|formatSeeAlsoName=A<br />
|formatSeeAlsoTitle=Выдать заданное повторение поля<br />
|exampleSeeAlsoName=A<br />
|exampleSeeAlsoTitle=Выдать заданное повторение поля<br />
}}<br />
<br />
{{Описание функции UNIFOR<br />
|name=+E<br />
|title=Возвращает порядковый номер заданного поля в записи<br />
|description=Возвращает порядковый номер заданного поля в записи. При отсутствии в записи заданного поля возвращается пустота<br />
|versionFilename=RELEASE_9_1.doc<br />
|versionText=2009.1<br />
}}<br />
<br />
+Etag#occ<br />
где:<br />
* tag – метка поля;<br />
* occ – номер повторения поля (по умолчанию – 1). Может принимать значение <tt>*</tt> – это означает номер текущего повторения в повторяющейся группе.<br />
<br />
{{Описание функции UNIFOR<br />
|name=K<br />
|title=Раскодировка через справочник<br />
|description=Возвращает значение из справочника, соответствующее переданному коду (иными словами, осуществляется раскодировка)<br />
}}<br />
<br />
K<имя_справочника><разделитель><исх_значение><br />
<br />
<разделитель> между <имя_справочника> и <исх_значение> может быть двух видов:<br />
\ - раскодировка с учетом регистра,<br />
! - раскодировка без учета регистра.<br />
<br />
'''Примеры:'''<br />
&unifor("Kjz.mnu\"v101)<br />
&uf('kFIO_SF.MNU!'&uf('av907^b#1'))<br />
<br />
{{Описание функции UNIFOR<br />
|name=I<br />
|title=Вернуть параметр из INI-файла<br />
}}<br />
<br />
I<SECTION>,<PAR_NAME>,<DE-FAULT_VALUE><br />
<br />
'''Примеры:'''<br />
&unifor('IPRIVATE,NAME,NONAME')<br />
<br />
{{Описание функции UNIFOR<br />
|name=1<br />
|title=Вернуть заданный подэлемент<br />
}}<br />
<br />
1NCXY?V<tag>^<delim>*<offset>.<length>#<occur><br />
где:<br />
* N – номер повторения подэлемента; если указана * – номер подэлемента совпадает со счетчиком повторяющейся группы.<br />
* ХY – разделители между подэлементами.<br />
* С – принимает значения: R – разделители справа от каждого подэлемента, кроме последнего; L – разделители слева от каждого подэлемента; D – каждый подэлемент заключен слева разделителем Х и справа – Y.<br />
* ? – символ-разделитель.<br />
* Остальные параметры аналогичны параметрам для функции {{Описание функции UNIFOR (ссылка)|name=A|title=Выдать заданное повторение поля}}.<br />
<br />
'''Примеры:'''<br />
(/&unifor('1*R; ?v910^h#1'))<br />
<br />
{{Описание функции UNIFOR<br />
|name=J<br />
|title=Вернуть кол-во ссылок для заданного термина<br />
}}<br />
<br />
J<dbn>,<термин><br />
<dbn> – имя БД; по умолчанию используется текущая.<br />
<br />
'''Примеры:'''<br />
&unifor('JBOOK,',"A="v200^a)<br />
<br />
{{Описание функции UNIFOR<br />
|name=D<br />
|title=Форматирование документа из другой БД<br />
|description=Форматирование документа из другой БД (REF на другую БД – отношение «от одного к одному»)<br />
}}<br />
<br />
D<dbn>,<@mfn|/termin/>,<@имя_формата|формат|*><br />
Передаются три параметра, разделенные запятой:<br />
* Первый – имя БД;<br />
* Второй – или непосредственно MFN с предшествующим символом @ или термин, ссылающийся на документ (термин – заключается в ограничительные символы);<br />
* Третий – или имя формата с предшествующим символом @ или непосредственно формат.<br />
Если задается *, данные выводятся по прямой ссылке (метка поля, номер повторения).<br />
<br />
'''Примеры:'''<br />
&unifor('DBOOK,/K=AAA/,v200')<br />
<br />
{{Описание функции UNIFOR<br />
|name=7<br />
|title=Расформатирование группы связанных документов из другой БД<br />
|description=Расформатирование группы связанных документов из другой БД (отношение «от одного к многим»)<br />
Функция обеспечивает возможность связать запись с рядом других записей по какому бы то ни было общему признаку. К примеру, можно отобрать все записи с определенным заглавие, индексом УДК/ББК, ключевым словом. <br />
|versionFilename=RELEASE_4_1.doc<br />
|versionText=2004.1<br />
}}<br />
<br />
7<имя_БД>,</termin/>,<@имя_формата|формат|*><br />
где:<br />
* имя_БД – имя базы данных, из которой будут браться связанные документы; по умолчанию используется текущая БД.<br />
* /termin/ – ключевой термин, на основе которого отбираются связанные документы; термин заключается в уникальные ограничители (например. /), в качестве которых используется символ, не входящий (гарантированно) в термин.<br />
* @имя_формата|формат|* – имя формата или формат в явном виде, в соответствии с которым будут расформатироваться связанные документы. Если задается имя формата, то он берется из директории БД, заданной параметром <имя_БД>. Если задается *, данные выводятся по прямой ссылке (метка поля, номер повторения).<br />
<br />
'''Примеры:'''<br />
&unifor('7TEST,',"/T="v200^a"/",',v903"\par "')<br />
<br />
&uf(|7EK,!FAK=23.01!,&uf('av907^A#1'),&uf('6brief')/|d90),<br />
<br />
{{Описание функции UNIFOR<br />
|name=!<br />
|title=Команда постредактуры: очистить результат расформатирования от двойных разделителей<br />
|description=Команда постредактуры: очистить результат расформатирования от двойных разделителей (двойных точек или двойных конструкций <. – >). Имеет смысл использовать один раз в любом месте формата<br />
|versionFilename=RELEASE_4_1.doc<br />
|versionText=2004.1<br />
}}<br />
<br />
!<br />
<br />
'''Примеры:'''<br />
&unifor('!')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+F<br />
|title=Команда постредактуры: очистить результат расформатирования от RTF-конструкций<br />
|description=Команда постредактуры: очистить результат расформатирования от RTF-конструкций. Имеет смысл использовать один раз в любом месте формата<br />
|versionFilename=RELEASE_4_1.doc<br />
|versionText=2004.1<br />
}}<br />
<br />
+F<br />
<br />
'''Примеры:'''<br />
&unifor('+F')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1O<br />
|title=Групповая мультираскодировка списка<br />
}}<br />
<br />
+1O<MNU>|SSSS<br />
где:<br />
* <MNU> имя справочника (с расширением).<br />
* SSSS – список строк (результат расформатирования.<br />
<br />
'''Примеры:'''<br />
&unifor('+1Omhr.mnu|',(v910^m/))<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1I<br />
|title=Исключение неоригинальных значений из списка<br />
}}<br />
<br />
+1ISSSS<br />
где параметры аналогичны описанным для функции {{Описание функции UNIFOR (ссылка)|name=+1O|title=Групповая мультираскодировка списка}}<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1V<br />
|title=Сортировка списка<br />
}}<br />
<br />
+1VSSSS<br />
где параметры аналогичны описанным для функции {{Описание функции UNIFOR (ссылка)|name=+1O|title=Групповая мультираскодировка списка}}<br />
<br />
{{Описание функции UNIFOR<br />
|name=+I<br />
|title=Формирования ссылки (гиперссылки)<br />
|versionFilename=RELEASE_4_1.doc<br />
|versionText=2004.1<br />
}}<br />
<br />
+I/содержание_ссылки/название_ссылки<br />
'''/содержание_ссылки/''' – внутренние данные ссылки, ограниченные уникальным разделителем. Имеют структуру<br />
NNN,HHH,<параметры><br />
где:<br />
* NNN – тип ссылки, возможные значения: <br />
** 0 – ссылки на внешние объекты;<br />
** 1 – ссылка на связанный документ (возможно в другой БД) – "от одного к одному";<br />
** 2 – ссылка на связанные документы (возможно в другой БД) – "от одного к многим";<br />
* HHH – экранная подсказка, может иметь вид: @iii – где <tt>iii</tt> – номер текста в файле IRBISMSG.TXT, \text\ – собственно текст подсказки в уникальных ограничителях.<br />
'''<параметры>''':<br />
* Для ссылок типа 0 представляет собой в общем виде URL внешнего объекта (в том числе – полный путь на файл).<br />
* Для ссылок типа 1 и 2 <параметры> имеют следующую структуру:<br />
имя_БД,имя_формата,termin<br />
где:<br />
* имя_БД – имя базы данных, из которой будут браться связанные документы; по умолчанию используется текущая БД.<br />
* имя_формата – имя формата, в соответствии с которым будут расформатироваться связанные документы. (по умолчанию – используется оптимизированный формат).<br />
* termin – ключевой термин, на основе которого отбираются (ищутся) связанные документы.<br />
<br />
<br />
'''Примеры:'''<br />
&unifor('+I?0,,'v951^i'?',v951^t,|INTERNET|n951^t)<br />
&unifor(|+I?1,,,,I=|v421^w|?|,v421^a)<br />
<br />
{{Описание функции UNIFOR<br />
|name=+6<br />
|title=Выдать статус записи<br />
|description=Выдать статус записи. Если запись логически удаленная, возвращается 0, в противном случае – 1<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+6<br />
<br />
'''Примеры:'''<br />
… if &unifor('+6')='0' then 'запись логически удаленная' fi …<br />
<br />
{{Описание функции UNIFOR<br />
|name=+D<br />
|title=Выдать имя базы данных<br />
|description=Возвращает имя текущей базы данных<br />
}}<br />
<br />
+D<br />
<br />
'''Примеры:'''<br />
… &unifor('+D') …<br />
<br />
{{Описание функции UNIFOR<br />
|name=2<br />
|title=Вернуть количество записей в базе +1 <br />
|description=Возвращает количество записей в текущей базе данных, увеличенное на единицу (MAX_MFN) + 1). В общем случае параметр имеет вид 2N, где N - выводимое количество символов, обрезанное до необходимой длинны справа.<br />
}}<br />
<br />
'''Пример:'''<br />
&unifor('2'), &unifor('27')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9V<br />
|title=Вернуть номер поколения ИРБИС<br />
|description=Возвращает поколение системы, в которой осуществляется расформатирование. Может быть полезен при разработке единых форматов, которые по-разному выполняются в ИРБИС 32 и ИРБИС 64<br />
|versionFilename=RELEASE_11_1.doc<br />
|versionText=2011.1<br />
}}<br />
<br />
+9V<br />
который возвращает:<br />
* 32 – если форматирование выполняется в ИРБИС 32;<br />
* 64 – если в ИРБИС 64 (и ИРБИС 128).<br />
<br />
{{Описание функции UNIFOR<br />
|name=4N<br />
|title=Форматировать предыдущую копию текущей записи<br />
|versionFilename=RELEASE_11_1.doc<br />
|versionText=2011.1<br />
}}<br />
<br />
4N,Format<br />
где: <br />
* <tt>N</tt> – номер копии (в обратном порядке, т.е. если N=1 – это один шаг назад, N=2 – два шага назад и т.д.). Может принимать значение * – это указывает на последнюю копию. Если N – пустое значение, то в случае повторяющейся группы в качестве значения N берется НОМЕР ТЕКУЩЕГО ПОВТОРЕНИЯ, в противном случае берется первая копия;<br />
* <tt>Format</tt> – формат; может задаваться непосредственно или в виде @имя_формата.<br />
<br />
Если не задается ни <tt>N</tt> ни <tt>Format</tt>, т.е. &unifor('4'), то возвращается количество предыдущих копий. <br />
Если запись не имеет предыдущих копий, то &unifor('4') возвращает 0, а все остальные конструкции &unifor('4...') возвращают пустоту.<br />
<br />
'''Примеры:'''<br />
&unifor('41,@brief') <br />
(...&unifor('4,v200^a')...) <br />
&unifor('4*,(v910/)')<br />
<br />
Примечание: в связи с этим см. также новую команду глобальной корректировки – ВОССТАНОВИТЬ ПРЕДЫДУЩУЮ КОПИЮ.<br />
<br />
===Функции для работы с повторяющимися группами===<br />
<br />
Дополнительно о повторяющихся группах см. [[Язык форматирования системы ИРБИС#Повторяющиеся группы|в подразделе ''Повторяющиеся группы'' статьи ''Язык форматирования системы ИРБИС'']].<br />
<br />
{{Описание функции UNIFOR<br />
|name=+4<br />
|title=Выдача метки, порядкового номера и значения поля в соответствии с индексом (номером повторения) повторяющейся группы<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+4XY <br />
где:<br />
* Х принимает три значения: T – выдать метку; F – выдать значение поле; N – выдать порядковый номер поля в записи (отличается от индекса повторения, если Y принимает значение 1); <br />
* Y принимает значения: 0 – поля выдаются в порядке расположения в записи; 1 – поля выдаются в порядке возрастания меток (по умолчанию 0).<br />
<br />
'''Примеры:'''<br />
(…&unifor('+4T1'),'_' &unifor('+4N1'),': ', &unifor('+4F1'),'<br>'…)<br />
<br />
{{Описание функции UNIFOR<br />
|name=+5<br />
|title=Выдача элемента списка/справочника в соответствии с индексом (номером повторения) повторяющейся группы<br />
|versionFilename=RELEASE_5_2.doc<br />
|versionText=2005.2<br />
}}<br />
<br />
+5Х<имя_справочника/списка> <br />
где Х принимает значения: Т – выдать значение; F – выдать пояснение (имеет смысл, если задается справочник, т.е. файл с расширением MNU).<br />
<br />
'''Примеры:'''<br />
…(…&unifor('+5Tfield.mnu'),' – ',&unifor('+5Ffield.mnu'),'<br>'…)<br />
<br />
{{Описание функции UNIFOR<br />
|name=+90<br />
|title=Вернуть номер текущего повторения в повторяющейся группе<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
}}<br />
<br />
+90<br />
<br />
===Функции для работы с базой данных электронного каталога===<br />
<br />
{{Описание функции UNIFOR<br />
|name=B<br />
|title=Выдать библиографическую свертку документа<br />
}}<br />
<br />
B<br />
<br />
'''Примеры:'''<br />
&unifor('B')<br />
<br />
{{Описание функции UNIFOR<br />
|name=C<br />
|title=Контроль ISSN/ISBN<br />
|description=Контроль ISSN/ISBN. Возвращаемое значение: 0 – при положительном результате, 1 – при отрицательном<br />
}}<br />
<br />
С<ISSN/ISBN><br />
<br />
'''Примеры:'''<br />
&unifor("C"v10^a)<br />
<br />
{{Описание функции UNIFOR<br />
|name=L<br />
|title=Вернуть окончание термина<br />
}}<br />
<br />
L<начало_термина><br />
<br />
'''Примеры:'''<br />
&unifor("L"v101)<br />
<br />
{{Описание функции UNIFOR<br />
|name=U<br />
|title=Кумуляция номеров журналов<br />
}}<br />
<br />
U<strbase>,<stradd><br />
где:<br />
* <strbase> – исходная кумулированная строка.<br />
* <stradd> – кумулируемые номера.<br />
<br />
'''Примеры:'''<br />
&unifor("U"v909^h",12")<br />
<br />
{{Описание функции UNIFOR<br />
|name=V<br />
|title=Декумуляция номеров журналов<br />
}}<br />
<br />
V<strbase><br />
где:<br />
<strbase> – исходная строка для декумуляции.<br />
<br />
'''Примеры:'''<br />
&unifor("V"v909^h")<br />
<br />
{{Описание функции UNIFOR<br />
|name=W<br />
|title=Контроль кумуляции<br />
}}<br />
<br />
W<strbadd>,<strbase><br />
где:<br />
* <strbase> – исходная кумулированная строка.<br />
* <stradd> – кумулируемый номер.<br />
'''Возвращаемые значения:'''<br />
* 0 – если <stradd> не присутствует в <strbase>.<br />
* 1 – если <stradd> присутствует в <strbase>.<br />
<br />
'''Примеры:'''<br />
&unifor("W12,"v909^h)<br />
<br />
{{Описание функции UNIFOR<br />
|name=O<br />
|title=Вывод сведений о всех экземплярах по всем местам хранения<br />
}}<br />
<br />
'''Пример:'''<br />
&unifor('O')<br />
<br />
<br />
{{Описание функции UNIFOR<br />
|name=Y<br />
|title=Возвращает данные о всех свободных (не выданных) экземплярах по всем местах хранения<br />
}}<br />
<br />
'''Пример:'''<br />
&unifor('Y')<br />
<br />
===Функции для работы с файлами===<br />
<br />
{{Описание функции UNIFOR<br />
|name=+91<br />
|title=Вернуть имя файла из заданного полного пути/имени<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
}}<br />
<br />
+91<br />
<br />
{{Описание функции UNIFOR<br />
|name=+92<br />
|title=Вернуть путь из заданного полного пути/имени<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
}}<br />
<br />
+92<br />
<br />
{{Описание функции UNIFOR<br />
|name=+93<br />
|title=Вернуть расширение из заданного полного пути/имени<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
}}<br />
<br />
+93<br />
<br />
{{Описание функции UNIFOR<br />
|name=+94<br />
|title=Вернуть имя диска из заданного полного пути/имени<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
}}<br />
<br />
+94<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9L<br />
|title=Проверить наличие файла/корректность URL<br />
|versionFilename=RELEASE_13_1.doc<br />
|versionText=2013.1<br />
}}<br />
<br />
+9L<path>,<dbname>,<filename><br />
где:<br />
* <tt><path></tt> – определяет путь к файлу и принимает значения: <tt>0</tt> – папка, в которой установлена серверная часть ИРБИС (<tt><IRBIS_SERVER_ROOT></tt>); <tt>1</tt> – общая директория баз данных (по умолчанию <tt><IRBIS_SERVER_ROOT>\DATAI</tt>); <tt>2,3,10</tt> – папка БД <dbname>; <tt>11</tt> – абсолютный путь/URL.<br />
* <tt><dbname></tt> – имя БД (имеет смысл только при <tt>path=2,3,10</tt>).<br />
* <tt><filename></tt> – путь и имя файла или URL.<br />
<br />
Функция возвращает:<br />
0 – если файл отсутствует/некорректный URL;<br />
1 – если файл присутствует/корректный URL.<br />
<br />
'''Примеры:'''<br />
&uf('+9L1,,\deposit\rksu.fst') <br />
(....&uf('+9L10,',&uf('+D'),',',v951^A)....)<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9C<br />
|title=Вставить данные из заданного текстового файла<br />
}}<br />
<br />
+9С<path>,<dbname>,<filename><br />
где:<br />
* <tt><path></tt> – определяет путь к файлу и принимает значения: <tt>0</tt> – основная директория системы (для ИРБИС32 – та, где находятся исполняемые модули; для ИРБИС64 – та, где находятся исполняемые модули сервера); <tt>1</tt> – общая директория баз данных (по умолчанию \DATAI); <tt>10</tt> – директория конкретной БД;<br />
* <tt><dbname></tt> – имя БД (имеет смысл только при <tt>path=10</tt>). По умолчанию – предполагается текущая БД;<br />
* <tt><filename></tt> – имя файла;<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9A<br />
|title=Вернуть размер файла в байтах. <br />
}}<br />
<br />
+9A<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9D<br />
|title=Сохранить заданный внутренний двоичный объект в заданном файле<br />
|versionFilename=RELEASE_6_2.doc<br />
|versionText=2006.2<br />
}}<br />
<br />
+9DNN#<полный путь><br />
где <tt>NN</tt> – номер внутреннего двоичного объекта.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9J<br />
|title=Представить заданный двоичный файл в кодированном виде<br />
|description=Представить заданный двоичный файл в виде: <tt>^A<тип_файла>^B<данные файла перекодированные на основе URLEncode></tt><br />
|versionFilename=RELEASE_10_1.doc<br />
|versionText=2010.1<br />
}}<br />
<br />
+9J<полный путь и имя файла><br />
<br />
Имя файла может задаваться в виде маски, в этом случае использоваться будет первый найденный соответствующей маске файл.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+9K<br />
|title=Удалить заданный файл<br />
|description=Удалить заданный файл. Если имя файла задано в виде маски, то удаляться будут все соответствующие маске файлы<br />
|versionFilename=RELEASE_10_1.doc<br />
|versionText=2010.1<br />
}}<br />
<br />
+9K<полный путь и имя файла><br />
<br />
===Функции, используемые только в глобальной корректировке===<br />
<br />
{{Описание функции UNIFOR<br />
|name=Z<br />
|title=Размножение экземпляров<br />
|description=Размножение экземпляров. Функция ничего не возвращает. Можно применять только в глобальной корректировке<br />
}}<br />
<br />
Z<br />
<br />
'''Примеры:'''<br />
&unifor('Z')<br />
<br />
{{Описание функции UNIFOR<br />
|name=M<br />
|title=Отсортировать повторения заданного поля<br />
|description=Отсортировать повторения заданного поля (имеется в виду строковая сортировка) – функция ничего не возвращает. Можно применять только в глобальной корректировке<br />
}}<br />
<br />
MX<tag>^<delims><br />
где:<br />
* X – вид сортировки: I – по возрастанию; D – по убыванию.<br />
* <tag> – метка поля.<br />
* <delims> – разделители подполей, определяющих ключ сортировки.<br />
<br />
'''Примеры:'''<br />
&unifor('MI910^BD')<br />
<br />
===Выполнить внешнюю программу===<br />
<br />
{{Описание функции UNIFOR<br />
|name=6<br />
|title=Выполнить формат<br />
}}<br />
<br />
6<имя файла формата><br />
где <tt><имя файла формата></tt> – имя [[Язык форматирования системы ИРБИС#Понятие формата|файла формата]], указывается без расширения. Файл формата будет найден по заданному имени, обязательному расширению <tt>.pft</tt> и местоположению: в [[Файлы ИРБИС#Файлы баз данных ИРБИС|папке базы данных]], а если там нет, то в папке [[Файлы ИРБИС#Основные обозначения|<tt><IRBIS_SERVER_ROOT>\Deposit</tt>]].<br />
<br />
Альтернативным способом выполнения файла форматов является использование [[Язык форматирования системы ИРБИС#Вложенные форматы|вложенных форматов]].<br />
<br />
{{Описание функции UNIFOR<br />
|name=+2<br />
|title=Выполнить внешнее приложение<br />
|description=Выполняет внешнее приложение. Всё, что после +2 – параметры командной строки. <br />
}}<br />
<br />
'''Примеры:'''<br />
&unifor('+2cmd')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+8<br />
|title=Вызвать функцию из внешней DLL<br />
|versionFilename=RELEASE_6_1.doc<br />
|versionText=2006.1<br />
}}<br />
<br />
+8<имя_DLL>,<имя_функции>,<передаваемые_данные><br />
<br />
Внешние функции должны ОБЯЗАТЕЛЬНО иметь следующую структуру:<br />
<br />
* в случае Pascal<br />
test_function1(buf1,buf2: Pchar; bufsize: integer): integer; <br />
<br />
* в случае C<br />
int test_function1(char *buf1, char *buf2, int bufsize) <br />
где: buf1 – передаваемые данные (входные), buf2 – возвращаемые данные (выходные), bufsize – размер выходного буфера (buf2). В ИРБИС64 данные передаются и возвращаются в UTF8. Возврат функции: 0 – нормальное завершение; любое другое значение – ненормальное. В случае нестандартного вызова функций из DLL (по Pascal-правилам) надо указывать символ * перед именем DLL:<br />
&unifor('+8*<имя_DLL>,<имя_функции>,.... <br />
<br />
Следует помнить, что имя функции в вызове надо указывать строго в соответствии с тем, как она экспортирована из DLL, большие и маленькие буквы различаются.<br />
<br />
'''Примеры:'''<br />
<br />
В вызываемую функцию передается заглавие:<br />
&unifor('+8test_dll,test_function1,',v200^a)<br />
<br />
Передаются повторения 910 поля:<br />
(&unifor('+8test_dll,test_function2,',v910))<br />
<br />
Передается вся текущая запись:<br />
(&unifor('+8test_dll,test_function2,',&unifor('+0')))<br />
<br />
===Функции, не вошедшие в другие категории===<br />
<br />
{{Описание функции UNIFOR<br />
|name=S<br />
|title=Универсальный счетчик<br />
}}<br />
<br />
SN<br />
где:<br />
* N=0 – обнулить счетчик.<br />
* N=1..9 – увеличить значение счетчика на со-отв. значение.<br />
* N=A – вернуть значение счетчика – арабскими цифрами.<br />
* N=X – вернуть значение счетчика – римскими цифрами.<br />
<br />
'''Примеры:'''<br />
&unifor('S0')<br />
&unifor('S1')<br />
&unifor('SA')<br />
<br />
{{Описание функции UNIFOR<br />
|name=R<br />
|title=Генерация случайного числа<br />
}}<br />
<br />
RNN<br />
где NN – кол-во знаков в случайном числе (по умолчанию – 6).<br />
<br />
'''Примеры:'''<br />
&unifor('R')<br />
&unifor('R4')<br />
<br />
{{Описание функции UNIFOR<br />
|name=[<br />
|title=Чистка данных от команд контекстного выделения<br />
|versionFilename=RELEASE_8_1.doc<br />
|versionText=2008.1<br />
}}<br />
<br />
[<br />
<br />
'''Примеры:'''<br />
&unifor('[')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+3G<br />
|title=<nowiki>Вывод количества документов, найденных во внешней базе по команде G.(команда возвращает строку RESULT=[кол-во найденных по запросу документов])</nowiki><br />
}}<br />
<br />
+3G[URL к внешнему сайту WEB ИРБИС, с запросом G]<br />
<br />
{{Описание функции UNIFOR<br />
|name=+3S<br />
|title=<nowiki>Расформатирует найденные по запросу записи. Если [количество выводимых записей]=0, то возвращает только количество найденных по запросу документов</nowiki><br />
}}<br />
<br />
+3S[имя базы],[количество выводимых записей],[ограничитель][формат][ограничитель],[формат или @имя файла с форматом]<br />
<br />
{{Описание функции UNIFOR<br />
|name=+3C<br />
|title=Функция введена для оптимизации скорости проверки наличия текста в полнотекстовой базе данных<br />
|description=Функция предназначена для обрезания перед помещением в словарь базы данных значения, формируемого путём соединения префикса <tt>TXT=</tt> и содержимого подполя ^B ссылки на текстовый файл полнотекстовой базы. Подробнее см. [[Схема полнотекстовой базы данных#Префикс TXT| в подразделе ''Префикс TXT'' статьи ''Схема полнотекстовой базы данных'']]<br />
|versionFilename=RELEASE_13_1.doc<br />
|versionText=2013.1<br />
}}<br />
<br />
==Устаревшие, не рекомендованные к использованию UNIFOR'ы==<br />
<br />
===Устаревшие функции для работы с глобальными переменными===<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1<br />
|title=Очистить (опустошить) все глобальные переменные<br />
}}<br />
<br />
+1<br />
<br />
'''Примеры:'''<br />
&unifor('+1')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1R<br />
|title=Чтение глобальных переменных<br />
|versionFilename=RELEASE_4_1.doc<br />
|versionText=2004.1<br />
}}<br />
<br />
+1RNNN,nnn<br />
где:<br />
* NNN – номер первой или единственной переменной, возможна конструкция *+-<число>. * – номер текущего повторения в повторяющейся группе.<br />
* nnn – кол-во переменных (по умолчанию 1).<br />
<br />
<br />
'''Примеры:'''<br />
&unifor('+1R100,2')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1W<br />
|title=Запись в глобальные переменные<br />
|versionFilename=RELEASE_4_1.doc<br />
|versionText=2004.1<br />
}}<br />
<br />
+1WNNN,MMM#SSSS<br />
где:<br />
* NNN – номер первой или единственной переменной, возможна конструкция *+-<число>. * – номер текущего повторения в повторяющейся группе.<br />
* MMM – номер переменной для сохранения кол-ва записанных переменных (по умолчанию не используется).<br />
* SSSS – список строк (результат расформатирования). Если задан MMM – каждая строка пишется в отдельную переменную, в противном случае все пишется в одну переменную.<br />
<br />
'''Примеры:'''<br />
&unifor('+1W100,0#',(v910/))<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1K<br />
|title=Групповая мультираскодировка переменных<br />
}}<br />
<br />
+1K<MNU>|NNN,nnn<br />
где:<br />
* NNN – номер первой или единственной переменной.<br />
* nnn – кол-во переменных (по умолчанию 1).<br />
<br />
'''Примеры:'''<br />
&unifor('+1Kmhr.mnu|100,10')<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1M<br />
|title=Перемножение двух списков (групп переменных)<br />
}}<br />
<br />
+1MNNN,nnn#MMM,mmm<br />
где параметры аналогичны описанным для функции {{Описание функции UNIFOR (ссылка)|name=+1K|title=Групповая мультираскодировка переменных}}.<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1S<br />
|title=Вычитание списков (групп переменных)<br />
}}<br />
<br />
+1SNNN,nnn#MMM,mmm<br />
где параметры аналогичны описанным для функции {{Описание функции UNIFOR (ссылка)|name=+1K|title=Групповая мультираскодировка переменных}}<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1A<br />
|title=Сложение списков (групп переменных)<br />
}}<br />
<br />
+1ANNN,nnn#MMM,mmm<br />
где параметры аналогичны описанным для функции {{Описание функции UNIFOR (ссылка)|name=+1K|title=Групповая мультираскодировка переменных}}<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1G<br />
|title=Исключение неоригинальных значений из группы переменных<br />
}}<br />
<br />
+1GNNN,nnn<br />
где параметры аналогичны описанным для функции {{Описание функции UNIFOR (ссылка)|name=+1K|title=Групповая мультираскодировка переменных}}<br />
<br />
{{Описание функции UNIFOR<br />
|name=+1T<br />
|title=Сортировка группы переменных<br />
}}<br />
<br />
+1TNNN,nnn<br />
где параметры аналогичны описанным для функции {{Описание функции UNIFOR (ссылка)|name=+1K|title=Групповая мультираскодировка переменных}}<br />
<br />
==Неописанные UNIFOR'ы==<br />
<br />
<br />
<br />
{{Описание функции UNIFOR<br />
|name=Неописанный UNIFOR &unifor('11R^c?v210*2')<br />
|title=<br />
|versionFilename=<br />
|versionText=<br />
|sectionLevel======<br />
}}<br />
<br />
<br />
<br />
{{Описание функции UNIFOR<br />
|name=Неописанный UNIFOR &umarci('1200#h#2')<br />
|title=<br />
|versionFilename=<br />
|versionText=<br />
|sectionLevel======<br />
}}<br />
<br />
<br />
<br />
{{Описание функции UNIFOR<br />
|name=Неописанный UNIFOR &umarci('2210#^c')<br />
|title=<br />
|versionFilename=<br />
|versionText=<br />
|sectionLevel======<br />
}}<br />
<br />
<br />
{{Описание функции UNIFOR<br />
|name=Неописанный UNIFOR &umarci('3210#2#^c')<br />
|title=<br />
|versionFilename=<br />
|versionText=<br />
|sectionLevel======<br />
}}<br />
<br />
==Ссылки==<br />
<br />
См. также:<br />
* [[Язык форматирования системы ИРБИС]]<br />
* [[Операторы языка форматирования ИРБИС]]<br />
* [[Функции языка форматирования ИРБИС]]<br />
<br />
Источники информации:<br />
* [[Общее описание системы ИРБИС64]]<br />
* ''Техническая документация WEB ИРБИС64 и WEB ИРБИС32''. [http://irbis.gpntb.ru/read.php?21,62125 Актуальная версия документа доступна на форуме.]<br />
* [[Документация, поставляемая с системой ИРБИС#История версий ИРБИС|История версий ИРБИС (файл <tt>RELEASE_OVERALL.doc</tt>)]] версии 2008.1<br />
* {{Ссылка на открытый FTP|filename=RELEASE_13_1.doc|text=Файл описания релиза 2009.1}}<br />
* {{Ссылка на открытый FTP|filename=RELEASE_13_1.doc|text=Файл описания релиза 2010.1}}<br />
* {{Ссылка на открытый FTP|filename=RELEASE_13_1.doc|text=Файл описания релиза 2011.1}}<br />
* {{Ссылка на открытый FTP|filename=RELEASE_13_1.doc|text=Файл описания релиза 2013.1}}<br />
<br />
[[Категория:Язык форматирования системы ИРБИС]]<br />
[[Категория:Анонсированные статьи]]</div>Sokvhttp://wiki.elnit.org/index.php?title=%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F_%D0%92%D0%B5%D0%B1-%D0%98%D0%A0%D0%91%D0%98%D0%A1&diff=2437Технология Веб-ИРБИС2015-09-08T15:45:20Z<p>Sokv: </p>
<hr />
<div>Технология '''''Веб-ИРБИС''''' служит для создания Веб-приложений для работы с базами данных ИРБИС.<br />
<br />
Данная технология реализована в виде одноимённого [[Веб-ИРБИС|'''''программного продукта – Веб-ИРБИС''''']].<br />
<br />
==Веб-шлюз ИРБИС==<br />
<br />
Программный модуль ''Веб-шлюз ИРБИС'' обеспечивает обработку клиентских запросов.<br />
<br />
''Веб-шлюз ИРБИС'' является шлюзом CGI.<br />
<br />
Запрос может осуществляться по методу POST или GET.<br />
<br />
===Общая схема работы Веб-шлюза ИРБИС===<br />
<br />
Последовательность операций шлюза:<br />
* Чтение параметров INI файла<br />
* Препроцессинг<br />
** Формальный контроль правильности параметров<br />
** Интерпретация поискового запроса<br />
** Авторизация<br />
** Выполнение скрипта защиты<br />
** Повторная авторизация<br />
* Выполнение поиска<br />
* Формирование ответа (объединение и обработка фреймов)<br />
* Определение HTTP заголовков на основе INI файла<br />
* Возврат ответа<br />
<br />
В случае возникновения ошибки выполнения или превышения времени обработки запроса шлюз возвращает ошибку (error.html).<br />
<br />
====Препроцессинг====<br />
<br />
=====Скрипт-защита=====<br />
<br />
Формат скрипта защиты выполняет две функции: 1) проверку поступивших параметров запроса и защиту от взлома 2) обработку и дополнение параметров.<br />
<br />
Первая строка, сформированная форматом срипт-защиты, определяет общий результат – если это 0 или файлом не было возвращено никаких значений – скрипт-защита определила ошибку, если результат 1 или файлом были возвращены другие ненулевые значения – ошибки нет. В первом случае шлюз возвращает error.html, в последнем случае шлюз читает остальные строки формата и изменяет параметры запроса на новые.<br />
<br />
Например, строка ‘SCRIPT_DONE=YES’/ задаёт параметру SCRIPT_DONE значение YES.<br />
<br />
=====Авторизация пользователя=====<br />
<br />
Авторизация даёт возможность заказывать литературу, просматривать формуляр и редактировать корзину заказов.<br />
<br />
Для авторизации используется база RDR. Авторизация происходит по идентификатору и, если в пользовательском запросе задан параметр Z21FLAGID=1, – по фамилии. После авторизации шлюз выполняет шифрование идентификатора, и зашифрованный идентификатор передаётся при переходе по страницам.<br />
<br />
====Инициализация параметров====<br />
<br />
После поступления клиентского запроса осуществляется инициализация параметров веб-шлюза на основе параметров CGI.<br />
<br />
Обрабатываемый шлюзом набор параметров определяется конфигурационным файлом Веб-шлюза ИРБИС.<br />
<br />
Эти параметры доступны в контексте фреймов.<br />
<br />
Параметры используются, в том числе, для отслеживания состояния веб-страницы. В ответ на HTTP-запрос клиента (обычно – в генерируемую html-страницу, передаваемую клиенту) может включить набор пользовательских параметров вместе с их значениями, полученными в запросе, для чего есть специальная команда.<br />
<br />
Отслеживание состояния осуществляется с использованием следующих этапов: 1) данные передаются на веб-шлюз в виде параметров запроса; 2) веб-шлюз передаёт данные вместе со сформированной страницей в скрытых полях форм HTML.<br />
<br />
====Выполнение команды====<br />
<br />
Затем шлюз переходит к выполнению команды. Команда соответствует переданному параметру C21COM.<br />
<br />
В контексте выполнения команды используются полученные параметры.<br />
<br />
Для каждой команды есть набор '''основных параметров''', логика использования которых предопределена самим веб-шлюзом.<br />
<br />
К основным параметрам шлюза относятся:<br />
* <tt>C21COM</tt> – команда, которую должен выполнить веб-шлюз.<br />
* <tt>I21DBN</tt> – имя [[Профили|профиля]]. Веб-шлюз ИРБИС в соответствии с именем профиля определяет набор [[Фреймы|фреймов]], из которых составит ответ клиенту. Веб-шлюз ИРБИС ищет названия фреймов в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файле irbis_server.ini]] в секции, название которой соответствует значению параметра <tt>I21DBN</tt> (подробнее в разделе [[#Роль фреймов в работе веб-шлюза ИРБИС|Роль фреймов в работе веб-шлюза ИРБИС]]).<br />
* <tt>P21DBN</tt> – имя базы данных.<br />
* <tt>Z21ID</tt> – значение параметра авторизации.<br />
<br />
Кроме '''основных''', есть '''пользовательские параметры''' – все остальные параметры.<br />
<br />
Особенность пользовательских параметров в том, что их набор и использование полностью могут быть определены (переопределены) пользователями системы ИРБИС:<br />
* Определение параметров даётся в конфигурационном файле Веб-шлюза ИРБИС.<br />
* Параметры доступны в виде виртуальных полей на языке форматирования в контексте фреймов.<br />
<br />
====Ответ веб-шлюза ИРБИС клиенту====<br />
<br />
Порядок формирования ответа веб-шлюза ИРБИС клиенту зависит от команды.<br />
<br />
=====Ответ с использованием фреймов=====<br />
<br />
Для команд, представленных в таблице, осуществляется генерация ответа с использованием технологии выбора и обработки фреймов.<br />
<br />
Обычно это динамически формируемая веб-страница.<br />
<br />
'''Таблица.''' Команды веб-шлюза ИРБИС.<br />
{|<br />
|<br />
{| class="standard"<br />
!Значение параметра <tt>C21COM</tt>||Описание команды||Соответствующий параметр в <tt>irbis_server.ini</tt><br />
|-<br />
|'''F'''||'''''показ''''' – команда показа страницы||ShowFrames<br />
|-<br />
|'''S'''||'''''поиск''''' – команда выполнения и показа результатов поиска||SearchFrames<br />
|-<br />
|'''T'''||'''''словарь''''' – команда показа терминов словаря||DictionryFrames<br />
|-<br />
|'''Z'''||'''''заказ''''' – команда отбора записей в корзину заказов||ZakazFrames<br />
|-<br />
|'''R'''||'''''запись''''' – команда редактуры записей||RecUpdateFrames<br />
|}<br />
|}<br />
<br />
Выбор набора фреймов зависит от: команды (параметр C21COM) и профиля (параметр I21DBN).<br />
<br />
Возможные наборы фреймов предварительно сконфигурированы и указаны в конфигурационном файле <tt>irbis_server.ini</tt>.<br />
<br />
Откуда шлюз и считывает нужный набор, в зависимости от параметров (C21COM и I21DBN).<br />
<br />
Каждой команде веб-шлюза ИРБИС соответствует имя параметра в файле <tt>irbis_server.ini</tt> (см. таблицу ''Команды веб-шлюза ИРБИС'').<br />
<br />
=====Отправка клиенту ресурсного файла=====<br />
<br />
Для команд, представленных в таблице, отправка клиенту ресурсного файла.<br />
<br />
'''Таблица.''' Команды веб-шлюза ИРБИС.<br />
{|<br />
|<br />
{| class="standard"<br />
!Значение параметра <tt>C21COM</tt>||Описание команды<br />
|-<br />
|'''E'''||'''''экспорт''''' – команда выгрузки записей<br />
|-<br />
|'''2'''||'''''файл''''' – команда чтения внешнего объекта<br />
|-<br />
|'''4'''||'''''скачать''''' – команда заимствования записи<br />
|}<br />
|}<br />
<br />
===Команда поиска – S===<br />
<br />
'''Пример поиска всех страниц одного текста PDF'''<br />
<br />
Здесь мы предполагаем, что:<br />
* Работаем в контексте базы данных IBIS.<br />
* Поисковое выражение <tt>TXT=2__$</tt> позволяет найти все страницы файла <tt>2.pdf</tt>.<br />
<br />
Чтобы создать произвольный запрос, не связанный с существующим функционалом системы, можно создать новый профиль EXAMPLE1. Для этого в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|конфигурационном файле веб-шлюза ИРБИС irbis server.ini]] нужно добавить секцию EXAMPLE1<br />
[EXAMPLE1]<br />
FRAMES=C:\irbis\irbis_plus\IRBIS64\DATAI\frames_15_plus\FullText\<br />
ShowFrames=<br />
SearchFrames=RESULT<br />
DBNAME=IBIS<br />
где значение параметра FRAMES должно соответствовать местонахождению фреймов.<br />
<br />
Для команды поиска порядок формирования ответа определяется параметром SearchFrames. И запись<br />
SearchFrames=RESULT<br />
означает, что при формировании Веб-шлюзом ответа на команду поиска не участвуют фреймы, участвует только формат, который будет указан в запросе.<br />
<br />
В качестве этого формата предлагается создать файл '''<tt>example1.pft</tt>''' со следующим содержимым<br />
<nowiki>mfn,/,</nowiki><br />
Этот формат выводит список MFN найденных записей.<br />
<br />
Теперь всё готово, чтобы выполнить запрос<br />
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<br />
<br />
В основных полях мы указываем команду поиска (S), базу данных IBIS, профиль EXAMPLE1, идентификатор пользователя.<br />
<br />
Поле S21All содержит запрос на языке запросов ИРБИС. Если его декодировать из кодировки URL, то он будет выглядеть так<br />
<nowiki>S21All=<.>TXT=2__$<.></nowiki><br />
где точка в угловых скобках заменяет двойную кавычку, являющуюся ограничителем запроса в [[Язык запросов ИРБИС|языке запросов ИРБИС]], то есть указанный запрос следует читать как<br />
"TXT=2__$"<br />
<br />
Формат вывода найденных записей, который предлагалось подготовить выше, указан в параметре S21FMT, без расширения.<br />
<br />
Результатом выполнения этого запроса будет обещанный список mfn, например<br />
0000000002<br />
0000000006<br />
0000000013<br />
0000000018<br />
<br />
Можно усложнить запрос, ограничив вывод порцией из 2 результатов, начиная со 2-го (параметры S21CNR и S21STN)<br />
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<br />
<br />
Результатом будет<br />
0000000006<br />
0000000013<br />
<br />
Можно усложнить формат вывода найденных записей '''<tt>example1.pft</tt>''', добавив информацию о количестве найденных, а также введённых порционных ограничениях<br />
<nowiki>mfn,'; кол-во найденных = ',v1001,'; с какого номера начать = ',v2223,'; размер порции = ',v2224,/,</nowiki><br />
где 1001, 2223 и 2224 – виртуальные поля, в которые шлюз помещает данные в соответствии с [[таблицей виртуальных полей шлюза]].<br />
<br />
Все данные, которые шлюз принял в виде параметров, попадают в виртуальные поля в соответствии правилами, заданными в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файле irbis_server.ini]]. Например, параметру S21CNR соответствует метка 2224, параметру S21STN – 2223.<br />
<br />
Результатом будет<br />
0000000006; кол-во найденных = 4; с какого номера начать = 2; размер порции = 2<br />
0000000013; кол-во найденных = 4; с какого номера начать = 2; размер порции = 2<br />
<br />
В последнем примере количество найденных и данные о порции повторяются с каждым результатом поиска, что является избыточным.<br />
<br />
Такой избыточности позволяют избежать применение [[фреймов]].<br />
<br />
Создадим файл example1.frm (его местоположение должно соответствовать параметру FRAMES в профиле) со следующим содержимым<br />
<?! mfn,'; куку кол-во найденных = ',v1001,'; с какого номера начать = ',v2223,'; размер порции = ',v2224,/, ?><br />
<br />
Чтобы задействовать этот фрейм, в описании профиля можно изменить значение параметра SearchFrames следующим образом:<br />
SearchFrames=example1.frm,RESULT<br />
что следует понимать так, что шлюз вернёт результат выполнения команды поиска, составленный из:<br />
* результата выполнения фрейма example1.frm<br />
* результатов работы формата, который отработает для каждого результата поиска (обозначается словом RESULT).<br />
<br />
Кроме того, чтобы измежать дублирующихся данных, в '''<tt>example1.pft</tt>''' оставим только вывод MFN:<br />
mfn,/,<br />
<br />
Результатом будет<br />
Вывод через фрейм... 0000000001; кол-во найденных = 4; с какого номера начать = 2; размер порции = 2<br />
0000000006<br />
0000000013<br />
<br />
В данном примере вывод во фрейме 0000000001 в качестве mfn является условностью, и не несёт смысла.<br />
<br />
===Команда показа терминов словаря – T===<br />
<br />
'''Пример команды показа терминов словаря'''<br />
<br />
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&<br />
<br />
где:<br />
* <tt>C21COM=T</tt> определяет команду,<br />
* <tt>I21DBN=IBIS</tt> базу данных,<br />
* <tt>Z21ID=1500323880383212</tt> идентификатор читателя в зашифрованном виде,<br />
* <tt>T21PRF=KT=</tt> префикс словаря,<br />
* <tt>T21TRM=a</tt> – требование терминов, начинающихся на <tt>a</tt>.<br />
<br />
Пример возврата:<br />
A20040830ARUSY|1<br />
A20041017ABELY|1<br />
A20041118ARUSY|1<br />
A2H|2<br />
A540|9<br />
A54001|7<br />
A550UTILIZATION|1<br />
AACDEMY|1<br />
AASL|2<br />
AASLPUBSANDJOURNALS|2<br />
<br />
===Добавление пользовательского параметра===<br />
<br />
Добавление пользовательского параметра осуществляется в несколько шагов:<br />
* '''добавление ''пользовательского параметра'' в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файл инициализации шлюза <tt>irbis_server.ini</tt>]]'''<br />
: Необходимо добавить описание нового ''пользовательского параметра'' в настроечный файл <tt>irbis_server.ini</tt>, задав имя и метку параметра. Для этого в секции <tt>[PARAMETRS]</tt> используются ''параметры ini файла'' <tt>PARNAME_</tt> и <tt>PARTAG_</tt> (не стоит путать термины ''пользовательские параметры'' веб-шлюза и ''параметры ini файла''), где вместо знака подчёркивания ставится номер пользовательского параметра по порядку, например:<br />
PARNAME2=C21COM<br />
PARTAG2=2222<br />
: В этом примере мы видим описание второго по порядку из определённых в секции <tt>[PARAMETRS]</tt> параметров: имя параметра <tt>C21COM</tt>, метка параметра <tt>2222</tt>. Имя и метка параметров должны быть уникальными. После того как описание ''пользовательского параметра'' добавлено необходимо изменить значение параметра <tt>PARCOUNT</tt> в секции <tt>[PARAMETRS]</tt>, его значение должно быть равно порядковому номеру последнего описания ''пользовательского параметра''.<br />
: ''Примечание:'' обратите внимание, что в файле <tt>irbis_server.ini</tt> хранятся описания не только пользовательских параметров, а присутствует также описания предустановленных параметров.<br />
* '''использование в файлах <tt>.frm</tt> команд <tt><!FORMAT=INSERT_ALL_PARAMETERS></tt> и <tt><!FORMAT=INSERT_ALL_PARAMETERS_IN_QUERY></tt>'''<br />
: Команда <tt><!FORMAT=INSERT_ALL_PARAMETERS></tt> обеспечивает вставку в код HTML-страницы всех непустых переданных веб-шлюзу параметров в виде скрытых элементов формы, например:<br />
<input type="hidden" name="PARAM_NAME" value="PARAM_VALUE"><br />
: Команда <tt><!FORMAT=INSERT_ALL_PARAMETERS_IN_QUERY></tt> вставляет в код HTML-страницы гиперссылку, содержащую все переданные веб-шлюзу параметры.<br />
<br />
===Система команд Веб-шлюза ИРБИС===<br />
<br />
Система ''команд'' Веб-шлюза ИРБИС позволяет задать собственный набор фреймов и порядок их объединения для каждой задачи. Для разных задач предусмотрены разные команды, например: для страницы приглашения к поиску, результата поиска, отбора записей в корзину заказов и т.д.<br />
<br />
==Обработка фреймов==<br />
<br />
В общем случае, веб-страница формируется путём объединения (''склеивания'') следующих частей:<br />
* ''заголовочной'' и ''подвальной'' частей, формируемых при помощи ''фреймов'' и<br />
* ''тела'' страницы, формируемого при помощи [[Язык форматирования системы ИРБИС#Понятие формата|''формата'']], который отрабатывает на наборе записей базы данных (соответствующих запросу пользователя).<br />
<br />
===Фрейм как язык разметки===<br />
<br />
Фрейм представляет собой текстовый файл, содержимое которого передаётся клиенту (в веб браузер), который также может содержать вставки, которые будут обработаны определённым образом перед передачей клиенту.<br />
<br />
Предусмотрены вставки следующих видов:<br />
* вставка на языке форматирования ИРБИС,<br />
* вложенный фрейм.<br />
<br />
'''''Вставка на языке форматирования''''' обозначается следующим образом<br />
<br />
<!FORMAT<br />
<br />
'''Пример:'''<br />
<br />
<nowiki><!FORMAT=if v3409='' then 'value=""' else 'value=','"',v3409,'"',fi></nowiki><br />
<br />
Если вставка на языке форматирования содержит символы, кодирующиеся в UTF-8 более чем одним байтом (например, кириллицу), то формат обязательно должен начинаться с восклицательного знака. Это связано с тем, что формат в кодировке UTF-8 должен предваряться восклицательным знаком, а все фреймы храняться именно в кодировке UTF-8.<br />
<br />
'''Пример:'''<br />
<br />
<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><br />
<br />
Пример вложенного фрейма:<br />
<br />
<!FORMAT=if &uf('IMAIN,SHOW_DUBLIN_CORE,0') <> '0' then /'<!FILE=Dublin_Core.frm>' fi><br />
<br />
Предусмотрен '''''упрощённый синтаксис вставки на языке форматирования''''':<br />
<?!if p(v2225) then 'true' fi ?><br />
<br />
===Пример последовательности действий Веб-шлюза ИРБИС при формировании веб-страницы в ответ на запрос===<br />
<br />
Веб-шлюз ИРБИС при получении команд '''F''', '''S''', '''T''', '''Z''', '''R''' выполняет следующую последовательность действий:<br />
* Веб-шлюз получил запрос. Запрос содержит параметры <tt>C21COM</tt>, <tt>I21DBN</tt> и другие.<br />
* В файле <tt>irbis_server.ini</tt> веб-шлюз находит секцию, имя которой соответствует значению параметра <tt>I21DBN</tt>. Иными словами: с одной стороны, в качестве значения параметра <tt>I21DBN</tt> указывается имя профиля, с другой стороны, для каждого профиля в файле <tt>irbis_server.ini</tt> должна содержаться секция, имя которой совпадает с именем профиля.<br />
* В указанной секции файла <tt>irbis_server.ini</tt> веб-шлюз находит значение параметра, соответствующего указанной в параметре <tt>C21COM</tt> команде (см. таблицу ''Команды веб-шлюза ИРБИС''). Полученное значение должно представлять собой список фреймов.<br />
* Фреймы обрабатываются, и результат, представляющий собой HTML-страницу, отправляется клиенту в качестве ответа.<br />
<br />
===Примеры перехода пользователя по страницам Веб-ИРБИС===<br />
<br />
Пример запроса начальной страницы:<br />
<br />
http://localhost:8080/cgi-bin/irbis64r_15_plus/cgiirbis_64_ft.exe?C21COM=F&I21DBN=IBIS_FULLTEXT&P21DBN=IBIS&Z21ID=&S21CNR=5<br />
<br />
где указаны:<br />
* команда шлюза F (''показ страницы'')<br />
* имя профиля IBIS_FULLTEXT<br />
* база данных IBIS<br />
* авторизация не осуществлялась<br />
<br />
Параметр S21CNR не обязателен.<br />
<br />
При авторизации запрос приобретает следующий вид<br />
<br />
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<br />
<br />
где указаны:<br />
* команда шлюза F (''показ страницы'')<br />
* имя профиля AUTHOR<br />
* база данных IBIS<br />
* параметры авторизации: Z21FLAGID, фамилия читателя Z21FAMILY и идентификатор читателя Z21ID<br />
<br />
При поиске по слову "библиотека" запрос приобретает следующий вид<br />
<br />
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<br />
<br />
где указаны:<br />
* команда шлюза S (''поиск'')<br />
* имя профиля IBIS_FULLTEXT<br />
* база данных IBIS<br />
* параметры авторизации: Z21ID<br />
* текущий запрос SEARCH_STRING и предыдущий запрос FT_S21STR (одинаковые)<br />
* USES21ALL=1 (использовать параметр S21ALL, применяется в поиске связных)<br />
* S21CNR=5 (порция при показе найденных)<br />
* S21REF=10 (для правильного формирования ссылок на страницы с результатами поиска)<br />
* C21COM1<br />
* FT_PREFIX<br />
* S21FMT=briefHTML_ft<br />
* AVT_S21P03=A%3D<br />
* AVT_S21P02=1<br />
* AVT_S21LOG=1<br />
* NAME_S21P03=T%3D<br />
* NAME_S21P02=1<br />
* NAME_S21LOG=1<br />
* UDC_S21P03=U%3D<br />
* UDC_S21P02=0<br />
* UDC_S21LOG=1<br />
* IZD_S21P03=M%3D<br />
* IZD_S21P02=1<br />
* IZD_S21LOG=1<br />
* DAT_S21P03=G%3D<br />
* DAT_S21P02=1<br />
* DAT_S21LOG=5<br />
* P21DBN=IBIS<br />
* FT_S21LOG=4<br />
* FT_S21P03=K%3D<br />
* FT_S21P01=3<br />
* S21STN=1<br />
* S21COLORTERMS=1<br />
<br />
==Ссылки==<br />
<br />
См. также:<br />
* [[Веб-ИРБИС]]<br />
* [[Установка Веб-шлюза Ирбис 64]]<br />
* [[Настройка и обслуживание Веб-ИРБИС]]<br />
* [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini]]<br />
* [[Язык запросов ИРБИС]]<br />
<br />
[[Категория:Технология Веб-ИРБИС]]<br />
[[Категория:ИРБИС 64]]</div>Sokvhttp://wiki.elnit.org/index.php?title=%D0%AF%D0%B7%D1%8B%D0%BA_%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2_%D0%98%D0%A0%D0%91%D0%98%D0%A1&diff=2436Язык запросов ИРБИС2015-09-08T15:45:11Z<p>Sokv: </p>
<hr />
<div>''Поисковый язык ИРБИС'' или ''язык запросов ИРБИС'' предназначен для формулировки запросов, с помощью которых выполняется поиск в [[Базы данных ИРБИС|базах данных ИРБИС]].<br />
<br />
В ИРБИС выделяются два вида поиска:<br />
* ''Прямой поиск'' – быстрый поиск на основе [[Индекс базы данных ИРБИС|индекса (словаря) базы данных]].<br />
* ''Последовательный поиск'' – медленный поиск на основе последовательного перебора (просмотра) записей базы данных с возможностью выполнения таких операций, как БОЛЬШЕ/МЕНЬШЕ, НАЛИЧИЕ/ОТСУТСТВИЕ и других.<br />
<br />
==Прямой поиск==<br />
<br />
Запрос для прямого поиска представляет собой алгебраическое (поисковое) выражение, в котором операндами являются термины словаря, а операторами – логические операторы булевой алгебры. Для изменения порядка выполнения логических операторов в поисковом выражении могут применяться скобки.<br />
<br />
Термин словаря включает в себя собственно термин словаря и префикс, если таковой используется для данного вида терминов.<br />
<br />
В общем виде операнд поискового выражения можно представить следующим образом:<br />
<br />
"<префикс><термин>$"/(tag1,tag2,...tagN)<br />
где:<br />
* <tt><префикс></tt> - префикс, определяющий вид термина (вид словаря).<br />
* <tt><термин></tt> - собственно термин словаря.<br />
* <tt>$</tt> - признак правого усечения термина. Определяет совокупность терминов, имеющих начальную последовательность символов, совпадающую с указанным термином. Может отсутствовать, в этом случае поиск идет по точному значению указанного термина.<br />
* <tt>"</tt> – символ-ограничитель термина (двойные кавычки). Должен использоваться обязательно, если термин включает в себя символы пробел, круглые скобки, решетка (#), а также символы, совпадающие с обозначениями логических операторов (см. ниже).<br />
* /(tag1,tag2,...tagN) – конструкция квалификации термина. Определяет метки поля, в которых должен находиться указанный термин, или точнее – [[Таблица выбора полей#ТВП для инвертированного файла|вторую часть ''индексной ссылки'']]. Может отсутствовать, что означает отсутствие дополнительных требований в части меток полей.<br />
<br />
В поисковом выражении могут использоваться следующие логические операторы:<br />
* <tt>+</tt> - оператор логического ИЛИ. Соединение двух операндов (терминов) логическим оператором ИЛИ обозначает требование поиска записей, в которых присутствует хотя бы один из терминов.<br />
* <tt>*</tt> - оператор логического И. Соединение двух терминов логическим оператором И обозначает требование поиска записей, в которых присутствуют оба термина.<br />
* <tt>^</tt> - оператор логического НЕ. Соединение двух терминов логическим оператором НЕ обозначает требование поиска записей, в которых присутствует первый термин и отсутствует второй. Оператор НЕ не может быть одноместным (т.е. данному оператору, как и всем другим, должен ОБЯЗАТЕЛЬНО предшествовать термин).<br />
* <tt>(G)</tt> – первый оператор контекстного И. Соединение двух терминов таким оператором контекстного И обозначает требование поиска записей, в которых оба термина присутствуют в одном и том же поле (или точнее – когда у терминов совпадают вторые части ссылок).<br />
* <tt>(F)</tt> – второй оператор контекстного И. Соединение двух терминов таким оператором контекстного И обозначает требование поиска записей, в которых оба термина присутствуют в одном и том же повторении поля (или точнее – когда у терминов совпадают вторые и третьи части ссылок).<br />
* <tt>.</tt> – (точка обрамленная пробелами) третий оператор контекстного И. Соединение двух терминов таким оператором контекстного И обозначает требование поиска записей, в которых оба термина присутствуют в одном и том же повторении поля друг за другом (или точнее – когда у терминов совпадают вторые и третьи части ссылок, а третьи части ссылок отличаются на единицу).<br />
<br />
Логические операторы имеют приоритеты, которые определяют порядок их выполнения (в пределах одного уровня скобок). Ниже операторы приведены в порядке убывания приоритета:<br />
.<br />
(F)<br />
(G)<br />
* и ^<br />
+<br />
Операторы одного приоритета выполняются слева направо (в пределах одного уровня скобок). Для изменения порядка выполнения логических операторов в поисковом выражении могут применяться круглые скобки. Выражения в скобках могут объединяться только операторами + * ^.<br />
<br />
Примеры запросов для прямого поиска:<br />
("A=Иванов$" +"A=Петров$") * ("V=03" + "V=05")<br />
"K=трактор$" (F) "K=колесн$" + "K=бульдозер$" (F) "K=гусен$"<br />
"K=очист$"/(200,922) * "K=вод$"/(200,922)<br />
<br />
==Последовательный поиск==<br />
<br />
Запрос (или поисковое выражение) для последовательного поиска представляет собой формат на [[Язык форматирования системы ИРБИС|языке форматирования ИРБИС]].<br />
<br />
Собственно процесс последовательного поиска состоит в последовательном расформатировании исходных записей (т.е. тех записей, которые участвуют в поиске): если результатом расформатирования записи является строка '1' (или точнее – строка, содержащая символ '1'), то соответствующая запись удовлетворяет поисковому запросу, в противном случае – не удовлетворяет.<br />
<br />
Таким образом, в обобщенном виде запрос для последовательного поиска можно представить как следующий формат:<br />
if <логическое выражение> then '1' else '0' fi<br />
где <tt><логическое выражение></tt> - логическое выражение, в котором можно использовать все возможности языка форматирования ИРБИС.<br />
<br />
''Примечания:''<br />
* ''В [[АРМ Читатель]] и [[АРМ Каталогизатор]] в режиме ПОСЛЕДОВАТЕЛЬНЫЙ ПОИСК – СВОБОДНЫЙ ПОИСК в качестве запроса необходимо задавать именно <tt><логическое выражение></tt> (без объемлющей конструкции <tt>if … fi</tt>).''<br />
* ''Последовательный поиск применяется только в тех случаях, когда нет возможности найти необходимые записи на основе прямого поиска (т.е. на основе словарей). Если некий последовательный поиск приходится применять регулярно, следует пересмотреть правила инверсии базы данных (<dbname>.fst) – с тем чтобы иметь возможность выполнять соответствующий поиск на основе словаря.''<br />
<br />
<br />
==Ссылки==<br />
<br />
См. также:<br />
* [[Индекс базы данных ИРБИС]]<br />
* [[Язык форматирования системы ИРБИС]]<br />
* [[Технология Веб-ИРБИС]]<br />
<br />
[[Категория:ИРБИС 64]]<br />
[[Категория:Индекс базы данных ИРБИС]]<br />
[[Категория:Анонсированные статьи]]</div>Sokvhttp://wiki.elnit.org/index.php?title=%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F_%D0%92%D0%B5%D0%B1-%D0%98%D0%A0%D0%91%D0%98%D0%A1&diff=2435Технология Веб-ИРБИС2015-09-07T22:06:13Z<p>Sokv: </p>
<hr />
<div>Технология '''''Веб-ИРБИС''''' служит для создания Веб-приложений для работы с базами данных ИРБИС.<br />
<br />
Данная технология реализована в виде одноимённого [[Веб-ИРБИС|'''''программного продукта – Веб-ИРБИС''''']].<br />
<br />
==Веб-шлюз ИРБИС==<br />
<br />
Программный модуль ''Веб-шлюз ИРБИС'' обеспечивает обработку клиентских запросов.<br />
<br />
''Веб-шлюз ИРБИС'' является шлюзом CGI.<br />
<br />
Запрос может осуществляться по методу POST или GET.<br />
<br />
===Общая схема работы Веб-шлюза ИРБИС===<br />
<br />
Последовательность операций шлюза:<br />
* Чтение параметров INI файла<br />
* Препроцессинг<br />
** Формальный контроль правильности параметров<br />
** Интерпретация поискового запроса<br />
** Авторизация<br />
** Выполнение скрипта защиты<br />
** Повторная авторизация<br />
* Выполнение поиска<br />
* Формирование ответа (объединение и обработка фреймов)<br />
* Определение HTTP заголовков на основе INI файла<br />
* Возврат ответа<br />
<br />
В случае возникновения ошибки выполнения или превышения времени обработки запроса шлюз возвращает ошибку (error.html).<br />
<br />
====Препроцессинг====<br />
<br />
=====Скрипт-защита=====<br />
<br />
Формат скрипта защиты выполняет две функции: 1) проверку поступивших параметров запроса и защиту от взлома 2) обработку и дополнение параметров.<br />
<br />
Первая строка, сформированная форматом срипт-защиты, определяет общий результат – если это 0 или файлом не было возвращено никаких значений – скрипт-защита определила ошибку, если результат 1 или файлом были возвращены другие ненулевые значения – ошибки нет. В первом случае шлюз возвращает error.html, в последнем случае шлюз читает остальные строки формата и изменяет параметры запроса на новые.<br />
<br />
Например, строка ‘SCRIPT_DONE=YES’/ задаёт параметру SCRIPT_DONE значение YES.<br />
<br />
=====Авторизация пользователя=====<br />
<br />
Авторизация даёт возможность заказывать литературу, просматривать формуляр и редактировать корзину заказов.<br />
<br />
Для авторизации используется база RDR. Авторизация происходит по идентификатору и, если в пользовательском запросе задан параметр Z21FLAGID=1, – по фамилии. После авторизации шлюз выполняет шифрование идентификатора, и зашифрованный идентификатор передаётся при переходе по страницам.<br />
<br />
====Инициализация параметров====<br />
<br />
После поступления клиентского запроса осуществляется инициализация параметров веб-шлюза на основе параметров CGI.<br />
<br />
Обрабатываемый шлюзом набор параметров определяется конфигурационным файлом Веб-шлюза ИРБИС.<br />
<br />
Эти параметры доступны в контексте фреймов.<br />
<br />
Параметры используются, в том числе, для отслеживания состояния веб-страницы. В ответ на HTTP-запрос клиента (обычно – в генерируемую html-страницу, передаваемую клиенту) может включить набор пользовательских параметров вместе с их значениями, полученными в запросе, для чего есть специальная команда.<br />
<br />
Отслеживание состояния осуществляется с использованием следующих этапов: 1) данные передаются на веб-шлюз в виде параметров запроса; 2) веб-шлюз передаёт данные вместе со сформированной страницей в скрытых полях форм HTML.<br />
<br />
====Выполнение команды====<br />
<br />
Затем шлюз переходит к выполнению команды. Команда соответствует переданному параметру C21COM.<br />
<br />
В контексте выполнения команды используются полученные параметры.<br />
<br />
Для каждой команды есть набор '''основных параметров''', логика использования которых предопределена самим веб-шлюзом.<br />
<br />
К основным параметрам шлюза относятся:<br />
* <tt>C21COM</tt> – команда, которую должен выполнить веб-шлюз.<br />
* <tt>I21DBN</tt> – имя [[Профили|профиля]]. Веб-шлюз ИРБИС в соответствии с именем профиля определяет набор [[Фреймы|фреймов]], из которых составит ответ клиенту. Веб-шлюз ИРБИС ищет названия фреймов в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файле irbis_server.ini]] в секции, название которой соответствует значению параметра <tt>I21DBN</tt> (подробнее в разделе [[#Роль фреймов в работе веб-шлюза ИРБИС|Роль фреймов в работе веб-шлюза ИРБИС]]).<br />
* <tt>P21DBN</tt> – имя базы данных.<br />
* <tt>Z21ID</tt> – значение параметра авторизации.<br />
<br />
Кроме '''основных''', есть '''пользовательские параметры''' – все остальные параметры.<br />
<br />
Особенность пользовательских параметров в том, что их набор и использование полностью могут быть определены (переопределены) пользователями системы ИРБИС:<br />
* Определение параметров даётся в конфигурационном файле Веб-шлюза ИРБИС.<br />
* Параметры доступны в виде виртуальных полей на языке форматирования в контексте фреймов.<br />
<br />
====Ответ веб-шлюза ИРБИС клиенту====<br />
<br />
Порядок формирования ответа веб-шлюза ИРБИС клиенту зависит от команды.<br />
<br />
=====Ответ с использованием фреймов=====<br />
<br />
Для команд, представленных в таблице, осуществляется генерация ответа с использованием технологии выбора и обработки фреймов.<br />
<br />
Обычно это динамически формируемая веб-страница.<br />
<br />
'''Таблица.''' Команды веб-шлюза ИРБИС.<br />
{|<br />
|<br />
{| class="standard"<br />
!Значение параметра <tt>C21COM</tt>||Описание команды||Соответствующий параметр в <tt>irbis_server.ini</tt><br />
|-<br />
|'''F'''||'''''показ''''' – команда показа страницы||ShowFrames<br />
|-<br />
|'''S'''||'''''поиск''''' – команда выполнения и показа результатов поиска||SearchFrames<br />
|-<br />
|'''T'''||'''''словарь''''' – команда показа терминов словаря||DictionryFrames<br />
|-<br />
|'''Z'''||'''''заказ''''' – команда отбора записей в корзину заказов||ZakazFrames<br />
|-<br />
|'''R'''||'''''запись''''' – команда редактуры записей||RecUpdateFrames<br />
|}<br />
|}<br />
<br />
Выбор набора фреймов зависит от: команды (параметр C21COM) и профиля (параметр I21DBN).<br />
<br />
Возможные наборы фреймов предварительно сконфигурированы и указаны в конфигурационном файле <tt>irbis_server.ini</tt>.<br />
<br />
Откуда шлюз и считывает нужный набор, в зависимости от параметров (C21COM и I21DBN).<br />
<br />
Каждой команде веб-шлюза ИРБИС соответствует имя параметра в файле <tt>irbis_server.ini</tt> (см. таблицу ''Команды веб-шлюза ИРБИС'').<br />
<br />
=====Отправка клиенту ресурсного файла=====<br />
<br />
Для команд, представленных в таблице, отправка клиенту ресурсного файла.<br />
<br />
'''Таблица.''' Команды веб-шлюза ИРБИС.<br />
{|<br />
|<br />
{| class="standard"<br />
!Значение параметра <tt>C21COM</tt>||Описание команды<br />
|-<br />
|'''E'''||'''''экспорт''''' – команда выгрузки записей<br />
|-<br />
|'''2'''||'''''файл''''' – команда чтения внешнего объекта<br />
|-<br />
|'''4'''||'''''скачать''''' – команда заимствования записи<br />
|}<br />
|}<br />
<br />
===Команда поиска – S===<br />
<br />
'''Пример поиска всех страниц одного текста PDF'''<br />
<br />
Здесь мы предполагаем, что:<br />
* Работаем в контексте базы данных IBIS.<br />
* Поисковое выражение <tt>TXT=2__$</tt> позволяет найти все страницы файла <tt>2.pdf</tt>.<br />
<br />
Чтобы создать произвольный запрос, не связанный с существующим функционалом системы, можно создать новый профиль EXAMPLE1. Для этого в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|конфигурационном файле веб-шлюза ИРБИС irbis server.ini]] нужно добавить секцию EXAMPLE1<br />
[EXAMPLE1]<br />
FRAMES=C:\irbis\irbis_plus\IRBIS64\DATAI\frames_15_plus\FullText\<br />
ShowFrames=<br />
SearchFrames=RESULT<br />
DBNAME=IBIS<br />
где значение параметра FRAMES должно соответствовать местонахождению фреймов.<br />
<br />
Для команды поиска порядок формирования ответа определяется параметром SearchFrames. И запись<br />
SearchFrames=RESULT<br />
означает, что при формировании Веб-шлюзом ответа на команду поиска не участвуют фреймы, участвует только формат, который будет указан в запросе.<br />
<br />
В качестве этого формата предлагается создать файл '''<tt>example1.pft</tt>''' со следующим содержимым<br />
<nowiki>mfn,/,</nowiki><br />
Этот формат выводит список MFN найденных записей.<br />
<br />
Теперь всё готово, чтобы выполнить запрос<br />
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<br />
<br />
В основных полях мы указываем команду поиска (S), базу данных IBIS, профиль EXAMPLE1, идентификатор пользователя.<br />
<br />
Поле S21All содержит запрос на языке запросов ИРБИС. Если его декодировать из кодировки URL, то он будет выглядеть так<br />
<nowiki>S21All=<.>TXT=2__$<.></nowiki><br />
где точка в угловых скобках заменяет двойную кавычку, являющуюся ограничителем запроса в [[Язык запросов ИРБИС|языке запросов ИРБИС]], то есть указанный запрос следует читать как<br />
"TXT=2__$"<br />
<br />
Формат вывода найденных записей, который предлагалось подготовить выше, указан в параметре S21FMT, без расширения.<br />
<br />
Результатом выполнения этого запроса будет обещанный список mfn, например<br />
0000000002<br />
0000000006<br />
0000000013<br />
0000000018<br />
<br />
Можно усложнить запрос, ограничив вывод порцией из 2 результатов, начиная со 2-го (параметры S21CNR и S21STN)<br />
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<br />
<br />
Результатом будет<br />
0000000006<br />
0000000013<br />
<br />
Можно усложнить формат вывода найденных записей '''<tt>example1.pft</tt>''', добавив информацию о количестве найденных, а также введённых порционных ограничениях<br />
<nowiki>mfn,'; кол-во найденных = ',v1001,'; с какого номера начать = ',v2223,'; размер порции = ',v2224,/,</nowiki><br />
где 1001, 2223 и 2224 – виртуальные поля, в которые шлюз помещает данные в соответствии с [[таблицей виртуальных полей шлюза]].<br />
<br />
Все данные, которые шлюз принял в виде параметров, попадают в виртуальные поля в соответствии правилами, заданными в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файле irbis_server.ini]]. Например, параметру S21CNR соответствует метка 2224, параметру S21STN – 2223.<br />
<br />
Результатом будет<br />
0000000006; кол-во найденных = 4; с какого номера начать = 2; размер порции = 2<br />
0000000013; кол-во найденных = 4; с какого номера начать = 2; размер порции = 2<br />
<br />
В последнем примере количество найденных и данные о порции повторяются с каждым результатом поиска, что является избыточным.<br />
<br />
Такой избыточности позволяют избежать применение [[фреймов]].<br />
<br />
Создадим файл example1.frm (его местоположение должно соответствовать параметру FRAMES в профиле) со следующим содержимым<br />
<?! mfn,'; куку кол-во найденных = ',v1001,'; с какого номера начать = ',v2223,'; размер порции = ',v2224,/, ?><br />
<br />
Чтобы задействовать этот фрейм, в описании профиля можно изменить значение параметра SearchFrames следующим образом:<br />
SearchFrames=example1.frm,RESULT<br />
что следует понимать так, что шлюз вернёт результат выполнения команды поиска, составленный из:<br />
* результата выполнения фрейма example1.frm<br />
* результатов работы формата, который отработает для каждого результата поиска (обозначается словом RESULT).<br />
<br />
Кроме того, чтобы измежать дублирующихся данных, в '''<tt>example1.pft</tt>''' оставим только вывод MFN:<br />
mfn,/,<br />
<br />
Результатом будет<br />
Вывод через фрейм... 0000000001; кол-во найденных = 4; с какого номера начать = 2; размер порции = 2<br />
0000000006<br />
0000000013<br />
<br />
В данном примере вывод во фрейме 0000000001 в качестве mfn является условностью, и не несёт смысла.<br />
<br />
===Команда показа терминов словаря – T===<br />
<br />
'''Пример команды показа терминов словаря'''<br />
<br />
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&<br />
<br />
где:<br />
* <tt>C21COM=T</tt> определяет команду,<br />
* <tt>I21DBN=IBIS</tt> базу данных,<br />
* <tt>Z21ID=1500323880383212</tt> идентификатор читателя в зашифрованном виде,<br />
* <tt>T21PRF=KT=</tt> префикс словаря,<br />
* <tt>T21TRM=a</tt> – требование терминов, начинающихся на <tt>a</tt>.<br />
<br />
Пример возврата:<br />
A20040830ARUSY|1<br />
A20041017ABELY|1<br />
A20041118ARUSY|1<br />
A2H|2<br />
A540|9<br />
A54001|7<br />
A550UTILIZATION|1<br />
AACDEMY|1<br />
AASL|2<br />
AASLPUBSANDJOURNALS|2<br />
<br />
===Добавление пользовательского параметра===<br />
<br />
Добавление пользовательского параметра осуществляется в несколько шагов:<br />
* '''добавление ''пользовательского параметра'' в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файл инициализации шлюза <tt>irbis_server.ini</tt>]]'''<br />
: Необходимо добавить описание нового ''пользовательского параметра'' в настроечный файл <tt>irbis_server.ini</tt>, задав имя и метку параметра. Для этого в секции <tt>[PARAMETRS]</tt> используются ''параметры ini файла'' <tt>PARNAME_</tt> и <tt>PARTAG_</tt> (не стоит путать термины ''пользовательские параметры'' веб-шлюза и ''параметры ini файла''), где вместо знака подчёркивания ставится номер пользовательского параметра по порядку, например:<br />
PARNAME2=C21COM<br />
PARTAG2=2222<br />
: В этом примере мы видим описание второго по порядку из определённых в секции <tt>[PARAMETRS]</tt> параметров: имя параметра <tt>C21COM</tt>, метка параметра <tt>2222</tt>. Имя и метка параметров должны быть уникальными. После того как описание ''пользовательского параметра'' добавлено необходимо изменить значение параметра <tt>PARCOUNT</tt> в секции <tt>[PARAMETRS]</tt>, его значение должно быть равно порядковому номеру последнего описания ''пользовательского параметра''.<br />
: ''Примечание:'' обратите внимание, что в файле <tt>irbis_server.ini</tt> хранятся описания не только пользовательских параметров, а присутствует также описания предустановленных параметров.<br />
* '''использование в файлах <tt>.frm</tt> команд <tt><!FORMAT=INSERT_ALL_PARAMETERS></tt> и <tt><!FORMAT=INSERT_ALL_PARAMETERS_IN_QUERY></tt>'''<br />
: Команда <tt><!FORMAT=INSERT_ALL_PARAMETERS></tt> обеспечивает вставку в код HTML-страницы всех непустых переданных веб-шлюзу параметров в виде скрытых элементов формы, например:<br />
<input type="hidden" name="PARAM_NAME" value="PARAM_VALUE"><br />
: Команда <tt><!FORMAT=INSERT_ALL_PARAMETERS_IN_QUERY></tt> вставляет в код HTML-страницы гиперссылку, содержащую все переданные веб-шлюзу параметры.<br />
<br />
===Система команд Веб-шлюза ИРБИС===<br />
<br />
Система ''команд'' Веб-шлюза ИРБИС позволяет задать собственный набор фреймов и порядок их объединения для каждой задачи. Для разных задач предусмотрены разные команды, например: для страницы приглашения к поиску, результата поиска, отбора записей в корзину заказов и т.д.<br />
<br />
==Обработка фреймов==<br />
<br />
В общем случае, веб-страница формируется путём объединения (''склеивания'') следующих частей:<br />
* ''заголовочной'' и ''подвальной'' частей, формируемых при помощи ''фреймов'' и<br />
* ''тела'' страницы, формируемого при помощи [[Язык форматирования системы ИРБИС#Понятие формата|''формата'']], который отрабатывает на наборе записей базы данных (соответствующих запросу пользователя).<br />
<br />
===Фрейм как язык разметки===<br />
<br />
Фрейм представляет собой текстовый файл, содержимое которого передаётся клиенту (в веб браузер), который также может содержать вставки, которые будут обработаны определённым образом перед передачей клиенту.<br />
<br />
Предусмотрены вставки следующих видов:<br />
* вставка на языке форматирования ИРБИС,<br />
* вложенный фрейм.<br />
<br />
'''''Вставка на языке форматирования''''' обозначается следующим образом<br />
<br />
<!FORMAT<br />
<br />
'''Пример:'''<br />
<br />
<nowiki><!FORMAT=if v3409='' then 'value=""' else 'value=','"',v3409,'"',fi></nowiki><br />
<br />
Если вставка на языке форматирования содержит символы, кодирующиеся в UTF-8 более чем одним байтом (например, кириллицу), то формат обязательно должен начинаться с восклицательного знака. Это связано с тем, что формат в кодировке UTF-8 должен предваряться восклицательным знаком, а все фреймы храняться именно в кодировке UTF-8.<br />
<br />
'''Пример:'''<br />
<br />
<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><br />
<br />
Пример вложенного фрейма:<br />
<br />
<!FORMAT=if &uf('IMAIN,SHOW_DUBLIN_CORE,0') <> '0' then /'<!FILE=Dublin_Core.frm>' fi><br />
<br />
Предусмотрен '''''упрощённый синтаксис вставки на языке форматирования''''':<br />
<?!if p(v2225) then 'true' fi ?><br />
<br />
===Пример последовательности действий Веб-шлюза ИРБИС при формировании веб-страницы в ответ на запрос===<br />
<br />
Веб-шлюз ИРБИС при получении команд '''F''', '''S''', '''T''', '''Z''', '''R''' выполняет следующую последовательность действий:<br />
* Веб-шлюз получил запрос. Запрос содержит параметры <tt>C21COM</tt>, <tt>I21DBN</tt> и другие.<br />
* В файле <tt>irbis_server.ini</tt> веб-шлюз находит секцию, имя которой соответствует значению параметра <tt>I21DBN</tt>. Иными словами: с одной стороны, в качестве значения параметра <tt>I21DBN</tt> указывается имя профиля, с другой стороны, для каждого профиля в файле <tt>irbis_server.ini</tt> должна содержаться секция, имя которой совпадает с именем профиля.<br />
* В указанной секции файла <tt>irbis_server.ini</tt> веб-шлюз находит значение параметра, соответствующего указанной в параметре <tt>C21COM</tt> команде (см. таблицу ''Команды веб-шлюза ИРБИС''). Полученное значение должно представлять собой список фреймов.<br />
* Фреймы обрабатываются, и результат, представляющий собой HTML-страницу, отправляется клиенту в качестве ответа.<br />
<br />
===Примеры перехода пользователя по страницам Веб-ИРБИС===<br />
<br />
Пример запроса начальной страницы:<br />
<br />
http://localhost:8080/cgi-bin/irbis64r_15_plus/cgiirbis_64_ft.exe?C21COM=F&I21DBN=IBIS_FULLTEXT&P21DBN=IBIS&Z21ID=&S21CNR=5<br />
<br />
где указаны:<br />
* команда шлюза F (''показ страницы'')<br />
* имя профиля IBIS_FULLTEXT<br />
* база данных IBIS<br />
* авторизация не осуществлялась<br />
<br />
Параметр S21CNR не обязателен.<br />
<br />
При авторизации запрос приобретает следующий вид<br />
<br />
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<br />
<br />
где указаны:<br />
* команда шлюза F (''показ страницы'')<br />
* имя профиля AUTHOR<br />
* база данных IBIS<br />
* параметры авторизации: Z21FLAGID, фамилия читателя Z21FAMILY и идентификатор читателя Z21ID<br />
<br />
При поиске по слову "библиотека" запрос приобретает следующий вид<br />
<br />
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<br />
<br />
где указаны:<br />
* команда шлюза S (''поиск'')<br />
* имя профиля IBIS_FULLTEXT<br />
* база данных IBIS<br />
* параметры авторизации: Z21ID<br />
* текущий запрос SEARCH_STRING и предыдущий запрос FT_S21STR (одинаковые)<br />
* USES21ALL=1 (использовать параметр S21ALL, применяется в поиске связных)<br />
* S21CNR=5 (порция при показе найденных)<br />
* S21REF=10 (для правильного формирования ссылок на страницы с результатами поиска)<br />
* C21COM1<br />
* FT_PREFIX<br />
* S21FMT=briefHTML_ft<br />
* AVT_S21P03=A%3D<br />
* AVT_S21P02=1<br />
* AVT_S21LOG=1<br />
* NAME_S21P03=T%3D<br />
* NAME_S21P02=1<br />
* NAME_S21LOG=1<br />
* UDC_S21P03=U%3D<br />
* UDC_S21P02=0<br />
* UDC_S21LOG=1<br />
* IZD_S21P03=M%3D<br />
* IZD_S21P02=1<br />
* IZD_S21LOG=1<br />
* DAT_S21P03=G%3D<br />
* DAT_S21P02=1<br />
* DAT_S21LOG=5<br />
* P21DBN=IBIS<br />
* FT_S21LOG=4<br />
* FT_S21P03=K%3D<br />
* FT_S21P01=3<br />
* S21STN=1<br />
* S21COLORTERMS=1<br />
<br />
==Ссылки==<br />
<br />
См. также:<br />
* [[Веб-ИРБИС]]<br />
* [[Установка Веб-шлюза Ирбис 64]]<br />
* [[Настройка и обслуживание Веб-ИРБИС]]<br />
* [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini]]<br />
<br />
[[Категория:Технология Веб-ИРБИС]]<br />
[[Категория:ИРБИС 64]]</div>Sokvhttp://wiki.elnit.org/index.php?title=%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F_%D0%92%D0%B5%D0%B1-%D0%98%D0%A0%D0%91%D0%98%D0%A1&diff=2434Технология Веб-ИРБИС2015-09-07T22:03:26Z<p>Sokv: </p>
<hr />
<div>Технология '''''Веб-ИРБИС''''' служит для создания Веб-приложений для работы с базами данных ИРБИС.<br />
<br />
Данная технология реализована в виде одноимённого [[Веб-ИРБИС|'''''программного продукта – Веб-ИРБИС''''']].<br />
<br />
==Веб-шлюз ИРБИС==<br />
<br />
Программный модуль ''Веб-шлюз ИРБИС'' обеспечивает обработку клиентских запросов.<br />
<br />
''Веб-шлюз ИРБИС'' является шлюзом CGI.<br />
<br />
Запрос может осуществляться по методу POST или GET.<br />
<br />
===Общая схема работы Веб-шлюза ИРБИС===<br />
<br />
Последовательность операций шлюза:<br />
* Чтение параметров INI файла<br />
* Препроцессинг<br />
** Формальный контроль правильности параметров<br />
** Интерпретация поискового запроса<br />
** Авторизация<br />
** Выполнение скрипта защиты<br />
** Повторная авторизация<br />
* Выполнение поиска<br />
* Формирование ответа (объединение и обработка фреймов)<br />
* Определение HTTP заголовков на основе INI файла<br />
* Возврат ответа<br />
<br />
В случае возникновения ошибки выполнения или превышения времени обработки запроса шлюз возвращает ошибку (error.html).<br />
<br />
====Препроцессинг====<br />
<br />
=====Скрипт-защита=====<br />
<br />
Формат скрипта защиты выполняет две функции: 1) проверку поступивших параметров запроса и защиту от взлома 2) обработку и дополнение параметров.<br />
<br />
Первая строка, сформированная форматом срипт-защиты, определяет общий результат – если это 0 или файлом не было возвращено никаких значений – скрипт-защита определила ошибку, если результат 1 или файлом были возвращены другие ненулевые значения – ошибки нет. В первом случае шлюз возвращает error.html, в последнем случае шлюз читает остальные строки формата и изменяет параметры запроса на новые.<br />
<br />
Например, строка ‘SCRIPT_DONE=YES’/ задаёт параметру SCRIPT_DONE значение YES.<br />
<br />
=====Авторизация пользователя=====<br />
<br />
Авторизация даёт возможность заказывать литературу, просматривать формуляр и редактировать корзину заказов.<br />
<br />
Для авторизации используется база RDR. Авторизация происходит по идентификатору и, если в пользовательском запросе задан параметр Z21FLAGID=1, – по фамилии. После авторизации шлюз выполняет шифрование идентификатора, и зашифрованный идентификатор передаётся при переходе по страницам.<br />
<br />
====Инициализация параметров====<br />
<br />
После поступления клиентского запроса осуществляется инициализация параметров веб-шлюза на основе параметров CGI.<br />
<br />
Обрабатываемый шлюзом набор параметров определяется конфигурационным файлом Веб-шлюза ИРБИС.<br />
<br />
Эти параметры доступны в контексте фреймов.<br />
<br />
Параметры используются, в том числе, для отслеживания состояния веб-страницы. В ответ на HTTP-запрос клиента (обычно – в генерируемую html-страницу, передаваемую клиенту) может включить набор пользовательских параметров вместе с их значениями, полученными в запросе, для чего есть специальная команда.<br />
<br />
Отслеживание состояния осуществляется с использованием следующих этапов: 1) данные передаются на веб-шлюз в виде параметров запроса; 2) веб-шлюз передаёт данные вместе со сформированной страницей в скрытых полях форм HTML.<br />
<br />
====Выполнение команды====<br />
<br />
Затем шлюз переходит к выполнению команды. Команда соответствует переданному параметру C21COM.<br />
<br />
В контексте выполнения команды используются полученные параметры.<br />
<br />
Для каждой команды есть набор '''основных параметров''', логика использования которых предопределена самим веб-шлюзом.<br />
<br />
К основным параметрам шлюза относятся:<br />
* <tt>C21COM</tt> – команда, которую должен выполнить веб-шлюз.<br />
* <tt>I21DBN</tt> – имя [[Профили|профиля]]. Веб-шлюз ИРБИС в соответствии с именем профиля определяет набор [[Фреймы|фреймов]], из которых составит ответ клиенту. Веб-шлюз ИРБИС ищет названия фреймов в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файле irbis_server.ini]] в секции, название которой соответствует значению параметра <tt>I21DBN</tt> (подробнее в разделе [[#Роль фреймов в работе веб-шлюза ИРБИС|Роль фреймов в работе веб-шлюза ИРБИС]]).<br />
* <tt>P21DBN</tt> – имя базы данных.<br />
* <tt>Z21ID</tt> – значение параметра авторизации.<br />
<br />
Кроме '''основных''', есть '''пользовательские параметры''' – все остальные параметры.<br />
<br />
Особенность пользовательских параметров в том, что их набор и использование полностью могут быть определены (переопределены) пользователями системы ИРБИС:<br />
* Определение параметров даётся в конфигурационном файле Веб-шлюза ИРБИС.<br />
* Параметры доступны в виде виртуальных полей на языке форматирования в контексте фреймов.<br />
<br />
====Ответ веб-шлюза ИРБИС клиенту====<br />
<br />
Порядок формирования ответа веб-шлюза ИРБИС клиенту зависит от команды.<br />
<br />
=====Ответ с использованием фреймов=====<br />
<br />
Для команд, представленных в таблице, осуществляется генерация ответа с использованием технологии выбора и обработки фреймов.<br />
<br />
Обычно это динамически формируемая веб-страница.<br />
<br />
'''Таблица.''' Команды веб-шлюза ИРБИС.<br />
{|<br />
|<br />
{| class="standard"<br />
!Значение параметра <tt>C21COM</tt>||Описание команды||Соответствующий параметр в <tt>irbis_server.ini</tt><br />
|-<br />
|'''F'''||'''''показ''''' – команда показа страницы||ShowFrames<br />
|-<br />
|'''S'''||'''''поиск''''' – команда выполнения и показа результатов поиска||SearchFrames<br />
|-<br />
|'''T'''||'''''словарь''''' – команда показа терминов словаря||DictionryFrames<br />
|-<br />
|'''Z'''||'''''заказ''''' – команда отбора записей в корзину заказов||ZakazFrames<br />
|-<br />
|'''R'''||'''''запись''''' – команда редактуры записей||RecUpdateFrames<br />
|}<br />
|}<br />
<br />
Выбор набора фреймов зависит от: команды (параметр C21COM) и профиля (параметр I21DBN).<br />
<br />
Возможные наборы фреймов предварительно сконфигурированы и указаны в конфигурационном файле <tt>irbis_server.ini</tt>.<br />
<br />
Откуда шлюз и считывает нужный набор, в зависимости от параметров (C21COM и I21DBN).<br />
<br />
Каждой команде веб-шлюза ИРБИС соответствует имя параметра в файле <tt>irbis_server.ini</tt> (см. таблицу ''Команды веб-шлюза ИРБИС'').<br />
<br />
=====Отправка клиенту ресурсного файла=====<br />
<br />
Для команд, представленных в таблице, отправка клиенту ресурсного файла.<br />
<br />
'''Таблица.''' Команды веб-шлюза ИРБИС.<br />
{|<br />
|<br />
{| class="standard"<br />
!Значение параметра <tt>C21COM</tt>||Описание команды<br />
|-<br />
|'''E'''||'''''экспорт''''' – команда выгрузки записей<br />
|-<br />
|'''2'''||'''''файл''''' – команда чтения внешнего объекта<br />
|-<br />
|'''4'''||'''''скачать''''' – команда заимствования записи<br />
|}<br />
|}<br />
<br />
===Команда поиска – S===<br />
<br />
'''Пример поиска всех страниц одного текста PDF'''<br />
<br />
Здесь мы предполагаем, что:<br />
* Работаем в контексте базы данных IBIS.<br />
* Поисковое выражение <tt>TXT=2__$</tt> позволяет найти все страницы файла <tt>2.pdf</tt>.<br />
<br />
Чтобы создать произвольный запрос, не связанный с существующим функционалом системы, можно создать новый профиль EXAMPLE1. Для этого в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|конфигурационном файле веб-шлюза ИРБИС irbis server.ini]] нужно добавить секцию EXAMPLE1<br />
[EXAMPLE1]<br />
FRAMES=C:\irbis\irbis_plus\IRBIS64\DATAI\frames_15_plus\FullText\<br />
ShowFrames=<br />
SearchFrames=RESULT<br />
DBNAME=IBIS<br />
где значение параметра FRAMES должно соответствовать местонахождению фреймов.<br />
<br />
Для команды поиска порядок формирования ответа определяется параметром SearchFrames. И запись<br />
SearchFrames=RESULT<br />
означает, что при формировании Веб-шлюзом ответа на команду поиска не участвуют фреймы, участвует только формат, который будет указан в запросе.<br />
<br />
В качестве этого формата предлагается создать файл '''<tt>example1.pft</tt>''' со следующим содержимым<br />
<nowiki>mfn,/,</nowiki><br />
Этот формат выводит список MFN найденных записей.<br />
<br />
Теперь всё готово, чтобы выполнить запрос<br />
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<br />
<br />
В основных полях мы указываем команду поиска (S), базу данных IBIS, профиль EXAMPLE1, идентификатор пользователя.<br />
<br />
Поле S21All содержит запрос на языке запросов ИРБИС. Если его декодировать из кодировки URL, то он будет выглядеть так<br />
<nowiki>S21All=<.>TXT=2__$<.></nowiki><br />
где точка в угловых скобках заменяет двойную кавычку, являющуюся ограничителем запроса в [[Язык запросов ИРБИС|языке запросов ИРБИС]], то есть указанный запрос следует читать как<br />
"TXT=2__$"<br />
<br />
Формат вывода найденных записей, который предлагалось подготовить выше, указан в параметре S21FMT, без расширения.<br />
<br />
Результатом выполнения этого запроса будет обещанный список mfn, например<br />
0000000002<br />
0000000006<br />
0000000013<br />
0000000018<br />
<br />
Можно усложнить запрос, ограничив вывод порцией из 2 результатов, начиная со 2-го (параметры S21CNR и S21STN)<br />
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<br />
<br />
Результатом будет<br />
0000000006<br />
0000000013<br />
<br />
Можно усложнить формат вывода найденных записей '''<tt>example1.pft</tt>''', добавив информацию о количестве найденных, а также введённых порционных ограничениях<br />
<nowiki>mfn,'; кол-во найденных = ',v1001,'; с какого номера начать = ',v2223,'; размер порции = ',v2224,/,</nowiki><br />
где 1001, 2223 и 2224 – виртуальные поля, в которые шлюз помещает данные в соответствии с [[таблицей виртуальных полей шлюза]].<br />
<br />
Все данные, которые шлюз принял в виде параметров, попадают в виртуальные поля в соответствии правилами, заданными в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файле irbis_server.ini]]. Например, параметру S21CNR соответствует метка 2224, параметру S21STN – 2223.<br />
<br />
Результатом будет<br />
0000000006; кол-во найденных = 4; с какого номера начать = 2; размер порции = 2<br />
0000000013; кол-во найденных = 4; с какого номера начать = 2; размер порции = 2<br />
<br />
В последнем примере количество найденных и данные о порции повторяются с каждым результатом поиска, что является избыточным.<br />
<br />
Такой избыточности позволяют избежать применение [[фреймов]].<br />
<br />
Создадим файл example1.frm (его местоположение должно соответствовать параметру FRAMES в профиле) со следующим содержимым<br />
<?! mfn,'; куку кол-во найденных = ',v1001,'; с какого номера начать = ',v2223,'; размер порции = ',v2224,/, ?><br />
<br />
Чтобы задействовать этот фрейм, в описании профиля можно изменить значение параметра SearchFrames следующим образом:<br />
SearchFrames=example1.frm,RESULT<br />
что следует понимать так, что шлюз вернёт результат выполнения команды поиска, составленный из:<br />
* результата выполнения фрейма example1.frm<br />
* результатов работы формата, который отработает для каждого результата поиска (обозначается словом RESULT).<br />
<br />
Кроме того, чтобы измежать дублирующихся данных, в '''<tt>example1.pft</tt>''' оставим только вывод MFN:<br />
mfn,/,<br />
<br />
Результатом будет<br />
Вывод через фрейм... 0000000001; кол-во найденных = 4; с какого номера начать = 2; размер порции = 2<br />
0000000006<br />
0000000013<br />
<br />
===Команда показа терминов словаря – T===<br />
<br />
'''Пример команды показа терминов словаря'''<br />
<br />
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&<br />
<br />
где:<br />
* <tt>C21COM=T</tt> определяет команду,<br />
* <tt>I21DBN=IBIS</tt> базу данных,<br />
* <tt>Z21ID=1500323880383212</tt> идентификатор читателя в зашифрованном виде,<br />
* <tt>T21PRF=KT=</tt> префикс словаря,<br />
* <tt>T21TRM=a</tt> – требование терминов, начинающихся на <tt>a</tt>.<br />
<br />
Пример возврата:<br />
A20040830ARUSY|1<br />
A20041017ABELY|1<br />
A20041118ARUSY|1<br />
A2H|2<br />
A540|9<br />
A54001|7<br />
A550UTILIZATION|1<br />
AACDEMY|1<br />
AASL|2<br />
AASLPUBSANDJOURNALS|2<br />
<br />
===Добавление пользовательского параметра===<br />
<br />
Добавление пользовательского параметра осуществляется в несколько шагов:<br />
* '''добавление ''пользовательского параметра'' в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файл инициализации шлюза <tt>irbis_server.ini</tt>]]'''<br />
: Необходимо добавить описание нового ''пользовательского параметра'' в настроечный файл <tt>irbis_server.ini</tt>, задав имя и метку параметра. Для этого в секции <tt>[PARAMETRS]</tt> используются ''параметры ini файла'' <tt>PARNAME_</tt> и <tt>PARTAG_</tt> (не стоит путать термины ''пользовательские параметры'' веб-шлюза и ''параметры ini файла''), где вместо знака подчёркивания ставится номер пользовательского параметра по порядку, например:<br />
PARNAME2=C21COM<br />
PARTAG2=2222<br />
: В этом примере мы видим описание второго по порядку из определённых в секции <tt>[PARAMETRS]</tt> параметров: имя параметра <tt>C21COM</tt>, метка параметра <tt>2222</tt>. Имя и метка параметров должны быть уникальными. После того как описание ''пользовательского параметра'' добавлено необходимо изменить значение параметра <tt>PARCOUNT</tt> в секции <tt>[PARAMETRS]</tt>, его значение должно быть равно порядковому номеру последнего описания ''пользовательского параметра''.<br />
: ''Примечание:'' обратите внимание, что в файле <tt>irbis_server.ini</tt> хранятся описания не только пользовательских параметров, а присутствует также описания предустановленных параметров.<br />
* '''использование в файлах <tt>.frm</tt> команд <tt><!FORMAT=INSERT_ALL_PARAMETERS></tt> и <tt><!FORMAT=INSERT_ALL_PARAMETERS_IN_QUERY></tt>'''<br />
: Команда <tt><!FORMAT=INSERT_ALL_PARAMETERS></tt> обеспечивает вставку в код HTML-страницы всех непустых переданных веб-шлюзу параметров в виде скрытых элементов формы, например:<br />
<input type="hidden" name="PARAM_NAME" value="PARAM_VALUE"><br />
: Команда <tt><!FORMAT=INSERT_ALL_PARAMETERS_IN_QUERY></tt> вставляет в код HTML-страницы гиперссылку, содержащую все переданные веб-шлюзу параметры.<br />
<br />
===Система команд Веб-шлюза ИРБИС===<br />
<br />
Система ''команд'' Веб-шлюза ИРБИС позволяет задать собственный набор фреймов и порядок их объединения для каждой задачи. Для разных задач предусмотрены разные команды, например: для страницы приглашения к поиску, результата поиска, отбора записей в корзину заказов и т.д.<br />
<br />
==Обработка фреймов==<br />
<br />
В общем случае, веб-страница формируется путём объединения (''склеивания'') следующих частей:<br />
* ''заголовочной'' и ''подвальной'' частей, формируемых при помощи ''фреймов'' и<br />
* ''тела'' страницы, формируемого при помощи [[Язык форматирования системы ИРБИС#Понятие формата|''формата'']], который отрабатывает на наборе записей базы данных (соответствующих запросу пользователя).<br />
<br />
===Фрейм как язык разметки===<br />
<br />
Фрейм представляет собой текстовый файл, содержимое которого передаётся клиенту (в веб браузер), который также может содержать вставки, которые будут обработаны определённым образом перед передачей клиенту.<br />
<br />
Предусмотрены вставки следующих видов:<br />
* вставка на языке форматирования ИРБИС,<br />
* вложенный фрейм.<br />
<br />
'''''Вставка на языке форматирования''''' обозначается следующим образом<br />
<br />
<!FORMAT<br />
<br />
'''Пример:'''<br />
<br />
<nowiki><!FORMAT=if v3409='' then 'value=""' else 'value=','"',v3409,'"',fi></nowiki><br />
<br />
Если вставка на языке форматирования содержит символы, кодирующиеся в UTF-8 более чем одним байтом (например, кириллицу), то формат обязательно должен начинаться с восклицательного знака. Это связано с тем, что формат в кодировке UTF-8 должен предваряться восклицательным знаком, а все фреймы храняться именно в кодировке UTF-8.<br />
<br />
'''Пример:'''<br />
<br />
<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><br />
<br />
Пример вложенного фрейма:<br />
<br />
<!FORMAT=if &uf('IMAIN,SHOW_DUBLIN_CORE,0') <> '0' then /'<!FILE=Dublin_Core.frm>' fi><br />
<br />
Предусмотрен '''''упрощённый синтаксис вставки на языке форматирования''''':<br />
<?!if p(v2225) then 'true' fi ?><br />
<br />
===Пример последовательности действий Веб-шлюза ИРБИС при формировании веб-страницы в ответ на запрос===<br />
<br />
Веб-шлюз ИРБИС при получении команд '''F''', '''S''', '''T''', '''Z''', '''R''' выполняет следующую последовательность действий:<br />
* Веб-шлюз получил запрос. Запрос содержит параметры <tt>C21COM</tt>, <tt>I21DBN</tt> и другие.<br />
* В файле <tt>irbis_server.ini</tt> веб-шлюз находит секцию, имя которой соответствует значению параметра <tt>I21DBN</tt>. Иными словами: с одной стороны, в качестве значения параметра <tt>I21DBN</tt> указывается имя профиля, с другой стороны, для каждого профиля в файле <tt>irbis_server.ini</tt> должна содержаться секция, имя которой совпадает с именем профиля.<br />
* В указанной секции файла <tt>irbis_server.ini</tt> веб-шлюз находит значение параметра, соответствующего указанной в параметре <tt>C21COM</tt> команде (см. таблицу ''Команды веб-шлюза ИРБИС''). Полученное значение должно представлять собой список фреймов.<br />
* Фреймы обрабатываются, и результат, представляющий собой HTML-страницу, отправляется клиенту в качестве ответа.<br />
<br />
===Примеры перехода пользователя по страницам Веб-ИРБИС===<br />
<br />
Пример запроса начальной страницы:<br />
<br />
http://localhost:8080/cgi-bin/irbis64r_15_plus/cgiirbis_64_ft.exe?C21COM=F&I21DBN=IBIS_FULLTEXT&P21DBN=IBIS&Z21ID=&S21CNR=5<br />
<br />
где указаны:<br />
* команда шлюза F (''показ страницы'')<br />
* имя профиля IBIS_FULLTEXT<br />
* база данных IBIS<br />
* авторизация не осуществлялась<br />
<br />
Параметр S21CNR не обязателен.<br />
<br />
При авторизации запрос приобретает следующий вид<br />
<br />
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<br />
<br />
где указаны:<br />
* команда шлюза F (''показ страницы'')<br />
* имя профиля AUTHOR<br />
* база данных IBIS<br />
* параметры авторизации: Z21FLAGID, фамилия читателя Z21FAMILY и идентификатор читателя Z21ID<br />
<br />
При поиске по слову "библиотека" запрос приобретает следующий вид<br />
<br />
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<br />
<br />
где указаны:<br />
* команда шлюза S (''поиск'')<br />
* имя профиля IBIS_FULLTEXT<br />
* база данных IBIS<br />
* параметры авторизации: Z21ID<br />
* текущий запрос SEARCH_STRING и предыдущий запрос FT_S21STR (одинаковые)<br />
* USES21ALL=1 (использовать параметр S21ALL, применяется в поиске связных)<br />
* S21CNR=5 (порция при показе найденных)<br />
* S21REF=10 (для правильного формирования ссылок на страницы с результатами поиска)<br />
* C21COM1<br />
* FT_PREFIX<br />
* S21FMT=briefHTML_ft<br />
* AVT_S21P03=A%3D<br />
* AVT_S21P02=1<br />
* AVT_S21LOG=1<br />
* NAME_S21P03=T%3D<br />
* NAME_S21P02=1<br />
* NAME_S21LOG=1<br />
* UDC_S21P03=U%3D<br />
* UDC_S21P02=0<br />
* UDC_S21LOG=1<br />
* IZD_S21P03=M%3D<br />
* IZD_S21P02=1<br />
* IZD_S21LOG=1<br />
* DAT_S21P03=G%3D<br />
* DAT_S21P02=1<br />
* DAT_S21LOG=5<br />
* P21DBN=IBIS<br />
* FT_S21LOG=4<br />
* FT_S21P03=K%3D<br />
* FT_S21P01=3<br />
* S21STN=1<br />
* S21COLORTERMS=1<br />
<br />
==Ссылки==<br />
<br />
См. также:<br />
* [[Веб-ИРБИС]]<br />
* [[Установка Веб-шлюза Ирбис 64]]<br />
* [[Настройка и обслуживание Веб-ИРБИС]]<br />
* [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini]]<br />
<br />
[[Категория:Технология Веб-ИРБИС]]<br />
[[Категория:ИРБИС 64]]</div>Sokvhttp://wiki.elnit.org/index.php?title=%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F_%D0%92%D0%B5%D0%B1-%D0%98%D0%A0%D0%91%D0%98%D0%A1&diff=2433Технология Веб-ИРБИС2015-09-07T15:02:12Z<p>Sokv: /* Фрейм как язык разметки */</p>
<hr />
<div>Технология '''''Веб-ИРБИС''''' служит для создания Веб-приложений для работы с базами данных ИРБИС.<br />
<br />
Данная технология реализована в виде одноимённого [[Веб-ИРБИС|'''''программного продукта – Веб-ИРБИС''''']].<br />
<br />
==Веб-шлюз ИРБИС==<br />
<br />
Программный модуль ''Веб-шлюз ИРБИС'' обеспечивает обработку клиентских запросов.<br />
<br />
''Веб-шлюз ИРБИС'' является шлюзом CGI.<br />
<br />
Запрос может осуществляться по методу POST или GET.<br />
<br />
===Общая схема работы Веб-шлюза ИРБИС===<br />
<br />
Последовательность операций шлюза:<br />
* Чтение параметров INI файла<br />
* Препроцессинг<br />
** Формальный контроль правильности параметров<br />
** Интерпретация поискового запроса<br />
** Авторизация<br />
** Выполнение скрипта защиты<br />
** Повторная авторизация<br />
* Выполнение поиска<br />
* Формирование ответа (объединение и обработка фреймов)<br />
* Определение HTTP заголовков на основе INI файла<br />
* Возврат ответа<br />
<br />
В случае возникновения ошибки выполнения или превышения времени обработки запроса шлюз возвращает ошибку (error.html).<br />
<br />
====Препроцессинг====<br />
<br />
=====Скрипт-защита=====<br />
<br />
Формат скрипта защиты выполняет две функции: 1) проверку поступивших параметров запроса и защиту от взлома 2) обработку и дополнение параметров.<br />
<br />
Первая строка, сформированная форматом срипт-защиты, определяет общий результат – если это 0 или файлом не было возвращено никаких значений – скрипт-защита определила ошибку, если результат 1 или файлом были возвращены другие ненулевые значения – ошибки нет. В первом случае шлюз возвращает error.html, в последнем случае шлюз читает остальные строки формата и изменяет параметры запроса на новые.<br />
<br />
Например, строка ‘SCRIPT_DONE=YES’/ задаёт параметру SCRIPT_DONE значение YES.<br />
<br />
=====Авторизация пользователя=====<br />
<br />
Авторизация даёт возможность заказывать литературу, просматривать формуляр и редактировать корзину заказов.<br />
<br />
Для авторизации используется база RDR. Авторизация происходит по идентификатору и, если в пользовательском запросе задан параметр Z21FLAGID=1, – по фамилии. После авторизации шлюз выполняет шифрование идентификатора, и зашифрованный идентификатор передаётся при переходе по страницам.<br />
<br />
====Инициализация параметров====<br />
<br />
После поступления клиентского запроса осуществляется инициализация параметров веб-шлюза на основе параметров CGI.<br />
<br />
Обрабатываемый шлюзом набор параметров определяется конфигурационным файлом Веб-шлюза ИРБИС.<br />
<br />
Эти параметры доступны в контексте фреймов.<br />
<br />
Параметры используются, в том числе, для отслеживания состояния веб-страницы. В ответ на HTTP-запрос клиента (обычно – в генерируемую html-страницу, передаваемую клиенту) может включить набор пользовательских параметров вместе с их значениями, полученными в запросе, для чего есть специальная команда.<br />
<br />
Отслеживание состояния осуществляется с использованием следующих этапов: 1) данные передаются на веб-шлюз в виде параметров запроса; 2) веб-шлюз передаёт данные вместе со сформированной страницей в скрытых полях форм HTML.<br />
<br />
====Выполнение команды====<br />
<br />
Затем шлюз переходит к выполнению команды. Команда соответствует переданному параметру C21COM.<br />
<br />
В контексте выполнения команды используются полученные параметры.<br />
<br />
Для каждой команды есть набор '''основных параметров''', логика использования которых предопределена самим веб-шлюзом.<br />
<br />
К основным параметрам шлюза относятся:<br />
* <tt>C21COM</tt> – команда, которую должен выполнить веб-шлюз.<br />
* <tt>I21DBN</tt> – имя [[Профили|профиля]]. Веб-шлюз ИРБИС в соответствии с именем профиля определяет набор [[Фреймы|фреймов]], из которых составит ответ клиенту. Веб-шлюз ИРБИС ищет названия фреймов в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файле irbis_server.ini]] в секции, название которой соответствует значению параметра <tt>I21DBN</tt> (подробнее в разделе [[#Роль фреймов в работе веб-шлюза ИРБИС|Роль фреймов в работе веб-шлюза ИРБИС]]).<br />
* <tt>P21DBN</tt> – имя базы данных.<br />
* <tt>Z21ID</tt> – значение параметра авторизации.<br />
<br />
Кроме '''основных''', есть '''пользовательские параметры''' – все остальные параметры.<br />
<br />
Особенность пользовательских параметров в том, что их набор и использование полностью могут быть определены (переопределены) пользователями системы ИРБИС:<br />
* Определение параметров даётся в конфигурационном файле Веб-шлюза ИРБИС.<br />
* Параметры доступны в виде виртуальных полей на языке форматирования в контексте фреймов.<br />
<br />
====Ответ веб-шлюза ИРБИС клиенту====<br />
<br />
Порядок формирования ответа веб-шлюза ИРБИС клиенту зависит от команды.<br />
<br />
=====Ответ с использованием фреймов=====<br />
<br />
Для команд, представленных в таблице, осуществляется генерация ответа с использованием технологии выбора и обработки фреймов.<br />
<br />
Обычно это динамически формируемая веб-страница.<br />
<br />
'''Таблица.''' Команды веб-шлюза ИРБИС.<br />
{|<br />
|<br />
{| class="standard"<br />
!Значение параметра <tt>C21COM</tt>||Описание команды||Соответствующий параметр в <tt>irbis_server.ini</tt><br />
|-<br />
|'''F'''||'''''показ''''' – команда показа страницы||ShowFrames<br />
|-<br />
|'''S'''||'''''поиск''''' – команда выполнения и показа результатов поиска||SearchFrames<br />
|-<br />
|'''T'''||'''''словарь''''' – команда показа терминов словаря||DictionryFrames<br />
|-<br />
|'''Z'''||'''''заказ''''' – команда отбора записей в корзину заказов||ZakazFrames<br />
|-<br />
|'''R'''||'''''запись''''' – команда редактуры записей||RecUpdateFrames<br />
|}<br />
|}<br />
<br />
Выбор набора фреймов зависит от: команды (параметр C21COM) и профиля (параметр I21DBN).<br />
<br />
Возможные наборы фреймов предварительно сконфигурированы и указаны в конфигурационном файле <tt>irbis_server.ini</tt>.<br />
<br />
Откуда шлюз и считывает нужный набор, в зависимости от параметров (C21COM и I21DBN).<br />
<br />
Каждой команде веб-шлюза ИРБИС соответствует имя параметра в файле <tt>irbis_server.ini</tt> (см. таблицу ''Команды веб-шлюза ИРБИС'').<br />
<br />
=====Отправка клиенту ресурсного файла=====<br />
<br />
Для команд, представленных в таблице, отправка клиенту ресурсного файла.<br />
<br />
'''Таблица.''' Команды веб-шлюза ИРБИС.<br />
{|<br />
|<br />
{| class="standard"<br />
!Значение параметра <tt>C21COM</tt>||Описание команды<br />
|-<br />
|'''E'''||'''''экспорт''''' – команда выгрузки записей<br />
|-<br />
|'''2'''||'''''файл''''' – команда чтения внешнего объекта<br />
|-<br />
|'''4'''||'''''скачать''''' – команда заимствования записи<br />
|}<br />
|}<br />
<br />
===Команда поиска – S===<br />
<br />
'''Пример поиска всех страниц одного текста PDF'''<br />
<br />
Здесь мы предполагаем, что:<br />
* Работаем в контексте базы данных IBIS.<br />
* Поисковое выражение <tt>TXT=2__$</tt> позволяет найти все страницы файла <tt>2.pdf</tt>.<br />
<br />
Чтобы создать произвольный запрос, не связанный с существующим функционалом системы, можно создать новый профиль EXAMPLE1. Для этого в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|конфигурационном файле веб-шлюза ИРБИС irbis server.ini]] нужно добавить секцию EXAMPLE1<br />
[EXAMPLE1]<br />
FRAMES=C:\irbis\irbis_plus\IRBIS64\DATAI\frames_15_plus\FullText\<br />
ShowFrames=<br />
SearchFrames=RESULT<br />
DBNAME=IBIS<br />
где значение параметра FRAMES должно соответствовать местонахождению фреймов.<br />
<br />
Для команды поиска порядок формирования ответа определяется параметром SearchFrames. И запись<br />
SearchFrames=RESULT<br />
означает, что при формировании Веб-шлюзом ответа на команду поиска не участвуют фреймы, участвует только формат, который будет указан в запросе.<br />
<br />
В качестве этого формата предлагается создать файл '''<tt>example1.pft</tt>''' со следующим содержимым<br />
<nowiki>mfn,/,</nowiki><br />
Этот формат выводит список MFN найденных записей.<br />
<br />
Теперь всё готово, чтобы выполнить запрос<br />
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<br />
<br />
В основных полях мы указываем команду поиска (S), базу данных IBIS, профиль EXAMPLE1, идентификатор пользователя.<br />
<br />
Поле S21All содержит запрос на языке запросов ИРБИС. Если его декодировать из кодировки URL, то он будет выглядеть так<br />
<nowiki>S21All=<.>TXT=2__$<.></nowiki><br />
где точка в угловых скобках заменяет двойную кавычку, являющуюся ограничителем запроса в [[Язык запросов ИРБИС|языке запросов ИРБИС]], то есть указанный запрос следует читать как<br />
"TXT=2__$"<br />
<br />
Формат вывода найденных записей, который предлагалось подготовить выше, указан в параметре S21FMT, без расширения.<br />
<br />
Результатом выполнения этого запроса будет обещанный список mfn, например<br />
0000000002<br />
0000000006<br />
0000000013<br />
0000000018<br />
<br />
Можно усложнить запрос, ограничив вывод порцией из 2 результатов, начиная со 2-го (параметры S21CNR и S21STN)<br />
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<br />
<br />
Результатом будет<br />
0000000006<br />
0000000013<br />
<br />
Можно усложнить формат вывода найденных записей '''<tt>example1.pft</tt>''', добавив информацию о количестве найденных, а также введённых порционных ограничениях<br />
<nowiki>mfn,'; кол-во найденных = ',v1001,'; с какого номера начать = ',v2223,'; размер порции = ',v2224,/,</nowiki><br />
<br />
Здесь используется тот факт, что имя параметра запроса связано с виртуальным полем с определённой меткой. Так параметру S21CNR соответствует метка 2224, параметру S21STN – 2223. (См. в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файле irbis_server.ini]].)<br />
<br />
Результатом будет<br />
0000000006; кол-во найденных = 4; с какого номера начать = 2; размер порции = 2<br />
0000000013; кол-во найденных = 4; с какого номера начать = 2; размер порции = 2<br />
<br />
===Команда показа терминов словаря – T===<br />
<br />
'''Пример команды показа терминов словаря'''<br />
<br />
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&<br />
<br />
где:<br />
* <tt>C21COM=T</tt> определяет команду,<br />
* <tt>I21DBN=IBIS</tt> базу данных,<br />
* <tt>Z21ID=1500323880383212</tt> идентификатор читателя в зашифрованном виде,<br />
* <tt>T21PRF=KT=</tt> префикс словаря,<br />
* <tt>T21TRM=a</tt> – требование терминов, начинающихся на <tt>a</tt>.<br />
<br />
Пример возврата:<br />
A20040830ARUSY|1<br />
A20041017ABELY|1<br />
A20041118ARUSY|1<br />
A2H|2<br />
A540|9<br />
A54001|7<br />
A550UTILIZATION|1<br />
AACDEMY|1<br />
AASL|2<br />
AASLPUBSANDJOURNALS|2<br />
<br />
===Добавление пользовательского параметра===<br />
<br />
Добавление пользовательского параметра осуществляется в несколько шагов:<br />
* '''добавление ''пользовательского параметра'' в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файл инициализации шлюза <tt>irbis_server.ini</tt>]]'''<br />
: Необходимо добавить описание нового ''пользовательского параметра'' в настроечный файл <tt>irbis_server.ini</tt>, задав имя и метку параметра. Для этого в секции <tt>[PARAMETRS]</tt> используются ''параметры ini файла'' <tt>PARNAME_</tt> и <tt>PARTAG_</tt> (не стоит путать термины ''пользовательские параметры'' веб-шлюза и ''параметры ini файла''), где вместо знака подчёркивания ставится номер пользовательского параметра по порядку, например:<br />
PARNAME2=C21COM<br />
PARTAG2=2222<br />
: В этом примере мы видим описание второго по порядку из определённых в секции <tt>[PARAMETRS]</tt> параметров: имя параметра <tt>C21COM</tt>, метка параметра <tt>2222</tt>. Имя и метка параметров должны быть уникальными. После того как описание ''пользовательского параметра'' добавлено необходимо изменить значение параметра <tt>PARCOUNT</tt> в секции <tt>[PARAMETRS]</tt>, его значение должно быть равно порядковому номеру последнего описания ''пользовательского параметра''.<br />
: ''Примечание:'' обратите внимание, что в файле <tt>irbis_server.ini</tt> хранятся описания не только пользовательских параметров, а присутствует также описания предустановленных параметров.<br />
* '''использование в файлах <tt>.frm</tt> команд <tt><!FORMAT=INSERT_ALL_PARAMETERS></tt> и <tt><!FORMAT=INSERT_ALL_PARAMETERS_IN_QUERY></tt>'''<br />
: Команда <tt><!FORMAT=INSERT_ALL_PARAMETERS></tt> обеспечивает вставку в код HTML-страницы всех непустых переданных веб-шлюзу параметров в виде скрытых элементов формы, например:<br />
<input type="hidden" name="PARAM_NAME" value="PARAM_VALUE"><br />
: Команда <tt><!FORMAT=INSERT_ALL_PARAMETERS_IN_QUERY></tt> вставляет в код HTML-страницы гиперссылку, содержащую все переданные веб-шлюзу параметры.<br />
<br />
===Система команд Веб-шлюза ИРБИС===<br />
<br />
Система ''команд'' Веб-шлюза ИРБИС позволяет задать собственный набор фреймов и порядок их объединения для каждой задачи. Для разных задач предусмотрены разные команды, например: для страницы приглашения к поиску, результата поиска, отбора записей в корзину заказов и т.д.<br />
<br />
==Обработка фреймов==<br />
<br />
В общем случае, веб-страница формируется путём объединения (''склеивания'') следующих частей:<br />
* ''заголовочной'' и ''подвальной'' частей, формируемых при помощи ''фреймов'' и<br />
* ''тела'' страницы, формируемого при помощи [[Язык форматирования системы ИРБИС#Понятие формата|''формата'']], который отрабатывает на наборе записей базы данных (соответствующих запросу пользователя).<br />
<br />
===Фрейм как язык разметки===<br />
<br />
Фрейм представляет собой текстовый файл, содержимое которого передаётся клиенту (в веб браузер), который также может содержать вставки, которые будут обработаны определённым образом перед передачей клиенту.<br />
<br />
Предусмотрены вставки следующих видов:<br />
* вставка на языке форматирования ИРБИС,<br />
* вложенный фрейм.<br />
<br />
'''''Вставка на языке форматирования''''' обозначается следующим образом<br />
<br />
<!FORMAT<br />
<br />
'''Пример:'''<br />
<br />
<nowiki><!FORMAT=if v3409='' then 'value=""' else 'value=','"',v3409,'"',fi></nowiki><br />
<br />
Если вставка на языке форматирования содержит символы, кодирующиеся в UTF-8 более чем одним байтом (например, кириллицу), то формат обязательно должен начинаться с восклицательного знака. Это связано с тем, что формат в кодировке UTF-8 должен предваряться восклицательным знаком, а все фреймы храняться именно в кодировке UTF-8.<br />
<br />
'''Пример:'''<br />
<br />
<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><br />
<br />
Пример вложенного фрейма:<br />
<br />
<!FORMAT=if &uf('IMAIN,SHOW_DUBLIN_CORE,0') <> '0' then /'<!FILE=Dublin_Core.frm>' fi><br />
<br />
Предусмотрен '''''упрощённый синтаксис вставки на языке форматирования''''':<br />
<?!if p(v2225) then 'true' fi ?><br />
<br />
===Пример последовательности действий Веб-шлюза ИРБИС при формировании веб-страницы в ответ на запрос===<br />
<br />
Веб-шлюз ИРБИС при получении команд '''F''', '''S''', '''T''', '''Z''', '''R''' выполняет следующую последовательность действий:<br />
* Веб-шлюз получил запрос. Запрос содержит параметры <tt>C21COM</tt>, <tt>I21DBN</tt> и другие.<br />
* В файле <tt>irbis_server.ini</tt> веб-шлюз находит секцию, имя которой соответствует значению параметра <tt>I21DBN</tt>. Иными словами: с одной стороны, в качестве значения параметра <tt>I21DBN</tt> указывается имя профиля, с другой стороны, для каждого профиля в файле <tt>irbis_server.ini</tt> должна содержаться секция, имя которой совпадает с именем профиля.<br />
* В указанной секции файла <tt>irbis_server.ini</tt> веб-шлюз находит значение параметра, соответствующего указанной в параметре <tt>C21COM</tt> команде (см. таблицу ''Команды веб-шлюза ИРБИС''). Полученное значение должно представлять собой список фреймов.<br />
* Фреймы обрабатываются, и результат, представляющий собой HTML-страницу, отправляется клиенту в качестве ответа.<br />
<br />
===Примеры перехода пользователя по страницам Веб-ИРБИС===<br />
<br />
Пример запроса начальной страницы:<br />
<br />
http://localhost:8080/cgi-bin/irbis64r_15_plus/cgiirbis_64_ft.exe?C21COM=F&I21DBN=IBIS_FULLTEXT&P21DBN=IBIS&Z21ID=&S21CNR=5<br />
<br />
где указаны:<br />
* команда шлюза F (''показ страницы'')<br />
* имя профиля IBIS_FULLTEXT<br />
* база данных IBIS<br />
* авторизация не осуществлялась<br />
<br />
Параметр S21CNR не обязателен.<br />
<br />
При авторизации запрос приобретает следующий вид<br />
<br />
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<br />
<br />
где указаны:<br />
* команда шлюза F (''показ страницы'')<br />
* имя профиля AUTHOR<br />
* база данных IBIS<br />
* параметры авторизации: Z21FLAGID, фамилия читателя Z21FAMILY и идентификатор читателя Z21ID<br />
<br />
При поиске по слову "библиотека" запрос приобретает следующий вид<br />
<br />
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<br />
<br />
где указаны:<br />
* команда шлюза S (''поиск'')<br />
* имя профиля IBIS_FULLTEXT<br />
* база данных IBIS<br />
* параметры авторизации: Z21ID<br />
* текущий запрос SEARCH_STRING и предыдущий запрос FT_S21STR (одинаковые)<br />
* USES21ALL=1 (использовать параметр S21ALL, применяется в поиске связных)<br />
* S21CNR=5 (порция при показе найденных)<br />
* S21REF=10 (для правильного формирования ссылок на страницы с результатами поиска)<br />
* C21COM1<br />
* FT_PREFIX<br />
* S21FMT=briefHTML_ft<br />
* AVT_S21P03=A%3D<br />
* AVT_S21P02=1<br />
* AVT_S21LOG=1<br />
* NAME_S21P03=T%3D<br />
* NAME_S21P02=1<br />
* NAME_S21LOG=1<br />
* UDC_S21P03=U%3D<br />
* UDC_S21P02=0<br />
* UDC_S21LOG=1<br />
* IZD_S21P03=M%3D<br />
* IZD_S21P02=1<br />
* IZD_S21LOG=1<br />
* DAT_S21P03=G%3D<br />
* DAT_S21P02=1<br />
* DAT_S21LOG=5<br />
* P21DBN=IBIS<br />
* FT_S21LOG=4<br />
* FT_S21P03=K%3D<br />
* FT_S21P01=3<br />
* S21STN=1<br />
* S21COLORTERMS=1<br />
<br />
==Ссылки==<br />
<br />
См. также:<br />
* [[Веб-ИРБИС]]<br />
* [[Установка Веб-шлюза Ирбис 64]]<br />
* [[Настройка и обслуживание Веб-ИРБИС]]<br />
* [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini]]<br />
<br />
[[Категория:Технология Веб-ИРБИС]]<br />
[[Категория:ИРБИС 64]]</div>Sokvhttp://wiki.elnit.org/index.php?title=%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F_%D0%92%D0%B5%D0%B1-%D0%98%D0%A0%D0%91%D0%98%D0%A1&diff=2432Технология Веб-ИРБИС2015-09-07T14:10:06Z<p>Sokv: /* Команда поиска – S */</p>
<hr />
<div>Технология '''''Веб-ИРБИС''''' служит для создания Веб-приложений для работы с базами данных ИРБИС.<br />
<br />
Данная технология реализована в виде одноимённого [[Веб-ИРБИС|'''''программного продукта – Веб-ИРБИС''''']].<br />
<br />
==Веб-шлюз ИРБИС==<br />
<br />
Программный модуль ''Веб-шлюз ИРБИС'' обеспечивает обработку клиентских запросов.<br />
<br />
''Веб-шлюз ИРБИС'' является шлюзом CGI.<br />
<br />
Запрос может осуществляться по методу POST или GET.<br />
<br />
===Общая схема работы Веб-шлюза ИРБИС===<br />
<br />
Последовательность операций шлюза:<br />
* Чтение параметров INI файла<br />
* Препроцессинг<br />
** Формальный контроль правильности параметров<br />
** Интерпретация поискового запроса<br />
** Авторизация<br />
** Выполнение скрипта защиты<br />
** Повторная авторизация<br />
* Выполнение поиска<br />
* Формирование ответа (объединение и обработка фреймов)<br />
* Определение HTTP заголовков на основе INI файла<br />
* Возврат ответа<br />
<br />
В случае возникновения ошибки выполнения или превышения времени обработки запроса шлюз возвращает ошибку (error.html).<br />
<br />
====Препроцессинг====<br />
<br />
=====Скрипт-защита=====<br />
<br />
Формат скрипта защиты выполняет две функции: 1) проверку поступивших параметров запроса и защиту от взлома 2) обработку и дополнение параметров.<br />
<br />
Первая строка, сформированная форматом срипт-защиты, определяет общий результат – если это 0 или файлом не было возвращено никаких значений – скрипт-защита определила ошибку, если результат 1 или файлом были возвращены другие ненулевые значения – ошибки нет. В первом случае шлюз возвращает error.html, в последнем случае шлюз читает остальные строки формата и изменяет параметры запроса на новые.<br />
<br />
Например, строка ‘SCRIPT_DONE=YES’/ задаёт параметру SCRIPT_DONE значение YES.<br />
<br />
=====Авторизация пользователя=====<br />
<br />
Авторизация даёт возможность заказывать литературу, просматривать формуляр и редактировать корзину заказов.<br />
<br />
Для авторизации используется база RDR. Авторизация происходит по идентификатору и, если в пользовательском запросе задан параметр Z21FLAGID=1, – по фамилии. После авторизации шлюз выполняет шифрование идентификатора, и зашифрованный идентификатор передаётся при переходе по страницам.<br />
<br />
====Инициализация параметров====<br />
<br />
После поступления клиентского запроса осуществляется инициализация параметров веб-шлюза на основе параметров CGI.<br />
<br />
Обрабатываемый шлюзом набор параметров определяется конфигурационным файлом Веб-шлюза ИРБИС.<br />
<br />
Эти параметры доступны в контексте фреймов.<br />
<br />
Параметры используются, в том числе, для отслеживания состояния веб-страницы. В ответ на HTTP-запрос клиента (обычно – в генерируемую html-страницу, передаваемую клиенту) может включить набор пользовательских параметров вместе с их значениями, полученными в запросе, для чего есть специальная команда.<br />
<br />
Отслеживание состояния осуществляется с использованием следующих этапов: 1) данные передаются на веб-шлюз в виде параметров запроса; 2) веб-шлюз передаёт данные вместе со сформированной страницей в скрытых полях форм HTML.<br />
<br />
====Выполнение команды====<br />
<br />
Затем шлюз переходит к выполнению команды. Команда соответствует переданному параметру C21COM.<br />
<br />
В контексте выполнения команды используются полученные параметры.<br />
<br />
Для каждой команды есть набор '''основных параметров''', логика использования которых предопределена самим веб-шлюзом.<br />
<br />
К основным параметрам шлюза относятся:<br />
* <tt>C21COM</tt> – команда, которую должен выполнить веб-шлюз.<br />
* <tt>I21DBN</tt> – имя [[Профили|профиля]]. Веб-шлюз ИРБИС в соответствии с именем профиля определяет набор [[Фреймы|фреймов]], из которых составит ответ клиенту. Веб-шлюз ИРБИС ищет названия фреймов в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файле irbis_server.ini]] в секции, название которой соответствует значению параметра <tt>I21DBN</tt> (подробнее в разделе [[#Роль фреймов в работе веб-шлюза ИРБИС|Роль фреймов в работе веб-шлюза ИРБИС]]).<br />
* <tt>P21DBN</tt> – имя базы данных.<br />
* <tt>Z21ID</tt> – значение параметра авторизации.<br />
<br />
Кроме '''основных''', есть '''пользовательские параметры''' – все остальные параметры.<br />
<br />
Особенность пользовательских параметров в том, что их набор и использование полностью могут быть определены (переопределены) пользователями системы ИРБИС:<br />
* Определение параметров даётся в конфигурационном файле Веб-шлюза ИРБИС.<br />
* Параметры доступны в виде виртуальных полей на языке форматирования в контексте фреймов.<br />
<br />
====Ответ веб-шлюза ИРБИС клиенту====<br />
<br />
Порядок формирования ответа веб-шлюза ИРБИС клиенту зависит от команды.<br />
<br />
=====Ответ с использованием фреймов=====<br />
<br />
Для команд, представленных в таблице, осуществляется генерация ответа с использованием технологии выбора и обработки фреймов.<br />
<br />
Обычно это динамически формируемая веб-страница.<br />
<br />
'''Таблица.''' Команды веб-шлюза ИРБИС.<br />
{|<br />
|<br />
{| class="standard"<br />
!Значение параметра <tt>C21COM</tt>||Описание команды||Соответствующий параметр в <tt>irbis_server.ini</tt><br />
|-<br />
|'''F'''||'''''показ''''' – команда показа страницы||ShowFrames<br />
|-<br />
|'''S'''||'''''поиск''''' – команда выполнения и показа результатов поиска||SearchFrames<br />
|-<br />
|'''T'''||'''''словарь''''' – команда показа терминов словаря||DictionryFrames<br />
|-<br />
|'''Z'''||'''''заказ''''' – команда отбора записей в корзину заказов||ZakazFrames<br />
|-<br />
|'''R'''||'''''запись''''' – команда редактуры записей||RecUpdateFrames<br />
|}<br />
|}<br />
<br />
Выбор набора фреймов зависит от: команды (параметр C21COM) и профиля (параметр I21DBN).<br />
<br />
Возможные наборы фреймов предварительно сконфигурированы и указаны в конфигурационном файле <tt>irbis_server.ini</tt>.<br />
<br />
Откуда шлюз и считывает нужный набор, в зависимости от параметров (C21COM и I21DBN).<br />
<br />
Каждой команде веб-шлюза ИРБИС соответствует имя параметра в файле <tt>irbis_server.ini</tt> (см. таблицу ''Команды веб-шлюза ИРБИС'').<br />
<br />
=====Отправка клиенту ресурсного файла=====<br />
<br />
Для команд, представленных в таблице, отправка клиенту ресурсного файла.<br />
<br />
'''Таблица.''' Команды веб-шлюза ИРБИС.<br />
{|<br />
|<br />
{| class="standard"<br />
!Значение параметра <tt>C21COM</tt>||Описание команды<br />
|-<br />
|'''E'''||'''''экспорт''''' – команда выгрузки записей<br />
|-<br />
|'''2'''||'''''файл''''' – команда чтения внешнего объекта<br />
|-<br />
|'''4'''||'''''скачать''''' – команда заимствования записи<br />
|}<br />
|}<br />
<br />
===Команда поиска – S===<br />
<br />
'''Пример поиска всех страниц одного текста PDF'''<br />
<br />
Здесь мы предполагаем, что:<br />
* Работаем в контексте базы данных IBIS.<br />
* Поисковое выражение <tt>TXT=2__$</tt> позволяет найти все страницы файла <tt>2.pdf</tt>.<br />
<br />
Чтобы создать произвольный запрос, не связанный с существующим функционалом системы, можно создать новый профиль EXAMPLE1. Для этого в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|конфигурационном файле веб-шлюза ИРБИС irbis server.ini]] нужно добавить секцию EXAMPLE1<br />
[EXAMPLE1]<br />
FRAMES=C:\irbis\irbis_plus\IRBIS64\DATAI\frames_15_plus\FullText\<br />
ShowFrames=<br />
SearchFrames=RESULT<br />
DBNAME=IBIS<br />
где значение параметра FRAMES должно соответствовать местонахождению фреймов.<br />
<br />
Для команды поиска порядок формирования ответа определяется параметром SearchFrames. И запись<br />
SearchFrames=RESULT<br />
означает, что при формировании Веб-шлюзом ответа на команду поиска не участвуют фреймы, участвует только формат, который будет указан в запросе.<br />
<br />
В качестве этого формата предлагается создать файл '''<tt>example1.pft</tt>''' со следующим содержимым<br />
<nowiki>mfn,/,</nowiki><br />
Этот формат выводит список MFN найденных записей.<br />
<br />
Теперь всё готово, чтобы выполнить запрос<br />
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<br />
<br />
В основных полях мы указываем команду поиска (S), базу данных IBIS, профиль EXAMPLE1, идентификатор пользователя.<br />
<br />
Поле S21All содержит запрос на языке запросов ИРБИС. Если его декодировать из кодировки URL, то он будет выглядеть так<br />
<nowiki>S21All=<.>TXT=2__$<.></nowiki><br />
где точка в угловых скобках заменяет двойную кавычку, являющуюся ограничителем запроса в [[Язык запросов ИРБИС|языке запросов ИРБИС]], то есть указанный запрос следует читать как<br />
"TXT=2__$"<br />
<br />
Формат вывода найденных записей, который предлагалось подготовить выше, указан в параметре S21FMT, без расширения.<br />
<br />
Результатом выполнения этого запроса будет обещанный список mfn, например<br />
0000000002<br />
0000000006<br />
0000000013<br />
0000000018<br />
<br />
Можно усложнить запрос, ограничив вывод порцией из 2 результатов, начиная со 2-го (параметры S21CNR и S21STN)<br />
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<br />
<br />
Результатом будет<br />
0000000006<br />
0000000013<br />
<br />
Можно усложнить формат вывода найденных записей '''<tt>example1.pft</tt>''', добавив информацию о количестве найденных, а также введённых порционных ограничениях<br />
<nowiki>mfn,'; кол-во найденных = ',v1001,'; с какого номера начать = ',v2223,'; размер порции = ',v2224,/,</nowiki><br />
<br />
Здесь используется тот факт, что имя параметра запроса связано с виртуальным полем с определённой меткой. Так параметру S21CNR соответствует метка 2224, параметру S21STN – 2223. (См. в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файле irbis_server.ini]].)<br />
<br />
Результатом будет<br />
0000000006; кол-во найденных = 4; с какого номера начать = 2; размер порции = 2<br />
0000000013; кол-во найденных = 4; с какого номера начать = 2; размер порции = 2<br />
<br />
===Команда показа терминов словаря – T===<br />
<br />
'''Пример команды показа терминов словаря'''<br />
<br />
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&<br />
<br />
где:<br />
* <tt>C21COM=T</tt> определяет команду,<br />
* <tt>I21DBN=IBIS</tt> базу данных,<br />
* <tt>Z21ID=1500323880383212</tt> идентификатор читателя в зашифрованном виде,<br />
* <tt>T21PRF=KT=</tt> префикс словаря,<br />
* <tt>T21TRM=a</tt> – требование терминов, начинающихся на <tt>a</tt>.<br />
<br />
Пример возврата:<br />
A20040830ARUSY|1<br />
A20041017ABELY|1<br />
A20041118ARUSY|1<br />
A2H|2<br />
A540|9<br />
A54001|7<br />
A550UTILIZATION|1<br />
AACDEMY|1<br />
AASL|2<br />
AASLPUBSANDJOURNALS|2<br />
<br />
===Добавление пользовательского параметра===<br />
<br />
Добавление пользовательского параметра осуществляется в несколько шагов:<br />
* '''добавление ''пользовательского параметра'' в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файл инициализации шлюза <tt>irbis_server.ini</tt>]]'''<br />
: Необходимо добавить описание нового ''пользовательского параметра'' в настроечный файл <tt>irbis_server.ini</tt>, задав имя и метку параметра. Для этого в секции <tt>[PARAMETRS]</tt> используются ''параметры ini файла'' <tt>PARNAME_</tt> и <tt>PARTAG_</tt> (не стоит путать термины ''пользовательские параметры'' веб-шлюза и ''параметры ini файла''), где вместо знака подчёркивания ставится номер пользовательского параметра по порядку, например:<br />
PARNAME2=C21COM<br />
PARTAG2=2222<br />
: В этом примере мы видим описание второго по порядку из определённых в секции <tt>[PARAMETRS]</tt> параметров: имя параметра <tt>C21COM</tt>, метка параметра <tt>2222</tt>. Имя и метка параметров должны быть уникальными. После того как описание ''пользовательского параметра'' добавлено необходимо изменить значение параметра <tt>PARCOUNT</tt> в секции <tt>[PARAMETRS]</tt>, его значение должно быть равно порядковому номеру последнего описания ''пользовательского параметра''.<br />
: ''Примечание:'' обратите внимание, что в файле <tt>irbis_server.ini</tt> хранятся описания не только пользовательских параметров, а присутствует также описания предустановленных параметров.<br />
* '''использование в файлах <tt>.frm</tt> команд <tt><!FORMAT=INSERT_ALL_PARAMETERS></tt> и <tt><!FORMAT=INSERT_ALL_PARAMETERS_IN_QUERY></tt>'''<br />
: Команда <tt><!FORMAT=INSERT_ALL_PARAMETERS></tt> обеспечивает вставку в код HTML-страницы всех непустых переданных веб-шлюзу параметров в виде скрытых элементов формы, например:<br />
<input type="hidden" name="PARAM_NAME" value="PARAM_VALUE"><br />
: Команда <tt><!FORMAT=INSERT_ALL_PARAMETERS_IN_QUERY></tt> вставляет в код HTML-страницы гиперссылку, содержащую все переданные веб-шлюзу параметры.<br />
<br />
===Система команд Веб-шлюза ИРБИС===<br />
<br />
Система ''команд'' Веб-шлюза ИРБИС позволяет задать собственный набор фреймов и порядок их объединения для каждой задачи. Для разных задач предусмотрены разные команды, например: для страницы приглашения к поиску, результата поиска, отбора записей в корзину заказов и т.д.<br />
<br />
==Обработка фреймов==<br />
<br />
В общем случае, веб-страница формируется путём объединения (''склеивания'') следующих частей:<br />
* ''заголовочной'' и ''подвальной'' частей, формируемых при помощи ''фреймов'' и<br />
* ''тела'' страницы, формируемого при помощи [[Язык форматирования системы ИРБИС#Понятие формата|''формата'']], который отрабатывает на наборе записей базы данных (соответствующих запросу пользователя).<br />
<br />
===Фрейм как язык разметки===<br />
<br />
Фрейм представляет собой текстовый файл, содержимое которого передаётся клиенту (в веб браузер), который также может содержать вставки, которые будут обработаны определённым образом перед передачей клиенту.<br />
<br />
Предусмотрены вставки следующих видов:<br />
* вставка на языке форматирования ИРБИС,<br />
* вложенный фрейм.<br />
<br />
'''''Вставка на языке форматирования''''' обозначается следующим образом<br />
<br />
<!FORMAT<br />
<br />
'''Пример:'''<br />
<br />
<nowiki><!FORMAT=if v3409='' then 'value=""' else 'value=','"',v3409,'"',fi></nowiki><br />
<br />
Если вставка на языке форматирования содержит символы, кодирующиеся в UTF-8 более чем одним байтом (например, кириллицу), то формат обязательно должен начинаться с восклицательного знака. Это связано с тем, что формат в кодировке UTF-8 должен предваряться восклицательным знаком, а все фреймы храняться именно в кодировке UTF-8.<br />
<br />
'''Пример:'''<br />
<br />
<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><br />
<br />
Пример вложенного фрейма:<br />
<br />
<!FORMAT=if &uf('IMAIN,SHOW_DUBLIN_CORE,0') <> '0' then /'<!FILE=Dublin_Core.frm>' fi><br />
<br />
===Пример последовательности действий Веб-шлюза ИРБИС при формировании веб-страницы в ответ на запрос===<br />
<br />
Веб-шлюз ИРБИС при получении команд '''F''', '''S''', '''T''', '''Z''', '''R''' выполняет следующую последовательность действий:<br />
* Веб-шлюз получил запрос. Запрос содержит параметры <tt>C21COM</tt>, <tt>I21DBN</tt> и другие.<br />
* В файле <tt>irbis_server.ini</tt> веб-шлюз находит секцию, имя которой соответствует значению параметра <tt>I21DBN</tt>. Иными словами: с одной стороны, в качестве значения параметра <tt>I21DBN</tt> указывается имя профиля, с другой стороны, для каждого профиля в файле <tt>irbis_server.ini</tt> должна содержаться секция, имя которой совпадает с именем профиля.<br />
* В указанной секции файла <tt>irbis_server.ini</tt> веб-шлюз находит значение параметра, соответствующего указанной в параметре <tt>C21COM</tt> команде (см. таблицу ''Команды веб-шлюза ИРБИС''). Полученное значение должно представлять собой список фреймов.<br />
* Фреймы обрабатываются, и результат, представляющий собой HTML-страницу, отправляется клиенту в качестве ответа.<br />
<br />
===Примеры перехода пользователя по страницам Веб-ИРБИС===<br />
<br />
Пример запроса начальной страницы:<br />
<br />
http://localhost:8080/cgi-bin/irbis64r_15_plus/cgiirbis_64_ft.exe?C21COM=F&I21DBN=IBIS_FULLTEXT&P21DBN=IBIS&Z21ID=&S21CNR=5<br />
<br />
где указаны:<br />
* команда шлюза F (''показ страницы'')<br />
* имя профиля IBIS_FULLTEXT<br />
* база данных IBIS<br />
* авторизация не осуществлялась<br />
<br />
Параметр S21CNR не обязателен.<br />
<br />
При авторизации запрос приобретает следующий вид<br />
<br />
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<br />
<br />
где указаны:<br />
* команда шлюза F (''показ страницы'')<br />
* имя профиля AUTHOR<br />
* база данных IBIS<br />
* параметры авторизации: Z21FLAGID, фамилия читателя Z21FAMILY и идентификатор читателя Z21ID<br />
<br />
При поиске по слову "библиотека" запрос приобретает следующий вид<br />
<br />
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<br />
<br />
где указаны:<br />
* команда шлюза S (''поиск'')<br />
* имя профиля IBIS_FULLTEXT<br />
* база данных IBIS<br />
* параметры авторизации: Z21ID<br />
* текущий запрос SEARCH_STRING и предыдущий запрос FT_S21STR (одинаковые)<br />
* USES21ALL=1 (использовать параметр S21ALL, применяется в поиске связных)<br />
* S21CNR=5 (порция при показе найденных)<br />
* S21REF=10 (для правильного формирования ссылок на страницы с результатами поиска)<br />
* C21COM1<br />
* FT_PREFIX<br />
* S21FMT=briefHTML_ft<br />
* AVT_S21P03=A%3D<br />
* AVT_S21P02=1<br />
* AVT_S21LOG=1<br />
* NAME_S21P03=T%3D<br />
* NAME_S21P02=1<br />
* NAME_S21LOG=1<br />
* UDC_S21P03=U%3D<br />
* UDC_S21P02=0<br />
* UDC_S21LOG=1<br />
* IZD_S21P03=M%3D<br />
* IZD_S21P02=1<br />
* IZD_S21LOG=1<br />
* DAT_S21P03=G%3D<br />
* DAT_S21P02=1<br />
* DAT_S21LOG=5<br />
* P21DBN=IBIS<br />
* FT_S21LOG=4<br />
* FT_S21P03=K%3D<br />
* FT_S21P01=3<br />
* S21STN=1<br />
* S21COLORTERMS=1<br />
<br />
==Ссылки==<br />
<br />
См. также:<br />
* [[Веб-ИРБИС]]<br />
* [[Установка Веб-шлюза Ирбис 64]]<br />
* [[Настройка и обслуживание Веб-ИРБИС]]<br />
* [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini]]<br />
<br />
[[Категория:Технология Веб-ИРБИС]]<br />
[[Категория:ИРБИС 64]]</div>Sokvhttp://wiki.elnit.org/index.php?title=%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F_%D0%92%D0%B5%D0%B1-%D0%98%D0%A0%D0%91%D0%98%D0%A1&diff=2431Технология Веб-ИРБИС2015-09-07T13:55:28Z<p>Sokv: </p>
<hr />
<div>Технология '''''Веб-ИРБИС''''' служит для создания Веб-приложений для работы с базами данных ИРБИС.<br />
<br />
Данная технология реализована в виде одноимённого [[Веб-ИРБИС|'''''программного продукта – Веб-ИРБИС''''']].<br />
<br />
==Веб-шлюз ИРБИС==<br />
<br />
Программный модуль ''Веб-шлюз ИРБИС'' обеспечивает обработку клиентских запросов.<br />
<br />
''Веб-шлюз ИРБИС'' является шлюзом CGI.<br />
<br />
Запрос может осуществляться по методу POST или GET.<br />
<br />
===Общая схема работы Веб-шлюза ИРБИС===<br />
<br />
Последовательность операций шлюза:<br />
* Чтение параметров INI файла<br />
* Препроцессинг<br />
** Формальный контроль правильности параметров<br />
** Интерпретация поискового запроса<br />
** Авторизация<br />
** Выполнение скрипта защиты<br />
** Повторная авторизация<br />
* Выполнение поиска<br />
* Формирование ответа (объединение и обработка фреймов)<br />
* Определение HTTP заголовков на основе INI файла<br />
* Возврат ответа<br />
<br />
В случае возникновения ошибки выполнения или превышения времени обработки запроса шлюз возвращает ошибку (error.html).<br />
<br />
====Препроцессинг====<br />
<br />
=====Скрипт-защита=====<br />
<br />
Формат скрипта защиты выполняет две функции: 1) проверку поступивших параметров запроса и защиту от взлома 2) обработку и дополнение параметров.<br />
<br />
Первая строка, сформированная форматом срипт-защиты, определяет общий результат – если это 0 или файлом не было возвращено никаких значений – скрипт-защита определила ошибку, если результат 1 или файлом были возвращены другие ненулевые значения – ошибки нет. В первом случае шлюз возвращает error.html, в последнем случае шлюз читает остальные строки формата и изменяет параметры запроса на новые.<br />
<br />
Например, строка ‘SCRIPT_DONE=YES’/ задаёт параметру SCRIPT_DONE значение YES.<br />
<br />
=====Авторизация пользователя=====<br />
<br />
Авторизация даёт возможность заказывать литературу, просматривать формуляр и редактировать корзину заказов.<br />
<br />
Для авторизации используется база RDR. Авторизация происходит по идентификатору и, если в пользовательском запросе задан параметр Z21FLAGID=1, – по фамилии. После авторизации шлюз выполняет шифрование идентификатора, и зашифрованный идентификатор передаётся при переходе по страницам.<br />
<br />
====Инициализация параметров====<br />
<br />
После поступления клиентского запроса осуществляется инициализация параметров веб-шлюза на основе параметров CGI.<br />
<br />
Обрабатываемый шлюзом набор параметров определяется конфигурационным файлом Веб-шлюза ИРБИС.<br />
<br />
Эти параметры доступны в контексте фреймов.<br />
<br />
Параметры используются, в том числе, для отслеживания состояния веб-страницы. В ответ на HTTP-запрос клиента (обычно – в генерируемую html-страницу, передаваемую клиенту) может включить набор пользовательских параметров вместе с их значениями, полученными в запросе, для чего есть специальная команда.<br />
<br />
Отслеживание состояния осуществляется с использованием следующих этапов: 1) данные передаются на веб-шлюз в виде параметров запроса; 2) веб-шлюз передаёт данные вместе со сформированной страницей в скрытых полях форм HTML.<br />
<br />
====Выполнение команды====<br />
<br />
Затем шлюз переходит к выполнению команды. Команда соответствует переданному параметру C21COM.<br />
<br />
В контексте выполнения команды используются полученные параметры.<br />
<br />
Для каждой команды есть набор '''основных параметров''', логика использования которых предопределена самим веб-шлюзом.<br />
<br />
К основным параметрам шлюза относятся:<br />
* <tt>C21COM</tt> – команда, которую должен выполнить веб-шлюз.<br />
* <tt>I21DBN</tt> – имя [[Профили|профиля]]. Веб-шлюз ИРБИС в соответствии с именем профиля определяет набор [[Фреймы|фреймов]], из которых составит ответ клиенту. Веб-шлюз ИРБИС ищет названия фреймов в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файле irbis_server.ini]] в секции, название которой соответствует значению параметра <tt>I21DBN</tt> (подробнее в разделе [[#Роль фреймов в работе веб-шлюза ИРБИС|Роль фреймов в работе веб-шлюза ИРБИС]]).<br />
* <tt>P21DBN</tt> – имя базы данных.<br />
* <tt>Z21ID</tt> – значение параметра авторизации.<br />
<br />
Кроме '''основных''', есть '''пользовательские параметры''' – все остальные параметры.<br />
<br />
Особенность пользовательских параметров в том, что их набор и использование полностью могут быть определены (переопределены) пользователями системы ИРБИС:<br />
* Определение параметров даётся в конфигурационном файле Веб-шлюза ИРБИС.<br />
* Параметры доступны в виде виртуальных полей на языке форматирования в контексте фреймов.<br />
<br />
====Ответ веб-шлюза ИРБИС клиенту====<br />
<br />
Порядок формирования ответа веб-шлюза ИРБИС клиенту зависит от команды.<br />
<br />
=====Ответ с использованием фреймов=====<br />
<br />
Для команд, представленных в таблице, осуществляется генерация ответа с использованием технологии выбора и обработки фреймов.<br />
<br />
Обычно это динамически формируемая веб-страница.<br />
<br />
'''Таблица.''' Команды веб-шлюза ИРБИС.<br />
{|<br />
|<br />
{| class="standard"<br />
!Значение параметра <tt>C21COM</tt>||Описание команды||Соответствующий параметр в <tt>irbis_server.ini</tt><br />
|-<br />
|'''F'''||'''''показ''''' – команда показа страницы||ShowFrames<br />
|-<br />
|'''S'''||'''''поиск''''' – команда выполнения и показа результатов поиска||SearchFrames<br />
|-<br />
|'''T'''||'''''словарь''''' – команда показа терминов словаря||DictionryFrames<br />
|-<br />
|'''Z'''||'''''заказ''''' – команда отбора записей в корзину заказов||ZakazFrames<br />
|-<br />
|'''R'''||'''''запись''''' – команда редактуры записей||RecUpdateFrames<br />
|}<br />
|}<br />
<br />
Выбор набора фреймов зависит от: команды (параметр C21COM) и профиля (параметр I21DBN).<br />
<br />
Возможные наборы фреймов предварительно сконфигурированы и указаны в конфигурационном файле <tt>irbis_server.ini</tt>.<br />
<br />
Откуда шлюз и считывает нужный набор, в зависимости от параметров (C21COM и I21DBN).<br />
<br />
Каждой команде веб-шлюза ИРБИС соответствует имя параметра в файле <tt>irbis_server.ini</tt> (см. таблицу ''Команды веб-шлюза ИРБИС'').<br />
<br />
=====Отправка клиенту ресурсного файла=====<br />
<br />
Для команд, представленных в таблице, отправка клиенту ресурсного файла.<br />
<br />
'''Таблица.''' Команды веб-шлюза ИРБИС.<br />
{|<br />
|<br />
{| class="standard"<br />
!Значение параметра <tt>C21COM</tt>||Описание команды<br />
|-<br />
|'''E'''||'''''экспорт''''' – команда выгрузки записей<br />
|-<br />
|'''2'''||'''''файл''''' – команда чтения внешнего объекта<br />
|-<br />
|'''4'''||'''''скачать''''' – команда заимствования записи<br />
|}<br />
|}<br />
<br />
===Команда поиска – S===<br />
<br />
'''Пример поиска всех страниц одного текста PDF'''<br />
<br />
Здесь мы предполагаем, что:<br />
* Работаем в контексте базы данных IBIS.<br />
* Поисковое выражение <tt>TXT=2__$</tt> позволяет найти все страницы файла <tt>2.pdf</tt>.<br />
<br />
Чтобы создать произвольный запрос, не связанный с существующим функционалом системы, можно создать новый профиль EXAMPLE1. Для этого в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|конфигурационном файле веб-шлюза ИРБИС irbis server.ini]] нужно добавить секцию EXAMPLE1<br />
[EXAMPLE1]<br />
FRAMES=C:\irbis\irbis_plus\IRBIS64\DATAI\frames_15_plus\FullText\<br />
ShowFrames=<br />
SearchFrames=RESULT<br />
DBNAME=IBIS<br />
где значение параметра FRAMES должно соответствовать местонахождению фреймов.<br />
<br />
Для команды поиска порядок формирования ответа определяется параметром SearchFrames. И запись<br />
SearchFrames=RESULT<br />
означает, что при формировании Веб-шлюзом ответа на команду поиска не участвуют фреймы, участвует только формат, который будет указан в запросе.<br />
<br />
В качестве этого формата предлагается создать файл '''<tt>example1.pft</tt>''' со следующим содержимым<br />
<nowiki>mfn,/,</nowiki><br />
Этот формат выводит список MFN найденных записей.<br />
<br />
Теперь всё готово, чтобы выполнить запрос<br />
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<br />
<br />
В основных полях мы указываем команду поиска (S), базу данных IBIS, профиль EXAMPLE1, идентификатор пользователя.<br />
<br />
Поле S21All содержит запрос на языке запросов ИРБИС. Если его декодировать из кодировки URL, то он будет выглядеть так<br />
<nowiki>S21All=<.>TXT=2__$<.></nowiki><br />
где точка в угловых скобках заменяет двойную кавычку, являющуюся ограничителем запроса в [[Язык запросов ИРБИС|языке запросов ИРБИС]].<br />
<br />
Формат вывода найденных записей, который предлагалось подготовить выше, указан в параметре S21FMT, без расширения.<br />
<br />
Результатом выполнения этого запроса будет обещанный список mfn, например<br />
0000000002<br />
0000000006<br />
0000000013<br />
0000000018<br />
<br />
Можно усложнить запрос, ограничив вывод порцией из 2 результатов, начиная со 2-го (параметры S21CNR и S21STN)<br />
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<br />
<br />
Результатом будет<br />
0000000006<br />
0000000013<br />
<br />
Можно усложнить формат вывода найденных записей '''<tt>example1.pft</tt>''', добавив информацию о количестве найденных, а также введённых порционных ограничениях<br />
<nowiki>mfn,'; кол-во найденных = ',v1001,'; с какого номера начать = ',v2223,'; размер порции = ',v2224,/,</nowiki><br />
<br />
Здесь используется тот факт, что имя параметра запроса связано с виртуальным полем с определённой меткой. Так параметру S21CNR соответствует метка 2224, параметру S21STN – 2223. (См. в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файле irbis_server.ini]].)<br />
<br />
Результатом будет<br />
0000000006; кол-во найденных = 4; с какого номера начать = 2; размер порции = 2<br />
0000000013; кол-во найденных = 4; с какого номера начать = 2; размер порции = 2<br />
<br />
===Команда показа терминов словаря – T===<br />
<br />
'''Пример команды показа терминов словаря'''<br />
<br />
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&<br />
<br />
где:<br />
* <tt>C21COM=T</tt> определяет команду,<br />
* <tt>I21DBN=IBIS</tt> базу данных,<br />
* <tt>Z21ID=1500323880383212</tt> идентификатор читателя в зашифрованном виде,<br />
* <tt>T21PRF=KT=</tt> префикс словаря,<br />
* <tt>T21TRM=a</tt> – требование терминов, начинающихся на <tt>a</tt>.<br />
<br />
Пример возврата:<br />
A20040830ARUSY|1<br />
A20041017ABELY|1<br />
A20041118ARUSY|1<br />
A2H|2<br />
A540|9<br />
A54001|7<br />
A550UTILIZATION|1<br />
AACDEMY|1<br />
AASL|2<br />
AASLPUBSANDJOURNALS|2<br />
<br />
===Добавление пользовательского параметра===<br />
<br />
Добавление пользовательского параметра осуществляется в несколько шагов:<br />
* '''добавление ''пользовательского параметра'' в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файл инициализации шлюза <tt>irbis_server.ini</tt>]]'''<br />
: Необходимо добавить описание нового ''пользовательского параметра'' в настроечный файл <tt>irbis_server.ini</tt>, задав имя и метку параметра. Для этого в секции <tt>[PARAMETRS]</tt> используются ''параметры ini файла'' <tt>PARNAME_</tt> и <tt>PARTAG_</tt> (не стоит путать термины ''пользовательские параметры'' веб-шлюза и ''параметры ini файла''), где вместо знака подчёркивания ставится номер пользовательского параметра по порядку, например:<br />
PARNAME2=C21COM<br />
PARTAG2=2222<br />
: В этом примере мы видим описание второго по порядку из определённых в секции <tt>[PARAMETRS]</tt> параметров: имя параметра <tt>C21COM</tt>, метка параметра <tt>2222</tt>. Имя и метка параметров должны быть уникальными. После того как описание ''пользовательского параметра'' добавлено необходимо изменить значение параметра <tt>PARCOUNT</tt> в секции <tt>[PARAMETRS]</tt>, его значение должно быть равно порядковому номеру последнего описания ''пользовательского параметра''.<br />
: ''Примечание:'' обратите внимание, что в файле <tt>irbis_server.ini</tt> хранятся описания не только пользовательских параметров, а присутствует также описания предустановленных параметров.<br />
* '''использование в файлах <tt>.frm</tt> команд <tt><!FORMAT=INSERT_ALL_PARAMETERS></tt> и <tt><!FORMAT=INSERT_ALL_PARAMETERS_IN_QUERY></tt>'''<br />
: Команда <tt><!FORMAT=INSERT_ALL_PARAMETERS></tt> обеспечивает вставку в код HTML-страницы всех непустых переданных веб-шлюзу параметров в виде скрытых элементов формы, например:<br />
<input type="hidden" name="PARAM_NAME" value="PARAM_VALUE"><br />
: Команда <tt><!FORMAT=INSERT_ALL_PARAMETERS_IN_QUERY></tt> вставляет в код HTML-страницы гиперссылку, содержащую все переданные веб-шлюзу параметры.<br />
<br />
===Система команд Веб-шлюза ИРБИС===<br />
<br />
Система ''команд'' Веб-шлюза ИРБИС позволяет задать собственный набор фреймов и порядок их объединения для каждой задачи. Для разных задач предусмотрены разные команды, например: для страницы приглашения к поиску, результата поиска, отбора записей в корзину заказов и т.д.<br />
<br />
==Обработка фреймов==<br />
<br />
В общем случае, веб-страница формируется путём объединения (''склеивания'') следующих частей:<br />
* ''заголовочной'' и ''подвальной'' частей, формируемых при помощи ''фреймов'' и<br />
* ''тела'' страницы, формируемого при помощи [[Язык форматирования системы ИРБИС#Понятие формата|''формата'']], который отрабатывает на наборе записей базы данных (соответствующих запросу пользователя).<br />
<br />
===Фрейм как язык разметки===<br />
<br />
Фрейм представляет собой текстовый файл, содержимое которого передаётся клиенту (в веб браузер), который также может содержать вставки, которые будут обработаны определённым образом перед передачей клиенту.<br />
<br />
Предусмотрены вставки следующих видов:<br />
* вставка на языке форматирования ИРБИС,<br />
* вложенный фрейм.<br />
<br />
'''''Вставка на языке форматирования''''' обозначается следующим образом<br />
<br />
<!FORMAT<br />
<br />
'''Пример:'''<br />
<br />
<nowiki><!FORMAT=if v3409='' then 'value=""' else 'value=','"',v3409,'"',fi></nowiki><br />
<br />
Если вставка на языке форматирования содержит символы, кодирующиеся в UTF-8 более чем одним байтом (например, кириллицу), то формат обязательно должен начинаться с восклицательного знака. Это связано с тем, что формат в кодировке UTF-8 должен предваряться восклицательным знаком, а все фреймы храняться именно в кодировке UTF-8.<br />
<br />
'''Пример:'''<br />
<br />
<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><br />
<br />
Пример вложенного фрейма:<br />
<br />
<!FORMAT=if &uf('IMAIN,SHOW_DUBLIN_CORE,0') <> '0' then /'<!FILE=Dublin_Core.frm>' fi><br />
<br />
===Пример последовательности действий Веб-шлюза ИРБИС при формировании веб-страницы в ответ на запрос===<br />
<br />
Веб-шлюз ИРБИС при получении команд '''F''', '''S''', '''T''', '''Z''', '''R''' выполняет следующую последовательность действий:<br />
* Веб-шлюз получил запрос. Запрос содержит параметры <tt>C21COM</tt>, <tt>I21DBN</tt> и другие.<br />
* В файле <tt>irbis_server.ini</tt> веб-шлюз находит секцию, имя которой соответствует значению параметра <tt>I21DBN</tt>. Иными словами: с одной стороны, в качестве значения параметра <tt>I21DBN</tt> указывается имя профиля, с другой стороны, для каждого профиля в файле <tt>irbis_server.ini</tt> должна содержаться секция, имя которой совпадает с именем профиля.<br />
* В указанной секции файла <tt>irbis_server.ini</tt> веб-шлюз находит значение параметра, соответствующего указанной в параметре <tt>C21COM</tt> команде (см. таблицу ''Команды веб-шлюза ИРБИС''). Полученное значение должно представлять собой список фреймов.<br />
* Фреймы обрабатываются, и результат, представляющий собой HTML-страницу, отправляется клиенту в качестве ответа.<br />
<br />
===Примеры перехода пользователя по страницам Веб-ИРБИС===<br />
<br />
Пример запроса начальной страницы:<br />
<br />
http://localhost:8080/cgi-bin/irbis64r_15_plus/cgiirbis_64_ft.exe?C21COM=F&I21DBN=IBIS_FULLTEXT&P21DBN=IBIS&Z21ID=&S21CNR=5<br />
<br />
где указаны:<br />
* команда шлюза F (''показ страницы'')<br />
* имя профиля IBIS_FULLTEXT<br />
* база данных IBIS<br />
* авторизация не осуществлялась<br />
<br />
Параметр S21CNR не обязателен.<br />
<br />
При авторизации запрос приобретает следующий вид<br />
<br />
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<br />
<br />
где указаны:<br />
* команда шлюза F (''показ страницы'')<br />
* имя профиля AUTHOR<br />
* база данных IBIS<br />
* параметры авторизации: Z21FLAGID, фамилия читателя Z21FAMILY и идентификатор читателя Z21ID<br />
<br />
При поиске по слову "библиотека" запрос приобретает следующий вид<br />
<br />
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<br />
<br />
где указаны:<br />
* команда шлюза S (''поиск'')<br />
* имя профиля IBIS_FULLTEXT<br />
* база данных IBIS<br />
* параметры авторизации: Z21ID<br />
* текущий запрос SEARCH_STRING и предыдущий запрос FT_S21STR (одинаковые)<br />
* USES21ALL=1 (использовать параметр S21ALL, применяется в поиске связных)<br />
* S21CNR=5 (порция при показе найденных)<br />
* S21REF=10 (для правильного формирования ссылок на страницы с результатами поиска)<br />
* C21COM1<br />
* FT_PREFIX<br />
* S21FMT=briefHTML_ft<br />
* AVT_S21P03=A%3D<br />
* AVT_S21P02=1<br />
* AVT_S21LOG=1<br />
* NAME_S21P03=T%3D<br />
* NAME_S21P02=1<br />
* NAME_S21LOG=1<br />
* UDC_S21P03=U%3D<br />
* UDC_S21P02=0<br />
* UDC_S21LOG=1<br />
* IZD_S21P03=M%3D<br />
* IZD_S21P02=1<br />
* IZD_S21LOG=1<br />
* DAT_S21P03=G%3D<br />
* DAT_S21P02=1<br />
* DAT_S21LOG=5<br />
* P21DBN=IBIS<br />
* FT_S21LOG=4<br />
* FT_S21P03=K%3D<br />
* FT_S21P01=3<br />
* S21STN=1<br />
* S21COLORTERMS=1<br />
<br />
==Ссылки==<br />
<br />
См. также:<br />
* [[Веб-ИРБИС]]<br />
* [[Установка Веб-шлюза Ирбис 64]]<br />
* [[Настройка и обслуживание Веб-ИРБИС]]<br />
* [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini]]<br />
<br />
[[Категория:Технология Веб-ИРБИС]]<br />
[[Категория:ИРБИС 64]]</div>Sokvhttp://wiki.elnit.org/index.php?title=%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F_%D0%92%D0%B5%D0%B1-%D0%98%D0%A0%D0%91%D0%98%D0%A1&diff=2430Технология Веб-ИРБИС2015-09-04T22:37:20Z<p>Sokv: </p>
<hr />
<div>Технология '''''Веб-ИРБИС''''' служит для создания Веб-приложений для работы с базами данных ИРБИС.<br />
<br />
Данная технология реализована в виде одноимённого [[Веб-ИРБИС|'''''программного продукта – Веб-ИРБИС''''']].<br />
<br />
==Веб-шлюз ИРБИС==<br />
<br />
Программный модуль ''Веб-шлюз ИРБИС'' обеспечивает обработку клиентских запросов.<br />
<br />
''Веб-шлюз ИРБИС'' является шлюзом CGI.<br />
<br />
Запрос может осуществляться по методу POST или GET.<br />
<br />
===Общая схема работы Веб-шлюза ИРБИС===<br />
<br />
Последовательность операций шлюза:<br />
* Чтение параметров INI файла<br />
* Препроцессинг<br />
** Формальный контроль правильности параметров<br />
** Интерпретация поискового запроса<br />
** Авторизация<br />
** Выполнение скрипта защиты<br />
** Повторная авторизация<br />
* Выполнение поиска<br />
* Формирование ответа (объединение и обработка фреймов)<br />
* Определение HTTP заголовков на основе INI файла<br />
* Возврат ответа<br />
<br />
В случае возникновения ошибки выполнения или превышения времени обработки запроса шлюз возвращает ошибку (error.html).<br />
<br />
====Препроцессинг====<br />
<br />
=====Скрипт-защита=====<br />
<br />
Формат скрипта защиты выполняет две функции: 1) проверку поступивших параметров запроса и защиту от взлома 2) обработку и дополнение параметров.<br />
<br />
Первая строка, сформированная форматом срипт-защиты, определяет общий результат – если это 0 или файлом не было возвращено никаких значений – скрипт-защита определила ошибку, если результат 1 или файлом были возвращены другие ненулевые значения – ошибки нет. В первом случае шлюз возвращает error.html, в последнем случае шлюз читает остальные строки формата и изменяет параметры запроса на новые.<br />
<br />
Например, строка ‘SCRIPT_DONE=YES’/ задаёт параметру SCRIPT_DONE значение YES.<br />
<br />
=====Авторизация пользователя=====<br />
<br />
Авторизация даёт возможность заказывать литературу, просматривать формуляр и редактировать корзину заказов.<br />
<br />
Для авторизации используется база RDR. Авторизация происходит по идентификатору и, если в пользовательском запросе задан параметр Z21FLAGID=1, – по фамилии. После авторизации шлюз выполняет шифрование идентификатора, и зашифрованный идентификатор передаётся при переходе по страницам.<br />
<br />
====Инициализация параметров====<br />
<br />
После поступления клиентского запроса осуществляется инициализация параметров веб-шлюза на основе параметров CGI.<br />
<br />
Обрабатываемый шлюзом набор параметров определяется конфигурационным файлом Веб-шлюза ИРБИС.<br />
<br />
Эти параметры доступны в контексте фреймов.<br />
<br />
Параметры используются, в том числе, для отслеживания состояния веб-страницы. В ответ на HTTP-запрос клиента (обычно – в генерируемую html-страницу, передаваемую клиенту) может включить набор пользовательских параметров вместе с их значениями, полученными в запросе, для чего есть специальная команда.<br />
<br />
Отслеживание состояния осуществляется с использованием следующих этапов: 1) данные передаются на веб-шлюз в виде параметров запроса; 2) веб-шлюз передаёт данные вместе со сформированной страницей в скрытых полях форм HTML.<br />
<br />
====Выполнение команды====<br />
<br />
Затем шлюз переходит к выполнению команды. Команда соответствует переданному параметру C21COM.<br />
<br />
В контексте выполнения команды используются полученные параметры.<br />
<br />
Для каждой команды есть набор '''основных параметров''', логика использования которых предопределена самим веб-шлюзом.<br />
<br />
К основным параметрам шлюза относятся:<br />
* <tt>C21COM</tt> – команда, которую должен выполнить веб-шлюз.<br />
* <tt>I21DBN</tt> – имя [[Профили|профиля]]. Веб-шлюз ИРБИС в соответствии с именем профиля определяет набор [[Фреймы|фреймов]], из которых составит ответ клиенту. Веб-шлюз ИРБИС ищет названия фреймов в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файле irbis_server.ini]] в секции, название которой соответствует значению параметра <tt>I21DBN</tt> (подробнее в разделе [[#Роль фреймов в работе веб-шлюза ИРБИС|Роль фреймов в работе веб-шлюза ИРБИС]]).<br />
* <tt>P21DBN</tt> – имя базы данных.<br />
* <tt>Z21ID</tt> – значение параметра авторизации.<br />
<br />
Кроме '''основных''', есть '''пользовательские параметры''' – все остальные параметры.<br />
<br />
Особенность пользовательских параметров в том, что их набор и использование полностью могут быть определены (переопределены) пользователями системы ИРБИС:<br />
* Определение параметров даётся в конфигурационном файле Веб-шлюза ИРБИС.<br />
* Параметры доступны в виде виртуальных полей на языке форматирования в контексте фреймов.<br />
<br />
====Ответ веб-шлюза ИРБИС клиенту====<br />
<br />
Порядок формирования ответа веб-шлюза ИРБИС клиенту зависит от команды.<br />
<br />
=====Ответ с использованием фреймов=====<br />
<br />
Для команд, представленных в таблице, осуществляется генерация ответа с использованием технологии выбора и обработки фреймов.<br />
<br />
Обычно это динамически формируемая веб-страница.<br />
<br />
'''Таблица.''' Команды веб-шлюза ИРБИС.<br />
{|<br />
|<br />
{| class="standard"<br />
!Значение параметра <tt>C21COM</tt>||Описание команды||Соответствующий параметр в <tt>irbis_server.ini</tt><br />
|-<br />
|'''F'''||'''''показ''''' – команда показа страницы||ShowFrames<br />
|-<br />
|'''S'''||'''''поиск''''' – команда выполнения и показа результатов поиска||SearchFrames<br />
|-<br />
|'''T'''||'''''словарь''''' – команда показа терминов словаря||DictionryFrames<br />
|-<br />
|'''Z'''||'''''заказ''''' – команда отбора записей в корзину заказов||ZakazFrames<br />
|-<br />
|'''R'''||'''''запись''''' – команда редактуры записей||RecUpdateFrames<br />
|}<br />
|}<br />
<br />
Выбор набора фреймов зависит от: команды (параметр C21COM) и профиля (параметр I21DBN).<br />
<br />
Возможные наборы фреймов предварительно сконфигурированы и указаны в конфигурационном файле <tt>irbis_server.ini</tt>.<br />
<br />
Откуда шлюз и считывает нужный набор, в зависимости от параметров (C21COM и I21DBN).<br />
<br />
Каждой команде веб-шлюза ИРБИС соответствует имя параметра в файле <tt>irbis_server.ini</tt> (см. таблицу ''Команды веб-шлюза ИРБИС'').<br />
<br />
=====Отправка клиенту ресурсного файла=====<br />
<br />
Для команд, представленных в таблице, отправка клиенту ресурсного файла.<br />
<br />
'''Таблица.''' Команды веб-шлюза ИРБИС.<br />
{|<br />
|<br />
{| class="standard"<br />
!Значение параметра <tt>C21COM</tt>||Описание команды<br />
|-<br />
|'''E'''||'''''экспорт''''' – команда выгрузки записей<br />
|-<br />
|'''2'''||'''''файл''''' – команда чтения внешнего объекта<br />
|-<br />
|'''4'''||'''''скачать''''' – команда заимствования записи<br />
|}<br />
|}<br />
<br />
===Команда поиска – S===<br />
<br />
'''Пример поиска всех страниц одного текста PDF'''<br />
<br />
Здесь мы предполагаем, что:<br />
* Работаем в контексте базы данных IBIS.<br />
* Поисковое выражение <tt>TXT=2__$</tt> позволяет найти все страницы файла <tt>2.pdf</tt>.<br />
<br />
Чтобы создать произвольный запрос, не связанный с существующим функционалом системы, можно создать новый профиль EXAMPLE1. Для этого в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|конфигурационном файле веб-шлюза ИРБИС irbis server.ini]] нужно добавить секцию EXAMPLE1<br />
[EXAMPLE1]<br />
FRAMES=C:\irbis\irbis_plus\IRBIS64\DATAI\frames_15_plus\FullText\<br />
ShowFrames=<br />
SearchFrames=RESULT<br />
DBNAME=IBIS<br />
где значение параметра FRAMES должно соответствовать местонахождению фреймов.<br />
<br />
Для команды поиска порядок формирования ответа определяется параметром SearchFrames. И запись<br />
SearchFrames=RESULT<br />
означает, что при формировании Веб-шлюзом ответа на команду поиска не участвуют фреймы, участвует только формат, который будет указан в запросе.<br />
<br />
В качестве этого формата предлагается создать файл '''<tt>example1.pft</tt>''' со следующим содержимым<br />
<nowiki>mfn,/,</nowiki><br />
Этот формат выводит список MFN найденных записей.<br />
<br />
Теперь всё готово, чтобы выполнить запрос<br />
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<br />
<br />
В основных полях мы указываем команду поиска (S), базу данных IBIS, профиль EXAMPLE1, идентификатор пользователя.<br />
<br />
Поле S21All содержит запрос на языке запросов ИРБИС. Если его декодировать из кодировки URL, то он будет выглядеть так<br />
<nowiki>S21All=<.>TXT=2__$<.></nowiki><br />
<br />
Формат вывода найденных записей, который предлагалось подготовить выше, указан в параметре S21FMT, без расширения.<br />
<br />
Результатом выполнения этого запроса будет обещанный список mfn, например<br />
0000000002<br />
0000000006<br />
0000000013<br />
0000000018<br />
<br />
Можно усложнить запрос, ограничив вывод порцией из 2 результатов, начиная со 2-го (параметры S21CNR и S21STN)<br />
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<br />
<br />
Результатом будет<br />
0000000006<br />
0000000013<br />
<br />
Можно усложнить формат вывода найденных записей '''<tt>example1.pft</tt>''', добавив информацию о количестве найденных, а также введённых порционных ограничениях<br />
<nowiki>mfn,'; кол-во найденных = ',v1001,'; с какого номера начать = ',v2223,'; размер порции = ',v2224,/,</nowiki><br />
<br />
Здесь используется тот факт, что имя параметра запроса связано с виртуальным полем с определённой меткой. Так параметру S21CNR соответствует метка 2224, параметру S21STN – 2223. (См. в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файле irbis_server.ini]].)<br />
<br />
Результатом будет<br />
0000000006; кол-во найденных = 4; с какого номера начать = 2; размер порции = 2<br />
0000000013; кол-во найденных = 4; с какого номера начать = 2; размер порции = 2<br />
<br />
===Команда показа терминов словаря – T===<br />
<br />
'''Пример команды показа терминов словаря'''<br />
<br />
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&<br />
<br />
где:<br />
* <tt>C21COM=T</tt> определяет команду,<br />
* <tt>I21DBN=IBIS</tt> базу данных,<br />
* <tt>Z21ID=1500323880383212</tt> идентификатор читателя в зашифрованном виде,<br />
* <tt>T21PRF=KT=</tt> префикс словаря,<br />
* <tt>T21TRM=a</tt> – требование терминов, начинающихся на <tt>a</tt>.<br />
<br />
Пример возврата:<br />
A20040830ARUSY|1<br />
A20041017ABELY|1<br />
A20041118ARUSY|1<br />
A2H|2<br />
A540|9<br />
A54001|7<br />
A550UTILIZATION|1<br />
AACDEMY|1<br />
AASL|2<br />
AASLPUBSANDJOURNALS|2<br />
<br />
===Добавление пользовательского параметра===<br />
<br />
Добавление пользовательского параметра осуществляется в несколько шагов:<br />
* '''добавление ''пользовательского параметра'' в [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini|файл инициализации шлюза <tt>irbis_server.ini</tt>]]'''<br />
: Необходимо добавить описание нового ''пользовательского параметра'' в настроечный файл <tt>irbis_server.ini</tt>, задав имя и метку параметра. Для этого в секции <tt>[PARAMETRS]</tt> используются ''параметры ini файла'' <tt>PARNAME_</tt> и <tt>PARTAG_</tt> (не стоит путать термины ''пользовательские параметры'' веб-шлюза и ''параметры ini файла''), где вместо знака подчёркивания ставится номер пользовательского параметра по порядку, например:<br />
PARNAME2=C21COM<br />
PARTAG2=2222<br />
: В этом примере мы видим описание второго по порядку из определённых в секции <tt>[PARAMETRS]</tt> параметров: имя параметра <tt>C21COM</tt>, метка параметра <tt>2222</tt>. Имя и метка параметров должны быть уникальными. После того как описание ''пользовательского параметра'' добавлено необходимо изменить значение параметра <tt>PARCOUNT</tt> в секции <tt>[PARAMETRS]</tt>, его значение должно быть равно порядковому номеру последнего описания ''пользовательского параметра''.<br />
: ''Примечание:'' обратите внимание, что в файле <tt>irbis_server.ini</tt> хранятся описания не только пользовательских параметров, а присутствует также описания предустановленных параметров.<br />
* '''использование в файлах <tt>.frm</tt> команд <tt><!FORMAT=INSERT_ALL_PARAMETERS></tt> и <tt><!FORMAT=INSERT_ALL_PARAMETERS_IN_QUERY></tt>'''<br />
: Команда <tt><!FORMAT=INSERT_ALL_PARAMETERS></tt> обеспечивает вставку в код HTML-страницы всех непустых переданных веб-шлюзу параметров в виде скрытых элементов формы, например:<br />
<input type="hidden" name="PARAM_NAME" value="PARAM_VALUE"><br />
: Команда <tt><!FORMAT=INSERT_ALL_PARAMETERS_IN_QUERY></tt> вставляет в код HTML-страницы гиперссылку, содержащую все переданные веб-шлюзу параметры.<br />
<br />
===Система команд Веб-шлюза ИРБИС===<br />
<br />
Система ''команд'' Веб-шлюза ИРБИС позволяет задать собственный набор фреймов и порядок их объединения для каждой задачи. Для разных задач предусмотрены разные команды, например: для страницы приглашения к поиску, результата поиска, отбора записей в корзину заказов и т.д.<br />
<br />
==Обработка фреймов==<br />
<br />
В общем случае, веб-страница формируется путём объединения (''склеивания'') следующих частей:<br />
* ''заголовочной'' и ''подвальной'' частей, формируемых при помощи ''фреймов'' и<br />
* ''тела'' страницы, формируемого при помощи [[Язык форматирования системы ИРБИС#Понятие формата|''формата'']], который отрабатывает на наборе записей базы данных (соответствующих запросу пользователя).<br />
<br />
===Фрейм как язык разметки===<br />
<br />
Фрейм представляет собой текстовый файл, содержимое которого передаётся клиенту (в веб браузер), который также может содержать вставки, которые будут обработаны определённым образом перед передачей клиенту.<br />
<br />
Предусмотрены вставки следующих видов:<br />
* вставка на языке форматирования ИРБИС,<br />
* вложенный фрейм.<br />
<br />
'''''Вставка на языке форматирования''''' обозначается следующим образом<br />
<br />
<!FORMAT<br />
<br />
'''Пример:'''<br />
<br />
<nowiki><!FORMAT=if v3409='' then 'value=""' else 'value=','"',v3409,'"',fi></nowiki><br />
<br />
Если вставка на языке форматирования содержит символы, кодирующиеся в UTF-8 более чем одним байтом (например, кириллицу), то формат обязательно должен начинаться с восклицательного знака. Это связано с тем, что формат в кодировке UTF-8 должен предваряться восклицательным знаком, а все фреймы храняться именно в кодировке UTF-8.<br />
<br />
'''Пример:'''<br />
<br />
<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><br />
<br />
Пример вложенного фрейма:<br />
<br />
<!FORMAT=if &uf('IMAIN,SHOW_DUBLIN_CORE,0') <> '0' then /'<!FILE=Dublin_Core.frm>' fi><br />
<br />
===Пример последовательности действий Веб-шлюза ИРБИС при формировании веб-страницы в ответ на запрос===<br />
<br />
Веб-шлюз ИРБИС при получении команд '''F''', '''S''', '''T''', '''Z''', '''R''' выполняет следующую последовательность действий:<br />
* Веб-шлюз получил запрос. Запрос содержит параметры <tt>C21COM</tt>, <tt>I21DBN</tt> и другие.<br />
* В файле <tt>irbis_server.ini</tt> веб-шлюз находит секцию, имя которой соответствует значению параметра <tt>I21DBN</tt>. Иными словами: с одной стороны, в качестве значения параметра <tt>I21DBN</tt> указывается имя профиля, с другой стороны, для каждого профиля в файле <tt>irbis_server.ini</tt> должна содержаться секция, имя которой совпадает с именем профиля.<br />
* В указанной секции файла <tt>irbis_server.ini</tt> веб-шлюз находит значение параметра, соответствующего указанной в параметре <tt>C21COM</tt> команде (см. таблицу ''Команды веб-шлюза ИРБИС''). Полученное значение должно представлять собой список фреймов.<br />
* Фреймы обрабатываются, и результат, представляющий собой HTML-страницу, отправляется клиенту в качестве ответа.<br />
<br />
===Примеры перехода пользователя по страницам Веб-ИРБИС===<br />
<br />
Пример запроса начальной страницы:<br />
<br />
http://localhost:8080/cgi-bin/irbis64r_15_plus/cgiirbis_64_ft.exe?C21COM=F&I21DBN=IBIS_FULLTEXT&P21DBN=IBIS&Z21ID=&S21CNR=5<br />
<br />
где указаны:<br />
* команда шлюза F (''показ страницы'')<br />
* имя профиля IBIS_FULLTEXT<br />
* база данных IBIS<br />
* авторизация не осуществлялась<br />
<br />
Параметр S21CNR не обязателен.<br />
<br />
При авторизации запрос приобретает следующий вид<br />
<br />
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<br />
<br />
где указаны:<br />
* команда шлюза F (''показ страницы'')<br />
* имя профиля AUTHOR<br />
* база данных IBIS<br />
* параметры авторизации: Z21FLAGID, фамилия читателя Z21FAMILY и идентификатор читателя Z21ID<br />
<br />
При поиске по слову "библиотека" запрос приобретает следующий вид<br />
<br />
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<br />
<br />
где указаны:<br />
* команда шлюза S (''поиск'')<br />
* имя профиля IBIS_FULLTEXT<br />
* база данных IBIS<br />
* параметры авторизации: Z21ID<br />
* текущий запрос SEARCH_STRING и предыдущий запрос FT_S21STR (одинаковые)<br />
* USES21ALL=1 (использовать параметр S21ALL, применяется в поиске связных)<br />
* S21CNR=5 (порция при показе найденных)<br />
* S21REF=10 (для правильного формирования ссылок на страницы с результатами поиска)<br />
* C21COM1<br />
* FT_PREFIX<br />
* S21FMT=briefHTML_ft<br />
* AVT_S21P03=A%3D<br />
* AVT_S21P02=1<br />
* AVT_S21LOG=1<br />
* NAME_S21P03=T%3D<br />
* NAME_S21P02=1<br />
* NAME_S21LOG=1<br />
* UDC_S21P03=U%3D<br />
* UDC_S21P02=0<br />
* UDC_S21LOG=1<br />
* IZD_S21P03=M%3D<br />
* IZD_S21P02=1<br />
* IZD_S21LOG=1<br />
* DAT_S21P03=G%3D<br />
* DAT_S21P02=1<br />
* DAT_S21LOG=5<br />
* P21DBN=IBIS<br />
* FT_S21LOG=4<br />
* FT_S21P03=K%3D<br />
* FT_S21P01=3<br />
* S21STN=1<br />
* S21COLORTERMS=1<br />
<br />
==Ссылки==<br />
<br />
См. также:<br />
* [[Веб-ИРБИС]]<br />
* [[Установка Веб-шлюза Ирбис 64]]<br />
* [[Настройка и обслуживание Веб-ИРБИС]]<br />
* [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini]]<br />
<br />
[[Категория:Технология Веб-ИРБИС]]<br />
[[Категория:ИРБИС 64]]</div>Sokvhttp://wiki.elnit.org/index.php?title=%D0%98%D0%BD%D0%B4%D0%B5%D0%BA%D1%81_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%98%D0%A0%D0%91%D0%98%D0%A1&diff=2429Индекс базы данных ИРБИС2015-09-04T21:17:57Z<p>Sokv: </p>
<hr />
<div>''Индекс'' [[Базы данных ИРБИС|базы данных ИРБИС]] – специальная структура, являющаяся частью базы данных, которая обеспечивает быстрый поиск.<br />
<br />
Термин ''словарь'' получил широкое распространение и фактически стал в ИРБИС-сообществе своего рода заменой понятию ''индекс'' (см. подраздел [[#Словарь базы данных|''Словарь базы данных'']]).<br />
<br />
В базах данных ИРБИС используется [http://ru.wikipedia.org/wiki/%D0%98%D0%BD%D0%B2%D0%B5%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81 ''инвертированный индекс''], который принято называть ''инвертированный файл'' (также используют термин ''инверсный файл'').<br />
<br />
''Индекс'' создаётся для каждой базы данных ИРБИС.<br />
<br />
Для формулировки запросов, с помощью которых выполняется быстрый поиск, служит [[Язык запросов ИРБИС|язык запросов ИРБИС]].<br />
<br />
==Словарь базы данных==<br />
<br />
Часто ''словарь'' используют как синоним понятия ''индекс'' базы данных. Хотя, строго говоря, ''словарь'' – лишь часть ''индекса'', наряду со ''списком индексных ссылок'' (см. подраздел [[#Структура индекса базы данных ИРБИС|''Структура индекса базы данных ИРБИС'']]).<br />
<br />
''Примечание: пользователям хорошо знаком словарь, представленный непосредственно в графическом интерфейсе в ряде АРМ системы ИРБИС; возможно, поэтому термин "словарь" получил широкое распространение и фактически стал в ИРБИС-сообществе своего рода заменой понятию "индекс".''<br />
<br />
==Определение ''индекса'' базы данных ИРБИС==<br />
<br />
Для построения ''индекса'' (и поддержания в актуальном состоянии) требуется его определение. Определением служат: [[#ТВП для инвертированного файла|''ТВП для инвертированного файла'']] и [[Механизм актуализации записи#Таблица актуализации|''таблица актуализации'']].<br />
<br />
===ТВП для инвертированного файла===<br />
<br />
''ТВП для инвертированного файла'' – [[ТВП]], которая задаёт правила выбора элементов для инвертированного индекса базы данных ИРБИС.<br />
<br />
В файловой структуре каждой базы предусмотрена одна ''ТВП для инвертированного файла''. Подробнее [[Файлы ИРБИС#ТВП для инвертированного файла|см. в подразделе ''ТВП для инвертированного файла'' статьи ''Файлы ИРБИС'']].<br />
<br />
[[Базы данных ИРБИС#Виды баз данных ИРБИС 64|Типовые базы данных (БД электронного каталога, полнотекстовая БД и т.д.)]] содержат в себе соответствующие типовые ''ТВП для инвертированного файла''.<br />
<br />
Также см.:<br />
* [[Рекомендации по обслуживанию баз данных ИРБИС#Внесение изменений в ТВП для инвертированного файла|подраздел ''Внесение изменений в ТВП для инвертированного файла'' статьи ''Рекомендации по обслуживанию баз данных ИРБИС'']].<br />
<br />
==Структура ''индекса'' базы данных ИРБИС==<br />
<br />
''Индекс'' представляет собой совокупность двух структур: ''словарь поисковых терминов'' в структуре бинарного дерева и список ''индексных ссылок'', соответствующих каждому термину.<br />
<br />
===Словарь поисковых терминов===<br />
<br />
Элементы, созданные посредством ''ТВП для инвертированного файла'', составляют словарь поисковых терминов для базы данных.<br />
<br />
===Список индексных ссылок===<br />
<br />
Система связывает с каждым ''поисковым термином'' список ''индексных ссылок'', обеспечивающих требуемую связь с записями. Каждый термин имеет столько ''индексных ссылок'', сколько раз он встречается в базе данных.<br />
<br />
===Структура индексной ссылки===<br />
<br />
Для поддержки развитых средств поиска, имеющихся в языке поиска, таких, например, как поиск по ключевым словам в определенных элементах описания, каждая индексная ссылка содержит помимо MFN записи некоторую дополнительную информацию, имеющую отношение к расположению термина в записи.<br />
<br />
Индексная ссылка имеет следующие 4 компоненты:<br />
# MFN записи, содержащей термин. Эта компонента вводится в состав индексной ссылки при актуализации/формировании словаря автоматически.<br />
# Идентификатор поля, используемый в процессе поиска при указании [[Язык запросов ИРБИС#Прямой поиск|квалификатора]]. Эта компонента вводится в состав индексной ссылки на основе ТВП. Обратите внимание на то, что один и тот же идентификатор поля может быть присвоен различным полям, указанным в формате выборки.<br />
# Номер экземпляра (повторения) повторяющегося поля, необходимый для осуществления поиска на уровне поля и операторов близости расположения терминов в повторяющихся полях (в АРМах ИРБИС это используется при поиске по логике «И (в поле)»). Для того, чтобы можно было использовать указанный метод поиска (обычно для этого необходим метод индексирования 4 или 8), необходимо определить формат в ТВП таким, чтобы в его выходных данных между экземплярами повторяющегося поля располагался знак процента (%), для чего нужно задать его в качестве повторяющегося суффикс-литерала. Например, строка ТВП для инвертирования повторяющегося поля 10 должна содержать формат v10|%|. Система перед обработкой каждой строки ТВП устанавливает номер повторения в 1 и затем увеличивает его на 1 всякий раз, когда в созданном форматом тексте встречается символ %.<br />
# Последовательный номер термина, необходимый для осуществления поиска по близости расположения терминов (в АРМах ИРБИС это используется при поиске по логике «И (фраза)»). Управление присвоением данного номера происходит следующим образом: он устанавливается в 1 перед обработкой каждой строки ТВП и при изменении номера повторения и увеличивается на 1 для каждого элемента, созданного указанным методом индексирования. Например, предположим, что в повторяющемся поле 331 содержится краткое содержание литературного источника, причем каждое повторение состоит из одного абзаца. Пусть данное поле проиндексировано методом 4. Если определить формат выборки данных mdl,v331|%|, то начиная с каждого абзаца краткого содержания словам будет присваиваться последовательный номер, начиная с 1 в каждом абзаце, а если бы формат выборки был равным mdl,v331, то словам присваивался бы сквозной последовательный номер по всему краткому содержанию, например, первое слово второго абзаца имело бы последовательный номер на 1 больше номера последнего слова первого абзаца.<br />
<br />
==Обслуживание индекса==<br />
<br />
Инвертированный индекс в ИРБИС не является полностью автоматизированным, и в определённых ситуациях может потребоваться вмешательство администратора баз данных ИРБИС.<br />
<br />
Могут возникнуть следующие ситуации, требующие обслуживания индекса:<br />
* Новые записи, введенные в файл документов, недоступны при поиске.<br />
* Записи, которые подвергались модификации, доступными при поиске, но под старыми элементами доступа.<br />
* Удаленные записи все еще зарегистрированы под их элементами доступа, однако сами записи не отображаются.<br />
* ''ТВП для инвертированного файла'' была изменена (результаты поиска остались прежними).<br />
<br />
В системе ИРБИС имеются две операции, которые приводят индекс базы данных в актуальное состояние, соответствующее ''ТВП для инвертированного файла'' и содержимому базы данных: это операции ''создания словаря'' и ''актуализации словаря''. Их отличие заключается в алгоритме и особенностях применения.<br />
<br />
===Флаг актуализации===<br />
<br />
Флаг актуализации позволяет отмечать каждую запись базы данных как ''актуализированную'' или ''неактуализированную'', при этом считается, что:<br />
* запись ''актуализирована'' – значит инвертированный индекс отражает её содержимое;<br />
* запись ''неактуализирована'' – значит инвертированный индекс НЕ отражает её содержимое.<br />
<br />
Благодаря использованию в системе ИРБИС данного флага возможно:<br />
* установить факт наличия ''неактуализированных'' записей и, соответственно, сделать вывод о необходимости привести ''инвертированный индекс'' в актуальное состояние;<br />
* посчитать соотношение ''актуализированных'' и ''неактуализированных'' записей, в соответствии с которым принимать решение о приведении ''инвертированного индекса'' в актуальное состояние с помощью ''создания словаря'' или ''актуализации''.<br />
<br />
===Создание словаря===<br />
<br />
Создание [[#Словарь базы данных ИРБИС (инвертированный файл)|словаря]] – это создание инвертированного индекса с использованием [[Таблица выбора полей#ТВП для инвертированного файла|''ТВП для инвертированного файла'']] на основе всех ''записей'' (''документов'') базы данных.<br />
<br />
Типичные примеры ситуаций, в которых выполняют создание словаря:<br />
* имеется значительное количество неактуализированных записей по сравнению с общим количеством записей в базе данных;<br />
* было добавлено значительное количество текстов в полнотекстовую базу данных;<br />
* была изменена ''ТВП для инвертированного файла''.<br />
<br />
Создание словаря [[АРМ Администратор#Создание словаря базы данных ИРБИС|осуществляется с помощью АРМ Администратор]]. Ознакомьтесь с [[Рекомендации по обслуживанию баз данных ИРБИС#Создание словаря базы данных ИРБИС|рекомендациями по созданию словаря]].<br />
<br />
Алгоритм создания словаря предусматривает три этапа, которые могут быть выполнены по отдельности:<br />
* отбор<br />
* сортировка<br />
* загрузка.<br />
<br />
===Актуализация словаря===<br />
<br />
Актуализация [[#Словарь базы данных ИРБИС (инвертированный файл)|словаря]] – это приведение инвертированного индекса в актуальное состояние на основании документов, для которых по каким-либо причинам (авария, [[Модуль глобальной корректировки базы данных|глобальная корректировка]], импорт и копирование через АРМ Администратор) не выполнялась автоматическая актуализация при их вводе/корректировке.<br />
<br />
Типичные примеры ситуаций, в которых выполняют создание словаря:<br />
* количество неактуализированных записей невелико по сравнению с общим количеством записей в базе данных.<br />
<br />
Актуализация [[АРМ Администратор#Актуализация словаря базы данных ИРБИС|осуществляется с помощью АРМ Администратор]]. Ознакомьтесь с [[Рекомендации по обслуживанию баз данных ИРБИС#Актуализация словаря базы данных ИРБИС|рекомендациями по актуализации словаря]].<br />
<br />
Описание механизма актуализации инвертированного файла в связи с изменением отдельной записи см. в статье [[Механизм актуализации записи]].<br />
<br />
===Реорганизация словаря===<br />
<br />
Реорганизация словаря представляет собой структурное перестроение ''инвертированного файла'' с целью уменьшения размера файла и повышения быстродействия работы с ним.<br />
<br />
Возникновение необходимости реорганизации словаря связано с тем, что в результате выполнения актуализации словаря может происходить усложнение структуры инвертированного файла и появление «пустот», которые реорганизация устраняет.<br />
<br />
Реорганизация словаря [[АРМ Администратор#Реорганизация словаря базы данных ИРБИС|осуществляется с помощью АРМ Администратор]]. Ознакомьтесь с [[Рекомендации по обслуживанию баз данных ИРБИС#Реорганизация словаря базы данных ИРБИС|рекомендациями по реорганизации словаря]].<br />
<br />
==Файлы ''индекса'' базы данных ИРБИС==<br />
<br />
''Индекс'' базы данных ИРБИС хранится на файловой системе в виде трёх файлов: ''словарь поисковых терминов'' в файлах <tt>.n01</tt> и <tt>.l01</tt>; список ''индексных ссылок'' в файле <tt>.ifp</tt>.<br />
<br />
В бинарном дереве файл с расширением <tt>.n01</tt> содержит узлы дерева и файл с расширением <tt>.l01</tt> – листья. Записи с листьями указывают на файл ссылок <tt>.ifp</tt>.<br />
<br />
Об особенностях размещения файлов <tt>.n01</tt>, <tt>.l01</tt> и <tt>.ifp</tt> см. [[Файлы ИРБИС#Файлы баз данных ИРБИС|подраздел ''Файлы баз данных ИРБИС'' статьи ''Файлы ИРБИС'']].<br />
<br />
Взаимосвязи между файлами <tt>.n01</tt> и <tt>.l01</tt> обеспечиваются ссылками, которые представляют собой относительные адреса соответствующих записей. Относительный адрес это порядковый номер записи в данном файле.<br />
<br />
Структура записи одинакова для <tt>.n01</tt> и <tt>.l01</tt> файлов. Размер (длина) записи зависит от реализации (512, 1024, 2048, 4096). Таким образом, максимальный размер файлов <tt>.l01</tt> и <tt>.n01</tt> определяется как 2 Гб * размер записи. В данной реализации размер записи 2048.<br />
<br />
Адрес корневой записи файла <tt>.n01</tt> сохраняется как номер первой записи.<br />
<br />
Смещение на запись в файле <tt>.ifp</tt> сохраняется в файле <tt>.l01</tt> и имеет длину 64 байта (в данной реализации используется только младшее слово этого смещения).<br />
<br />
===Формат файлов <tt>.n01</tt> и <tt>.l01</tt>===<br />
<br />
Файлы состоят из записей (блоков) постоянной длины. Записи состоят из трех частей: лидера, справочника и ключей переменной длины.<br />
<br />
Формат лидера записи:<br />
{| class="standard"<br />
!Число бит||Параметр||Описание<br />
|-<br />
|32||NUMBER||номер записи (начиная с 1; в <tt>.n01</tt> файле номер первой записи равен номеру корневой записи дерева)<br />
|-<br />
|32||PREV||номер предыдущей записи (если нет = -1)<br />
|-<br />
|32||NEXT||номер следующей записи (если нет = -1)<br />
|-<br />
|16||TERMS||число ключей в записи<br />
|-<br />
|16||OFFSET_FREE||смещение на свободную позицию в записи (от начала записи)<br />
|}<br />
<br />
Справочник это таблица, определяющая поисковый термин. Каждый ключ переменной длины, который есть в записи, представлен в справочнике одним вхождением следующего формата:<br />
{| class="standard"<br />
!Число бит||Параметр||Описание<br />
|-<br />
|16||LEN||длина ключа<br />
|-<br />
|16||OFFSET_KEY||смещение на ключ (от начала записи)<br />
|-<br />
|32||LOW||В <tt>.n01</tt> файле: ссылка на запись файла <tt>.n01</tt> (если LOW > 0) или файла <tt>.l01</tt> (если LOW < 0), у которых 1-й ключ равен данному.<br />
<br />
Положительное значение LOW определяет ветку индекса иерархически более низкого уровня. Самый низкий уровень индекса (LOW < 0) соответствует ссылкам на записи (листья) файла <tt>.l01</tt>.<br />
<br />
В <tt>.l01</tt> файле: младшее слово 8-байтового смещения на ссылочную запись в <tt>.ifp</tt>.<br />
|-<br />
|32||HIGH||В <tt>.n01</tt> файле: всегда 0.<br />
<br />
В <tt>.l01</tt> файле: старшее слово 8 байтового смещения на ссылочную запись в <tt>.ifp</tt>.<br />
|}<br />
<br />
Ключи переменной длины записываются начиная с конца записи, так что порядок входов, соответствующих им, определяется алфавитным порядком ключей. Сами ключи располагаются вплотную друг к другу без разделителей в порядке поступления на запись.<br />
<br />
* '''Длина справочника''' 12 * TERMS.<br />
* '''Длина ключей''' = [Размер записи] – OFSET_FREE.<br />
* '''Размер свободного места в записи''' = 16 + 12 * TERMS - [длина ключей].<br />
* '''Размер записи''' зависит от реализации и может быть равен в байтах: 512, 1024, 2048, 4096.<br />
<br />
===Формат файла <tt>.ifp</tt>===<br />
<br />
Файл содержит список ссылок для каждого термина словаря.<br />
<br />
Список ссылок может быть представлен в 2-х различных форматах. Выбор формата размещения ссылок осуществляется при загрузке словаря из файла <tt>.lk1</tt> (этот файл формируется после отбора и сортировки терминов) в зависимости от общего числа ссылок для данного термина. Обыкновенный формат – это заголовок блока и набор упорядоченных ссылок. По превышении определенного числа ссылок (MIN_POSTINGS_IN_BLOCK – в данной реализации 256) формат включает специальный блок и набор блоков обыкновенного формата размер которых определяется по следующей схеме: блоки 4, 8, 16, 32 Кб для общего числа ссылок соответственно 256-32000, 32000-64000, 64000-128000, 128000 и более.<br />
<br />
Такая схема оптимизирует работу с диском в процессе инвертирования записи в базах данных, характеризующихся большим количеством ссылок на термин.<br />
<br />
====Обыкновенный формат записи <tt>.ifp</tt>====<br />
<br />
Запись состоит из заголовка и упорядоченного набора ссылок.<br />
<br />
Ссылка имеет следующий формат:<br />
{| class="standard"<br />
!Число бит||Параметр||Описание<br />
|-<br />
|32||PMFN||номер записи<br />
|-<br />
|32||PTAG||идентификатор поля, назначенный при отборе терминов в словарь<br />
|-<br />
|32||POCC||номер повторения<br />
|-<br />
|32||PCNT||номер термина в поле<br />
|}<br />
<br />
Заголовок имеет следующий формат:<br />
{| class="standard"<br />
!Число бит||Параметр||Описание<br />
|-<br />
|32||LOW||младшее слово смещения на следующую запись (если нет 0)<br />
|-<br />
|32||HIGH||старшее слово смещения на следующую запись (если нет 0)<br />
|-<br />
|32||TOTP||общее число ссылок для данного термина (только в первой записи); число ссылок в данном блоке (в следующих записях)<br />
|-<br />
|32||SEGP||число ссылок в данном блоке<br />
|-<br />
|32||SEGC||вместимость записи в ссылках<br />
|}<br />
<br />
Признак последнего блока – LOW = HIGH = -1<br />
<br />
====Специальный формат записи <tt>.ifp</tt>====<br />
<br />
В этом случае первой записью является специальный блок, который представляет собой заголовок (обыкновенного формата), в котором смещения имеют специальные значения = -1001, и набор вхождений следующего формата:<br />
{| class="standard"<br />
!Число бит||Параметр||Описание<br />
|-<br />
|32||POSTING||1-я ссылка из записи обыкновенного формата<br />
|-<br />
|32||LOW||младшее слово смещения на следующую запись (если нет 0)<br />
|-<br />
|32||HIGH||старшее слово смещения на следующую запись (если нет 0)<br />
|}<br />
<br />
Число вхождений кратно 4. Записи, на которые ссылается специальный блок связаны между собой как описано выше. Общее количество ссылок для данного термина сохраняется только в специальном блоке.<br />
<br />
====Модификация записей файла <tt>.ifp</tt>====<br />
<br />
При выполнении актуализации инвертированного файла могут создаваться новые дополнительные записи при добавлении новых ссылок. В этом случае создается новая запись размером, равным общему количеству ссылок, если нет специального блока, и размером, равным количеству ссылок в данной записи, если есть. Новая запись создается таким образом, чтобы не нарушалась возрастающая последовательность следования ссылок. Новая запись связывается с существующими через поле NXT_, ссылки распределяются равномерно между старой и новой записью.<br />
<br />
==Ссылки==<br />
<br />
'''См. также:'''<br />
* [[Базы данных ИРБИС]]<br />
* [[Язык запросов ИРБИС]]<br />
* [[Таблица выбора полей]]<br />
* [[Механизм актуализации записи]]<br />
* [[Файлы ИРБИС]]<br />
* [http://nbuv.gov.ua/books/19/isis/24.htm The UNESCO micro CDS/ISIS Software. Приложение 7. Структура инвертированного файла и форматы записей]<br />
* [[Сценарии поиска]]<br />
<br />
'''Источники информации:'''<br />
* [[Общее описание системы ИРБИС64]]<br />
* [http://lib.omgtu.ru/irb/doc/irbis128.doc ИРБИС 64/128. Общее описание системы]<br />
<br />
[[Категория:ИРБИС 64]]<br />
[[Категория:Индекс базы данных ИРБИС]]<br />
[[Категория:Файлы ИРБИС]]<br />
[[Категория:Анонсированные статьи]]</div>Sokvhttp://wiki.elnit.org/index.php?title=%D0%AF%D0%B7%D1%8B%D0%BA_%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2_%D0%98%D0%A0%D0%91%D0%98%D0%A1&diff=2428Язык запросов ИРБИС2015-09-04T21:17:54Z<p>Sokv: </p>
<hr />
<div>''Поисковый язык ИРБИС'' или ''язык запросов ИРБИС'' предназначен для формулировки запросов, с помощью которых выполняется поиск в [[Базы данных ИРБИС|базах данных ИРБИС]].<br />
<br />
В ИРБИС выделяются два вида поиска:<br />
* ''Прямой поиск'' – быстрый поиск на основе [[Индекс базы данных ИРБИС|индекса (словаря) базы данных]].<br />
* ''Последовательный поиск'' – медленный поиск на основе последовательного перебора (просмотра) записей базы данных с возможностью выполнения таких операций, как БОЛЬШЕ/МЕНЬШЕ, НАЛИЧИЕ/ОТСУТСТВИЕ и других.<br />
<br />
==Прямой поиск==<br />
<br />
Запрос для прямого поиска представляет собой алгебраическое (поисковое) выражение, в котором операндами являются термины словаря, а операторами – логические операторы булевой алгебры. Для изменения порядка выполнения логических операторов в поисковом выражении могут применяться скобки.<br />
<br />
Термин словаря включает в себя собственно термин словаря и префикс, если таковой используется для данного вида терминов.<br />
<br />
В общем виде операнд поискового выражения можно представить следующим образом:<br />
<br />
"<префикс><термин>$"/(tag1,tag2,...tagN)<br />
где:<br />
* <tt><префикс></tt> - префикс, определяющий вид термина (вид словаря).<br />
* <tt><термин></tt> - собственно термин словаря.<br />
* <tt>$</tt> - признак правого усечения термина. Определяет совокупность терминов, имеющих начальную последовательность символов, совпадающую с указанным термином. Может отсутствовать, в этом случае поиск идет по точному значению указанного термина.<br />
* <tt>"</tt> – символ-ограничитель термина (двойные кавычки). Должен использоваться обязательно, если термин включает в себя символы пробел, круглые скобки, решетка (#), а также символы, совпадающие с обозначениями логических операторов (см. ниже).<br />
* /(tag1,tag2,...tagN) – конструкция квалификации термина. Определяет метки поля, в которых должен находиться указанный термин, или точнее – [[Таблица выбора полей#ТВП для инвертированного файла|вторую часть ''индексной ссылки'']]. Может отсутствовать, что означает отсутствие дополнительных требований в части меток полей.<br />
<br />
В поисковом выражении могут использоваться следующие логические операторы:<br />
* <tt>+</tt> - оператор логического ИЛИ. Соединение двух операндов (терминов) логическим оператором ИЛИ обозначает требование поиска записей, в которых присутствует хотя бы один из терминов.<br />
* <tt>*</tt> - оператор логического И. Соединение двух терминов логическим оператором И обозначает требование поиска записей, в которых присутствуют оба термина.<br />
* <tt>^</tt> - оператор логического НЕ. Соединение двух терминов логическим оператором НЕ обозначает требование поиска записей, в которых присутствует первый термин и отсутствует второй. Оператор НЕ не может быть одноместным (т.е. данному оператору, как и всем другим, должен ОБЯЗАТЕЛЬНО предшествовать термин).<br />
* <tt>(G)</tt> – первый оператор контекстного И. Соединение двух терминов таким оператором контекстного И обозначает требование поиска записей, в которых оба термина присутствуют в одном и том же поле (или точнее – когда у терминов совпадают вторые части ссылок).<br />
* <tt>(F)</tt> – второй оператор контекстного И. Соединение двух терминов таким оператором контекстного И обозначает требование поиска записей, в которых оба термина присутствуют в одном и том же повторении поля (или точнее – когда у терминов совпадают вторые и третьи части ссылок).<br />
* <tt>.</tt> – (точка обрамленная пробелами) третий оператор контекстного И. Соединение двух терминов таким оператором контекстного И обозначает требование поиска записей, в которых оба термина присутствуют в одном и том же повторении поля друг за другом (или точнее – когда у терминов совпадают вторые и третьи части ссылок, а третьи части ссылок отличаются на единицу).<br />
<br />
Логические операторы имеют приоритеты, которые определяют порядок их выполнения (в пределах одного уровня скобок). Ниже операторы приведены в порядке убывания приоритета:<br />
.<br />
(F)<br />
(G)<br />
* и ^<br />
+<br />
Операторы одного приоритета выполняются слева направо (в пределах одного уровня скобок). Для изменения порядка выполнения логических операторов в поисковом выражении могут применяться круглые скобки. Выражения в скобках могут объединяться только операторами + * ^.<br />
<br />
Примеры запросов для прямого поиска:<br />
("A=Иванов$" +"A=Петров$") * ("V=03" + "V=05")<br />
"K=трактор$" (F) "K=колесн$" + "K=бульдозер$" (F) "K=гусен$"<br />
"K=очист$"/(200,922) * "K=вод$"/(200,922)<br />
<br />
==Последовательный поиск==<br />
<br />
Запрос (или поисковое выражение) для последовательного поиска представляет собой формат на [[Язык форматирования системы ИРБИС|языке форматирования ИРБИС]].<br />
<br />
Собственно процесс последовательного поиска состоит в последовательном расформатировании исходных записей (т.е. тех записей, которые участвуют в поиске): если результатом расформатирования записи является строка '1' (или точнее – строка, содержащая символ '1'), то соответствующая запись удовлетворяет поисковому запросу, в противном случае – не удовлетворяет.<br />
<br />
Таким образом, в обобщенном виде запрос для последовательного поиска можно представить как следующий формат:<br />
if <логическое выражение> then '1' else '0' fi<br />
где <tt><логическое выражение></tt> - логическое выражение, в котором можно использовать все возможности языка форматирования ИРБИС.<br />
<br />
''Примечания:''<br />
* ''В [[АРМ Читатель]] и [[АРМ Каталогизатор]] в режиме ПОСЛЕДОВАТЕЛЬНЫЙ ПОИСК – СВОБОДНЫЙ ПОИСК в качестве запроса необходимо задавать именно <tt><логическое выражение></tt> (без объемлющей конструкции <tt>if … fi</tt>).''<br />
* ''Последовательный поиск применяется только в тех случаях, когда нет возможности найти необходимые записи на основе прямого поиска (т.е. на основе словарей). Если некий последовательный поиск приходится применять регулярно, следует пересмотреть правила инверсии базы данных (<dbname>.fst) – с тем чтобы иметь возможность выполнять соответствующий поиск на основе словаря.''<br />
<br />
<br />
==Ссылки==<br />
<br />
См. также:<br />
* [[Индекс базы данных ИРБИС]]<br />
* [[Язык форматирования системы ИРБИС]]<br />
<br />
[[Категория:ИРБИС 64]]<br />
[[Категория:Индекс базы данных ИРБИС]]<br />
[[Категория:Анонсированные статьи]]</div>Sokvhttp://wiki.elnit.org/index.php?title=%D0%A1%D1%86%D0%B5%D0%BD%D0%B0%D1%80%D0%B8%D0%B8_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0&diff=2427Сценарии поиска2015-09-04T21:17:47Z<p>Sokv: </p>
<hr />
<div>Понятие ''сценарий поиска'' имеет отношение к [[АРМ Читатель]] и [[АРМ Каталогизатор]]. Для [[АРМ Комплектатор]] и [[АРМ Книгообеспеченность]] существуют ''специальные сценарии поиска''.<br />
<br />
''Сценарий поиска'' представляет собой совокупность параметров, которые определяют возможности поиска в определенной базе данных. ''Сценарий поиска'' может включать следующие составляющие:<br />
* поиски по словарю;<br />
* контекстные уточнения для поиска ''Ключевые слова'';<br />
* поиски по связи;<br />
* ''комплексный'' и ''последовательный'' поиски;<br />
* поиски ''Для чайников'' и ''Для умников'' (только в [[АРМ Читатель]]).<br />
<br />
Сценарий поиска в виде набора соответствующих параметров содержится в конфигурационном файле в секции <tt>SEARCH</tt>. Сценарий поиска для конкретной БД содержится в одноименном INI-файле. В случае отсутствия такого файла для БД используется сценарий поиска, описанный в основном INI-файле соответствующего АРМ.<br />
<br />
==Поиски по словарю==<br />
<br />
Для описания одного вида поиска по словарю служат следующие параметры:<br />
ItemNameNN<br />
ItemPrefNN <br />
ItemDictionTypeNN<br />
ItemMenuNN<br />
ItemF8ForNN<br />
ItemModByDicNN<br />
ItemTrancNN<br />
ItemHintNN<br />
ItemModByDicAutoNN<br />
ItemLogicNN<br />
ItemAdvNN<br />
ItemPftNN<br />
где NN – порядковый номер вида поиска по словарю в общем списке (начиная с 0).<br />
<br />
Параметр <tt>ItemNameNN</tt> служит для указания названия поиска. Например:<br />
ItemName5=Заглавие<br />
<br />
Параметр <tt>ItemPrefNN</tt> определяет префикс для соответствующих терминов в словаре (префикс инверсии). Например, заглавия инвертируются целиком с префиксом <tt>Т=</tt>, поэтому:<br />
ItemPref5=Т=<br />
<br />
Параметр <tt>ItemDictionTypeNN</tt> определяет тип словаря для соответствующего поиска, то есть вид компонента ''Словарь''. Используются три типа словарей и соответственно три значения для данного параметра:<br />
* <tt>0</tt> – стандартный словарь, содержащий алфавитный список терминов с указанием количества ссылок для каждого из них.<br />
* <tt>1</tt> – словарь, дополнительно к стандартным данным содержащий пояснения (раскодировку) для каждого термина. Применяется для терминов, которые представляют собой кодированную информацию (например, ''Страна издания'') и для которых имеется соответствующий справочник (файл с расширением <tt>.mnu</tt> - например, <tt>STR.MNU</tt> для кодов стран). В этом случае соответствующий справочник указывается в параметре <tt>ItemMenuNN</tt> (см. ниже).<br />
* <tt>2</tt> – специальный вид компоненты ''Словарь'' для ''Тематического рубрикатора''.<br />
<br />
Например:<br />
ItemDictionType8=1<br />
<br />
По умолчанию, т.е. в случае, когда параметр <tt>ItemDictionTypeNN</tt> не указывается, используется стандартный словарь.<br />
<br />
Параметр <tt>ItemMenuNN</tt> содержит имя файла справочника (с расширением) и используется, когда соответствующий параметр <tt>ItemDictionTypeNN</tt> имеет значение <tt>1</tt>. Например:<br />
ItemMenu8=str.mnu<br />
<br />
Параметр <tt>ItemF8ForNN</tt> служит для указания имени формата (без расширения), который [[Язык форматирования системы ИРБИС#Форматы с переменными метками|используется при показе термина словаря полностью]]. Используется только в ИРБИС 32, то есть в ИРБИС 64 не используется.<br />
<br />
Используется для длинных терминов (больше 30 символов). Например:<br />
ItemF8For5=!F8TIT<br />
<br />
Если в качестве значения параметра <tt>ItemF8ForNN</tt> указать символ <tt>*</tt>, то система будет показывать продолжение термина в строгом соответствии с индексной ссылкой. Такое возможно – т.е. продолжения терминов будут показываться правильно, – только в случае "простого правильного" инвертирования, а именно, когда в соответствующей строке ТВП:<br />
* в формате выборки присутствует единственное поле и при этом учитываются его повторения;<br />
* используется метод индексирования 0;<br />
* идентификатор поля совпадает с меткой поля в формате выборки.<br />
Например:<br />
200 0 mdl,(|T=|v200|%|/)<br />
<br />
Параметр <tt>ItemModByDicNN</tt> определяет возможность и способ выполнения режима ''Корректировка по словарю'' ([[АРМ Каталогизатор]]) для соответствующего представления словаря. Возможны три типа значений для данного параметра и соответственно три вида технологии корректировки по словарю:<br />
<br />
'''1.''' Корректировка на основе задания на пакетную корректировку. Задание на пакетную корректировку пишется на [[Язык пакетной корректировки баз данных ИРБИС|языке пакетной корректировки]] и сохраняется в директории БД в виде файла с расширением GBL. В этом случае значение параметра <tt>ItemModByDicNN</tt> записывается следующим образом:<br />
ItemModByDicNN=@<имя_файла_задания><br />
<br />
Имя файла задания на пакетную корректировку указывается без расширения. Вводятся специальные соглашения, обеспечивающие передачу данных для пакетной корректировки через модельные поля (данные, временно создаваемые в каждом корректируемом документе), а именно: через первое повторение первого модельного поля (метка 1001) передается собственно термин, на основе которого производится корректировка, через первое повторение второго модельного поля (метка 1002) передается идентификатор поля из соответствующей индексной ссылки для данного термина и через первое повторение третьего модельного поля (метка 1003) передается номер повторения из соответствующей индексной ссылки. Пакетная корректировка может передавать через второе повторение первого модельного поля (метка 1001) сообщение о выполнении (или невыполнении) корректировки.<br />
<br />
'''2.''' Корректировка в строгом соответствии с индексными ссылками. В этом случае в качестве значения параметра <tt>ItemModByDicNN</tt> указывается символ *. Такой вид корректировки по словарю возможен только в случае "простого правильного" инвертирования (см. выше).<br />
<br />
'''3.''' Корректировка на основе специального формата. В этом случае в качестве значения параметра <tt>ItemModByDicNN</tt> указывается имя формата (без расширения). Формат для корректировки по словарю и работа с ним обладают специфическими особенностями:<br />
формат может содержать [[Язык форматирования системы ИРБИС#Форматы с переменными метками|переменные метки]].<br />
<br />
Форматированию подвергается документ, соответствующий первой индексной ссылке данного термина, и в качестве результирующей строки из общего результата форматирования берется строка, соответствующая номеру повторения из индексной ссылки.<br />
<br />
Результирующая строка форматирования может состоять из двух частей, разделенных знаком <tt>$</tt>. Первая часть строки рассматривается как список меток полей (числа, разделенные запятыми), в которых могут находиться исходные для корректировки данные. Вторая часть рассматривается как собственно исходные для корректировки данные. Если вторая часть строки представляет собой символ <tt>*</tt>, то в качестве исходных данных рассматривается соответствующий термин словаря. Если пустой оказывается первая часть строки, то в качестве метки исходного поля рассматривается идентификатор поля из индексной ссылки.<br />
<br />
Примеры использования параметра <tt>ItemModByDicNN</tt> смотри в <tt>IRBISC.INI</tt>.<br />
<br />
Параметр <tt>ItemTrancNN</tt> определяет исходное положение переключателя ''Усечение'' для данного вида поиска (0 – нет; 1 – да). Действует только в [[АРМ Каталогизатор]].<br />
<br />
Параметр <tt>ItemHintNN</tt> определяет текст подсказки/предупреждения, которая выдаётся, когда пользователь вводит термины поиска с помощью клавиатуры. При этом тексту предшествует стандартная фраза: "Сейчас здесь можно вводить только ". Действует только в [[АРМ Читатель]]. Пример:<br />
<br />
ItemHint0=ключевое слово: одно - на одной строке<br />
<br />
Параметр <tt>ItemModByDicAutoNN</tt> пока в ИРБИС не задействован.<br />
Параметр <tt>ItemLogicNN</tt> определяет, какие логические операторы могут использоваться для данного вида поиска. Возможные значения:<br />
* 0 – только логика ИЛИ;<br />
* 1 – логика ИЛИ и И;<br />
* 2 – логика ИЛИ, И, НЕТ (по умолчанию);<br />
* 3 – логика ИЛИ, И, НЕТ, И (в поле);<br />
* 4 – логика ИЛИ, И, НЕТ, И (в поле), И (фраза).<br />
<br />
Параметр <tt>ItemAdvNN</tt> определяет правила автоматического расширения поиска на основе авторитетного файла или тезауруса. Под расширением понимается автоматическое дополнение каждого термина запроса связанными терминами из указанного авторитетного файла или тезауруса. Например, указанная в поиске по АВТОРУ фамилия будет дополнена по авторитетному файлу индивидуальных авторов псевдонимом этого автора. Параметр имеет следующую структуру:<br />
<Dbname>,<Prefix>,<Format><br />
где:<br />
* <tt><Dbname></tt> – имя БД Авторитетного файла или тезауруса или любой другой БД, используемой для расширения поиска (по умолчанию, т.е. если БД не указана, берется БД, в которой производится поиск);<br />
* <tt><Prefix></tt> – префикс, который прибавляется к текущему термину для поиска документов в БД расширения;<br />
* <tt><Format></tt> – в виде <tt>@<имя_формата></tt> или <tt><явный_формат></tt> – формат, с помощью которого расформатируются найденные в БД расширения документы - каждая строка расформатирования рассматривается как термин расширения, т.е. термин, который дополняет текущий (формат, заданный по имени, должен находится в БД расширения).<br />
<br />
Параметр <tt>ItemPftNN</tt> определяет имя формата, который используется для показа документов, найденных по данному виду поиска (используется только в ИРБИС 64). Указанный формат должен обязательно находиться в списке доступных форматов показа (см. параметр [[Параметры настройки системы|<tt>PFTMNU</tt> в статье ''Параметры настройки системы'']]). Если данный параметр не задан, для показа результатов поиска используется текущий формат.<br />
<br />
Общее количество поисков по словарю указывается в параметре <tt>ItemNumb</tt>. Например:<br />
ItemNumb=25<br />
<br />
==Контекстные уточнения для поиска ''Ключевые слова''==<br />
<br />
Данное средство сценария поиска позволяет вводить контекстные уточнения для поиска ''Ключевые слова'' (который идентифицируется с помощью параметра <tt>CvalifPrefix</tt> в разделе <tt>[SEARCH]</tt> INI-файла – см. [[Параметры настройки системы#Параметры АРМ Каталогизатор и АРМ Читатель (irbisc.ini и irbisr.ini)|в подразделе ''Параметры АРМ Каталогизатор и АРМ Читатель (irbisc.ini и irbisr.ini)'' статьи ''Параметры настройки системы'']]), т.е. в этом случае у пользователя появляется возможность при поиске по ключевым словам указывать, в каких именно элементах описания должны присутствовать искомые ключевые слова (компонент "Термины в" в области ТЕКУЩИЙ ЗАПРОС).<br />
<br />
Каждый вид контекстного уточнения описывается двумя параметрами:<br />
CvalifNameNN<br />
CvalifValueNN<br />
где NN – порядковый номер вида контекстного уточнения в общем списке (начиная с 0).<br />
<br />
Параметр <tt>CvalifNameNN</tt> служит для указания названия контекстного уточнения. Например:<br />
CvalifName2=Коллектив/Мероприятие<br />
<br />
Параметр <tt>CvalifValueNN</tt> служит для указания значений идентификаторов поля, определяющих соответствующий контекст уточнения. В общем виде параметр указывается следующим образом:<br />
CvalifValueNN=/(mm1,mm2,….)<br />
где <tt>mm1,mm2,…</tt> – идентификаторы полей.<br />
<br />
Указываемые в параметре <tt>CvalifValueNN</tt> идентификаторы полей фактически определяют [[Индекс базы данных ИРБИС#Структура индекса базы данных ИРБИС|вторую компоненту индексных ссылок]] для поисковых терминов. Пример:<br />
<br />
CvalifValue2=/(3)<br />
<br />
Общее количество видов контекстных уточнений указывается в параметре <tt>CvalifNumb</tt>. Например:<br />
CvalifNumb=4<br />
<br />
==Поиски по связи==<br />
<br />
Данное средство сценария поиска позволяет организовывать поиски на основе схожести (совпадение значений одних и тех же элементов описания) документов (режим "Поиск по связи").<br />
<br />
Для описания одного поиска по связи служат пять параметров:<br />
* <tt>ScntNameNN</tt><br />
* <tt>ScntFormatNN</tt><br />
* <tt>ScntPrefNN</tt><br />
* <tt>ScntSuffixNN</tt><br />
* <tt>ScntLogicNN</tt><br />
где <tt>NN</tt> – порядковый номер поиска по связи в общем списке (начиная с 0).<br />
<br />
Параметр <tt>ScntNameNN</tt> определяет название поиска по связи. Например:<br />
ScntName5=УДК<br />
<br />
Параметр <tt>ScntFormatNN</tt> служит для указания имени формата (без расширения), на основе которого формируются термины для соответствующего поиска по связи. Формат, указываемый в данном параметре, может содержать любые команды форматирования (кроме переменных меток и средств RTF) и используется системой следующим образом: форматируется исходный документ (на основе которого реализуется поиск), и каждая строка результата форматирования рассматривается как поисковый термин. Пример:<br />
ScntFormat5=!scnt6<br />
<br />
Остальные параметры используются для окончательного формирования собственно запроса на поиск на основе полученных поисковых терминов.<br />
<br />
Параметр <tt>ScntPrefNN</tt> определяет префикс для поисковых терминов. Разумеется, префикс может формироваться непосредственно с помощью формата (<tt>ScntFormatNN</tt>), в этом случае параметр <tt>ScntPrefNN</tt> не используется, т.е. его не надо указывать или дать ему пустое значение. Пример:<br />
ScntPref5=U=<br />
<br />
Параметр <tt>ScntSuffixNN</tt> определяет суффиксную часть для поисковых терминов: это может быть знак <tt>$</tt>, определяющий применение механизма правого усечения, и/или средства контекстного уточнения (см. выше). Суффиксная часть поисковых терминов также может быть сформирована с помощью формата (<tt>ScntFormatNN</tt>).<br />
ScntSuffix5=$<br />
<br />
Параметр <tt>ScntLogicNN</tt> определяет логическую операцию для объединения поисковых терминов: при этом 0 определяет операцию ИЛИ; 1 – И; 2 – НЕТ; 3 – И (в поле); 4 – И (фраза). Пример:<br />
ScntLogic5=0<br />
<br />
Общее количество поисков по связи указывается в параметре <tt>ScntNumb</tt>. Например:<br />
ScntNumb=7<br />
<br />
==Комплексный и Последовательный поиски==<br />
<br />
Факт включения данных видов поиска в сценарий поиска определяется двумя параметрами.<br />
<br />
Параметр <tt>ComplSearch</tt> определяет включение Комплексного поиска: значение 1 – включать, 0 – не включать; по умолчанию – 0.<br />
<br />
Параметр <tt>SeqSearch</tt> определяет включение Последовательного поиска: значение 1 – включать, 0 – не включать; по умолчанию – 0.<br />
<br />
==Поиски "Для чайников" и "Для умников"==<br />
<br />
Факт включения поиска "Для чайников" определяется параметром <tt>DebilSearch</tt>: 1 – включать, 0 – не включать; по умолчанию – 0. Кроме того, имеется параметр <tt>DebilPrefix</tt>, определяющий префикс, который используется для терминов в поиске «Для чайников», по умолчанию используется «К=». Имеется возможность включения расширения поиска «Для чайников» (в этом случае помимо собственно ключевых терминов пользователь может применять в поиске «Для чайников» любые элементы, например, фамилии авторов, названия стран и языков и т.п.) – для этого необходимо в раздел <tt>[MAIN]</tt> всех серверных INI-файлов (в т.ч. АРМов Каталогизатор и Администратор) включить параметр<br />
DBSCH=1<br />
И в этом случае по умолчанию в качестве <tt>DebilPrefix</tt> будет использоваться префикс <tt>DS=</tt>.<br />
<br />
После изменения значения параметра <tt>DBSCH</tt> необходимо создать словарь заново (АРМ «Администратор»).<br />
<br />
Поиск "Для чайников" используется только в АРМе «Читатель».<br />
<br />
Поиск "Для умников" включает в себя интеллектуальные поиски. Под интеллектуальными поисками понимаются поиски с использованием специальных информационно-лингвистических ресурсов, а именно: поиски на основе Авторитетных файлов, поиски на основе баз данных или АПУ к УДК/ББК, поиск на основе Тезауруса и поиски на основе иерархических справочников.<br />
<br />
Есть два (альтернативных) способа задания (описания) интеллектуальных поисков: «старый» (на основе оригинальных интерфейсов) и «новый» (на основе ИРБИС-Навигатора).<br />
<br />
'''«Старый» способ'''<br />
<br />
Один вид интеллектуального поиска описывается четырьмя параметрами:<br />
IntNameNN<br />
IntTypeNN<br />
IntPrefNN<br />
IntAddataNN<br />
где <tt>NN</tt> - порядковый номер интеллектуального поиска в общем списке (начиная с 0).<br />
<br />
Параметр <tt>IntNameNN</tt> определяет название интеллектуального поиска. Пример:<br />
IntName0=Авторитетный файл "Индивидуальные авторы"<br />
<br />
Параметр <tt>IntTypeNN</tt> определяет тип интеллектуального поиска. Принимает следующие значения: 0 – для поиска по Авторитетным файлам и АПУ к УДК/ББК; 1 – для поиска по Тезаурусу; 2 – резерв; 3 – для поиска по иерархическим меню (справочникам).<br />
<br />
Параметр <tt>IntPrefNN</tt> определяет префикс для поисковых терминов.<br />
<br />
Параметр <tt>IntAddataNN</tt> определяет дополнительную информацию для соответствующего интеллектуального поиска. Для поиска по Тезаурусу данный параметр не используется. Для поиска по Авторитетным файлам и АПУ значение данного параметра имеет следующую структуру:<br />
<dbname>,<prefix>,<option>,@<имя_групп_формата><br />
где:<br />
* <tt><dbname></tt> – имя БД Авторитетного файла или АПУ;<br />
* <tt><prefix></tt> – префикс для инвертирования основных элементов Авторитетных файлов или АПУ;<br />
* <tt><option></tt> – пока не используется;<br />
* <tt><имя_групп_формата></tt> – имя группового формата (без расширения).<br />
<br />
Групповой формат представляет собой формат специальной структуры, а именно: он состоит из трех строк, каждая из которых является отдельным форматом (который может содержать переменные метки):<br />
* 1 строка – формат, используемый для показа элементов Авторитетного файла или АПУ;<br />
* 2 строка – формат, используемый при отборе на поиск элементов Авторитетного файла или АПУ;<br />
* 3 строка – формат, отражающий правила инвертирования элементов Авторитетного файла или АПУ.<br />
<br />
Для поиска по иерархическим справочникам значение параметра <tt>IntAddataNN</tt> имеет следующую структуру:<br />
<Tree_file_name>\<SYS|DBN>,<NN>\<TreeSep><br />
где:<br />
* <tt><Tree_file_name></tt> – имя файла иерархического справочника (с расширением). Для создания иерархических справочников служит [[специальный генератор]];<br />
* <tt><SYS|DBN>,<NN></tt> – указывает путь, по которому находится [[файл иерархического справочника]];<br />
* <tt><TreeSep></tt> – символы-разделители, отделяющие собственно значение от пояснения в иерархическом справочнике. По умолчанию – символ пробел.<br />
<br />
Общее количество интеллектуальных поисков указывается в параметре <tt>IntNumb</tt>.<br />
<br />
'''«Новый» способ'''<br />
<br />
Один вид интеллектуального поиска на основе ИРБИС-Навигатора описывается двумя параметрами:<br />
* <tt>WNNameNN</tt> – имя поиска (на естественном языке).<br />
* <tt>WNLinkNN</tt> – ИРБИС-ссылка (подробнее см. в <tt>\IRBIS64\Datai\Deposit\Irbis_Navigator_Help0.html)</tt>.<br />
<br />
Общее количество таких интеллектуальных поисков указывается в параметре <tt>WNNumb</tt>.<br />
<br />
При использовании ИРБИС-Навигатора в качестве средства поиска предлагается специальный дополнительный параметр ИРБИС-ссылки – <tt>CHECKPFT</tt>, который содержит имя формата, применяемого для постобработки отобранных элементов. Смысл этой постобработки состоит в следующем: после нажатия кнопки ВЫПОЛНИТЬ (в поисковом интерфейсе) создается модельная запись, содержащая отобранные в результате навигации элементы поиска (по умолчанию в повторениях поля/подполя <tt>1004^A</tt>), далее модельная запись подвергается форматированию с помощью формата, указанного в параметре <tt>CHECKPFT</tt> (если таковой задан), полученная в результате форматирования строка (первая – если их сформировалось больше одной) рассматривается как поисковое выражение.<br />
<br />
==Дополнительные параметры сценария поиска==<br />
<br />
К дополнительным относятся следующие параметры:<br />
* Параметр <tt>DEFLEXKW</tt> определяет факт использования механизма автоматического отсечения окончаний слов русского языка при поиске по ключевым словам: 1 – использовать; 0 – не использовать; (по умолчанию – не использовать). В случае использования этого механизма он подключается, если опция УСЕЧЕНИЕ установлена в положение ДА.<br />
* Параметр <tt>MinLKeyWord</tt> определяет минимальную длину ключевого слова, начиная с которой может использоваться аппарат правого усечения.<br />
* Параметр <tt>MinLKWLight</tt> определяет минимальную длину поискового термина, начиная с которой будет производиться их подсветка при показе найденных документов.<br />
<br />
==Специальные сценарии поиска==<br />
<br />
===Специальные сценарии поиска для АРМ Комплектатор===<br />
<br />
Сценарии поиска для [[АРМ Комплектатор]] содержат только поиски по словарю.<br />
<br />
Сценарий поиска в виде набора соответствующих параметров содержится в [[Файлы ИРБИС#Конфигурационные файлы ИРБИС|серверном инициализационном файле АРМ Комплектатор]] в [[секции SEARCHCMP]]. Набор параметров состоит из 6-ти разделов, каждый начинается с параметра, определяющего количество видов поиска для разных задач:<br />
* <tt>ItemNumbZ</tt> – количество видов поиска для задачи ЗАКАЗ.<br />
* <tt>ItemNumbR</tt> – количество видов поиска для задачи ПОСТУПЛЕНИЕ.<br />
* <tt>ItemNumbS</tt> – количество видов поиска для задачи ВЫБЫТИЕ.<br />
* <tt>ItemNumbP</tt> – количество видов поиска для задачи ПОДПИСКА.<br />
* <tt>ItemNumbDBN</tt> – количество видов поиска для БД электронного каталога.<br />
* <tt>ItemNumbPDP</tt> – количество видов поиска для БД каталога подписки периодики и книг. В начале располагается описание видов поиска для периодики, их количество необходимо задать в [[Параметры настройки системы#Серверные параметры АРМ Комплектатор (irbisp.ini)|параметре <tt>NumbItemPdp</tt> секции <tt>POST</tt>]].<br />
<br />
Для описания одного вида поиска по словарю служат восемь параметров, имена которых различаются суффиксами для разных разделов:<br />
* <tt>ItemName*N</tt> – название поиска.<br />
* <tt>ItemPref*N</tt> – префикс терминов словаря.<br />
* <tt>ItemMenu*N</tt> – имя файла справочника (с расширением), используемого для раскодировки терминов словаря.<br />
* <tt>ItemSecondFmt*N</tt> – формат, явный или в виде <tt>@имя файла</tt>, результатом выполнения которого является запрос на поиск записей, связанных с записью термина словаря и помещаемых в окно «Связанные записи». Если этот параметр пуст, то во окно «Связанные записи» помещаются записи, отбираемые по текущему термину словаря.<br />
* <tt>ItemSecondName*N</tt> – текст, который появится в заголовке окна «Связанные записи».<br />
* <tt>ItemSecondShow*N</tt> – формат, явный или в виде <tt>@имя файла</tt>, в котором отображаются записи в окне «Связанные записи».<br />
* <tt>Item991*N</tt> – формат, явный или в виде <tt>@имя файла</tt>, для текущей записи словаря, результатом которого будет значение модельного поля (v991), которое будет добавлено в запись при ее форматировании. Если параметр задан как * (звездочка), то значением модельного поля является сам термин словаря.<br />
* <tt>ItemDicEnd*N</tt> – признак того, что при открытии словаря он будет установлен в конец.<br />
<br />
В обозначениях параметров использованы:<br />
* <tt>*</tt> – обозначение набора видов поиска для текущего режима работы КОМПЛЕКТАТОРА и текущей БД, а именно: <br />
** <tt>Z</tt> – режим ЗАКАЗ, БД комплектования;<br />
** <tt>R</tt> – режим ПОСТУПЛЕНИЕ, БД комплектования; <br />
** <tt>S</tt> – режим ВЫБЫТИЕ, БД комплектования; <br />
** <tt>P</tt> – режим ПОДПИСКА, БД комплектования; <br />
** <tt>DBN</tt> – БД каталога; <br />
** <tt>PDP</tt> – БД каталога подписки книг или периодики;<br />
* <tt>N</tt> – порядковый номер вида поиска по словарю в общем списке (начиная с 0).<br />
<br />
===Специальные сценарии поиска для АРМ Книгообеспеченность===<br />
<br />
Сценарий поиска в виде набора соответствующих параметров содержится в [[Файлы ИРБИС#Конфигурационные файлы ИРБИС|серверном инициализационном файле АРМ Книгообеспеченность]] в [[секции SEARCHKO]].<br />
<br />
В [[АРМ Книгообеспеченность]] имеется два словаря, для которых в файле инициализации задаются сценарии поиска – основной словарь и словарь переноса. В словарях отображаются данные для одной из трех баз данных, каждая из которых имеет свой сценарий поиска – БД VUZ, БД студентов (RDR), БД каталога. Т.о. сценирий поиска в файле состоит из разделов, каждый начинается одним из следующих параметров:<br />
* <tt>ItemNumb</tt> – задает количество видов поиска основного словаря для БД VUZ.<br />
* <tt>ItemNumbRdr</tt> – задает количество видов поиска основного словаря для БД RDR.<br />
* <tt>ItemNumbCat</tt> – задает количество видов поиска основного словаря для БД каталога.<br />
* <tt>ItemNumbMv</tt> – задает количество видов поиска словаря переноса для БД VUZ.<br />
* <tt>ItemNumbMvRdr</tt> – задает количество видов поиска словаря переноса для БД RDR.<br />
* <tt>ItemNumbMvCat</tt> – задает количество видов поиска словаря переноса для БД каталога.<br />
<br />
Для описания одного вида поиска по словарю служат параметры, их набор и количества разные для разных разделов.<br />
<br />
Для раздела <tt>ItemNumb</tt> (в основном словаре БД VUZ):<br />
* <tt>ItemNameN</tt> – название поиска.<br />
* <tt>ItemPrefN</tt> – префикс терминов словаря.<br />
* <tt>ItemMenuN</tt> – имя файла меню раскодировки терминов словаря.<br />
* <tt>ItemTabN</tt> – имя РЛ для отображения словаря в виде таблицы.<br />
* <tt>ItemFstVuzN</tt> – имя таблицы переноса данных в БД VUZ.<br />
* <tt>ItemGlobVuzN</tt> – имя задания на перенос данных в БД VUZ.<br />
* <tt>ItemFstRdrN</tt> – имя таблицы переноса данных в БД Rdr.<br />
* <tt>ItemGlobRdrN</tt> – имя задания на перенос данных в БД Rdr.<br />
* <tt>ItemFstCatN</tt> – имя таблицы переноса данных в БД каталога.<br />
* <tt>ItemGlobCatN</tt> – имя задания на перенос данных в БД каталога.<br />
* <tt>ItemSecSchN</tt> – формат для получения запроса на связанные записи в БД VUZ.<br />
* <tt>ItemSecNameN</tt> – формат заголовка списка связанных записей в БД VUZ.<br />
* <tt>ItemSecShowN</tt> – формат показа связанных записей в виде списка в БД VUZ.<br />
* <tt>ItemSecTabN</tt> – имя РЛ для отображения связанных записей в виде таблицы для БД VUZ.<br />
* <tt>ItemSec991N</tt> – формат модельного поля для связанных записей в БД VUZ.<br />
* <tt>ItemSecFstVuzN</tt> – имя таблицы переноса данных из списка в БД VUZ.<br />
* <tt>ItemSecGlobVuzN</tt> – имя задания на перенос данных из списка в БД VUZ.<br />
* <tt>ItemSecFstRdrN</tt> – имя таблицы переноса данных из списка в БД RDR.<br />
* <tt>ItemSecGlobRdrN</tt> – имя задания на перенос данных из списка в БД RDR.<br />
* <tt>ItemSecFstCatN</tt> – имя таблицы переноса данных из списка в БД каталога.<br />
* <tt>ItemSecGlobCatN</tt> – имя задания на перенос данных из списка в БД каталога.<br />
* <tt>ItemSecSchRdrN</tt> – формат для получения запроса на связанные записи в БД RDR.<br />
* <tt>ItemSecNameRdrN</tt> – формат заголовка списка связанных записей в БД RDR.<br />
* <tt>ItemSecShowRdrN</tt> – формат показа связанных записей в виде списка в БД RDR.<br />
* <tt>ItemSecTabRdrN</tt> – имя РЛ для отображения связанных записей в виде таблицы для БД RDR.<br />
* <tt>ItemSec991RdrN</tt> – формат модельного поля для связанных записей в БД RDR.<br />
* <tt>ItemSecSchCatN</tt> – формат для получения запроса на связанные записи в БД каталога.<br />
* <tt>ItemSecNameCatN</tt> – формат заголовка списка связанных записей в БД каталога.<br />
* <tt>ItemSecShowCatN</tt> – формат показа связанных записей в виде списка в БД каталога.<br />
* <tt>ItemSec991CatN</tt> – формат модельного поля для связанных записей в БД каталога.<br />
* <tt>ItemSecTabCatSumN</tt> – имя РЛ для отображения в связанном списке таблицы ККО для БД каталога.<br />
* <tt>ItemSecTabSemPftN</tt> – формат используется при формировании в связанном списке таблицы ККО для параметра основного словаря.<br />
* <tt>ItemSecTabSemValN</tt> – формат используется при формировании в связанном списке таблицы ККО для параметра основного словаря<br />
* <tt>ItemTabNumbN</tt> – признак видимости таблицы ввода количества студентов для режима работы с БД студентов.<br />
* <tt>ItemTabNumbCapN</tt> – используется при подсчете студентов по БД VUZ для режима работы с БД студентов.<br />
* <tt>ItemSecSchVuzN</tt> – используется при подсчете студентов по БД VUZ для режима работы с БД студентов.<br />
* <tt>ItemDelimN</tt> – используется в пакетном задании корректи-ровки по отмеченным в словаре терминам.<br />
* <tt>ItemDelimValN</tt> – используется в пакетном задании корректи-ровки по отмеченным в словаре терминам.<br />
<br />
Для раздела ItemNumbRDR (в основном словаре БД RDR):<br />
* <tt>ItemNameBRDRN</tt> – название поиска.<br />
* <tt>ItemPrefBRDRN</tt> – префикс терминов словаря.<br />
* <tt>ItemMenuBRDRN</tt> – имя файла меню раскодировки терминов словаря.<br />
* <tt>ItemTabBRDRN</tt> – имя РЛ для отображения словаря в виде таблицы.<br />
* <tt>ItemSecSchBRDRN</tt> – формат для получения запроса на связанные записи в БД RDR.<br />
* <tt>ItemSecNameBRDRN</tt> – формат заголовка списка связанных записей в БД RDR.<br />
* <tt>ItemSecShowBRDRN</tt> – формат показа связанных записей в виде спи-ска в БД RDR.<br />
* <tt>ItemSecTabBRdrN</tt> – имя РЛ для отображения связанных записей в виде таблицы для БД RDR.<br />
* <tt>Item991BRDRN</tt> – формат модельного поля для связанных запи-сей в БД RDR.<br />
* <tt>ItemFstBRDRVuzN</tt> – имя таблицы переноса данных из БД RDR в БД VUZ.<br />
* <tt>ItemGlobBRDRVuzN</tt> – имя пакетного задания переноса данных из БД RDR в БД RDR.<br />
<br />
Для раздела ItemNumbCat (в основном словаре БД каталога):<br />
* <tt>ItemNameBCatN</tt> – название поиска.<br />
* <tt>ItemPrefBCatN</tt> – префикс терминов словаря.<br />
* <tt>ItemMenuBCatN</tt> – имя файла меню раскодировки терминов словаря.<br />
* <tt>ItemTabBCatN</tt> – имя РЛ для отображения словаря в виде таблицы.<br />
* <tt>ItemSecSchBCatN</tt> – формат для получения запроса на связанные записи в БД каталога.<br />
* <tt>ItemSecNameBCatN</tt> – формат заголовка списка связанных записей в БД каталога.<br />
* <tt>ItemSecShowBCatN</tt> – формат показа связанных записей в виде списка в БД каталога.<br />
* <tt>ItemSecTabBCatN</tt> – имя РЛ для отображения связанных записей в виде таблицы для БД каталога.<br />
* <tt>Item991BcatN</tt> – формат модельного поля для связанных записей в БД каталога.<br />
* <tt>ItemSecTabbCatSumN</tt> – имя РЛ для отображения в списке таблицы ККО.<br />
<br />
Для раздела ItemNumbMv (в словаре переноса БД VUZ):<br />
* <tt>ItemNameMvN</tt> – название поиска.<br />
* <tt>ItemPrefMvN</tt> – префикс терминов словаря.<br />
* <tt>ItemMenuMvN</tt> – имя файла меню раскодировки терминов словаря.<br />
* <tt>ItemTabMvN</tt> – имя РЛ для отображения словаря в виде таблицы.<br />
* <tt>ItemTabDelMvN</tt> – имя РЛ таблицы для удаления данных.<br />
* <tt>ItemCapDelMvN</tt> – имя шапки таблицы для удаления данных.<br />
* <tt>ItemGlobDelMvN</tt> – имя пакетного задания для удаления данных.<br />
<br />
Для раздела ItemNumbMvRdr (в словаре переноса БД RDR):<br />
* <tt>ItemNameMvRdrN</tt> – название поиска.<br />
* <tt>ItemPrefMvRdrN</tt> – префикс терминов словаря.<br />
* <tt>ItemMenuMvRdrN</tt> – имя файла меню раскодировки терминов словаря.<br />
* <tt>ItemTabMvRdrN</tt> – имя РЛ для отображения словаря в виде таблицы.<br />
* <tt>ItemTabDelMvRdrN</tt> – имя РЛ таблицы для удаления данных.<br />
* <tt>ItemCapDelMvRdrN</tt> – имя шапки таблицы для удаления данных.<br />
* <tt>ItemGlobDelMvRdrN</tt> – имя пакетного задания для удаления данных.<br />
<br />
Для раздела ItemNumbMvCat (в словаре переноса БД каталога):<br />
* <tt>ItemNameMvCatN</tt> – название поиска.<br />
* <tt>ItemPrefMvCatN</tt> – префикс терминов словаря.<br />
* <tt>ItemMenuMvCatN</tt> – имя файла меню раскодировки терминов словаря.<br />
* <tt>ItemTabMvCatN</tt> – имя РЛ для отображения словаря в виде таблицы.<br />
* <tt>ItemTabDelMvCatN</tt> – имя РЛ таблицы для удаления данных.<br />
* <tt>ItemCapDelMvCatN</tt> – имя шапки таблицы для удаления данных.<br />
* <tt>ItemGlobDelMvCatN</tt> – имя пакетного задания для удаления данных.<br />
<br />
==Ссылки==<br />
<br />
См. также:<br />
* [[Индекс базы данных ИРБИС]]<br />
* [[Язык запросов ИРБИС]]<br />
* [[Параметры настройки системы (информация сверена с базой HLPINI)#Параметры поиска|Подраздел ''Параметры поиска'' статьи ''Параметры настройки системы (информация сверена с базой HLPINI)'']]<br />
<br />
Источники информации:<br />
* [[Общее описание системы ИРБИС64]]<br />
<br />
[[Категория:ИРБИС 32]]<br />
[[Категория:ИРБИС 64]]<br />
[[Категория:Индекс базы данных ИРБИС]]<br />
[[Категория:Параметры настройки системы]]<br />
[[Категория:Функциональные возможности ИРБИС]]<br />
[[Категория:Работа с ИРБИС]]<br />
[[Категория:Анонсированные статьи]]</div>Sokvhttp://wiki.elnit.org/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D0%B0%D0%BA%D1%82%D1%83%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D0%B8&diff=2426Механизм актуализации записи2015-09-04T21:17:41Z<p>Sokv: </p>
<hr />
<div>==Механизм актуализации записи до версии ИРБИС 2011.1 включительно==<br />
<br />
Механизм актуализации записи до версии ИРБИС 2011.1 включительно:<br />
* рассматриваются две копии актуализируемой записи: последняя копия (т.е. актуальное состояние записи после корректировки) и предыдущая копия (т.е. состояние записи до выполнения корректировки, или точнее - то состояние записи, для которого выполнялась предыдущая актуализация);<br />
* обе копии записи подвергаются обработке (в оперативной памяти) в соответствии с таблицей инвертирования данной БД (<имя_БД>.FST). Обработка состоит в том, что копии записи форматируются по КАЖДОЙ строке таблицы инвертирования (см. структуру FST) и в соответствии с методами инвертирования создаются списки терминов. В результате - формируются два списка терминов: один - связанный с предыдущей копией записи, другой - с последней копией;<br />
* два списка терминов (после сортировки) сравниваются. В результате: а) термины, являющиеся общими для обоих списков отбрасываются (не рассматриваются), б) термины, оставшиеся в списке последней копии (т.е. те термины, которые присутствовали в списке последней копии и отсутствовали в списке предыдущей копии) ДОБАВЛЯЮТСЯ в словарь БД, в) термины, оставшиеся в списке предыдущей копии (т.е. те термины, которые присутствовали в списке предыдущей копии и отсутствовали в списке последней копии) УДАЛЯЮТСЯ из словаря.<br />
<br />
Нетрудно понять, что данный механизм имеет существенный недостаток, связанный с нечувствительностью к тому, КАКИЕ и СКОЛЬКО полей записи подвергались изменению (корректировке). Т.е. если изменялись все или большинство полей записи (или точнее – большинство тех полей, которые участвуют в инвертировании), этот механизм эффективен; если же изменялось одно или несколько полей (а именно это имеет место на практике при работе с библиографическими БД) - механизм малоэффективен. И уж совсем "впустую" он работает в тех случаях, когда изменялись только те поля, которые не участвуют в инвертировании (т.е. те, по которым не создаются словари).<br />
Проиллюстрировать это можно на следующем примере. При корректировке записи изменялось только поле 910 (экземпляры). В этом случае форматирование последней и предыдущей копий записи по строкам таблицы инвертирования, не имеющим отношения к полю 910, заведомо бессмысленно, поскольку сформированные в результате этого термины окажутся общими для обоих списков и будут отброшены. Имеет смысл использовать только те строки таблицы инвертирования, которые имеют отношение к полю 910. Но этого не происходит - старый механизм "тупо" обрабатывает ВСЕ строки таблицы инвертирования и тратит время на ненужное форматирование. Таким образом, идея нового механизма актуализации лежит как будто на поверхности: определять, какие поля в записи изменялись (сравнивая последнюю и предыдущую копии записи) и отбирать из таблицы инвертирования только те строки, которые имеют отношение к изменившимся полям. <br />
(Все именно так - только надо сразу видеть и "обратную сторону", т.е. недостатки нового механизма: в случае изменения всех или большинства полей записи впустую уже будет тратиться время на сравнение копий и отбор строк из таблицы инвертирования.) <br />
Процесс сравнения копий (с целью выявления изменившихся полей) - очевиден и его реализация не вызывает никаких проблем. А вот задача отбора строк таблицы инвертирования, имеющих отношение к изменившимся полям, более "хитрая".(И даже более того - в силу изощренности языка форматирования ИРБИС эта задача алгоритмически строго говоря вообще неразрешима. Вот пример - разумеется, чисто теоретический - строки таблицы FST, по которой нельзя определить, к какому полю она относится: <br />
100 0 ....&uf('AV',f(val(v100),0,0),'#1')..... <br />
понятно, что это не поле 100 - а то поле, чья метка указана в поле 100 текущей записи.)<br />
<br />
==Таблица актуализации==<br />
<br />
И тем не менее, для решения "хитрой" задачи предлагается следующее. Вводится новая структура - дополнительная по отношению к [[Таблица выбора полей#ТВП для инвертированного файла|таблице выбора полей для инвертированного файла]]. Будем называть ее ''таблица актуализации''. Таблица актуализации как отдельная структура сохраняется в текстовом файле с расширением [[Файлы ИРБИС#Таблица актуализации|<tt>.ifs</tt>]].<br />
<br />
Таблица актуализации создается ИСКЛЮЧИТЕЛЬНО на основе таблицы инвертирования (каким образом - об этом ниже) и является ее ОДНОЗНАЧНЫМ следствием ("придатком"). Отличие таблицы актуализации от таблицы инвертирования только лишь в структуре первого элемента (если смотреть через Редактор РЛ - это первая колонка). В таблице инвертирования это т.н. "точка входа". В таблице актуализации - в первом элементе дополнительно к точке входа указываются (через запятую) МЕТКИ полей, имеющих отношение к данной строке (т.е. метки тех полей, которые используются в соответствующем формате - третьем элементе таблицы).<br />
<br />
Схематичный пример строки таблицы инвертирования: <br />
100 0 .....v100......v200......v300.... <br />
<br />
Ей будет соответствовать следующая строка таблицы актуализации: <br />
100,100,200,300 0 .....v100......v200......v300.... <br />
<br />
Понятно, что такая структура таблицы актуализации позволяет легко решать задачу отбора строк инвертирования, имеющих отношение к изменившимся полям. <br />
<br />
==Механизм актуализации записи, действующий начиная с версии ИРБИС 2012.1==<br />
<br />
Механизм актуализации записи, действующий начиная с версии ИРБИС 2012.1:<br />
* сравниваются последняя и предыдущая копии записи - в результате определяются метки изменившихся полей; <br />
* из таблицы актуализации отбираются строки, имеющие отношение к изменившимся полям и на их основе формируется временная (создаваемая налету для конкретной записи) таблица инвертирования; <br />
* отрабатывает "старый" механизм актуализации на основе временной таблицы инвертирования. <br />
<br />
Необходимо отметить, что по понятным причинам при актуализации (т.е. сохранении) НОВОЙ записи (у которой нет никаких предыдущих копий), а также при УДАЛЕНИИ и РАЗУДАЛЕНИИ записи будет применяться старый механизм актуализации. <br />
Логичен вопрос: зачем поддерживать две структуры - таблицу инвертирования и таблицу актуализации, почему нельзя отказаться от таблицы инвертирования и применять только новую структуру - таблицу актуализации. Ответ очевиден: исключительно для соблюдения принципа наследования. Т.е. если в структуре БД присутствует таблица актуализации (<имя_БД>.IFS), будет применяться новый механизм актуализации, в противном случае - старый механизм.<br />
<br />
Файл <tt><имя_БД>.fst</tt> '''остаётся обязательным''' в структуре базы данных, в отличие от таблицы актуализации <tt><имя_БД>.ifs</tt>. (См. также [http://irbis.gpntb.ru/read.php?3,76647 информацию на форуме].)<br />
<br />
==Ссылки==<br />
<br />
См. также:<br />
* [[Индекс базы данных ИРБИС]]<br />
* [[Язык форматирования системы ИРБИС]]<br />
* [[Язык запросов ИРБИС]]<br />
<br />
Источники информации:<br />
* {{Ссылка на открытый FTP|filename=RELEASE_12_1.doc|text=Файл описания релиза 2012.1}}<br />
<br />
[[Категория:Индекс базы данных ИРБИС]]<br />
[[Категория:Анонсированные статьи]]</div>Sokvhttp://wiki.elnit.org/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%91%D0%B0%D0%B7%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%98%D0%A0%D0%91%D0%98%D0%A1&diff=2425Категория:Базы данных ИРБИС2015-09-04T21:01:23Z<p>Sokv: </p>
<hr />
<div>Статьи о технических аспектах [[Базы данных ИРБИС|баз данных ИРБИС]].<br />
<br />
[[Категория:Техническое описание ИРБИС]]</div>Sokvhttp://wiki.elnit.org/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%98%D0%BD%D0%B4%D0%B5%D0%BA%D1%81_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%98%D0%A0%D0%91%D0%98%D0%A1&diff=2424Категория:Индекс базы данных ИРБИС2015-09-04T20:58:34Z<p>Sokv: </p>
<hr />
<div>Статьи, касающиеся [[Индекс базы данных ИРБИС|индексирования базы данных ИРБИС]].<br />
<br />
[[Категория:Базы данных ИРБИС]]</div>Sokvhttp://wiki.elnit.org/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%AF%D0%B7%D1%8B%D0%BA_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%98%D0%A0%D0%91%D0%98%D0%A1&diff=2423Категория:Язык форматирования системы ИРБИС2015-09-04T20:54:31Z<p>Sokv: </p>
<hr />
<div>Статьи, касающиеся [[Язык форматирования системы ИРБИС|языка форматирования системы ИРБИС]].<br />
<br />
[[Категория:Языки и алгоритмы ИРБИС]]</div>Sokvhttp://wiki.elnit.org/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%98%D0%BD%D0%B4%D0%B5%D0%BA%D1%81_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%98%D0%A0%D0%91%D0%98%D0%A1&diff=2422Категория:Индекс базы данных ИРБИС2015-09-04T20:53:52Z<p>Sokv: Новая страница: «Статьи, касающиеся индексирования базы данных ИРБИС. [[Категор…»</p>
<hr />
<div>Статьи, касающиеся [[Индекс базы данных ИРБИС|индексирования базы данных ИРБИС]].<br />
<br />
[[Категория:Техническое описание ИРБИС]]</div>Sokvhttp://wiki.elnit.org/index.php?title=%D0%9A%D0%B5%D1%88%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BD%D0%B0_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2%D0%BE%D0%B9_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B5_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86_%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%87%D0%BD%D0%BE%D0%B3%D0%BE_%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0&diff=2421Кеширование на файловой системе страниц многостраничного документа2015-09-04T20:45:48Z<p>Sokv: </p>
<hr />
<div>В параметрах конфигурационномго файла АРМ Администратор TextPath и TextPathAlias задаётся список путей к папкам с полными текстами и список условных названий этих папок. В обоих списках значения хранятся в двойных кавычках, перечислены через запятую.<br />
<br />
Например, есть тексты находящиеся в папке "\\server\FullTexts\" и есть тексты внутри базы данных TESTDB (которые добавляются с относительными путями). Допустим, мы хотим, чтобы кеш страниц для этих текстов формировался соответственно в двух разных папках (это удобно) внутри корневой папки кеша: например, в "FullTexts 1" для текстов, находящихся в "\\server\FullTexts\" и в "FullTexts 2" для текстов, находящихся в папке базы данных. Для этого в конфигурационном файле АРМ Администратор в секции TEXTS необходимо добавить параметры:<br />
TextPath="\\server\FullTexts\","c:\irbisFT2012.1\IRBIS64\DATAI\TESTDB\"<br />
TextPathAlias="FullTexts 1","FullTexts 2"<br />
Чтобы задать корневую папку кеша добавим параметр<br />
TextCacheRootPath=d:\irbis-cache<br />
<br />
В результате этих настроек страницы кеша для текстов из "\\server\FullTexts\" (непосредственно в указанной папке или в подпапках) будут сохраняться в папке "FullTexts 1" внутри корневой папки кеша. Для текстов из базы TESTDB для этого будет использована папка "FullTexts 2" внутри корневой папки кеша.<br />
<br />
Для тех текстов, для которых не найдено подходящих значений в TextPath, файлы кеша будут находиться внутри корневой папки кеша, но не будут сгруппированы.<br />
<br />
Если не задана папка для хранения кеша, файлы-результаты разбиения на страницы будут сохранены в рабочей директории и удалены по завершении работы программы.<br />
<br />
''Примечание: если не задана папка для хранения кеша, то кеш будет создаваться в папке workdir в подпапке TEXTCACHEROOT и будет удалён при завершении работы АРМ Администратор. Параметры TextPath и TextPathAlias в этом случае тоже используются и играют такую же роль, как и в случае указания места для хранения кеша.''<br />
<br />
==Ссылки==<br />
<br />
См. также:<br />
* [[Полнотекстовые базы данных ИРБИС]]<br />
<br />
[[Категория:Обслуживание системы ИРБИС]]<br />
[[Категория:Языки и алгоритмы ИРБИС]]</div>Sokvhttp://wiki.elnit.org/index.php?title=%D0%AF%D0%B7%D1%8B%D0%BA_%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2_%D0%98%D0%A0%D0%91%D0%98%D0%A1&diff=2420Язык запросов ИРБИС2015-09-04T20:37:32Z<p>Sokv: </p>
<hr />
<div>''Поисковый язык ИРБИС'' или ''язык запросов ИРБИС'' предназначен для формулировки запросов, с помощью которых выполняется поиск в [[Базы данных ИРБИС|базах данных ИРБИС]].<br />
<br />
В ИРБИС выделяются два вида поиска:<br />
* ''Прямой поиск'' – быстрый поиск на основе [[Индекс базы данных ИРБИС|индекса (словаря) базы данных]].<br />
* ''Последовательный поиск'' – медленный поиск на основе последовательного перебора (просмотра) записей базы данных с возможностью выполнения таких операций, как БОЛЬШЕ/МЕНЬШЕ, НАЛИЧИЕ/ОТСУТСТВИЕ и других.<br />
<br />
==Прямой поиск==<br />
<br />
Запрос для прямого поиска представляет собой алгебраическое (поисковое) выражение, в котором операндами являются термины словаря, а операторами – логические операторы булевой алгебры. Для изменения порядка выполнения логических операторов в поисковом выражении могут применяться скобки.<br />
<br />
Термин словаря включает в себя собственно термин словаря и префикс, если таковой используется для данного вида терминов.<br />
<br />
В общем виде операнд поискового выражения можно представить следующим образом:<br />
<br />
"<префикс><термин>$"/(tag1,tag2,...tagN)<br />
где:<br />
* <tt><префикс></tt> - префикс, определяющий вид термина (вид словаря).<br />
* <tt><термин></tt> - собственно термин словаря.<br />
* <tt>$</tt> - признак правого усечения термина. Определяет совокупность терминов, имеющих начальную последовательность символов, совпадающую с указанным термином. Может отсутствовать, в этом случае поиск идет по точному значению указанного термина.<br />
* <tt>"</tt> – символ-ограничитель термина (двойные кавычки). Должен использоваться обязательно, если термин включает в себя символы пробел, круглые скобки, решетка (#), а также символы, совпадающие с обозначениями логических операторов (см. ниже).<br />
* /(tag1,tag2,...tagN) – конструкция квалификации термина. Определяет метки поля, в которых должен находиться указанный термин, или точнее – [[Таблица выбора полей#ТВП для инвертированного файла|вторую часть ''индексной ссылки'']]. Может отсутствовать, что означает отсутствие дополнительных требований в части меток полей.<br />
<br />
В поисковом выражении могут использоваться следующие логические операторы:<br />
* <tt>+</tt> - оператор логического ИЛИ. Соединение двух операндов (терминов) логическим оператором ИЛИ обозначает требование поиска записей, в которых присутствует хотя бы один из терминов.<br />
* <tt>*</tt> - оператор логического И. Соединение двух терминов логическим оператором И обозначает требование поиска записей, в которых присутствуют оба термина.<br />
* <tt>^</tt> - оператор логического НЕ. Соединение двух терминов логическим оператором НЕ обозначает требование поиска записей, в которых присутствует первый термин и отсутствует второй. Оператор НЕ не может быть одноместным (т.е. данному оператору, как и всем другим, должен ОБЯЗАТЕЛЬНО предшествовать термин).<br />
* <tt>(G)</tt> – первый оператор контекстного И. Соединение двух терминов таким оператором контекстного И обозначает требование поиска записей, в которых оба термина присутствуют в одном и том же поле (или точнее – когда у терминов совпадают вторые части ссылок).<br />
* <tt>(F)</tt> – второй оператор контекстного И. Соединение двух терминов таким оператором контекстного И обозначает требование поиска записей, в которых оба термина присутствуют в одном и том же повторении поля (или точнее – когда у терминов совпадают вторые и третьи части ссылок).<br />
* <tt>.</tt> – (точка обрамленная пробелами) третий оператор контекстного И. Соединение двух терминов таким оператором контекстного И обозначает требование поиска записей, в которых оба термина присутствуют в одном и том же повторении поля друг за другом (или точнее – когда у терминов совпадают вторые и третьи части ссылок, а третьи части ссылок отличаются на единицу).<br />
<br />
Логические операторы имеют приоритеты, которые определяют порядок их выполнения (в пределах одного уровня скобок). Ниже операторы приведены в порядке убывания приоритета:<br />
.<br />
(F)<br />
(G)<br />
* и ^<br />
+<br />
Операторы одного приоритета выполняются слева направо (в пределах одного уровня скобок). Для изменения порядка выполнения логических операторов в поисковом выражении могут применяться круглые скобки. Выражения в скобках могут объединяться только операторами + * ^.<br />
<br />
Примеры запросов для прямого поиска:<br />
("A=Иванов$" +"A=Петров$") * ("V=03" + "V=05")<br />
"K=трактор$" (F) "K=колесн$" + "K=бульдозер$" (F) "K=гусен$"<br />
"K=очист$"/(200,922) * "K=вод$"/(200,922)<br />
<br />
==Последовательный поиск==<br />
<br />
Запрос (или поисковое выражение) для последовательного поиска представляет собой формат на [[Язык форматирования системы ИРБИС|языке форматирования ИРБИС]].<br />
<br />
Собственно процесс последовательного поиска состоит в последовательном расформатировании исходных записей (т.е. тех записей, которые участвуют в поиске): если результатом расформатирования записи является строка '1' (или точнее – строка, содержащая символ '1'), то соответствующая запись удовлетворяет поисковому запросу, в противном случае – не удовлетворяет.<br />
<br />
Таким образом, в обобщенном виде запрос для последовательного поиска можно представить как следующий формат:<br />
if <логическое выражение> then '1' else '0' fi<br />
где <tt><логическое выражение></tt> - логическое выражение, в котором можно использовать все возможности языка форматирования ИРБИС.<br />
<br />
''Примечания:''<br />
* ''В [[АРМ Читатель]] и [[АРМ Каталогизатор]] в режиме ПОСЛЕДОВАТЕЛЬНЫЙ ПОИСК – СВОБОДНЫЙ ПОИСК в качестве запроса необходимо задавать именно <tt><логическое выражение></tt> (без объемлющей конструкции <tt>if … fi</tt>).''<br />
* ''Последовательный поиск применяется только в тех случаях, когда нет возможности найти необходимые записи на основе прямого поиска (т.е. на основе словарей). Если некий последовательный поиск приходится применять регулярно, следует пересмотреть правила инверсии базы данных (<dbname>.fst) – с тем чтобы иметь возможность выполнять соответствующий поиск на основе словаря.''<br />
<br />
<br />
==Ссылки==<br />
<br />
См. также:<br />
* [[Базы данных ИРБИС]]<br />
* [[Язык форматирования системы ИРБИС]]<br />
* [[Таблица выбора полей]]<br />
<br />
[[Категория:ИРБИС 64]]<br />
[[Категория:Языки и алгоритмы ИРБИС]]<br />
[[Категория:Анонсированные статьи]]</div>Sokvhttp://wiki.elnit.org/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB%D1%8B_%D0%98%D0%A0%D0%91%D0%98%D0%A1&diff=2419Файлы ИРБИС2015-09-04T20:26:59Z<p>Sokv: </p>
<hr />
<div>==Договорённости, касающиеся обозначений имён папок==<br />
<br />
===Основные обозначения===<br />
<br />
В этой документации будем обозначать:<br />
* <tt><Apache root></tt> – папка, в которой установлен веб-сервер Apache (см. [[Установка Веб-шлюза Ирбис 64]]);<br />
* <tt><Apache htdocs></tt> – папка <tt>htdocs</tt> веб-сервера Apache (в стандартной конфигурации Apache папка <tt>htdocs</tt> находится в папке <tt><Apache root></tt>);<br />
* <tt><Apache cgi-bin></tt> – папка <tt>cgi-bin</tt> веб-сервера Apache (в стандартной конфигурации Apache папка <tt>cgi-bin</tt> находится в папке <tt><Apache root></tt>);<br />
* <tt><Installer root></tt> – папка с дистрибутивом ИРБИС;<br />
* <tt><IRBIS_SERVER_ROOT></tt> – папка, в которой установлена серверная часть ИРБИС;<br />
* <tt><DATAI></tt> – папка, в которой размещены базы данных системы ИРБИС;<br />
* <tt><DB_FOLDER></tt> – папка базы данных (см. раздел [[#Размещение баз данных ИРБИС 64 на файловой системе|Размещение баз данных ИРБИС 64 на файловой системе]]);<br />
* <tt><DEPOSIT></tt> – папка депозитария ресурсов (см. раздел [[#Депозитарий ресурсов|Депозитарий ресурсов]]).<br />
<br />
===Папки, в именах которых присутствует номер версии ИРБИС===<br />
<br />
В имена некоторых папок Веб-шлюза ИРБИС входит номер версии ИРБИС. Имена таких папок в этой документации обозначаются в угловых скобках и номер версии обозначается буквами <tt>YN</tt> (<tt>Y</tt> – соответствует году выпуска версии, <tt>N</tt> – номер версии в году). Например:<br />
* <tt><irbis64r_YN></tt> (для ИРБИС 64)<br />
* <tt><irbis32r_YN></tt> (для ИРБИС 32)<br />
* <tt><frames_YN></tt><br />
* <tt><DEPOSIT_YN></tt> – папка депозитария ресурсов веб-шлюза ИРБИС (см. раздел [[#Депозитарий ресурсов Веб-шлюза ИРБИС|Депозитарий ресурсов Веб-шлюза ИРБИС]]).<br />
<br />
Для версии ИРБИС от 2009 года этим обозначениям соответствуют имена папок <tt>irbis64r_91</tt>, <tt>irbis32r_91</tt>, <tt>frames_91</tt>, <tt>Deposit_91</tt>; для версии ИРБИС от 2008 года этим обозначениям соответствуют имена папок <tt>irbis64r_81</tt>, <tt>irbis32r_81</tt>, <tt>frames_81</tt>, <tt>Deposit_81</tt> и т.п.<br />
<br />
==Файлы развёрнутого экземпляра системы ИРБИС==<br />
<br />
===Файлы серверной части ИРБИС===<br />
<br />
====Исполняемые файлы и программные библиотеки====<br />
<br />
Состав программных модулей серверной части ИРБИС 64:<br />
* <tt>irbis_server.exe</tt> – исполняемый файл для запуска сервера как обычного Windows-приложения.<br />
* <tt>service_64.exe</tt> – исполняемый файл для запуска сервера в режиме сервиса Windows.<br />
* <tt>server_64.exe</tt> – исполняемый файл процесса обработки.<br />
* <tt>[[IRBIS64.dll|irbis64.dll]]</tt> – программная библиотека для доступа к [[Базы данных ИРБИС|базам данных ИРБИС 64]] и выполнения операций [[Язык форматирования системы ИРБИС#Начало знакомства с языком форматирования ИРБИС|форматирования записей базы данных]].<br />
<br />
Подробнее о работе данных программных модулей см. [[TCP/IP сервер ИРБИС 64|в статье ''TCP/IP сервер ИРБИС 64'']].<br />
<br />
====Конфигурационный файл TCP/IP сервера ИРБИС 64====<br />
<br />
Подробнее о конфигурационном файле см. в [[#Конфигурационные файлы ИРБИС|подразделе данной статьи ''Конфигурационные файлы ИРБИС'']] и в статье [[Конфигурационный файл TCP/IP сервера ИРБИС 64]].<br />
<br />
====Корневая папка баз данных ИРБИС 64====<br />
<br />
Система ИРБИС предполагает размещение баз данных непосредственно внутри одной папки.<br />
<br />
Обозначение корневой папки баз данных – <tt><DATAI></tt>.<br />
<br />
Дополнительно [http://irbis.gpntb.ru/read.php?10,25529 см.]<br />
<br />
====Размещение баз данных ИРБИС 64 на файловой системе====<br />
<br />
Обычно файлы, имеющие отношение к определённой базе данных ([[#Файлы баз данных ИРБИС|собственно данные базы и параметрические описания баз данных]]), хранятся в отдельной папке, имя которой совпадает с именем базы данных. Такую папку принято называть '''''папка базы данных'''''.<br />
<br />
Папку базы данных будем обозначать <tt><DB_FOLDER></tt>. (См. [[#Основные обозначения|Основные обозначения]].)<br />
<br />
Вообще для определения местоположения файлов баз данных на файловой системе ИРБИС использует специальные файлы с расширением <tt>.par</tt> – [[Базы данных ИРБИС#par-файл|<tt>.par</tt>-файлы]].<br />
<br />
<tt>.par</tt>-файлы находятся в папке <tt><DATAI></tt>.<br />
<br />
====Депозитарий ресурсов====<br />
<br />
<tt><DEPOSIT></tt> – обозначение основного депозитария ресурсов системы.<br />
<br />
Депозитарий ресурсов – место размещения общих для разных баз данных параметрических файлов ([[#Файлы баз данных ИРБИС|<tt>.fst</tt>, <tt>.pft</tt>, <tt>.mnu</tt>, <tt>.ws</tt>, <tt>.wss</tt>, <tt>.srw</tt>, <tt>.gbl</tt>, <tt>.tre</tt> и др.]]), позволяет избавиться от дублирования ресурсов в каждой папке базы данных.<br />
<br />
Для устранения неоднозначности относительно местонахождения файлов ресурсов применяются следующие правила:<br />
* в первую очередь система ИРБИС попробует взять файл в папке базы данных <tt><DB_FOLDER></tt>,<br />
* при отсутствии искомого файла в папке базы данных, система ИРБИС попробует взять файл в папке депозитария ресурсов <tt><DEPOSIT></tt>.<br />
<br />
====Папка для хранения временных файлов, используемых при работе АРМ====<br />
<br />
Папка для сохранения временных выходных данных.<br />
<br />
''Рабочая директория'' является устоявшимся термином для обозначения данной папки.<br />
<br />
Местоположение папки для временных файлов, определяется значением параметра <tt>WORKDIR</tt>, подробнее см. в статьях [[Параметры настройки системы (информация сверена с базой HLPINI)]], [[Конфигурационные параметры ИРБИС для полнотекстовых БД]].<br />
<br />
===Файлы АРМ ИРБИС 64===<br />
<br />
====Файлы АРМ Администратор ИРБИС====<br />
<br />
=====Конфигурационный файл АРМ Администратор ИРБИС=====<br />
<br />
Подробнее о конфигурационном файле см. в статьях [[Параметры настройки системы]], [[Параметры настройки системы (информация сверена с базой HLPINI)]], [[Конфигурационные параметры ИРБИС для полнотекстовых БД]].<br />
<br />
О местоположении конфигурационного файла см. в подразделе [[#Конфигурационные файлы ИРБИС|Конфигурационные файлы ИРБИС]].<br />
<br />
====Файлы АРМ Читатель ИРБИС====<br />
<br />
=====Конфигурационный файл АРМ Читатель ИРБИС=====<br />
<br />
Подробнее о конфигурационном файле см. в статьях [[Параметры настройки системы]], [[Параметры настройки системы (информация сверена с базой HLPINI)]] и [[Конфигурационные параметры ИРБИС для полнотекстовых БД]].<br />
<br />
Местонахождение и имя файла:<br />
* <tt><IRBIS_SERVER_ROOT>\irbisr.ini</tt> – для обычной версии ИРБИС,<br />
* <tt><IRBIS_SERVER_ROOT>\irbisr_FullText.ini</tt> – для полнотекстовой версии ИРБИС.<br />
<br />
===Файлы веб-ИРБИС===<br />
<br />
====Папка с файлами CSS, изображениями и скриптами JavaScript Веб-шлюза ИРБИС====<br />
<br />
В развёрнутом Веб-шлюзе ИРБИС файлы CSS, изображения и скрипты JavaScript обычно находятся в папке <tt><Apache htdocs>\<irbis64r_YN></tt> для ИРБИС 64 и <tt><Apache htdocs>\<irbis32r_YN></tt> для ИРБИС 32.<br />
<br />
Имя папки, содержащей CSS, изображения и скрипты, может быть изменено, поскольку оно параметризовано в [[Конфигурационный файл установщика Веб-шлюза ИРБИС|конфигурационном файле установщика Веб-шлюза ИРБИС]].<br />
<br />
====Папка с CGI-программой Веб-шлюза ИРБИС====<br />
<br />
В развёрнутом Веб-шлюзе ИРБИС CGI-программа обычно находится в папке <tt><Apache cgi-bin>\<irbis64r_YN></tt> для ИРБИС 64 и <tt><Apache cgi-bin>\<irbis32r_YN></tt> для ИРБИС 32.<br />
<br />
Имя папки, содержащей CGI-программу, может быть изменено, поскольку оно параметризовано в [[Конфигурационный файл установщика Веб-шлюза ИРБИС|конфигурационном файле установщика Веб-шлюза ИРБИС]].<br />
<br />
=====Конфигурационный файл веб-шлюза ИРБИС <tt>irbis_server.ini</tt> (файл инициализации шлюза)=====<br />
<br />
Подробнее о конфигурационном файле см. в [[#Конфигурационные файлы ИРБИС|подразделе данной статьи ''Конфигурационные файлы ИРБИС'']] и в статье [[Конфигурационный файл веб-шлюза ИРБИС irbis server.ini]].<br />
<br />
=====Шаблоны описания базы данных в конфигурационном файле веб-шлюза ИРБИС=====<br />
<br />
Для использования в Веб-ИРБИС база данных должна быть соответствующим образом описана в конфигурационном файле веб-шлюза ИРБИС.<br />
<br />
Существуют шаблоны таких описаний:<br />
* <tt><Apache cgi-bin>\<irbis64r_YN>\base_template.ini</tt> — шаблон для обычных библиографических баз,<br />
* <tt><Apache cgi-bin>\<irbis64r_YN>\base_ft_template.ini</tt> — шаблон для полнотекстовых баз,<br />
* <tt><Apache cgi-bin>\<irbis64r_YN>\base_img_template.ini</tt> — шаблон для баз имидж-каталога.<br />
<br />
Об использовании этих шаблонов см. в [[Настройка и обслуживание Веб-ИРБИС#Список доступных читателю баз данных|разделе '''Список доступных читателю баз данных''' статьи '''Настройка и обслуживание Веб-ИРБИС''']].<br />
<br />
====Справочники Веб-шлюза ИРБИС====<br />
<br />
=====Справочники, определяющие списки доступных баз данных ИРБИС для Веб-ИРБИС=====<br />
<br />
Местонахождение, имя и краткое описание справочников:<br />
* <tt><Apache cgi-bin>\<irbis64r_YN>\Deposit\dbn_web.mnu</tt> – содержит идентификаторы и названия баз данных, которые отображаются в Веб-ИРБИС.<br />
<br />
Об изменении списка доступных баз данных в интерфейсе пользователя Веб-ИРБИС см. в [[Настройка и обслуживание Веб-ИРБИС#Список доступных читателю баз данных|разделе '''Список доступных читателю баз данных''' статьи '''Настройка и обслуживание Веб-ИРБИС''']].<br />
<br />
См. также описание [[#Справочники, определяющие списки доступных баз данных ИРБИС для различных АРМ ИРБИС|других справочников, определяющих списки доступных баз данных в ИРБИС]].<br />
<br />
=====Другие справочники Веб-ИРБИС=====<br />
<br />
Краткое описание справочников:<br />
* <tt><IRBIS_SERVER_ROOT>\webirbis.mnu</tt> – содержит HTTP-ссылку на веб-шлюз ИРБИС, выступающий в роли ''основного'' в группе веб-шлюзов, предоставляющих [[Распределённый поиск в Ирбис|распределённый поиск]].<br />
<br />
Часть справочников в развёрнутом Веб-шлюзе ИРБИС обычно находятся в папке <tt><DATAI>\<Deposit_YN></tt>.<br />
<br />
Имя папки, содержащей эти справочники, может быть изменено, поскольку оно параметризовано в [[Конфигурационный файл установщика Веб-шлюза ИРБИС|конфигурационном файле установщика Веб-шлюза ИРБИС]].<br />
<br />
====Фреймы====<br />
<br />
Фреймы хрянятся в виде файлов с расширением <tt>.frm</tt>.<br />
<br />
В развёрнутом Веб-шлюзе ИРБИС фреймы обычно находятся в папке <tt><DATAI>\<frames_YN></tt>.<br />
<br />
Имя папки, содержащей фреймы, может быть изменено, поскольку оно параметризовано в [[Конфигурационный файл установщика Веб-шлюза ИРБИС|конфигурационном файле установщика Веб-шлюза ИРБИС]].<br />
<br />
В указанной папке фреймы распределены по подпапкам, рассмотрим их.<br />
<br />
=====<tt>Default</tt>=====<br />
<br />
* <tt>header_1.frm</tt> – заголовок страницы электронного каталога.<br />
<br />
=====<tt>Main</tt>=====<br />
<br />
* <tt>search_search.frm</tt> – поисковый блок интерфейса с полем для ввода ключевых слов и кнопкой ''Поиск''.<br />
<br />
=====<tt>MainRaspr</tt>=====<br />
<br />
В этой папке содержатся фреймы для [[Распределённый поиск в Ирбис|распределённого поиска]].<br />
<br />
* <tt>raspr.frm</tt> – основная страница распределённого поиска.<br />
<br />
====Депозитарий ресурсов Веб-шлюза ИРБИС====<br />
<br />
<tt><DEPOSIT_YN></tt> – обозначение депозитария ресурсов Веб-шлюза ИРБИС.<br />
<br />
Папка депозитария может быть выбрана при установке [[Конфигурационный файл установщика Веб-шлюза ИРБИС|с помощью соответствующего параметра в конфигурационном файле установщика Веб-шлюза ИРБИС]].<br />
<br />
Краткое описание предназначения файлов:<br />
* <tt>fullwebr.pft</tt> – блок интерфейса, ответственный за отображение библиографических ссылок.<br />
* <tt>referings.pft</tt> – блок интерфейса, ответственный за отображение гиперссылок на другие страницы списка найденных документов.<br />
<br />
===Файлы полнотекстовой версии ИРБИС===<br />
<br />
====Файлы форматов====<br />
<br />
В развёрнутом полнотекстовом ИРБИС [[#Файлы форматов ИРБИС|файлы форматов]] (относящиеся к полнотекстовому ИРБИС) обычно находятся в папке депозитария <tt><DEPOSIT></tt> и папках баз данных (которые мы условно обозначаем <tt><DB_FOLDER></tt>).<br />
<br />
Группа форматов, предназначенных для [[Страница результатов поиска в АРМ Читатель для полнотекстовых БД|отображения результатов поиска в полнотекстовой версии ИРБИС]]:<br />
* <tt><DEPOSIT>\search_header.pft</tt>;<br />
* <tt><DB_FOLDER>\BriefHTML.pft</tt>;<br />
* <tt><DEPOSIT>\search_footer.pft</tt>.<br />
<br />
====Файл журнала АРМ Администратор полнотекстовых БД====<br />
<br />
В развёрнутом полнотекстовом ИРБИС [[АРМ Администратор полнотекстовых БД#Файл журнала|файл журнала АРМ Администратор полнотекстовых БД]] находится в папке, в которой установлен ИРБИС (<tt><IRBIS_SERVER_ROOT></tt>).<br />
<br />
Обычно файл журнала имеет имя <tt>Irbis64_FullTextAdministrator.log</tt>. Файл журнала получает то же имя, что и запускаемый файл АРМ Администратор, и расширение <tt>.log</tt>.<br />
<br />
==Файлы установочных пакетов ИРБИС==<br />
<br />
===Файлы установочного пакета ИРБИС 64===<br />
<br />
* <tt><Installer root>\setup64.exe</tt> – установщик.<br />
<br />
Об установке ИРБИС см. статью [[Установка продуктов ИРБИС]].<br />
<br />
===Файлы, входящие в установочный пакет Веб-шлюза ИРБИС===<br />
<br />
Список файлов:<br />
* [[#Установщик Веб-шлюза ИРБИС|установщик Веб-шлюза ИРБИС]];<br />
* [[#Конфигурационный файл установщика Веб-шлюза ИРБИС|конфигурационный файл установщика Веб-шлюза ИРБИС]];<br />
* <tt>borlandmm.dll, unzip32.dll</tt> – компоненты программы установки;<br />
* <tt>webirbis.zip</tt> – архив основных файлов системы;<br />
* <tt>webirbis_z39.zip</tt> – архив Z39 компонентов (присутствует только в полной версии).<br />
<br />
====Установщик Веб-шлюза ИРБИС====<br />
<br />
Местонахождение и имя файла:<br />
* <tt><Installer root>\wsetup.exe</tt> – в версии ИРБИС от 2010 года,<br />
* <tt><Installer root>\wsetup64r.exe</tt> – в версиях ИРБИС 64 до 2009 года включительно,<br />
* <tt><Installer root>\wsetup64r_ft.exe</tt> – в версиях Веб-шлюза ИРБИС 64 для работы с полнотекстовыми базами данных до 2009 года включительно.<br />
<br />
Об установке Веб-шлюза ИРБИС см. статью [[Установка Веб-шлюза Ирбис 64]].<br />
<br />
====Конфигурационный файл установщика Веб-шлюза ИРБИС====<br />
<br />
Подробнее о конфигурационном файле см. в статье [[Конфигурационный файл установщика Веб-шлюза ИРБИС]].<br />
<br />
Местонахождение и имя файла:<br />
* <tt><Installer root>\WebIrbis.ini</tt> – в версии ИРБИС от 2009 года,<br />
* <tt><Installer root>\WebIrbis64.ini</tt> – в версии ИРБИС 64 от 2008 года,<br />
* <tt><Installer root>\WebIrbis32.ini</tt> – в версии ИРБИС 32 от 2008 года.<br />
<br />
===Файлы, входящие в установочный пакет ''Полнотекстовые базы данных ИРБИС 64''===<br />
<br />
* <tt><Installer root>\setup64_FullText.exe</tt> – установщик.<br />
<br />
Об установке пакета программ ''Полнотекстовые базы данных ИРБИС 64'' см. [[Установка и использование ИРБИС 64 для полнотекстовых баз данных#Установочный пакет Полнотекстовые базы данных ИРБИС 64|в соответствующем разделе статьи ''Установка и использование ИРБИС 64 для полнотекстовых баз данных'']]<br />
<br />
==Файлы по видам и назначению==<br />
<br />
===Файлы баз данных ИРБИС===<br />
<br />
Файлы, составляющие одну базу данных, делятся на две группы:<br />
* Пять файлов, содержащие [[Базы данных ИРБИС#Файловая структура базы данных ИРБИС|собственно данные и индекс базы данных]]. Это файлы с расширениями: <tt>.mst</tt>, <tt>.xrf</tt>, <tt>.ifp</tt>, <tt>.n01</tt>, <tt>.l01</tt>.<br />
* Остальные файлы, содержащие [[Базы данных ИРБИС#Параметры и ресурсы базы данных ИРБИС|параметрические описания баз данных и ресурсы]], не изменяемые в процессе работы конечного пользователя: <tt>.fst</tt>, <tt>.ifs</tt>, <tt>.pft</tt>, <tt>.stw</tt>, <tt>.mnu</tt>, <tt>.opt</tt>, <tt>.tab</tt>, <tt>.srt</tt>, <tt>.hdr</tt>, <tt>.ws</tt>, <tt>.wss</tt>, <tt>.srw</tt>, <tt>.gbl</tt>, <tt>.tre</tt> и др.<br />
<br />
Для [[Базы данных ИРБИС#Резервное копирование файла документов базы данных ИРБИС|файлов резервных копий документов баз данных ИРБИС]] используется расширение <tt>.bkp</tt>.<br />
<br />
Также см. раздел [[#Размещение баз данных ИРБИС 64 на файловой системе|Размещение баз данных ИРБИС 64 на файловой системе]].<br />
<br />
===Конфигурационные файлы ИРБИС===<br />
<br />
Основные параметры настройки системы ИРБИС 64 находятся в следующих конфигурационных (инициализационных) файлах:<br />
* [[Конфигурационный файл TCP/IP сервера ИРБИС 64]] (местонахождение и имя: <tt><IRBIS_SERVER_ROOT>\irbis_server.ini</tt>).<br />
* Конфигурационные файлы для каждого [[ЧАВО по работе с ИРБИС#Список основных модулей ИРБИС 64|АРМ системы ИРБИС 64]] ([[АРМ Администратор]], [[АРМ Каталогизатор]], [[АРМ Комплектатор]], [[АРМ Читатель]], [[АРМ Книговыдача]], [[АРМ Книгообеспеченность]]). Каждый АРМ использует два ini-файла: клиентский (находящийся на машине клиента) и серверный (находящийся на сервере). Основные параметры настройки АРМ находятся в серверных ini-файлах. Описание параметров см. в статьях [[Параметры настройки системы]] и [[Параметры настройки системы (информация сверена с базой HLPINI)]].<br>По умолчанию конфигурационные файлы находятся в папке <tt><IRBIS_SERVER_ROOT></tt> и имеют следующие имена:<br />
<br />
:{| class="standard"<br />
!АРМ||серверный ini-файл||клиентский ini-файл<br />
|-<br />
|[[АРМ Администратор]]||<tt>irbisa.ini</tt>||<tt>cirbisa.ini</tt><br />
|-<br />
|[[АРМ Читатель]]||<tt>irbisr.ini</tt>||<tt>cirbisr.ini</tt><br />
|-<br />
|[[АРМ Каталогизатор]]||<tt>irbisc.ini</tt>||<tt>cirbisc.ini</tt><br />
|-<br />
|[[АРМ Комплектатор]]||<tt>Irbisp.ini</tt>||<tt>cirbisp.ini</tt><br />
|-<br />
|[[АРМ Книговыдача]]||<tt>irbisb.ini</tt>||<tt>cirbisb.ini</tt><br />
|-<br />
|[[АРМ Книгообеспеченность]]||<tt>irbisk.ini</tt>||<tt>cirbisk.ini</tt><br />
|}<br />
<br />
* [[Конфигурационный файл веб-шлюза ИРБИС irbis_server.ini|Конфигурационный файл веб-шлюза ИРБИС]]. Местонахождение и имя файла:<br />
** <tt><Apache cgi-bin>\<irbis64r_YN>\irbis_server.ini</tt> для ИРБИС 64,<br />
** <tt><Apache cgi-bin>\<irbis32r_YN>\irbis_server.ini</tt> для ИРБИС 32.<br />
<br />
* Конфигурационные файлы АРМ для полнотекстовых баз данных (см. в статье [[Конфигурационные параметры ИРБИС для полнотекстовых БД]]). Местонахождение и имя конфигурационных файлов АРМ Администратор и АРМ Читатель для полнотекстовых БД соответственно <tt>IRBISA_FullText.ini</tt> и <tt>IRBISR_FullText.ini</tt> в папке <tt><IRBIS_SERVER_ROOT></tt>.<br />
<br />
Для создания/корректировки INI-файлов предназначен [[соответствующий редактор]].<br />
<br />
===Справочники===<br />
<br />
[[Справочники]] хранятся в виде файлов с расширением <tt>.mnu</tt>.<br />
<br />
====Справочники, определяющие списки доступных баз данных ИРБИС для различных АРМ ИРБИС====<br />
<br />
В ИРБИС для любого АРМ существует соответствующий справочник, в котором заданы: список доступных баз данных и названия баз данных, которые видит пользователь. [[#Справочники, определяющие списки доступных баз данных ИРБИС для Веб-ИРБИС|Справочники, определяющие списки доступных баз данных в Веб-ИРБИС описаны отдельно.]]<br />
<br />
Путём внесения изменений в эти справочники можно регулировать:<br />
* список баз данных, доступных при использовании соответствующего АРМ;<br />
* названия баз данных, которые увидит пользователь соответствующего АРМ.<br />
<br />
Данные справочники содержатся в папке <tt><DATAI></tt>.<br />
<br />
Названия справочников, использующиеся по умолчанию:<br />
* Справочник <tt>Dbnam1.mnu</tt> (для полнотекстовой версии <tt>Dbnam1_FT.mnu</tt>) определяет [[АРМ Администратор#Установка текущей базы данных|список баз данных, доступных в АРМ Администратор]]. Название этого справочника определяется значением [[Параметры настройки системы (информация сверена с базой HLPINI)|параметра <tt>DBNNAMECAT</tt> в конфигурационном файле АРМ Администратор ИРБИС]] и может быть изменено.<br />
* Справочник <tt>Dbnam2.mnu</tt> определяет список баз данных, доступных в [[АРМ Каталогизатор]], [[АРМ Комплектатор]] и [[АРМ Книгообеспеченность]]. Названия справочников для этих АРМ определяются значениями соответствующего параметра в конфигурационных файлах этих АРМ и может быть изменено для каждого АРМ.<br />
* Справочник <tt>Dbnam3.mnu</tt> (для полнотекстовой версии <tt>Dbnam3_FT.mnu</tt>) определяет список баз данных, доступных в АРМ Читатель. Название этого справочника определяется значением соответствующего параметра в конфигурационном файле и может быть изменено.<br />
<br />
В списках баз данных, доступных АРМ Каталогизатор и АРМ Читатель именам конкретных баз может предшествовать символ "-" (минус), что означает:<br />
* для АРМ Каталогизатор – соответствующая база не доступна для ввода;<br />
* для АРМ Читатель – соответствующая база не доступна для заказа.<br />
<br />
====Справочники, определяющие списки доступных выходных форм в АРМ Каталогизатор====<br />
<br />
Названия справочников, использующиеся по умолчанию (справочники содержатся в папке базы данных):<br />
* Справочник <tt>tabw.mnu</tt> определяет список доступных выходных форм - таблиц. Название этого справочника определяется значением параметра <tt>TabMnu</tt> в конфигурационном файле <tt>irbisbat.ini</tt> и может быть изменено.<br />
* Справочник <tt>pftw.mnu</tt> определяет список доступных выходных форм - списков. Название этого справочника определяется значением параметра <tt>PftMnu</tt> в конфигурационном файле <tt>irbisbat.ini</tt> и может быть изменено.<br />
<br />
====Информация о некоторых из используемых в системе ИРБИС справочников====<br />
<br />
{| class="standard"<br />
!Имя||Назначение||Расположение||Пояснения<br />
|-<br />
|<tt>dbnam1.mnu</tt>||См. подраздел [[#Справочники, определяющие списки доступных баз данных ИРБИС для различных АРМ ИРБИС|''Справочники, определяющие списки доступных баз данных ИРБИС для различных АРМ ИРБИС'']]|| ||<br />
|-<br />
|<tt>dbnam1_ft.mnu</tt>||См. подраздел [[#Справочники, определяющие списки доступных баз данных ИРБИС для различных АРМ ИРБИС|''Справочники, определяющие списки доступных баз данных ИРБИС для различных АРМ ИРБИС'']]|| ||<br />
|-<br />
|<tt>dbnam2.mnu</tt>||См. подраздел [[#Справочники, определяющие списки доступных баз данных ИРБИС для различных АРМ ИРБИС|''Справочники, определяющие списки доступных баз данных ИРБИС для различных АРМ ИРБИС'']]|| ||<br />
|-<br />
|<tt>dbnam3.mnu</tt>||См. подраздел [[#Справочники, определяющие списки доступных баз данных ИРБИС для различных АРМ ИРБИС|''Справочники, определяющие списки доступных баз данных ИРБИС для различных АРМ ИРБИС'']]|| ||<br />
|-<br />
|<tt>dbnam3_ft.mnu</tt>||См. подраздел [[#Справочники, определяющие списки доступных баз данных ИРБИС для различных АРМ ИРБИС|''Справочники, определяющие списки доступных баз данных ИРБИС для различных АРМ ИРБИС'']]|| ||<br />
|-<br />
|<tt>exportw.mnu</tt>||Список ТВП переформатирования для экспорта в [[АРМ Администратор]], [[АРМ Каталогизатор]] и [[АРМ Читатель]]||папка базы данных||Имя определяется [[Параметры настройки системы (информация сверена с базой HLPINI)|параметром EXPORTMNU]] в INI-файлах [[АРМ Администратор]], [[АРМ Каталогизатор]] и [[АРМ Читатель]]<br />
|-<br />
|<tt>fmt.mnu</tt>||Список доступных РЛ ввода для [[АРМ Каталогизатор]]||папка базы данных||Имя определяется [[Параметры настройки системы (информация сверена с базой HLPINI)|параметром FMTMNU]] в INI-файле [[АРМ Каталогизатор]]<br />
|-<br />
|<tt>formatw.mnu</tt>||Список доступных форматов показа для [[АРМ Читатель]]||папка базы данных||Имя определяется [[Параметры настройки системы (информация сверена с базой HLPINI)|параметром PFTMNU]] в INI-файле [[АРМ Читатель]]<br />
|-<br />
|<tt>fst.mnu</tt>||Список ТВП переформатирования для копирования в [[АРМ Администратор]] и [[АРМ Каталогизатор]]||папка базы данных||Имя определяется [[Параметры настройки системы (информация сверена с базой HLPINI)|параметром COPYMNU]] в INI-файлах [[АРМ Администратор]] и [[АРМ Каталогизатор]]<br />
|-<br />
|<tt>importw.mnu</tt>||Список ТВП переформатирования для импорта в [[АРМ Администратор]] и [[АРМ Каталогизатор]]||папка базы данных||Имя определяется [[Параметры настройки системы (информация сверена с базой HLPINI)|параметром IMPORTMNU]] в INI-файлах [[АРМ Администратор]] и [[АРМ Каталогизатор]]<br />
|-<br />
|<tt>iri.mnu</tt>||Список постоянных запросов для [[АРМ Каталогизатор]] и [[АРМ Читатель]]||<tt><IRBIS_SERVER_ROOT></tt> – папка, в которой установлена серверная часть ИРБИС||Имя определяется [[Параметры настройки системы (информация сверена с базой HLPINI)|параметром IRIMNU]] в INI-файлах [[АРМ Каталогизатор]] и [[АРМ Читатель]]<br />
|-<br />
|<tt>jz.mnu</tt>||Список кодов языков||папка базы данных||<br />
|-<br />
|<tt>pftw.mnu</tt>||См. подраздел [[#Справочники, определяющие списки доступных выходных форм в АРМ Каталогизатор|''Справочники, определяющие списки доступных выходных форм в АРМ Каталогизатор'']]|| ||<br />
|-<br />
|<tt>sort.mnu</tt>||Список ключей сортировки результатов поиска для [[АРМ Каталогизатор]] и [[АРМ Читатель]]||папка базы данных||Имя определяется [[Параметры настройки системы (информация сверена с базой HLPINI)|параметром SORTMNU]] в INI-файлах [[АРМ Каталогизатор]] и [[АРМ Читатель]]<br />
|-<br />
|<tt>str.mnu</tt>||Список кодов стран||папка базы данных||<br />
|-<br />
|<tt>stt.mnu</tt>||Список видов статистики для [[АРМ Каталогизатор]]||папка базы данных||Имя определяется [[Параметры настройки системы (информация сверена с базой HLPINI)|параметром STTMNU]] в INI-файле [[АРМ Каталогизатор]]<br />
|-<br />
|<tt>tabw.mnu</tt>||См. подраздел [[#Справочники, определяющие списки доступных выходных форм в АРМ Каталогизатор|''Справочники, определяющие списки доступных выходных форм в АРМ Каталогизатор'']]|| ||<br />
|-<br />
|<tt>unicode.mnu</tt>||Список кодовых наборов для ввода символов UNICODE||<tt><IRBIS_SERVER_ROOT></tt> – папка, в которой установлена серверная часть ИРБИС||Имя определяется [[Параметры настройки системы (информация сверена с базой HLPINI)|параметром UNICODEMNU]] в INI-файле [[АРМ Каталогизатор]]<br />
|}<br />
<br />
===Файлы форматов ИРБИС===<br />
<br />
[[Язык форматирования системы ИРБИС#Понятие формата|Форматы]] хранятся в виде файлов с расширением <tt>.pft</tt>.<br />
<br />
===Файлы заданий на пакетную корректировку===<br />
<br />
[[Язык пакетной корректировки баз данных ИРБИС#Файл задания|Задание на пакетную корректировку]] представляет собой текстовый файл с расширением <tt>.gbl</tt>.<br />
<br />
====Сценарий автоввода====<br />
<br />
{| class="standard"<br />
!Имя||Назначение||Расположение||Пояснения<br />
|-<br />
|<tt>AUTOIN.GBL</tt>||[[Автоввод]]|| ||Имя определяется [[Параметры настройки системы (информация сверена с базой HLPINI)|параметром AUTOINFILE]] в INI-файле<br />
|}<br />
<br />
===Файлы выходных форм ИРБИС===<br />
<br />
К [[Выходные формы|выходным формам ИРБИС]] имеют отношение:<br />
* [[Язык форматирования системы ИРБИС#Понятие формата|файлы форматов ИРБИС]] (с расширением <tt>.pft</tt>),<br />
* файлы описания табличной формы (с расширениями <tt>.tbg</tt>, <tt>.tbb</tt>),<br />
* файлы описания тела таблицы для табличной формы (с расширениями <tt>.tbu</tt>, <tt>.tab</tt>),<br />
* файлы сортировки таблицы для табличной формы (с расширением <tt>.srw</tt>),<br />
* файлы дополнительных параметров для табличной формы (с расширением <tt>.hdr</tt>).<br />
<br />
===Файлы таблиц выбора полей (ТВП) ИРБИС===<br />
<br />
[[Таблица выбора полей|Таблицы выбора полей]] хранятся в виде файлов с расширением <tt>.fst</tt>.<br />
<br />
====ТВП для инвертированного файла====<br />
<br />
[[Таблица выбора полей#ТВП для инвертированного файла|ТВП для инвертированного файла]] хранится в [[#Файлы баз данных ИРБИС|папке базы данных]] в виде файла с именем базы данных и расширением <tt>.fst</tt>.<br />
<br />
====Таблица актуализации====<br />
<br />
[[Механизм актуализации записи|Таблица актуализации]] хранится в [[#Файлы баз данных ИРБИС|папке базы данных]] в виде файла с именем базы данных и расширением <tt>.ifs</tt>.<br />
<br />
===Таблица алфавитных символов===<br />
<br />
[[ТВП#Алгоритм выбора слов|Таблица алфавитных символов используется системой ИРБИС при разбиении текста на слова]] и представляет собой список кодов символов, которые считаются алфавитными.<br />
<br />
Таблица реализована в виде текстового файла в определённом формате.<br />
<br />
Местонахождение и имя файла по умолчанию: <tt><IRBIS_SERVER_ROOT>\ISISACW.TAB</tt>.<br />
<br />
Местонахождение и имя файла определяется значением [[Параметры настройки системы (информация сверена с базой HLPINI)|параметра <tt>ACTABPATH</tt> в конфигурационном файле АРМ Администратор ИРБИС]] и может быть изменено.<br />
<br />
===Файл стоп-слов===<br />
<br />
[[Таблица выбора полей#Метод индексирования 4|Файл стоп-слов используется при индексировании]] и хранится в [[#Файлы баз данных ИРБИС|папке базы данных]] в виде файла с расширением <tt>.stw</tt>.<br />
<br />
==Документация, поставляемая с системой ИРБИС==<br />
<br />
* <tt><DEPOSIT>/Irbis_Navigator_Help*.html</tt> – [[Документация, поставляемая с системой ИРБИС#ИРБИС-Навигатор. Полная инструкция|ИРБИС-Навигатор. Полная инструкция]].<br />
* <tt>doclad_libcom2004.doc</tt> – [[Документация, поставляемая с системой ИРБИС#Полнотекстовые базы данных в системе ИРБИС64|Полнотекстовые базы данных в системе ИРБИС64]].<br />
* <tt>irbis64_2008.doc</tt> – [[Общее описание системы ИРБИС64|Полнотекстовые базы данных в системе ИРБИС64]].<br />
* <tt>irbis64_client_dll.doc</tt> – [[Документация, поставляемая с системой ИРБИС#Описание функций библиотеки IRBIS64_CLIENT.DLL|Описание функций библиотеки IRBIS64_CLIENT.DLL]].<br />
* <tt>Irbis64_fulltext.doc</tt> – [[Документация, поставляемая с системой ИРБИС#Методика работы с полнотекстовыми базами данных ИРБИС64|Методика работы с полнотекстовыми базами данных ИРБИС64]].<br />
* <tt>irbiscat.doc</tt> – [[Документация, поставляемая с системой ИРБИС#Автоматизированное рабочее место «Каталогизатор». Руководство пользователя|Автоматизированное рабочее место «Каталогизатор». Руководство пользователя]].<br />
* <tt>irbiscom.doc</tt> – [[Документация, поставляемая с системой ИРБИС#Автоматизированное рабочее место "Комплектатор". Руководство пользователя|Автоматизированное рабочее место "Комплектатор". Руководство пользователя]].<br />
* <tt>irbisKO64.doc</tt> – [[Документация, поставляемая с системой ИРБИС#Автоматизированное рабочее место "Книгообеспеченность". Руководство пользователя|Автоматизированное рабочее место "Книгообеспеченность". Руководство пользователя]].<br />
* <tt>Irbisprl.doc</tt> – [[Документация, поставляемая с системой ИРБИС#Перечень элементов формата представления данных в электронном каталоге и базе данных комплектования|Перечень элементов формата представления данных в электронном каталоге и базе данных комплектования]].<br />
* <tt>RELEASE_OVERALL.doc</tt> – [[Документация, поставляемая с системой ИРБИС#История версий ИРБИС|История версий ИРБИС]].<br />
* <tt>RELEASE_12_1.doc</tt> – [[Документация, поставляемая с системой ИРБИС#История версий ИРБИС|Документ, описывающий новые возможности версии ИРБИС 64]].<br />
* <tt>RELEASE_11_1.doc</tt> – [[Документация, поставляемая с системой ИРБИС#История версий ИРБИС|Документ, описывающий новые возможности версии ИРБИС 64]].<br />
* <tt>RELEASE_10_1.doc</tt> – [[Документация, поставляемая с системой ИРБИС#История версий ИРБИС|Документ, описывающий новые возможности версии ИРБИС 64]].<br />
* <tt>RELEASE_9_1.doc</tt> – [[Документация, поставляемая с системой ИРБИС#История версий ИРБИС|Документ, описывающий новые возможности версии ИРБИС 64]].<br />
* <tt>RELEASE_8_1.doc</tt> – [[Документация, поставляемая с системой ИРБИС#История версий ИРБИС|Документ, описывающий новые возможности версии ИРБИС 64]].<br />
* <tt>RELEASE_7_2.doc</tt> – [[Документация, поставляемая с системой ИРБИС#История версий ИРБИС|Документ, описывающий новые возможности версии ИРБИС 64]].<br />
* <tt>RELEASE_7_1.doc</tt> – [[Документация, поставляемая с системой ИРБИС#История версий ИРБИС|Документ, описывающий новые возможности версии ИРБИС 64]].<br />
* <tt>RELEASE_6_2.doc</tt> – [[Документация, поставляемая с системой ИРБИС#История версий ИРБИС|Документ, описывающий новые возможности версии ИРБИС 64]].<br />
* <tt>RELEASE_6_1.doc</tt> – [[Документация, поставляемая с системой ИРБИС#История версий ИРБИС|Документ, описывающий новые возможности версии ИРБИС 64]].<br />
* <tt>RELEASE_5_2.doc</tt> – [[Документация, поставляемая с системой ИРБИС#История версий ИРБИС|Документ, описывающий новые возможности версии ИРБИС 64]].<br />
* <tt>RELEASE_5_1.doc</tt> – [[Документация, поставляемая с системой ИРБИС#История версий ИРБИС|Документ, описывающий новые возможности версии ИРБИС 64]].<br />
* <tt>RELEASE_4_2.doc</tt> – [[Документация, поставляемая с системой ИРБИС#История версий ИРБИС|Документ, описывающий новые возможности версии ИРБИС 64]].<br />
* <tt>RELEASE_4_1.doc</tt> – [[Документация, поставляемая с системой ИРБИС#История версий ИРБИС|Документ, описывающий новые возможности версии ИРБИС 64]].<br />
* <tt>RELEASE_3_2.doc</tt> – [[Документация, поставляемая с системой ИРБИС#История версий ИРБИС|Документ, описывающий новые возможности версии ИРБИС 64]].<br />
* <tt>RELEASE_3_1.doc</tt> – [[Документация, поставляемая с системой ИРБИС#История версий ИРБИС|Документ, описывающий новые возможности версии ИРБИС 64]].<br />
* <tt>RELEASE_2_2.doc</tt> – [[Документация, поставляемая с системой ИРБИС#История версий ИРБИС|Документ, описывающий новые возможности версии ИРБИС 64]].<br />
* <tt>UPGRADE.doc</tt> – [[Документация, поставляемая с системой ИРБИС#Инструкция по переходу на новую версию программного обеспечения ИРБИС 64|Инструкция по переходу на новую версию программного обеспечения ИРБИС 64]].<br />
* <tt>s_irbis.doc</tt> – [[Документация, поставляемая с системой ИРБИС#Клиентские функции работы с сервером ИРБИС64|Клиентские функции работы с сервером ИРБИС64]].<br />
* <tt>WBKNJ.doc</tt> – [[Документация, поставляемая с системой ИРБИС#Списание книг|Списание книг]].<br />
* <tt>Автореферат.doc</tt> – [[Документация, поставляемая с системой ИРБИС#Автоматизированная система смысловой обработки текстов при создании электронных фондов библиотеки|Автоматизированная система смысловой обработки текстов при создании электронных фондов библиотеки]].<br />
* <tt>Инструкция по созданию стат.форм.doc</tt> – [[Документация, поставляемая с системой ИРБИС#Инструкция по созданию заданий для формирования статистических форм|Инструкция по созданию заданий для формирования статистических форм]].<br />
* <tt>Сервер 64.doc</tt> – [[Документация, поставляемая с системой ИРБИС#Инструкция по созданию заданий для формирования статистических форм|Инструкция по созданию заданий для формирования статистических форм]].<br />
* <tt>Формат Rich Text.doc</tt> – [[Документация, поставляемая с системой ИРБИС#Формат Rich Text (RTF)|Формат Rich Text (RTF)]].<br />
* <tt>Электронный Каталог и полнотекстовые базы данных.doc</tt> – [[Документация, поставляемая с системой ИРБИС#Электронный Каталог и полнотекстовые базы данных – их интеграция в системе ИРБИС|Электронный Каталог и полнотекстовые базы данных – их интеграция в системе ИРБИС]].<br />
<br />
[[Категория:Файлы ИРБИС]]<br />
[[Категория:Анонсированные статьи]]</div>Sokv