ck / php-marcspec
PHP based MARCspec parser and validator
Installs: 48 952
Dependents: 1
Suggesters: 0
Security: 0
Stars: 9
Watchers: 5
Forks: 1
Open Issues: 1
Requires
- php: >=5.6
Requires (Dev)
- ck/marcspec-test-suite: @dev
- phpunit/phpunit: ^5.7 | ^6
README
PHP MARCspec parser and validator.
For currently supported version of MARCspec - A common MARC record path language see http://marcspec.github.io/ .
Installation
Installation can be done by using composer. Just run
composer require ck/php-marcspec
PHP-MARCspec requires PHP 5.4 or later.
Usage
<?php require("vendor/autoload.php"); use CK\MARCspec\MARCspec; use CK\MARCspec\Field; use CK\MARCspec\Subfield; use CK\MARCspec\ComparisonString; use CK\MARCspec\SubSpec; // parse and access MARCspec like an array $fixed = new MARCspec('007[0]/1-8{/0=\a}'); $fixed['field']; // CK\MARCspec\FieldInterface echo $fixed['field']['tag']; // '007' echo $fixed['field']['charStart']; // 1 echo $fixed['field']['charEnd']; // 8 echo $fixed['field']['charLength']; // 8 $fixed['field']['subSpecs'][0]['leftSubTerm']; // CK\MARCspec\MARCspecInterface echo $fixed['field']['subSpecs'][0]['leftSubTerm']; // '007[0]/0' echo $fixed['field']['subSpecs'][0]['operator']; // '=' $fixed['field']['subSpecs'][0]['rightSubTerm']; // CK\MARCspec\ComparisonStringInterface echo $fixed['field']['subSpecs'][0]['rightSubTerm']; // '\a' echo $fixed['field']['subSpecs'][0]['rightSubTerm']['comparable']; // 'a' $fixed; // CK\MARCspec\MARCspecInterface echo $fixed; // '007[0]/1-8{007[0]/0=\a}' $variable = new MARCspec('245^1'); echo $variable['field']['tag']; // '245' echo $variable['indicator']; // CK\MARCspec\IndicatorInterface echo $variable['indicator']['position']; // '1' $variable; // CK\MARCspec\MARCspecInterface echo $variable; // '245^1' $complex = new MARCspec('020$a{$q[0]~\pbk}{$c/0=\€|$c/0=\$}'); echo $complex['field']['tag']; // '020' $complex['subfields']; // Array $complex['subfields'][0]['tag']; // CK\MARCspec\SubfieldInterface echo $complex['subfields'][0]['tag']; // 'a' $complex['a'][0]['subSpecs'][0]['leftSubTerm']; // CK\MARCspec\MARCspecInterface echo $complex['a'][0]['subSpecs'][0]['leftSubTerm']; // '020$q[0]' echo $complex['a'][0]['subSpecs'][0]['operator']; // '~' $complex['a'][0]['subSpecs'][0]['rightSubTerm']; // CK\MARCspec\ComparisonStringInterface echo $complex['a'][0]['subSpecs'][0]['rightSubTerm']['comparable']; // 'pbk' echo $complex['a'][0]['subSpecs'][1][0]['leftSubTerm']; // '020$c/0' echo $complex['a'][0]['subSpecs'][1][0]['leftSubTerm']['c'][0]['charStart']; // 0 echo $complex['a'][0]['subSpecs'][1][0]['leftSubTerm']['c'][0]['charEnd']; // 0 echo $complex['a'][0]['subSpecs'][1][0]['leftSubTerm']['c'][0]['charLength']; // 1 echo $complex['a'][0]['subSpecs'][1][0]['operator']; // '=' echo $complex['a'][0]['subSpecs'][1][0]['rightSubTerm']['comparable']; // '€' echo $complex['a'][0]['subSpecs'][1][1]['leftSubTerm']; // '020$c/0' echo $complex['a'][0]['subSpecs'][1][1]['leftSubTerm']['c'][0]['charStart']; // 0 echo $complex['a'][0]['subSpecs'][1][1]['leftSubTerm']['c'][0]['charEnd']; // 0 echo $complex['a'][0]['subSpecs'][1][1]['leftSubTerm']['c'][0]['charLength']; // 1 echo $complex['a'][0]['subSpecs'][1][1]['operator']; // '=' echo $complex['a'][0]['subSpecs'][1][1]['rightSubTerm']['comparable']; // '$' // creating MARCspec // creating a new Field $Field = new Field('...'); // creating a new MARCspec by setting the Field $MARCspec = MARCspec::setField($Field); // creating a new Subfield $Subfield = new Subfield('a'); // adding the Subfield to the MARCspec $MARCspec->addSubfields($Subfield); // creating instances of MARCspec and ComparisonString $LeftSubTerm = new MARCspec('...$a/#'); $RightSubTerm = new ComparisonString(','); // creating a new SubSpec with instances above and an operator '=' $SubSpec = new SubSpec($LeftSubTerm,'=',$RightSubTerm); // adding the SubSpec to the Subfield $Subfield['subSpecs'] = $SubSpec; // whole MARCspec echo $MARCspec; // '...[0]$a{...$a/#-#=\,}'
ArrayAccess vs. Methods
MARCspec can be accessed like an immutable array with the following offsets or with its correponding methods (see source code for documentation of all methods).