(PHP 4 >= 4.0.1, PECL yaz >= 0.9.0)
yaz_record — 返回记录
函数 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 字符集返回,而 MARC-8 字符集不受浏览器等支持。要指定转换,请添加 ; charset=
from,
to,其中 from 是记录的原始字符集,to 是结果字符集(由 PHP 查看)。
string
记录作为字符串返回,用于简单显示。在这种模式下,所有 MARC 记录都转换为逐行格式,因为 ISO2709 很难阅读。XML 记录和 SUTRS 以其原始格式返回。GRS-1 以(难看的)逐行格式返回。
此格式适合在需要快速显示记录(用于调试)或无法执行适当显示时使用。
xml
如果可能,记录将作为 XML 字符串返回。在这种模式下,所有 MARC 记录都转换为 » MARCXML。XML 记录和 SUTRS 以其原始格式返回。GRS-1 不支持。
此格式类似于 string
,除了 MARC 记录转换为 MARCXML。
此格式适合在以后通过 XML 解析器或 XSLT 处理器处理记录时使用。
raw
记录以其原始形式作为字符串返回。此类型适合于 MARC、XML 和 SUTRS。它不适用于 GRS-1。
MARC 记录作为 ISO2709 字符串返回。XML 和 SUTRS 作为字符串返回。
syntax
记录的语法作为字符串返回,即 USmarc
、GRS-1
、XML
等。
database
与该位置的记录关联的数据库名称作为字符串返回。
array
记录作为数组返回,该数组反映了 GRS-1 结构。此类型适合于 MARC 和 GRS-1。XML、SUTRS 不受支持,如果实际记录是 XML 或 SUTRS,则将返回空字符串。
返回的数组包含一个列表,该列表对应于 GRS-1 的每个叶/内部节点。每个列表项包含一个子列表,其中第一个元素为 *path* 和 *data*(如果数据可用)。
*path* 是一个字符串,它保存从根到叶的每个树组件(结构化 GRS-1 记录)的列表。每个组件都是一个标签类型、标签值对,形式为 (
type,
value
字符串标签通常具有对应的标签类型 3。MARC 也可以作为数组返回(它们在内部转换为 GRS-1)。
返回位置 pos
的记录,如果在给定位置不存在记录,则返回空字符串。
如果在给定位置不存在数据库记录,则返回空字符串。
示例 #1 GRS-1 记录的数组
考虑这个 GRS-1 记录
(4,52)Robert M. Pirsig (4,70) (4,90) (2,7)Transworld Publishers, ltd.
Robert M. Pirsig
。根级别的第二个元素 (4,70) 具有一个子树,该子树只有一个元素 (4,90)。(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
以下 PHP 代码段将 MARC21/USMARC 记录作为 MARCXML 返回。原始记录以 marc-8(大多数 XML 解析器未知)返回,因此我们将其转换为 UTF-8(所有 XML 解析器都必须支持)。
<?php
$rec = yaz_record($id, $p, "xml; charset=marc-8,utf-8");
?>
可以使用 Sablotron XSLT 处理器来处理记录 $rec
,如下所示
<?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;
?>