mab2 0.0.4 → 0.1.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.
@@ -1,10 +0,0 @@
1
- class Mab2::AlephSequentialAdapter
2
-
3
- attr_accessor :controlfields, :datafields
4
-
5
- def initialize(aleph_sequential)
6
- @controlfields = {}
7
- @datafields = {}
8
- end
9
-
10
- end
@@ -1,15 +0,0 @@
1
- class Mab2::Document::Datafield
2
-
3
- attr_accessor :indicators, :subfields, :tag
4
-
5
- def initialize(tag, indicators, subfields)
6
- @tag = tag
7
- @indicators = indicators
8
- @subfields = subfields.map { |subfield| Mab2::Document::Subfield.new(subfield) }
9
- end
10
-
11
- def get_subfield(code)
12
- @subfields.find { |subfield| subfield.name == code.to_sym }
13
- end
14
-
15
- end
@@ -1,10 +0,0 @@
1
- class Mab2::Document::Subfield
2
-
3
- attr_accessor :name, :value
4
-
5
- def initialize(hash)
6
- @name = hash.keys.first
7
- @value = hash.values.first
8
- end
9
-
10
- end
@@ -1,50 +0,0 @@
1
- require 'nokogiri'
2
-
3
- class Mab2::MabXmlAdapter
4
-
5
- attr_accessor :controlfields, :datafields
6
-
7
- def initialize(xml)
8
- record = Nokogiri::XML(xml).remove_namespaces!.xpath('//OAI-PMH/ListRecords/record/metadata/record')
9
-
10
- @controlfields = controlfields_from_mabxml(record)
11
- @datafields = datafields_from_mabxml(record)
12
- end
13
-
14
- private
15
-
16
- def controlfields_from_mabxml(mabxml)
17
- if mabxml.is_a? Nokogiri::XML::NodeSet
18
- mabxml.xpath('//controlfield').inject({}) do |controlfields, xml_node|
19
- controlfields[xml_node.attr('tag').to_sym] = xml_node.content
20
-
21
- # return resulting hash for inject's sake
22
- controlfields
23
- end
24
- end
25
- end
26
-
27
- def datafields_from_mabxml(mabxml)
28
- if mabxml.is_a? Nokogiri::XML::NodeSet
29
- mabxml.xpath('//datafield').inject({}) do |datafields, xml_node|
30
- tag = xml_node.attr('tag').to_sym
31
- ind1 = xml_node.attr('ind1').to_sym
32
- ind2 = xml_node.attr('ind2').to_sym
33
-
34
- existing_subfields = datafields[tag].try(:[], ind1).try(:[], ind2)
35
-
36
- datafields[tag] = {
37
- ind1 => {
38
- ind2 => (existing_subfields.nil? ? [] : existing_subfields).push(xml_node.xpath('subfield').map do |subfield|
39
- { subfield.attr('code').to_sym => subfield.content }
40
- end)
41
- }
42
- }
43
-
44
- # return resulting hash for inject's sake
45
- datafields
46
- end
47
- end
48
- end
49
-
50
- end
@@ -1,24 +0,0 @@
1
- module TestControlfield
2
-
3
- def test_controlfield_1
4
- doc = Mab2::Document.new(load_mab('PAD01.000806191.PRIMO.xml'))
5
- assert_equal doc.controlfield('SYS').join, '000806191'
6
- end
7
-
8
- def test_controlfield_2
9
- doc = Mab2::Document.new(load_mab('PAD01.000806191.PRIMO.xml'))
10
- assert_equal doc.controlfield('LDR').at(5), 'v'
11
- end
12
-
13
- def test_controlfield_3
14
- doc = Mab2::Document.new(load_mab('PAD01.000806191.PRIMO.xml'))
15
- assert_equal doc.controlfield('050').at(3), 'c'
16
- end
17
-
18
- # accessing non-existing controlfields
19
- def test_controlfield_4
20
- doc = Mab2::Document.new(load_mab('PAD01.000806191.PRIMO.xml'))
21
- assert_equal doc.controlfield('052').at(0), nil
22
- end
23
-
24
- end
@@ -1,131 +0,0 @@
1
- module TestDatafield
2
-
3
- #
4
- # Synthetic dsl tests
5
- #
6
- # full blown path, single value
7
- def test_dsl_1
8
- doc = Mab2::Document.new(load_mab('dsl_1.xml'))
9
- assert_equal 'Some string', doc.field('100', ind1: '1', ind2: '2').subfield('a').get.value
10
- end
11
-
12
- # missing ind2, single value
13
- def test_dsl_1a
14
- doc = Mab2::Document.new(load_mab('dsl_1.xml'))
15
- assert_equal 'Some string', doc.field('100', ind1: '1').subfield('a').get.value
16
- end
17
-
18
- # missing ind1 + ind2, single value
19
- def test_dsl_1b
20
- doc = Mab2::Document.new(load_mab('dsl_1.xml'))
21
- assert_equal 'Some string', doc.field('100').subfield('a').get.value
22
- end
23
-
24
- # missing ind1 + ind2, missing subfield, single value
25
- def test_dsl_1c
26
- doc = Mab2::Document.new(load_mab('dsl_1.xml'))
27
- assert_equal 'Some string', doc.field('100').get.value
28
- end
29
-
30
- # missing ind1 + ind2, missing subfield, no get, single value
31
- def test_dsl_1d
32
- doc = Mab2::Document.new(load_mab('dsl_1.xml'))
33
- assert_equal 'Some string', doc.field('100').value
34
- end
35
-
36
- # missing ind1 + ind2, missing subfield, no get, explicite values
37
- def test_dsl_1e
38
- doc = Mab2::Document.new(load_mab('dsl_1.xml'))
39
- assert_equal ['Some string'], doc.field('100').values
40
- end
41
-
42
- # missing ind1 + ind2, missing subfield, get fields
43
- def test_dsl_1f
44
- doc = Mab2::Document.new(load_mab('dsl_1.xml'))
45
- fields = doc.field('100').get.fields
46
- assert_equal 'Some string', fields.first.get_subfield('a').value
47
- end
48
-
49
- # multiple datafields with same tag
50
- def test_dsl_2
51
- doc = Mab2::Document.new(load_mab('dsl_2.xml'))
52
- assert_equal ["Politik", "Theorie", "(DE-588)4046563-9", "Politiktheorie", "(DE-588)4046563-9", "Politische Theorien", "(DE-588)4046563-9", "Politik", "Theorie", "(DE-588)4046563-9", "Politiktheorie", "(DE-588)4046563-9", "Politische Theorien", "(DE-588)4046563-9"], doc.field('PSW', ind1: '-', ind2: '1').get.values
53
- end
54
-
55
- # multiple datafields with same tag, filtered by subfield
56
- def test_dsl_2a
57
- doc = Mab2::Document.new(load_mab('dsl_2.xml'))
58
- assert_equal ["Politik", "Politiktheorie", "Politische Theorien", "Politik", "Politiktheorie", "Politische Theorien"], doc.field('PSW', ind1: '-', ind2: '1').subfield('s').get.values
59
- end
60
-
61
- # multiple datafields with same tag, filtered by subfield only existent in two of n datafields
62
- def test_dsl_2b
63
- doc = Mab2::Document.new(load_mab('dsl_2.xml'))
64
- assert_equal ["Theorie", "Theorie"], doc.field('PSW', ind1: '-', ind2: '1').subfield('x').get.values
65
- end
66
-
67
- # multiple datafields with same tag, filtered by subfield only existent in two of n datafields, only first value
68
- def test_dsl_2c
69
- doc = Mab2::Document.new(load_mab('dsl_2.xml'))
70
- assert_equal "Theorie", doc.field('PSW', ind1: '-', ind2: '1').subfield('x').get.value
71
- end
72
-
73
- #
74
- # Real world mab files
75
- #
76
-
77
- # ind1 missing
78
- def test_datafield_1
79
- doc = Mab2::Document.new(load_mab('PAD01.000806191.PRIMO.xml'))
80
- assert_equal '20000217', doc.field('LOC', ind2: ' ').subfield('k').get.value
81
- end
82
-
83
- # ind1 missing, multi ind2/subfield, first value
84
- def test_datafield_2
85
- doc = Mab2::Document.new(load_mab('PAD01.000806191.PRIMO.xml'))
86
- assert_equal 'Gockel, Simone', doc.field("100", ind2: ['1', '2']).subfield(['a','p','c','n','b']).get.value
87
- end
88
-
89
- # ind1/ind2 missing, all values
90
- def test_datafield_3
91
- doc = Mab2::Document.new(load_mab('PAD01.000978177.PRIMO.xml'))
92
- assert_equal ["Bajme, Klaus", "Beyme, Klaus", "Beyme, K. <<von>>", "Bajme, Klaus", "Beyme, Klaus", "Beyme, K. <<von>>"], doc.field('PPE').subfield(['a', 'p']).get.values
93
- end
94
-
95
- # ind1 negated '-z' => all but 'z', all values
96
- def test_datafield_4
97
- doc = Mab2::Document.new(load_mab('PAD01.000978177.PRIMO.xml'))
98
- assert_equal ["978-3-518-28569-5"], doc.field('540', ind1: '-z', ind2: '1').subfield('a').get.values
99
- end
100
-
101
- # simple fields
102
- def test_datafield_5
103
- doc = Mab2::Document.new(load_mab('PAD01.000978177.PRIMO.xml'))
104
- fields = doc.field('655').subfield(['u', '3', 'z', 't']).get.fields
105
- assert_equal 'http://digitool.hbz-nrw.de:1801/webclient/DeliveryManager?pid=2280738&custom_att_2=simple_viewer', fields.first.get_subfield('u').value
106
- end
107
-
108
- # iterating over fields
109
- def test_datafield_5
110
- doc = Mab2::Document.new(load_mab('PAD01.000978177.PRIMO.xml'))
111
- fields = doc.field('655').subfield(['u', '3', 'z', 't']).get.fields
112
- fields.each do |field|
113
- assert_equal 'VIEW', field.get_subfield('t').value
114
- assert_equal 'http://digitool.hbz-nrw.de:1801/webclient/DeliveryManager?pid=2280738&custom_att_2=simple_viewer', field.get_subfield('u').value
115
- end
116
- end
117
-
118
- #def test_datafield_6
119
- # doc = Mab2::Document.new(load_mab('PAD01.000978177.PRIMO.xml'))
120
- # fields = doc.field('PSW').subfield(['s', '9']).get.fields
121
- # binding.pry
122
- #end
123
-
124
- # join_subfields
125
- #def test_datafield_4
126
- # doc = Mab2::Document.new(load_mab('PAD01.000978177.PRIMO.xml'))
127
- # w = doc.field('525', ind2: '1').subfield(['p','a']).get.value(join_subfields: ': ')
128
- # binding.pry
129
- #end
130
-
131
- end
@@ -1,216 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd">
3
- <ListRecords>
4
- <record>
5
- <header>
6
- <identifier>aleph-publish:000806191</identifier>
7
- </header>
8
- <metadata>
9
- <record xmlns="http://www.ddb.de/professionell/mabxml/mabxml-1.xsd">
10
- <leader>00633vM2.01200024------h</leader>
11
- <controlfield tag="LDR">00633vM2.01200024------h</controlfield>
12
- <controlfield tag="FMT">MH</controlfield>
13
- <datafield tag="001" ind1="-" ind2="1">
14
- <subfield code="a">HT010843888</subfield>
15
- </datafield>
16
- <datafield tag="002" ind1="a" ind2="1">
17
- <subfield code="a">19990825</subfield>
18
- </datafield>
19
- <datafield tag="003" ind1="-" ind2="1">
20
- <subfield code="a">20070216</subfield>
21
- </datafield>
22
- <datafield tag="021" ind1="b" ind2="1">
23
- <subfield code="a">HT010843875</subfield>
24
- </datafield>
25
- <controlfield tag="030">a|1uc||||||17</controlfield>
26
- <datafield tag="036" ind1="a" ind2="1">
27
- <subfield code="a">DE</subfield>
28
- </datafield>
29
- <datafield tag="037" ind1="b" ind2="1">
30
- <subfield code="a">ger</subfield>
31
- </datafield>
32
- <controlfield tag="050">|||c||||||||||</controlfield>
33
- <controlfield tag="051">sy||||||</controlfield>
34
- <datafield tag="070" ind1="-" ind2="1">
35
- <subfield code="a">294</subfield>
36
- </datafield>
37
- <datafield tag="080" ind1="-" ind2="1">
38
- <subfield code="a">60</subfield>
39
- </datafield>
40
- <datafield tag="100" ind1="-" ind2="1">
41
- <subfield code="p">Gockel, Simone</subfield>
42
- <subfield code="d">1969-</subfield>
43
- <subfield code="9">(DE-588)121333337</subfield>
44
- </datafield>
45
- <datafield tag="331" ind1="-" ind2="1">
46
- <subfield code="a">Perfluoralkylsubstituierte Tellur(IV)Verbindungen</subfield>
47
- </datafield>
48
- <datafield tag="359" ind1="-" ind2="1">
49
- <subfield code="a">von Simone Gockel</subfield>
50
- </datafield>
51
- <datafield tag="403" ind1="-" ind2="1">
52
- <subfield code="a">[Mikrofiche-Ausg.]</subfield>
53
- </datafield>
54
- <datafield tag="410" ind1="-" ind2="1">
55
- <subfield code="a">Marburg</subfield>
56
- </datafield>
57
- <datafield tag="412" ind1="-" ind2="1">
58
- <subfield code="a">Tectum-Verl.</subfield>
59
- </datafield>
60
- <datafield tag="425" ind1="a" ind2="1">
61
- <subfield code="a">1999</subfield>
62
- </datafield>
63
- <datafield tag="433" ind1="-" ind2="1">
64
- <subfield code="a">VIII, 121 S. : graph. Darst.</subfield>
65
- </datafield>
66
- <datafield tag="519" ind1="-" ind2="1">
67
- <subfield code="p">Zugl.</subfield>
68
- <subfield code="a">Bochum, Univ., Diss., 1998</subfield>
69
- </datafield>
70
- <datafield tag="540" ind1="a" ind2="1">
71
- <subfield code="a">3-8288-0675-9</subfield>
72
- </datafield>
73
- <datafield tag="610" ind1="-" ind2="1">
74
- <subfield code="a">Mikrofiche-Ausg.:</subfield>
75
- </datafield>
76
- <datafield tag="611" ind1="a" ind2="1">
77
- <subfield code="a">Marburg</subfield>
78
- </datafield>
79
- <datafield tag="613" ind1="a" ind2="1">
80
- <subfield code="a">Tectum-Verl.</subfield>
81
- </datafield>
82
- <datafield tag="621" ind1="-" ind2="1">
83
- <subfield code="a">Edition Wissenschaft : Reihe Chemie ; 240</subfield>
84
- </datafield>
85
- <datafield tag="623" ind1="-" ind2="1">
86
- <subfield code="a">HT006670284</subfield>
87
- </datafield>
88
- <datafield tag="625" ind1="-" ind2="1">
89
- <subfield code="a">240</subfield>
90
- </datafield>
91
- <datafield tag="626" ind1="-" ind2="1">
92
- <subfield code="a">240</subfield>
93
- </datafield>
94
- <datafield tag="634" ind1="a" ind2="1">
95
- <subfield code="a">3-8288-0675-9</subfield>
96
- </datafield>
97
- <datafield tag="637" ind1="-" ind2="1">
98
- <subfield code="a">2 Mikrofiches : 24x</subfield>
99
- </datafield>
100
- <datafield tag="673" ind1="c" ind2="1">
101
- <subfield code="a">Bochum</subfield>
102
- </datafield>
103
- <datafield tag="902" ind1="-" ind2="1">
104
- <subfield code="s">Tellurorganische Verbindungen</subfield>
105
- <subfield code="9">(DE-588)4184674-6</subfield>
106
- </datafield>
107
- <datafield tag="902" ind1="-" ind2="1">
108
- <subfield code="s">Perfluoralkylgruppe</subfield>
109
- <subfield code="9">(DE-588)4337083-4</subfield>
110
- </datafield>
111
- <datafield tag="902" ind1="-" ind2="1">
112
- <subfield code="s">Mikroform</subfield>
113
- <subfield code="9">(DE-588)4039216-8</subfield>
114
- </datafield>
115
- <datafield tag="903" ind1="-" ind2="1">
116
- <subfield code="a">213</subfield>
117
- </datafield>
118
- <controlfield tag="SYS">000806191</controlfield>
119
- <datafield tag="PSW" ind1="-" ind2="1">
120
- <subfield code="s">Mikrobild</subfield>
121
- <subfield code="9">(DE-588)4039216-8</subfield>
122
- </datafield>
123
- <datafield tag="PSW" ind1="-" ind2="1">
124
- <subfield code="s">Mikrodokumentation</subfield>
125
- <subfield code="9">(DE-588)4039216-8</subfield>
126
- </datafield>
127
- <datafield tag="PSW" ind1="-" ind2="1">
128
- <subfield code="s">Mikrokopie</subfield>
129
- <subfield code="9">(DE-588)4039216-8</subfield>
130
- </datafield>
131
- <datafield tag="PSW" ind1="-" ind2="1">
132
- <subfield code="s">Mikroformen</subfield>
133
- <subfield code="9">(DE-588)4039216-8</subfield>
134
- </datafield>
135
- <datafield tag="PSW" ind1="-" ind2="1">
136
- <subfield code="s">Fiche</subfield>
137
- <subfield code="h">Formschlagwort</subfield>
138
- <subfield code="9">(DE-588)4039216-8</subfield>
139
- </datafield>
140
- <datafield tag="PSW" ind1="-" ind2="1">
141
- <subfield code="s">Mikrofiche</subfield>
142
- <subfield code="h">Formschlagwort</subfield>
143
- <subfield code="9">(DE-588)4039216-8</subfield>
144
- </datafield>
145
- <datafield tag="PSW" ind1="-" ind2="1">
146
- <subfield code="s">Mikrofilm</subfield>
147
- <subfield code="h">Formschlagwort</subfield>
148
- <subfield code="9">(DE-588)4039216-8</subfield>
149
- </datafield>
150
- <datafield tag="PSW" ind1="-" ind2="1">
151
- <subfield code="s">Microform</subfield>
152
- <subfield code="9">(DE-588)4039216-8</subfield>
153
- </datafield>
154
- <datafield tag="PSW" ind1="-" ind2="1">
155
- <subfield code="s">Mikrobild</subfield>
156
- <subfield code="9">(DE-588)4039216-8</subfield>
157
- </datafield>
158
- <datafield tag="PSW" ind1="-" ind2="1">
159
- <subfield code="s">Mikrodokumentation</subfield>
160
- <subfield code="9">(DE-588)4039216-8</subfield>
161
- </datafield>
162
- <datafield tag="PSW" ind1="-" ind2="1">
163
- <subfield code="s">Mikrokopie</subfield>
164
- <subfield code="9">(DE-588)4039216-8</subfield>
165
- </datafield>
166
- <datafield tag="PSW" ind1="-" ind2="1">
167
- <subfield code="s">Mikroformen</subfield>
168
- <subfield code="9">(DE-588)4039216-8</subfield>
169
- </datafield>
170
- <datafield tag="PSW" ind1="-" ind2="1">
171
- <subfield code="s">Fiche</subfield>
172
- <subfield code="h">Formschlagwort</subfield>
173
- <subfield code="9">(DE-588)4039216-8</subfield>
174
- </datafield>
175
- <datafield tag="PSW" ind1="-" ind2="1">
176
- <subfield code="s">Mikrofiche</subfield>
177
- <subfield code="h">Formschlagwort</subfield>
178
- <subfield code="9">(DE-588)4039216-8</subfield>
179
- </datafield>
180
- <datafield tag="PSW" ind1="-" ind2="1">
181
- <subfield code="s">Mikrofilm</subfield>
182
- <subfield code="h">Formschlagwort</subfield>
183
- <subfield code="9">(DE-588)4039216-8</subfield>
184
- </datafield>
185
- <datafield tag="PSW" ind1="-" ind2="1">
186
- <subfield code="s">Microform</subfield>
187
- <subfield code="9">(DE-588)4039216-8</subfield>
188
- </datafield>
189
- <datafield tag="700" ind1=" " ind2=" ">
190
- <subfield code="a">UUN</subfield>
191
- </datafield>
192
- <datafield tag="OWN" ind1=" " ind2=" ">
193
- <subfield code="a">P0001</subfield>
194
- </datafield>
195
- <datafield tag="PLK" ind1=" " ind2=" ">
196
- <subfield code="a">SRU</subfield>
197
- <subfield code="l">PAD01</subfield>
198
- <subfield code="b">000677742</subfield>
199
- <subfield code="m">240.^Perfluoralkylsubstituierte Tellur(IV)Verbindungen.^[Mikrofiche-Ausg.].^1999</subfield>
200
- <subfield code="n">Edition Wissenschaft / Reihe Chemie.^</subfield>
201
- </datafield>
202
- <datafield tag="LOC" ind1=" " ind2=" ">
203
- <subfield code="m">MKF</subfield>
204
- <subfield code="a">P0001</subfield>
205
- <subfield code="b">93</subfield>
206
- <subfield code="d">UUN1142</subfield>
207
- <subfield code="i">1999.2495-1999.2496</subfield>
208
- <subfield code="n">25</subfield>
209
- <subfield code="k">20000217</subfield>
210
- <subfield code="5">122722-10</subfield>
211
- </datafield>
212
- </record>
213
- </metadata>
214
- </record>
215
- </ListRecords>
216
- </OAI-PMH>