(PHP 4 >= 4.0.1,PECL yaz >= 0.9.0)
yaz_record — 返回记录
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
如果可能,记录将作为 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,则将返回空字符串。
返回的数组包含对应于 GRS-1 的每个叶子/内部节点的列表。每个列表项包含一个子列表,其第一个元素为 path 和 data(如果数据可用)。
作为字符串的路径保存从根到叶子的每个树组件(结构化 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");
?>
记录 $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;
?>