mab2 0.0.4 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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>