(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 傳回。若要指定轉換,請新增 ; 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*(如果資料可用)。
路徑(字串)會保存從根到葉的每個樹狀元件 (結構化 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;
?>