(PHP 4 >= 4.0.1, PECL yaz >= 0.9.0)
yaz_record — Возвращает запись
$id
, int $pos
, string $type
)
Функция yaz_record() проверяет запись в текущем результирующем
наборе на позиции, определенным параметром pos
.
id
Дескриптор соединения, возвращаемый yaz_connect().
pos
Позиция записи. Записи в результирующем наборе нумеруются как 1, 2, ... $hits, где $hits - число записей в результирующем наборе, которое возвращается функцией yaz_hits().
type
type
определяет форму возвращаемой записи.
Замечание:
Только приложение несет ответственность за достоверность того, что возвращаемые записи с сервера Z39.50/SRW в надлежащем формате. Задаваемый тип только определяет преобразование, которое имеет место на стороне клиента (в PHP/YAZ).
Помимо преобразования переданной записи в строку/массив, PHP/YAZ так же может преобразовывать кодировку записи. Особенно это актуально для форматов USMARC/MARC21, которые рекомендуется преобразовывать, поскольку они обычно возвращаются в кодировке MARC-8, которую не понимают браузеры и другие приложения. Чтобы определить преобразование, добавьте ; charset=from, to, где from текущая кодировка записи и to результирующая кодировка, которая будет доступна PHP.
Запись возвращается в виде строки для отображения. В этом режиме все MARC-записи преобразуются в посторчное представление, поскольку в формате ISO2709 их трудно прочитать. Записи XML и SUTRS возвращаются в их родном формате. GRS-1 возвращается в (безобразном) построчном представлении.
Данный формат применим для быстрого вывода записей на экран, для отладки, или в случае, когда корректное отображение невозможно.
Запись возвращается как строка XML, если это возможно. В этом режиме все MARC-записи преобразовываются в формат » MARCXML. Записи XML и SUTRS возвращаются в их родном формате. GRS-1 не поддерживается.
Этот формат схож с string
, за исключением того,
что MARC-записи преобразуются к MARCXML.
Данный формат применим, если запись будет передана парсеру XML или XSLT-процессору.
Запись возвращается в виде строки в исходной форме. Данный тип применим для MARC, XML и SUTRS, но не работает для GRS-1.
MARC-запись возвращается в формате ISO2709, XML и SUTRS возвращаются как строка.
Синтаксис возвращаемой записи, например USmarc, GRS-1, XML, и д.р.
Имя базы данных, сопоставленное с записью.
Запись возвращается в виде массива, сопоставленного со структурой GRS-1. Данный тип применим для MARC и GRS-1. XML, SUTRS не поддерживаются и, если исходная запись в формате XML или SUTRS, возвращается пустая строка.
Возвращаемый массив состоит из списка, который соответствует каждому внутреннему узлу или конечному элементу(leaf) формата GRS-1. Каждый список состоит из подсписка, первым элементом которого будет путь и дата (если она доступна).
Путь, представленый в виде строки, содержит список каждой компоненты дерева (для структуры записи GRS-1) от корневого элемента до конечного. Каждая компонента представлена парой тип поля и значение, в форме (тип, значение).
Начальное поле обычно сопоставлено типу 3. MARC-записи тоже могут быть возвращены в виде массива (они конвертируются в GRS-1).
Возвращает запись на позиции pos
или пустую строку,
если на заданной позиции нет записей.
Если на заданной позиции в базе данных нет записей, будет возвращена пустая строка.
Пример #1 Массив для записи GRS-1
Возьмем запись GRS-1, вида:
(4,52)Robert M. Pirsig (4,70) (4,90) (2,7)Transworld Publishers, ltd.
Если данная запись находится на позиции $p, тогда скрипт
<?php
$ar = yaz_record($id, $p, "array");
print_r($ar);
?>
Array ( [0] => Array ( [0] => (4,52) [1] => Robert M. Pirsig ) [1] => Array ( [0] => (4,70) ) [2] => Array ( [0] => (4,70)(4,90) ) [3] => Array ( [0] => (4,70)(4,90)(2,7) [1] => Transworld Publishers, ltd. ) )
Пример #2 Пример работы с MARCXML
Скрипт ниже вернет запись MARC21/USMARC в формате MARCXML. Исходная запись будет возвращена в кодировке marc-8 (неизвестной для большинства XML парсеров), поэтому она преобразуется в UTF-8.
<?php
$rec = yaz_record($id, $p, "xml; charset=marc-8,utf-8");
?>
Запись $rec может быть обработана процессором Sablotron XSLT так:
<?php
$xslfile = 'display.xsl';
$processor = xslt_create();
$parms = array('/_xml' => $rec);
$res = xslt_process($processor, 'arg:/_xml', $xslfile, NULL, $parms);
xslt_free($processor);
$res = preg_replace("'</?html[^>]*>'", '', $res);
echo $res;
?>
Для PHP 5 нужно использовать расширение XSL вместо Sablotron XSLT.