PHP マニュアル
前のページ |  | 次のページ

# yaz_record

(PHP 4 >= 4.0.1, PECL)

yaz_record -- レコードを返す

## 説明

string yaz_record ( resource 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 によって 表示されるもの）です。

  `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 です（もし data が存在する場合）。

    path は、ルートから各リーフまでの（構造化された GRS-1 レコードの） ツリーコンポーネントの一覧を保持します。各コンポーネントはタグ型で、 タグの値は `(``type``,` `value` のような形式のペアとなります。

    tags 文字列は、一般に type 3 の tag に対応します。 MARC は配列で返すことも可能です（内部で GRS-1 に変換されます）。

## 返り値

位置 `pos` のレコードを返します。もし指定した位置に レコードが存在しない場合は空文字列を返します。

もし指定した位置にデータベースのレコードが存在しない場合、 空文字列が返されます。

## 例

例 1. GRS-1 レコードの配列

このような GRS-1 レコードを想定します。

    (4,52)Robert M. Pirsig
    (4,70)
          (4,90)
                (2,7)Transworld Publishers, ltd.

このレコードは、ルートに 2 つのノードを持っています。ルートレベルの 最初の要素は (4,52) [tag type 4, tag value 52] で、そのデータは `Robert M. Pirsig` です。ルートレベルの 2 番目の 要素 (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; ?>`

PHP 5 では、Sablotron XSLT ではなく XSL 拡張モジュールが使用される必要があります。

前のページ | ホーム | 次のページ
yaz_range | 上に戻る | yaz_scan_result