libis-tools 0.9.65 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|