libis-tools 0.9.65 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +5 -23
- data/lib/libis/tools.rb +0 -1
- data/lib/libis/tools/version.rb +1 -1
- data/libis-tools.gemspec +1 -1
- metadata +4 -51
- data/lib/libis/tools/metadata.rb +0 -25
- data/lib/libis/tools/metadata/dublin_core_record.rb +0 -116
- data/lib/libis/tools/metadata/field_format.rb +0 -121
- data/lib/libis/tools/metadata/fix_field.rb +0 -35
- data/lib/libis/tools/metadata/mapper.rb +0 -81
- data/lib/libis/tools/metadata/mappers/flandrica.rb +0 -76
- data/lib/libis/tools/metadata/mappers/kuleuven.rb +0 -1929
- data/lib/libis/tools/metadata/mappers/scope.rb +0 -46
- data/lib/libis/tools/metadata/marc21_record.rb +0 -51
- data/lib/libis/tools/metadata/marc_record.rb +0 -287
- data/lib/libis/tools/metadata/parser/basic_parser.rb +0 -120
- data/lib/libis/tools/metadata/parser/dublin_core_parser.rb +0 -37
- data/lib/libis/tools/metadata/parser/marc21_parser.rb +0 -207
- data/lib/libis/tools/metadata/parser/marc_format_parser.rb +0 -53
- data/lib/libis/tools/metadata/parser/marc_rules.rb +0 -36
- data/lib/libis/tools/metadata/parser/marc_select_parser.rb +0 -26
- data/lib/libis/tools/metadata/parser/patch.rb +0 -22
- data/lib/libis/tools/metadata/parser/subfield_criteria_parser.rb +0 -72
- data/lib/libis/tools/metadata/parsers.rb +0 -12
- data/lib/libis/tools/metadata/sharepoint_mapping.rb +0 -119
- data/lib/libis/tools/metadata/sharepoint_record.rb +0 -262
- data/lib/libis/tools/metadata/var_field.rb +0 -242
- data/spec/data/MetadataMapping.xlsx +0 -0
- data/spec/metadata/123456789.marc +0 -18
- data/spec/metadata/8389207.marc +0 -117
- data/spec/metadata/BE_942855_1927_4898_corrected.XML +0 -11
- data/spec/metadata/BE_942855_1927_4898_md.XML +0 -11
- data/spec/metadata/dublin_core_parser_spec.rb +0 -48
- data/spec/metadata/dublin_core_spec.rb +0 -81
- data/spec/metadata/marc21_parser_data.rb +0 -382
- data/spec/metadata/marc21_parser_spec.rb +0 -67
- data/spec/metadata/marc21_spec.rb +0 -178
- data/spec/metadata/metadata_mapper_spec.rb +0 -23
- data/spec/metadata/scope_mapper_spec.rb +0 -29
- data/test.rb +0 -61
Binary file
|
@@ -1,18 +0,0 @@
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
-
<record xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd"
|
3
|
-
xmlns="http://www.loc.gov/MARC21/slim" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
4
|
-
<leader>01068nam 2200241u 4500</leader>
|
5
|
-
<controlfield tag="005">20150701153710.0</controlfield>
|
6
|
-
<controlfield tag="008">000608m17221724xx |||| | 000|0 lat c</controlfield>
|
7
|
-
<controlfield tag="001">9901234567890471</controlfield>
|
8
|
-
<datafield tag="035" ind1=" " ind2=" ">
|
9
|
-
<subfield code="a">(BeLVLBS)123456789LBS01-Aleph</subfield>
|
10
|
-
</datafield>
|
11
|
-
<datafield tag="035" ind1=" " ind2=" ">
|
12
|
-
<subfield code="a">123456789</subfield>
|
13
|
-
</datafield>
|
14
|
-
<datafield tag="245" ind1="0" ind2="0">
|
15
|
-
<subfield code="a">Title with special chars: 'éÄçñåúðäíö' / "ߥ²¤€®©œøæ’×½¼þ«»¶ǽµ¢ŒÆØŒ§Ð" < & % $ # ></subfield>
|
16
|
-
<subfield code="c">subtitle with special chars: "ߥ²¤€®©œøæ’×½¼þ«»¶ǽµ¢ŒÆØŒ§Ð" < & % $ # ></subfield>
|
17
|
-
</datafield>
|
18
|
-
</record>
|
data/spec/metadata/8389207.marc
DELETED
@@ -1,117 +0,0 @@
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
-
<record xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd"
|
3
|
-
xmlns="http://www.loc.gov/MARC21/slim" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
4
|
-
<leader>01068nam 2200241u 4500</leader>
|
5
|
-
<controlfield tag="005">20150701153710.0</controlfield>
|
6
|
-
<controlfield tag="008">000608m17221724xx |||| | 000|0 lat c</controlfield>
|
7
|
-
<controlfield tag="001">9921543960101471</controlfield>
|
8
|
-
<datafield tag="035" ind1=" " ind2=" ">
|
9
|
-
<subfield code="a">(BeLVLBS)002154396LBS01-Aleph</subfield>
|
10
|
-
</datafield>
|
11
|
-
<datafield tag="035" ind1=" " ind2=" ">
|
12
|
-
<subfield code="a">8389207</subfield>
|
13
|
-
</datafield>
|
14
|
-
<datafield tag="245" ind1="0" ind2="0">
|
15
|
-
<subfield code="a">Anecdota Graeca, sacra et profana /</subfield>
|
16
|
-
<subfield code="c">ex codicibus manu exaratis nunc primum in lucem edita, versione Latina donata, et notis
|
17
|
-
illustrata a Io. Christophoro Wolfio ... Tom. I [-IIII]
|
18
|
-
</subfield>
|
19
|
-
</datafield>
|
20
|
-
<datafield tag="264" ind1=" " ind2="1">
|
21
|
-
<subfield code="a">Hamburgi</subfield>
|
22
|
-
<subfield code="b">apud Theodorum Christophorum Felginer,</subfield>
|
23
|
-
<subfield code="c">1722-1724</subfield>
|
24
|
-
</datafield>
|
25
|
-
<datafield tag="300" ind1=" " ind2=" ">
|
26
|
-
<subfield code="a">8o: 4 v.; [22], 298, [8]; [16], 354, [1]; [16], 299, [7]; [16], 271, [5] p.</subfield>
|
27
|
-
</datafield>
|
28
|
-
<datafield tag="336" ind1=" " ind2=" ">
|
29
|
-
<subfield code="a">text</subfield>
|
30
|
-
<subfield code="2">rdacontent</subfield>
|
31
|
-
</datafield>
|
32
|
-
<datafield tag="337" ind1=" " ind2=" ">
|
33
|
-
<subfield code="a">unmediated</subfield>
|
34
|
-
<subfield code="2">rdamedia</subfield>
|
35
|
-
</datafield>
|
36
|
-
<datafield tag="338" ind1=" " ind2=" ">
|
37
|
-
<subfield code="a">volume</subfield>
|
38
|
-
<subfield code="2">rdacarrier</subfield>
|
39
|
-
</datafield>
|
40
|
-
<datafield tag="500" ind1=" " ind2=" ">
|
41
|
-
<subfield code="a">Ded. Petrus Theodorus Seelmann; Erdmannus Neumeister; Thomas Claussen; Joannes Grammius
|
42
|
-
</subfield>
|
43
|
-
</datafield>
|
44
|
-
<datafield tag="500" ind1=" " ind2=" ">
|
45
|
-
<subfield code="a">Elk deel heeft eigen titelp. in roodzwartdruk, met drukkersmerk</subfield>
|
46
|
-
</datafield>
|
47
|
-
<datafield tag="650" ind1=" " ind2="7">
|
48
|
-
<subfield code="2">UDC</subfield>
|
49
|
-
<subfield code="a">276 =75</subfield>
|
50
|
-
<subfield code="x">Griekse patrologie</subfield>
|
51
|
-
</datafield>
|
52
|
-
<datafield tag="650" ind1=" " ind2="7">
|
53
|
-
<subfield code="2">KADOC</subfield>
|
54
|
-
<subfield code="a">Bisdom Antwerpen (1961-heden)</subfield>
|
55
|
-
<subfield code="6">(ODIS-ORG)9284</subfield>
|
56
|
-
</datafield>
|
57
|
-
<datafield tag="650" ind1=" " ind2="7">
|
58
|
-
<subfield code="2">KADOC</subfield>
|
59
|
-
<subfield code="a">Studiecentrum voor Zielzorg en Predicatie</subfield>
|
60
|
-
<subfield code="6">(ODIS-ORG)24894</subfield>
|
61
|
-
</datafield>
|
62
|
-
<datafield tag="650" ind1=" " ind2="7">
|
63
|
-
<subfield code="2">KADOC</subfield>
|
64
|
-
<subfield code="a">Antwerpen [deelgemeente in gemeente Antwerpen - BE]</subfield>
|
65
|
-
<subfield code="6">(ODIS-GEO)10560000006504</subfield>
|
66
|
-
</datafield>
|
67
|
-
<datafield tag="650" ind1=" " ind2="7">
|
68
|
-
<subfield code="2">KADOC</subfield>
|
69
|
-
<subfield code="a">C1</subfield>
|
70
|
-
<subfield code="x">Kerken en religie</subfield>
|
71
|
-
<subfield code="6">(ODIS-HT)</subfield>
|
72
|
-
</datafield>
|
73
|
-
<datafield tag="653" ind1=" " ind2="6">
|
74
|
-
<subfield code="a">Books before 1840</subfield>
|
75
|
-
</datafield>
|
76
|
-
<datafield tag="700" ind1="1" ind2=" ">
|
77
|
-
<subfield code="a">Wolf, Johann Christoph</subfield>
|
78
|
-
<subfield code="d">1683-1739</subfield>
|
79
|
-
<subfield code="4">aut</subfield>
|
80
|
-
</datafield>
|
81
|
-
<datafield tag="953" ind1=" " ind2=" ">
|
82
|
-
<subfield code="a">1701-1750</subfield>
|
83
|
-
</datafield>
|
84
|
-
<datafield tag="998" ind1=" " ind2=" ">
|
85
|
-
<subfield code="a">LBS01</subfield>
|
86
|
-
<subfield code="b">bib_200501.mrc.2.av</subfield>
|
87
|
-
</datafield>
|
88
|
-
<datafield tag="INST" ind1=" " ind2=" ">
|
89
|
-
<subfield code="a">32KUL_LIBIS_NETWORK</subfield>
|
90
|
-
<subfield code="b">P</subfield>
|
91
|
-
<subfield code="c">71134440820001471</subfield>
|
92
|
-
</datafield>
|
93
|
-
<datafield tag="INST" ind1=" " ind2=" ">
|
94
|
-
<subfield code="a">32KUL_KUL</subfield>
|
95
|
-
<subfield code="b">P</subfield>
|
96
|
-
<subfield code="c">21304345390001488</subfield>
|
97
|
-
</datafield>
|
98
|
-
<datafield tag="AVA" ind1=" " ind2=" ">
|
99
|
-
<subfield code="a">32KUL_KUL</subfield>
|
100
|
-
<subfield code="b">GBIB</subfield>
|
101
|
-
<subfield code="c">GBIB: Godgeleerdheid</subfield>
|
102
|
-
<subfield code="d">276.030.4 WOLF Anec</subfield>
|
103
|
-
<subfield code="e">available</subfield>
|
104
|
-
<subfield code="f">1</subfield>
|
105
|
-
<subfield code="g">0</subfield>
|
106
|
-
<subfield code="j">GBIB</subfield>
|
107
|
-
<subfield code="p">1</subfield>
|
108
|
-
</datafield>
|
109
|
-
<datafield tag="MMS" ind1=" " ind2=" ">
|
110
|
-
<subfield code="b">9921543960101471</subfield>
|
111
|
-
<subfield code="a">32KUL_LIBIS_NETWORK</subfield>
|
112
|
-
</datafield>
|
113
|
-
<datafield tag="MMS" ind1=" " ind2=" ">
|
114
|
-
<subfield code="b">9921543960101488</subfield>
|
115
|
-
<subfield code="a">32KUL_KUL</subfield>
|
116
|
-
</datafield>
|
117
|
-
</record>
|
@@ -1,11 +0,0 @@
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
-
<dc:record xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
3
|
-
<dc:title>Cleo De 5 A 7 (Cleo Tussen 5 En 7)</dc:title>
|
4
|
-
<dc:identifier>BE/942855/1927/4898 (ref.code)</dc:identifier>
|
5
|
-
<dc:format>digitale kopie (archival material type)</dc:format>
|
6
|
-
<dcterms:spatial>Frankrijk</dcterms:spatial>
|
7
|
-
<dc:identifier xsi:type="dcterms:URI">http://abs.lias.be/Query/detail.aspx?ID=902581</dc:identifier>
|
8
|
-
<dc:source>Collectie filmdossiers Katholieke Filmliga/Filmmagie</dc:source>
|
9
|
-
<dcterms:isReferencedBy xsi:type="dcterms:URI">http://abs.lias.be/Query/detail.aspx?ID=886364</dcterms:isReferencedBy>
|
10
|
-
<dc:source>BE/942855/1927</dc:source>
|
11
|
-
</dc:record>
|
@@ -1,11 +0,0 @@
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
-
<dc:record xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
3
|
-
<dc:title>Cleo De 5 A 7 (Cleo Tussen 5 En 7)</dc:title>
|
4
|
-
<dc:identifier>BE/942855/1927/4898 (ref.code)</dc:identifier>
|
5
|
-
<dc:format>digitale kopie (archival material type)</dc:format>
|
6
|
-
<dcterms:spatial>Frankrijk</dcterms:spatial>
|
7
|
-
<dc:identifier xsi:type="dcterms:URI">http://abs.lias.be/Query/detail.aspx?ID=902581</dc:identifier>
|
8
|
-
<dc:source>Collectie filmdossiers Katholieke Filmliga/Filmmagie</dc:source>
|
9
|
-
<dcterms:isPartOf>http://abs.lias.be/Query/detail.aspx?ID=886364</dcterms:isPartOf>
|
10
|
-
<dc:source>BE/942855/1927</dc:source>
|
11
|
-
</dc:record>
|
@@ -1,48 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require_relative '../spec_helper'
|
3
|
-
require 'libis/tools/metadata/parsers'
|
4
|
-
require 'parslet'
|
5
|
-
require 'parslet/convenience'
|
6
|
-
require 'pp'
|
7
|
-
|
8
|
-
$DEBUG = false
|
9
|
-
|
10
|
-
describe 'DublinCore Parser' do
|
11
|
-
|
12
|
-
subject(:parser) { Libis::Tools::Metadata::DublinCoreParser.new }
|
13
|
-
|
14
|
-
it 'parses simple DC' do
|
15
|
-
expect {
|
16
|
-
tree = parser.parse_with_debug('dc:title')
|
17
|
-
# pp tree
|
18
|
-
expect(tree).to be_a Hash
|
19
|
-
expect(tree[:namespace]).to eq 'dc'
|
20
|
-
expect(tree[:element]).to eq 'title'
|
21
|
-
# noinspection RubyResolve
|
22
|
-
expect(tree).not_to have_key :attributes
|
23
|
-
}.not_to raise_error
|
24
|
-
end
|
25
|
-
|
26
|
-
it 'must see namespace' do
|
27
|
-
expect {
|
28
|
-
parser.parse('title')
|
29
|
-
}.to raise_error(Parslet::ParseFailed)
|
30
|
-
end
|
31
|
-
|
32
|
-
it 'parses DC with attributes' do
|
33
|
-
expect {
|
34
|
-
tree = parser.parse_with_debug('dcterms:date xsi:type="http://example.com" foo:bar="baz"')
|
35
|
-
# pp tree
|
36
|
-
expect(tree).to be_a Hash
|
37
|
-
expect(tree[:namespace]).to eq 'dcterms'
|
38
|
-
expect(tree[:element]).to eq 'date'
|
39
|
-
# noinspection RubyResolve
|
40
|
-
expect(tree[:attributes].size).to be 2
|
41
|
-
expect(tree[:attributes]).to eq [
|
42
|
-
{namespace: 'xsi', name: 'type', value: 'http://example.com'},
|
43
|
-
{namespace: 'foo', name: 'bar', value: 'baz'},
|
44
|
-
]
|
45
|
-
}.not_to raise_error
|
46
|
-
end
|
47
|
-
|
48
|
-
end
|
@@ -1,81 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require_relative '../spec_helper'
|
3
|
-
require 'libis/tools/metadata/dublin_core_record'
|
4
|
-
|
5
|
-
require 'rspec/matchers'
|
6
|
-
require 'equivalent-xml'
|
7
|
-
|
8
|
-
describe 'DublinCoreRecord' do
|
9
|
-
|
10
|
-
let(:header) { '<?xml version="1.0" encoding="utf-8"?>' }
|
11
|
-
|
12
|
-
subject(:dc) { Libis::Tools::Metadata::DublinCoreRecord.new(data) {} }
|
13
|
-
|
14
|
-
def dc_xml(tag, value = '', attributes = {})
|
15
|
-
"<dc:#{tag}#{attributes.sort.each{|k,v| " #{k}=\"#{v}\""}.join}>#{value}</dc:#{tag}>"
|
16
|
-
end
|
17
|
-
|
18
|
-
def dcterms_xml(tag, value = '', attributes = {})
|
19
|
-
"<dcterms:#{tag}#{attributes.sort.each{|k,v| " #{k}=\"#{v}\""}.join}>#{value}</dcterms:#{tag}>"
|
20
|
-
end
|
21
|
-
|
22
|
-
def match_xml(doc1, doc2)
|
23
|
-
xml1 = doc1.is_a?(::Libis::Tools::XmlDocument) ? doc1.document : ::Nokogiri::XML(doc1.to_s)
|
24
|
-
xml2 = doc2.is_a?(::Libis::Tools::XmlDocument) ? doc2.document : ::Nokogiri::XML(doc2.to_s)
|
25
|
-
# noinspection RubyResolve
|
26
|
-
expect(xml1).to be_equivalent_to(xml2).respecting_element_order
|
27
|
-
end
|
28
|
-
|
29
|
-
context 'Empty record' do
|
30
|
-
let(:data) { nil }
|
31
|
-
let(:root) { <<STR.chomp
|
32
|
-
<dc:record \
|
33
|
-
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" \
|
34
|
-
xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/"
|
35
|
-
STR
|
36
|
-
}
|
37
|
-
let(:record_start) { root + '>' }
|
38
|
-
let(:record_end) { '</dc:record>' }
|
39
|
-
let(:empty_record) { header + root + '/>' }
|
40
|
-
|
41
|
-
|
42
|
-
it 'contains emtpy record' do
|
43
|
-
match_xml dc.document, empty_record
|
44
|
-
end
|
45
|
-
|
46
|
-
it 'add dc:title' do
|
47
|
-
dc.title = 'abc'
|
48
|
-
match_xml dc.document, header + record_start + dc_xml('title', 'abc') + record_end
|
49
|
-
end
|
50
|
-
|
51
|
-
it 'add dc:date' do
|
52
|
-
dc.date = '2001'
|
53
|
-
dc.dcdate! '2002'
|
54
|
-
dc.dc_date! '2003'
|
55
|
-
match_xml dc.document,
|
56
|
-
header +
|
57
|
-
record_start +
|
58
|
-
dc_xml('date', '2001') +
|
59
|
-
dc_xml('date', '2002') +
|
60
|
-
dc_xml('date', '2003') +
|
61
|
-
record_end
|
62
|
-
end
|
63
|
-
|
64
|
-
it 'add dcterms:date' do
|
65
|
-
dc.termsdate! '2001'
|
66
|
-
dc.dctermsdate! '2002'
|
67
|
-
dc.terms_date! '2003'
|
68
|
-
dc.dcterms_date! '2004'
|
69
|
-
match_xml dc.document,
|
70
|
-
header +
|
71
|
-
record_start +
|
72
|
-
dcterms_xml('date', '2001') +
|
73
|
-
dcterms_xml('date', '2002') +
|
74
|
-
dcterms_xml('date', '2003') +
|
75
|
-
dcterms_xml('date', '2004') +
|
76
|
-
record_end
|
77
|
-
end
|
78
|
-
|
79
|
-
end
|
80
|
-
|
81
|
-
end
|
@@ -1,382 +0,0 @@
|
|
1
|
-
def marc21_parser_testdata
|
2
|
-
[
|
3
|
-
{
|
4
|
-
title: 'select statement with numeric tag',
|
5
|
-
input: 'MARC 123',
|
6
|
-
tree: {tag: '123', ind1: nil, ind2: nil, subfield: nil, condition: nil},
|
7
|
-
transform: "record.select_fields('123##')"
|
8
|
-
}, {
|
9
|
-
title: 'select statement with LRK tag',
|
10
|
-
input: 'MARC LKR',
|
11
|
-
tree: {tag: 'LKR', ind1: nil, ind2: nil, subfield: nil, condition: nil},
|
12
|
-
transform: "record.select_fields('LKR##')"
|
13
|
-
}, {
|
14
|
-
title: 'select statement with FMT tag',
|
15
|
-
input: 'MARC FMT',
|
16
|
-
tree: {tag: 'FMT', ind1: nil, ind2: nil, subfield: nil, condition: nil},
|
17
|
-
transform: "record.select_fields('FMT##')"
|
18
|
-
}, {
|
19
|
-
title: 'select statement with bad magic text',
|
20
|
-
input: 'foo',
|
21
|
-
tree: :failure
|
22
|
-
}, {
|
23
|
-
title: 'select statement with bad tag',
|
24
|
-
input: 'MARC 1',
|
25
|
-
tree: :failure
|
26
|
-
}, {
|
27
|
-
title: 'select statement with bad indicator',
|
28
|
-
input: 'MARC 123 *',
|
29
|
-
tree: :failure
|
30
|
-
}, {
|
31
|
-
title: 'select statement with bad subfield',
|
32
|
-
input: 'MARC 123 $_',
|
33
|
-
tree: :failure
|
34
|
-
}, {
|
35
|
-
title: 'select statement with tag and one indicator',
|
36
|
-
input: 'MARC 123 #',
|
37
|
-
tree: {tag: '123', ind1: '#', ind2: nil, subfield: nil, condition: nil},
|
38
|
-
transform: "record.select_fields('123##')"
|
39
|
-
}, {
|
40
|
-
title: 'select statement with tag and indicators',
|
41
|
-
input: 'MARC 123 #_',
|
42
|
-
tree: {tag: '123', ind1: '#', ind2: '_', subfield: nil, condition: nil},
|
43
|
-
transform: "record.select_fields('123#_')"
|
44
|
-
}, {
|
45
|
-
title: 'select statement with tag and subfield',
|
46
|
-
input: 'MARC 123 $a',
|
47
|
-
tree: {tag: '123', ind1: nil, ind2: nil, subfield: {name: 'a'}, condition: nil},
|
48
|
-
transform: "record.select_fields('123##a')"
|
49
|
-
}, {
|
50
|
-
title: 'select statement with tag, indicators and subfield',
|
51
|
-
input: 'MARC 123 45 $6',
|
52
|
-
tree: {tag: '123', ind1: '4', ind2: '5', subfield: {name: '6'}, condition: nil},
|
53
|
-
transform: "record.select_fields('123456')"
|
54
|
-
}, {
|
55
|
-
title: 'select statement with subfield condition',
|
56
|
-
input: 'MARC 123 [f.match(\'a\')]',
|
57
|
-
tree: {
|
58
|
-
tag: '123', ind1: nil, ind2: nil, subfield: nil,
|
59
|
-
condition: {
|
60
|
-
cond_format: {
|
61
|
-
entry: [
|
62
|
-
{cond_group: {
|
63
|
-
prefix: 'f.match',
|
64
|
-
lparen: '(',
|
65
|
-
entry: [
|
66
|
-
{cond_group: {
|
67
|
-
prefix: nil,
|
68
|
-
lparen: "'",
|
69
|
-
entry: nil,
|
70
|
-
postfix: 'a',
|
71
|
-
rparen: "'"
|
72
|
-
}}
|
73
|
-
],
|
74
|
-
postfix: nil,
|
75
|
-
rparen: ')'
|
76
|
-
}}
|
77
|
-
],
|
78
|
-
postfix: nil
|
79
|
-
}
|
80
|
-
}
|
81
|
-
},
|
82
|
-
transform: "record.select_fields('123##', Proc.new { |f| f.match('a') })"
|
83
|
-
}, {
|
84
|
-
title: 'select statement with regex condition',
|
85
|
-
input: 'MARC 123 [$0 =~ /^.+"ABC"/]',
|
86
|
-
tree: {
|
87
|
-
tag: '123', ind1: nil, ind2: nil, subfield: nil,
|
88
|
-
condition: {
|
89
|
-
cond_format: {
|
90
|
-
entry: [
|
91
|
-
{subfield: {:prefix => nil, :repeat => nil, :name => '0'}},
|
92
|
-
{cond_group: {
|
93
|
-
prefix: ' =~ /^.+',
|
94
|
-
lparen: "\"",
|
95
|
-
entry: nil,
|
96
|
-
postfix: 'ABC',
|
97
|
-
rparen: "\""
|
98
|
-
}}
|
99
|
-
],
|
100
|
-
postfix: '/'
|
101
|
-
}
|
102
|
-
}
|
103
|
-
},
|
104
|
-
transform: "record.select_fields('123##', Proc.new { |f| f.subfield('0') =~ /^.+\"ABC\"/ })"
|
105
|
-
}, {
|
106
|
-
title: 'select statement with complex regex condition',
|
107
|
-
input: 'MARC 690 02 {$0 =~ /^\(ODIS-(PS|ORG)\) (\d)+$$/}',
|
108
|
-
tree: {
|
109
|
-
tag: '690', ind1: '0', ind2: '2', subfield: nil,
|
110
|
-
condition: {
|
111
|
-
cond_format: {
|
112
|
-
entry: [
|
113
|
-
{subfield: {prefix: nil, repeat: nil, name: '0'}},
|
114
|
-
{cond_group: {prefix: " =~ /^\\",
|
115
|
-
lparen: '(',
|
116
|
-
entry: [
|
117
|
-
{cond_group: {
|
118
|
-
prefix: 'ODIS-',
|
119
|
-
lparen: '(',
|
120
|
-
entry: nil,
|
121
|
-
postfix: 'PS|ORG',
|
122
|
-
rparen: ')'}}
|
123
|
-
],
|
124
|
-
postfix: "\\",
|
125
|
-
rparen: ')'}},
|
126
|
-
{cond_group: {
|
127
|
-
prefix: ' ',
|
128
|
-
lparen: '(',
|
129
|
-
entry: nil,
|
130
|
-
postfix: "\\d",
|
131
|
-
rparen: ')'}}
|
132
|
-
],
|
133
|
-
postfix: '+$$/'}}
|
134
|
-
},
|
135
|
-
transform: "record.select_fields('69002', Proc.new { |f| f.subfield('0') =~ /^\\(ODIS-(PS|ORG)\\) (\\d)+$$/ })"
|
136
|
-
}, {
|
137
|
-
}, {
|
138
|
-
title: 'format statement with simple subfield reference',
|
139
|
-
input: '$a',
|
140
|
-
tree: {entry: [{subfield: {prefix: nil, repeat: nil, name: 'a'}}], postfix: nil},
|
141
|
-
transform: "f.subfield('a')"
|
142
|
-
}, {
|
143
|
-
title: 'format statement with subfield reference with repeat indicator',
|
144
|
-
input: '$*a',
|
145
|
-
tree: {entry: [{subfield: {prefix: nil, repeat: '*', name: 'a'}}], postfix: nil},
|
146
|
-
transform: "field_format(f.subfield_array('a'), join: ';').to_s"
|
147
|
-
}, {
|
148
|
-
title: 'format statement with subfield reference with repeat + separator indicator',
|
149
|
-
input: '$*"; "a',
|
150
|
-
tree: {entry: [{subfield: {prefix: nil, repeat: {separator: '; '}, name: 'a'}}], postfix: nil},
|
151
|
-
transform: "field_format(f.subfield_array('a'), join: '; ').to_s"
|
152
|
-
}, {
|
153
|
-
title: 'format statement with position reference',
|
154
|
-
input: '$[13]',
|
155
|
-
tree: {entry: [{fixfield: {prefix: nil, position: '13'}}], postfix: nil},
|
156
|
-
transform: 'f[13]'
|
157
|
-
}, {
|
158
|
-
title: 'format statement with range reference',
|
159
|
-
input: 'abc: $[5-8]',
|
160
|
-
tree: {entry: [{fixfield: {prefix: 'abc: ', first: '5', last: '8'}}], postfix: nil},
|
161
|
-
transform: "field_format(f[5,8], prefix: 'abc: ').to_s"
|
162
|
-
}, {
|
163
|
-
title: 'format statement with all range reference',
|
164
|
-
input: 'abc: $[*].',
|
165
|
-
tree: {entry: [{fixfield: {prefix: 'abc: ', all: '*'}}], postfix: '.'},
|
166
|
-
transform: "field_format(field_format(f[], prefix: 'abc: ').to_s, postfix: '.').to_s"
|
167
|
-
}, {
|
168
|
-
title: 'format statement with multiple subfields with prefixes',
|
169
|
-
input: '$a, $b - $c',
|
170
|
-
tree: {
|
171
|
-
entry: [
|
172
|
-
{subfield: {prefix: nil, repeat: nil, name: 'a'}},
|
173
|
-
{subfield: {prefix: ', ', repeat: nil, name: 'b'}},
|
174
|
-
{subfield: {prefix: ' - ', repeat: nil, name: 'c'}},
|
175
|
-
],
|
176
|
-
postfix: nil},
|
177
|
-
transform: "field_format(f.subfield('a'),field_format(f.subfield('b'), prefix: ', ').to_s,field_format(f.subfield('c'), prefix: ' - ').to_s).to_s"
|
178
|
-
}, {
|
179
|
-
title: 'format statement with multiple subfields with prefixes and postfix',
|
180
|
-
input: '$a, $b - $c.',
|
181
|
-
tree: {
|
182
|
-
entry: [
|
183
|
-
{subfield: {prefix: nil, repeat: nil, name: 'a'}},
|
184
|
-
{subfield: {prefix: ', ', repeat: nil, name: 'b'}},
|
185
|
-
{subfield: {prefix: ' - ', repeat: nil, name: 'c'}},
|
186
|
-
],
|
187
|
-
postfix: '.'},
|
188
|
-
transform: "field_format(f.subfield('a'),field_format(f.subfield('b'), prefix: ', ').to_s,field_format(f.subfield('c'), prefix: ' - ').to_s, postfix: '.').to_s"
|
189
|
-
}, {
|
190
|
-
title: 'format statement with multiple subfields with prefixes and group',
|
191
|
-
input: '$a, $b - ($c)',
|
192
|
-
tree: {
|
193
|
-
entry: [
|
194
|
-
{subfield: {prefix: nil, repeat: nil, name: 'a'}},
|
195
|
-
{subfield: {prefix: ', ', repeat: nil, name: 'b'}},
|
196
|
-
{group: {
|
197
|
-
prefix: ' - ', postfix: nil,
|
198
|
-
lparen: '(', rparen: ')',
|
199
|
-
entry: [{subfield: {prefix: nil, repeat: nil, name: 'c'}}]
|
200
|
-
}},
|
201
|
-
],
|
202
|
-
postfix: nil},
|
203
|
-
transform: "field_format(f.subfield('a'),field_format(f.subfield('b'), prefix: ', ').to_s,field_format(f.subfield('c'), prefix: ' - (', postfix: ')').to_s).to_s"
|
204
|
-
}, {
|
205
|
-
title: 'format statement with multiple subfields with prefixes and group with multiple entries',
|
206
|
-
input: '$a, $b - ($c, $d, ...)',
|
207
|
-
tree: {
|
208
|
-
entry: [
|
209
|
-
{subfield: {prefix: nil, repeat: nil, name: 'a'}},
|
210
|
-
{subfield: {prefix: ', ', repeat: nil, name: 'b'}},
|
211
|
-
{group: {
|
212
|
-
prefix: ' - ', postfix: ', ...',
|
213
|
-
lparen: '(', rparen: ')',
|
214
|
-
entry: [
|
215
|
-
{subfield: {prefix: nil, repeat: nil, name: 'c'}},
|
216
|
-
{subfield: {prefix: ', ', repeat: nil, name: 'd'}},
|
217
|
-
],
|
218
|
-
}},
|
219
|
-
],
|
220
|
-
postfix: nil},
|
221
|
-
transform: "field_format(f.subfield('a'),field_format(f.subfield('b'), prefix: ', ').to_s,field_format(f.subfield('c'),field_format(f.subfield('d'), prefix: ', ').to_s, prefix: ' - (', postfix: ', ...)').to_s).to_s"
|
222
|
-
}, {
|
223
|
-
title: 'format statement with nested groups',
|
224
|
-
input: '([{{($a)}}])',
|
225
|
-
tree: {
|
226
|
-
entry: [
|
227
|
-
{group: {
|
228
|
-
prefix: nil, postfix: nil,
|
229
|
-
lparen: '(', rparen: ')',
|
230
|
-
entry: [
|
231
|
-
{group: {
|
232
|
-
prefix: nil, postfix: nil,
|
233
|
-
lparen: '[', rparen: ']',
|
234
|
-
entry: [
|
235
|
-
{group: {
|
236
|
-
prefix: nil, postfix: nil,
|
237
|
-
lparen: '{', rparen: '}',
|
238
|
-
entry: [
|
239
|
-
{group: {
|
240
|
-
prefix: nil, postfix: nil,
|
241
|
-
lparen: '{', rparen: '}',
|
242
|
-
entry: [
|
243
|
-
{group: {
|
244
|
-
prefix: nil, postfix: nil,
|
245
|
-
lparen: '(', rparen: ')',
|
246
|
-
entry: [{subfield: {prefix: nil, repeat: nil, name: 'a'}}]
|
247
|
-
}}
|
248
|
-
]
|
249
|
-
}}
|
250
|
-
]
|
251
|
-
}}
|
252
|
-
]
|
253
|
-
}}
|
254
|
-
]
|
255
|
-
}}
|
256
|
-
],
|
257
|
-
postfix: nil},
|
258
|
-
transform: "field_format(field_format(field_format(field_format(field_format(f.subfield('a'), prefix: '(', postfix: ')').to_s, prefix: '{', postfix: '}').to_s, prefix: '{', postfix: '}').to_s, prefix: '[', postfix: ']').to_s, prefix: '(', postfix: ')').to_s"
|
259
|
-
}, {
|
260
|
-
title: 'format statement with missing closing bracket',
|
261
|
-
input: '($a',
|
262
|
-
tree: :failure
|
263
|
-
}, {
|
264
|
-
title: 'format statement with missing opening bracket',
|
265
|
-
input: '$a)',
|
266
|
-
tree: :failure
|
267
|
-
}, {
|
268
|
-
title: 'format statement with nested quotes',
|
269
|
-
input: ':"-$a, $*"+"b-".',
|
270
|
-
tree: {
|
271
|
-
entry: [
|
272
|
-
{group: {
|
273
|
-
prefix: ':', postfix: '-',
|
274
|
-
lparen: '"', rparen: '"',
|
275
|
-
entry: [
|
276
|
-
{subfield: {prefix: '-', repeat: nil, name: 'a'}},
|
277
|
-
{subfield: {prefix: ', ', repeat: {separator: '+'}, name: 'b'}}
|
278
|
-
],
|
279
|
-
}}
|
280
|
-
],
|
281
|
-
postfix: '.'},
|
282
|
-
transform: "field_format(field_format(field_format(f.subfield('a'), prefix: '-').to_s,field_format(f.subfield_array('b'), prefix: ', ', join: '+').to_s, prefix: ':\"', postfix: '-\"').to_s, postfix: '.').to_s"
|
283
|
-
}, {
|
284
|
-
title: 'format statement with double dollar prefix and postfix',
|
285
|
-
input: 'ab: $$$*a$$.',
|
286
|
-
tree: {
|
287
|
-
entry: [{subfield: {prefix: 'ab: $$', repeat: '*', name: 'a'}}],
|
288
|
-
postfix: '$$.'},
|
289
|
-
transform: "field_format(field_format(f.subfield_array('a'), prefix: 'ab: $$', join: ';').to_s, postfix: '$$.').to_s"
|
290
|
-
}, {
|
291
|
-
title: 'format statement with condition text',
|
292
|
-
input: '$0 =~ /^\(ODIS-(PS|ORG)\) (\d)+$$/',
|
293
|
-
tree: {
|
294
|
-
entry: [
|
295
|
-
{subfield: {prefix: nil, repeat: nil, name: '0'}},
|
296
|
-
{group: {
|
297
|
-
prefix: ' =~ /^\\', postfix: '\\',
|
298
|
-
lparen: '(', rparen: ')',
|
299
|
-
entry: [
|
300
|
-
{group: {
|
301
|
-
prefix: 'ODIS-', postfix: 'PS|ORG',
|
302
|
-
lparen: '(', rparen: ')',
|
303
|
-
entry: nil
|
304
|
-
}}
|
305
|
-
]
|
306
|
-
}},
|
307
|
-
{group: {
|
308
|
-
prefix: ' ', postfix: '\\d',
|
309
|
-
lparen: '(', rparen: ')',
|
310
|
-
entry: nil
|
311
|
-
}}
|
312
|
-
],
|
313
|
-
postfix: '+$$/'},
|
314
|
-
transform: "field_format(f.subfield('0'),field_format(field_format(, prefix: 'ODIS-(', postfix: 'PS|ORG)').to_s, prefix: ' =~ /^\\(', postfix: '\\)').to_s,field_format(, prefix: ' (', postfix: '\\d)').to_s, postfix: '+$$/').to_s"
|
315
|
-
}, {
|
316
|
-
title: 'format statement with method call',
|
317
|
-
input: '$(my_method($a,$b))',
|
318
|
-
tree: {entry: [
|
319
|
-
{method_call: {
|
320
|
-
prefix: nil, postfix: nil,
|
321
|
-
entry: [
|
322
|
-
{group: {
|
323
|
-
prefix: 'my_method', postfix: nil,
|
324
|
-
lparen: '(', rparen: ')',
|
325
|
-
entry: [
|
326
|
-
{subfield: {prefix: nil, repeat: nil, name: 'a'}},
|
327
|
-
{subfield: {prefix: ',', repeat: nil, name: 'b'}}
|
328
|
-
]
|
329
|
-
}}
|
330
|
-
]
|
331
|
-
}}
|
332
|
-
],
|
333
|
-
postfix: nil},
|
334
|
-
transform: {:format => {:entry => [{:method_call => {:prefix => nil, :entry => ["field_format(f.subfield('a'),field_format(f.subfield('b'), prefix: ',').to_s, prefix: 'my_method(', postfix: ')').to_s"], :postfix => nil}}], :postfix => nil}}
|
335
|
-
}, {
|
336
|
-
title: 'format statement with complex with method call',
|
337
|
-
input: "$a $b ($c) ($d) ($g), $(lookup('DOLLAR4','Name','Tag'=>'100','Code'=>$4.to_s)) ($9)",
|
338
|
-
tree: {entry: [
|
339
|
-
{subfield: {prefix: nil, repeat: nil, name: 'a'}},
|
340
|
-
{subfield: {prefix: ' ', repeat: nil, name: 'b'}},
|
341
|
-
{group: {
|
342
|
-
prefix: ' ', postfix: nil,
|
343
|
-
lparen: '(', rparen: ')',
|
344
|
-
entry: [{subfield: {prefix: nil, repeat: nil, name: 'c'}}]}},
|
345
|
-
{group: {
|
346
|
-
prefix: ' ', postfix: nil,
|
347
|
-
lparen: '(', rparen: ')',
|
348
|
-
entry: [{subfield: {prefix: nil, repeat: nil, name: 'd'}}]
|
349
|
-
}},
|
350
|
-
{group: {
|
351
|
-
prefix: ' ', postfix: nil,
|
352
|
-
lparen: '(', rparen: ')',
|
353
|
-
entry: [{subfield: {prefix: nil, repeat: nil, name: 'g'}}]
|
354
|
-
}},
|
355
|
-
{method_call: {
|
356
|
-
prefix: ', ', postfix: nil,
|
357
|
-
entry: [
|
358
|
-
{group: {
|
359
|
-
prefix: 'lookup', postfix: '.to_s',
|
360
|
-
lparen: '(', rparen: ')',
|
361
|
-
entry: [
|
362
|
-
{group: {prefix: nil, lparen: "'", entry: nil, postfix: 'DOLLAR4', rparen: "'"}},
|
363
|
-
{group: {prefix: ',', lparen: "'", entry: nil, postfix: 'Name', rparen: "'"}},
|
364
|
-
{group: {prefix: ',', lparen: "'", entry: nil, postfix: 'Tag', rparen: "'"}},
|
365
|
-
{group: {prefix: '=>', lparen: "'", entry: nil, postfix: '100', rparen: "'"}},
|
366
|
-
{group: {prefix: ',', lparen: "'", entry: nil, postfix: 'Code', rparen: "'"}},
|
367
|
-
{subfield: {prefix: '=>', repeat: nil, name: '4'}}
|
368
|
-
]
|
369
|
-
}}
|
370
|
-
]
|
371
|
-
}},
|
372
|
-
{group: {
|
373
|
-
prefix: ' ', postfix: nil,
|
374
|
-
lparen: '(', rparen: ')',
|
375
|
-
entry: [{subfield: {prefix: nil, repeat: nil, name: '9'}}]
|
376
|
-
}}
|
377
|
-
],
|
378
|
-
postfix: nil},
|
379
|
-
transform: {:format => {:entry => ["f.subfield('a')", "field_format(f.subfield('b'), prefix: ' ').to_s", "field_format(f.subfield('c'), prefix: ' (', postfix: ')').to_s", "field_format(f.subfield('d'), prefix: ' (', postfix: ')').to_s", "field_format(f.subfield('g'), prefix: ' (', postfix: ')').to_s", {:method_call => {:prefix => ', ', :entry => ["field_format(field_format(, prefix: ''', postfix: 'DOLLAR4'').to_s,field_format(, prefix: ','', postfix: 'Name'').to_s,field_format(, prefix: ','', postfix: 'Tag'').to_s,field_format(, prefix: '=>'', postfix: '100'').to_s,field_format(, prefix: ','', postfix: 'Code'').to_s,field_format(f.subfield('4'), prefix: '=>').to_s, prefix: 'lookup(', postfix: '.to_s)').to_s"], :postfix => nil}}, "field_format(f.subfield('9'), prefix: ' (', postfix: ')').to_s"], :postfix => nil}}
|
380
|
-
}
|
381
|
-
]
|
382
|
-
end
|