mods 2.0.1 → 2.0.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6e0dbc17f9dd70f600b35f19e44e917590ab32b0
4
- data.tar.gz: 2d423307ffb07736581493c22b40ba584c4b9d06
3
+ metadata.gz: dbfc453c27c3716eb928f59f53b2657c0fe246ab
4
+ data.tar.gz: b5c4b5eae1e685f381bd2ace70e6f9fb4b21fb1c
5
5
  SHA512:
6
- metadata.gz: bafb8e7068e4a8d831104b345106af6e0cb23b8fe0d7ab80aad059c616e4dd615e14dd09719586fd229fcb875b09299399c62fb2019e5fbfae8eb0b0d9d8d94f
7
- data.tar.gz: 9ff214bcc0bc1ffa290c3382ccfc62db858a6d94e1774462fad3112b4f157c90394999c4ef24a31608551948f1fdc0175ba08f1adb872de8a4f9085b27844aa4
6
+ metadata.gz: 391b47928854bcb135a0e44c7a05c38ec71695b7a2a86a147ad1aa86e973225f73179a8d7e7bc8f198b489e8f77fac90c1dbd0ca2b144d5f4440d61a2a63c90e
7
+ data.tar.gz: ec5f06c7246778c9f923717c8fd22b466d30d0cdc7cba2665c69800c4bf23a139f065902a1c556a24928417cae680859e1f18b6468863e5208b1c477e73c7b05
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
@@ -1,13 +1,12 @@
1
1
  module Mods
2
-
2
+
3
3
  # from: http://www.loc.gov/standards/mods/v3/mods-userguide-generalapp.html
4
-
5
- LANG_ATTRIBS = ['script', 'transliteration']
6
-
7
- if Nokogiri::VERSION < "1.6.6"
8
- # Nokogiri 1.6.6 introduced lang as a built-in attribute
9
- LANG_ATTRIBS += ['lang']
10
- end
4
+
5
+ # Nokogiri 1.6.6 introduced lang as a built-in attribute
6
+ LANG_ATTRIBS = (Nokogiri::VERSION < "1.6.6") ?
7
+ ['script', 'transliteration', 'lang'] :
8
+ ['script', 'transliteration']
9
+
11
10
  LINKING_ATTRIBS = ['xlink', 'ID']
12
11
 
13
12
  DATE_ATTRIBS = ['encoding', 'point', 'keyDate', 'qualifier']
@@ -15,69 +14,69 @@ module Mods
15
14
  POINT_ATTRIB_VALUES = ['start', 'end']
16
15
  KEY_DATE_ATTRIB_VALUES = ['yes']
17
16
  QUALIFIER_ATTRIB_VALUES = ['approximate', 'inferred', 'questionable']
18
-
17
+
19
18
  AUTHORITY_ATTRIBS = ['authority', 'authorityURI', 'valueURI']
20
19
 
21
20
  class Record
22
-
21
+
23
22
  # set the NOM terminology; WITH namespaces
24
23
  # NOTES:
25
24
  # 1. certain words, such as 'type' 'name' 'description' are reserved words in jruby or nokogiri
26
- # when the terminology would use these words, a suffix of '_at' is added if it is an attribute,
25
+ # when the terminology would use these words, a suffix of '_at' is added if it is an attribute,
27
26
  # (e.g. 'type_at' for @type) and a suffix of '_el' is added if it is an element.
28
- # 2. the underscore prefix variant terms are a way of making subterms for a node available
27
+ # 2. the underscore prefix variant terms are a way of making subterms for a node available
29
28
  # to any instance of said node and are not intended to be used externally
30
29
  # @param mods_ng_xml a Nokogiri::Xml::Document object containing MODS (with namespaces)
31
30
  def set_terminology_ns(mods_ng_xml)
32
31
  mods_ng_xml.set_terminology(:namespaces => { 'm' => Mods::MODS_NS }) do |t|
33
32
 
34
- # FIXME: may want to deal with camelcase vs. underscore in method_missing
33
+ # FIXME: may want to deal with camelcase vs. underscore in method_missing
35
34
 
36
35
  # ABSTRACT -------------------------------------------------------------------------------
37
- t.abstract :path => '/m:mods/m:abstract'
36
+ t.abstract :path => '/m:mods/m:abstract'
38
37
  t._abstract :path => '//m:abstract' do |n|
39
38
  n.displayLabel :path => '@displayLabel', :accessor => lambda { |a| a.text }
40
- n.type_at :path => '@type', :accessor => lambda { |a| a.text }
39
+ n.type_at :path => '@type', :accessor => lambda { |a| a.text }
41
40
  Mods::LANG_ATTRIBS.each { |attr_name|
42
41
  n.send attr_name, :path => "@#{attr_name}", :accessor => lambda { |a| a.text }
43
42
  }
44
43
  end
45
44
 
46
45
  # ACCESS_CONDITION -----------------------------------------------------------------------
47
- t.accessCondition :path => '/m:mods/m:accessCondition'
46
+ t.accessCondition :path => '/m:mods/m:accessCondition'
48
47
  t._accessCondition :path => '//m:accessCondition' do |n|
49
- n.displayLabel :path => '@displayLabel', :accessor => lambda { |a| a.text }
50
- n.type_at :path => '@type', :accessor => lambda { |a| a.text }
48
+ n.displayLabel :path => '@displayLabel', :accessor => lambda { |a| a.text }
49
+ n.type_at :path => '@type', :accessor => lambda { |a| a.text }
51
50
  Mods::LANG_ATTRIBS.each { |attr_name|
52
51
  n.send attr_name, :path => "@#{attr_name}", :accessor => lambda { |a| a.text }
53
52
  }
54
53
  end
55
54
 
56
55
  # CLASSIFICATION -------------------------------------------------------------------------
57
- t.classification :path => '/m:mods/m:classification'
56
+ t.classification :path => '/m:mods/m:classification'
58
57
  t._classification :path => '//m:classification' do |n|
59
- n.displayLabel :path => '@displayLabel', :accessor => lambda { |a| a.text }
60
- n.edition :path => '@edition', :accessor => lambda { |a| a.text }
58
+ n.displayLabel :path => '@displayLabel', :accessor => lambda { |a| a.text }
59
+ n.edition :path => '@edition', :accessor => lambda { |a| a.text }
61
60
  Mods::AUTHORITY_ATTRIBS.each { |attr_name|
62
61
  n.send attr_name, :path => "@#{attr_name}", :accessor => lambda { |a| a.text }
63
62
  }
64
63
  Mods::LANG_ATTRIBS.each { |attr_name|
65
64
  n.send attr_name, :path => "@#{attr_name}", :accessor => lambda { |a| a.text }
66
65
  }
67
- end
66
+ end
68
67
 
69
68
  # EXTENSION ------------------------------------------------------------------------------
70
- t.extension :path => '/m:mods/m:extension'
69
+ t.extension :path => '/m:mods/m:extension'
71
70
  t._extension :path => '//m:extension' do |n|
72
71
  n.displayLabel :path => '@displayLabel', :accessor => lambda { |a| a.text }
73
72
  end
74
73
 
75
74
  # GENRE ----------------------------------------------------------------------------------
76
- t.genre :path => '/m:mods/m:genre'
75
+ t.genre :path => '/m:mods/m:genre'
77
76
  t._genre :path => '//m:genre' do |n|
78
77
  n.displayLabel :path => '@displayLabel', :accessor => lambda { |a| a.text }
79
- n.type_at :path => '@type', :accessor => lambda { |a| a.text }
80
- n.usage :path => '@usage', :accessor => lambda { |a| a.text }
78
+ n.type_at :path => '@type', :accessor => lambda { |a| a.text }
79
+ n.usage :path => '@usage', :accessor => lambda { |a| a.text }
81
80
  Mods::AUTHORITY_ATTRIBS.each { |attr_name|
82
81
  n.send attr_name, :path => "@#{attr_name}", :accessor => lambda { |a| a.text }
83
82
  }
@@ -87,18 +86,18 @@ module Mods
87
86
  end
88
87
 
89
88
  # IDENTIIER ------------------------------------------------------------------------------
90
- t.identifier :path => '/m:mods/m:identifier'
89
+ t.identifier :path => '/m:mods/m:identifier'
91
90
  t._identifier :path => '//m:identifier' do |n|
92
91
  n.displayLabel :path => '@displayLabel', :accessor => lambda { |a| a.text }
93
- n.invalid :path => '@invalid', :accessor => lambda { |a| a.text }
94
- n.type_at :path => '@type', :accessor => lambda { |a| a.text }
92
+ n.invalid :path => '@invalid', :accessor => lambda { |a| a.text }
93
+ n.type_at :path => '@type', :accessor => lambda { |a| a.text }
95
94
  Mods::LANG_ATTRIBS.each { |attr_name|
96
95
  n.send attr_name, :path => "@#{attr_name}", :accessor => lambda { |a| a.text }
97
96
  }
98
97
  end
99
98
 
100
99
  # LANGUAGE -------------------------------------------------------------------------------
101
- t.language :path => '/m:mods/m:language'
100
+ t.language :path => '/m:mods/m:language'
102
101
  t._language :path => '//m:language' do |n|
103
102
  # attributes
104
103
  n.displayLabel :path => '@displayLabel', :accessor => lambda { |a| a.text }
@@ -107,19 +106,19 @@ module Mods
107
106
  }
108
107
  # child elements
109
108
  n.languageTerm :path => 'm:languageTerm'
110
- n.code_term :path => 'm:languageTerm[@type="code"]'
111
- n.text_term :path => 'm:languageTerm[@type="text"]'
112
- n.scriptTerm :path => 'm:scriptTerm'
109
+ n.code_term :path => 'm:languageTerm[@type="code"]'
110
+ n.text_term :path => 'm:languageTerm[@type="text"]'
111
+ n.scriptTerm :path => 'm:scriptTerm'
113
112
  end
114
113
  t._languageTerm :path => '//m:languageTerm' do |lt|
115
- lt.type_at :path => '@type', :accessor => lambda { |a| a.text }
114
+ lt.type_at :path => '@type', :accessor => lambda { |a| a.text }
116
115
  Mods::AUTHORITY_ATTRIBS.each { |attr_name|
117
116
  lt.send attr_name, :path => "@#{attr_name}", :accessor => lambda { |a| a.text }
118
117
  }
119
118
  end # t.language
120
119
 
121
120
  # LOCATION -------------------------------------------------------------------------------
122
- t.location :path => '/m:mods/m:location'
121
+ t.location :path => '/m:mods/m:location'
123
122
  t._location :path => '//m:location' do |n|
124
123
  # attributes
125
124
  n.displayLabel :path => '@displayLabel', :accessor => lambda { |a| a.text }
@@ -128,7 +127,7 @@ module Mods
128
127
  }
129
128
  # child elements
130
129
  n.physicalLocation :path => 'm:physicalLocation' do |e|
131
- e.displayLabel :path => '@displayLabel', :accessor => lambda { |a| a.text }
130
+ e.displayLabel :path => '@displayLabel', :accessor => lambda { |a| a.text }
132
131
  Mods::AUTHORITY_ATTRIBS.each { |attr_name|
133
132
  e.send attr_name, :path => "@#{attr_name}", :accessor => lambda { |a| a.text }
134
133
  }
@@ -136,17 +135,17 @@ module Mods
136
135
  n.shelfLocator :path => 'm:shelfLocator'
137
136
  n.url :path => 'm:url' do |e|
138
137
  e.dateLastAccessed :path => '@dateLastAccessed', :accessor => lambda { |a| a.text }
139
- e.displayLabel :path => '@displayLabel', :accessor => lambda { |a| a.text }
140
- e.note :path => '@note', :accessor => lambda { |a| a.text }
138
+ e.displayLabel :path => '@displayLabel', :accessor => lambda { |a| a.text }
139
+ e.note :path => '@note', :accessor => lambda { |a| a.text }
141
140
  e.access :path => '@access', :accessor => lambda { |a| a.text }
142
- e.usage :path => '@usage', :accessor => lambda { |a| a.text }
141
+ e.usage :path => '@usage', :accessor => lambda { |a| a.text }
143
142
  end
144
- n.holdingSimple :path => 'm:holdingSimple'
143
+ n.holdingSimple :path => 'm:holdingSimple'
145
144
  n.holdingExternal :path => 'm:holdingExternal'
146
145
  end # t.location
147
146
 
148
147
  # NAME ------------------------------------------------------------------------------------
149
- t.plain_name :path => '/m:mods/m:name'
148
+ t.plain_name :path => '/m:mods/m:name'
150
149
  t._plain_name :path => '//m:name' do |n|
151
150
  Mods::Name::ATTRIBUTES.each { |attr_name|
152
151
  if attr_name != 'type'
@@ -159,15 +158,15 @@ module Mods
159
158
  n.namePart :path => 'm:namePart' do |np|
160
159
  np.type_at :path => '@type', :accessor => lambda { |a| a.text }
161
160
  end
162
- n.family_name :path => 'm:namePart[@type="family"]'
163
- n.given_name :path => 'm:namePart[@type="given"]'
161
+ n.family_name :path => 'm:namePart[@type="family"]'
162
+ n.given_name :path => 'm:namePart[@type="given"]'
164
163
  n.termsOfAddress :path => 'm:namePart[@type="termsOfAddress"]'
165
- n.date :path => 'm:namePart[@type="date"]'
166
-
164
+ n.date :path => 'm:namePart[@type="date"]'
165
+
167
166
  n.displayForm :path => 'm:displayForm'
168
167
  n.affiliation :path => 'm:affiliation'
169
168
  n.description_el :path => 'm:description' # description is used by Nokogiri
170
- n.role :path => 'm:role' do |r|
169
+ n.role :path => 'm:role' do |r|
171
170
  r.roleTerm :path => 'm:roleTerm' do |rt|
172
171
  rt.type_at :path => "@type", :accessor => lambda { |a| a.text }
173
172
  Mods::AUTHORITY_ATTRIBS.each { |attr_name|
@@ -175,7 +174,7 @@ module Mods
175
174
  }
176
175
  end
177
176
  # role convenience method
178
- r.authority :path => '.', :accessor => lambda { |role_node|
177
+ r.authority :path => '.', :accessor => lambda { |role_node|
179
178
  a = nil
180
179
  role_node.roleTerm.each { |role_t|
181
180
  # role_t.authority will be [] if it is missing from an earlier roleTerm
@@ -185,10 +184,10 @@ module Mods
185
184
  }
186
185
  a
187
186
  }
188
- # role convenience method
189
- r.code :path => '.', :accessor => lambda { |role_node|
187
+ # role convenience method
188
+ r.code :path => '.', :accessor => lambda { |role_node|
190
189
  c = nil
191
- role_node.roleTerm.each { |role_t|
190
+ role_node.roleTerm.each { |role_t|
192
191
  if role_t.type_at == 'code'
193
192
  c ||= role_t.text
194
193
  end
@@ -196,9 +195,9 @@ module Mods
196
195
  c
197
196
  }
198
197
  # role convenience method
199
- r.value :path => '.', :accessor => lambda { |role_node|
198
+ r.value :path => '.', :accessor => lambda { |role_node|
200
199
  val = nil
201
- role_node.roleTerm.each { |role_t|
200
+ role_node.roleTerm.each { |role_t|
202
201
  if role_t.type_at == 'text'
203
202
  val ||= role_t.text
204
203
  end
@@ -210,7 +209,7 @@ module Mods
210
209
  val
211
210
  }
212
211
  end # role node
213
-
212
+
214
213
  # name convenience method
215
214
  # uses the displayForm of a name if present
216
215
  # if no displayForm, try to make a string from family, given and terms of address
@@ -229,7 +228,7 @@ module Mods
229
228
  end
230
229
  if !dv.empty?
231
230
  first = true
232
- name_node.namePart.each { |np|
231
+ name_node.namePart.each { |np|
233
232
  if np.type_at == 'termsOfAddress' && !np.text.empty?
234
233
  if first
235
234
  dv = dv + " " + np.text
@@ -239,7 +238,7 @@ module Mods
239
238
  end
240
239
  end
241
240
  }
242
- else # no family or given name
241
+ else # no family or given name
243
242
  dv = name_node.namePart.select {|np| np.type_at != 'date' && !np.text.empty?}.join(" ")
244
243
  end
245
244
  else # not a personal name
@@ -248,12 +247,12 @@ module Mods
248
247
  end
249
248
  dv.strip.empty? ? nil : dv.strip
250
249
  }
251
-
250
+
252
251
  # name convenience method
253
252
  n.display_value_w_date :path => '.', :single => true, :accessor => lambda {|name_node|
254
- dv = ''
253
+ dv = ''
255
254
  dv = dv + name_node.display_value if name_node.display_value
256
- name_node.namePart.each { |np|
255
+ name_node.namePart.each { |np|
257
256
  if np.type_at == 'date' && !np.text.empty? && !dv.end_with?(np.text)
258
257
  dv = dv + ", #{np.text}"
259
258
  end
@@ -265,19 +264,19 @@ module Mods
265
264
  }
266
265
  end # t._plain_name
267
266
 
268
- t.personal_name :path => '/m:mods/m:name[@type="personal"]'
269
- t._personal_name :path => '//m:name[@type="personal"]'
270
- t.corporate_name :path => '/m:mods/m:name[@type="corporate"]'
271
- t._corporate_name :path => '//m:name[@type="corporate"]'
272
- t.conference_name :path => '/m:mods/m:name[@type="conference"]'
267
+ t.personal_name :path => '/m:mods/m:name[@type="personal"]'
268
+ t._personal_name :path => '//m:name[@type="personal"]'
269
+ t.corporate_name :path => '/m:mods/m:name[@type="corporate"]'
270
+ t._corporate_name :path => '//m:name[@type="corporate"]'
271
+ t.conference_name :path => '/m:mods/m:name[@type="conference"]'
273
272
  t._conference_name :path => '//m:name[@type="conference"]'
274
273
 
275
274
  # NOTE ---------------------------------------------------------------------------------
276
275
  t.note :path => '/m:mods/m:note'
277
276
  t._note :path => '//m:note' do |n|
278
277
  n.displayLabel :path => '@displayLabel', :accessor => lambda { |a| a.text }
279
- n.id_at :path => '@ID', :accessor => lambda { |a| a.text }
280
- n.type_at :path => '@type', :accessor => lambda { |a| a.text }
278
+ n.id_at :path => '@ID', :accessor => lambda { |a| a.text }
279
+ n.type_at :path => '@type', :accessor => lambda { |a| a.text }
281
280
  Mods::LANG_ATTRIBS.each { |attr_name|
282
281
  n.send attr_name, :path => "@#{attr_name}", :accessor => lambda { |a| a.text }
283
282
  }
@@ -311,8 +310,8 @@ module Mods
311
310
  end
312
311
  end
313
312
  }
314
- n.edition :path => 'm:edition'
315
- n.issuance :path => 'm:issuance'
313
+ n.edition :path => 'm:edition'
314
+ n.issuance :path => 'm:issuance'
316
315
  n.frequency :path => 'm:frequency' do |f|
317
316
  Mods::AUTHORITY_ATTRIBS.each { |attr_name|
318
317
  f.send attr_name, :path => "@#{attr_name}", :accessor => lambda { |a| a.text }
@@ -321,12 +320,12 @@ module Mods
321
320
  end # t.origin_info
322
321
 
323
322
  # PART -----------------------------------------------------------------------------------
324
- t.part :path => '/m:mods/m:part'
323
+ t.part :path => '/m:mods/m:part'
325
324
  t._part :path => '//m:part' do |n|
326
325
  # attributes
327
- n.id_at :path => '@ID', :accessor => lambda { |a| a.text }
328
- n.order :path => '@order', :accessor => lambda { |a| a.text }
329
- n.type_at :path => '@type', :accessor => lambda { |a| a.text }
326
+ n.id_at :path => '@ID', :accessor => lambda { |a| a.text }
327
+ n.order :path => '@order', :accessor => lambda { |a| a.text }
328
+ n.type_at :path => '@type', :accessor => lambda { |a| a.text }
330
329
  n.displayLabel :path => '@displayLabel', :accessor => lambda { |a| a.text }
331
330
  Mods::LANG_ATTRIBS.each { |attr_name|
332
331
  n.send attr_name, :path => "@#{attr_name}", :accessor => lambda { |a| a.text }
@@ -334,35 +333,35 @@ module Mods
334
333
  # child elements
335
334
  n.detail :path => 'm:detail' do |e|
336
335
  # attributes
337
- e.level :path => '@level', :accessor => lambda { |a| a.text }
338
- e.type_at :path => '@type', :accessor => lambda { |a| a.text }
336
+ e.level :path => '@level', :accessor => lambda { |a| a.text }
337
+ e.type_at :path => '@type', :accessor => lambda { |a| a.text }
339
338
  # elements
340
- e.number :path => 'm:number'
339
+ e.number :path => 'm:number'
341
340
  e.caption :path => 'm:caption'
342
- e.title :path => 'm:title'
341
+ e.title :path => 'm:title'
343
342
  end
344
- n.extent :path => 'm:extent' do |e| # TODO: extent is ordered in xml schema
343
+ n.extent :path => 'm:extent' do |e| # TODO: extent is ordered in xml schema
345
344
  # attributes
346
- e.unit :path => '@unit', :accessor => lambda { |a| a.text }
345
+ e.unit :path => '@unit', :accessor => lambda { |a| a.text }
347
346
  # elements
348
347
  e.start :path => 'm:start'
349
- e.end :path => 'm:end'
348
+ e.end :path => 'm:end'
350
349
  e.total :path => 'm:total'
351
- e.list :path => 'm:list'
350
+ e.list :path => 'm:list'
352
351
  end
353
- n.date :path => 'm:date' do |e|
352
+ n.date :path => 'm:date' do |e|
354
353
  Mods::DATE_ATTRIBS.reject { |a| a == 'keyDate' }.each { |attr_name|
355
354
  e.send attr_name, :path => "@#{attr_name}", :accessor => lambda { |a| a.text }
356
355
  }
357
356
  end
358
- n.text_el :path => 'm:text' do |e|
357
+ n.text_el :path => 'm:text' do |e|
359
358
  e.displayLabel :path => '@displayLabel', :accessor => lambda { |a| a.text }
360
- e.type_at :path => '@type', :accessor => lambda { |a| a.text }
359
+ e.type_at :path => '@type', :accessor => lambda { |a| a.text }
361
360
  end
362
361
  end # t._part
363
362
 
364
363
  # PHYSICAL_DESCRIPTION -------------------------------------------------------------------
365
- t.physical_description :path => '/m:mods/m:physicalDescription'
364
+ t.physical_description :path => '/m:mods/m:physicalDescription'
366
365
  t._physical_description :path => '//m:physicalDescription' do |n|
367
366
  # attributes
368
367
  n.displayLabel :path => '@displayLabel', :accessor => lambda { |a| a.text }
@@ -387,7 +386,7 @@ module Mods
387
386
  end
388
387
 
389
388
  # RECORD_INFO --------------------------------------------------------------------------
390
- t.record_info :path => '/m:mods/m:recordInfo'
389
+ t.record_info :path => '/m:mods/m:recordInfo'
391
390
  t._record_info :path => '//m:recordInfo' do |n|
392
391
  # attributes
393
392
  n.displayLabel :path => '@displayLabel', :accessor => lambda { |a| a.text }
@@ -432,35 +431,35 @@ module Mods
432
431
  t.related_item :path => '/m:mods/m:relatedItem' do |n|
433
432
  # attributes
434
433
  n.displayLabel :path => '@displayLabel', :accessor => lambda { |a| a.text }
435
- n.id_at :path => '@ID', :accessor => lambda { |a| a.text }
436
- n.type_at :path => '@type', :accessor => lambda { |a| a.text }
434
+ n.id_at :path => '@ID', :accessor => lambda { |a| a.text }
435
+ n.type_at :path => '@type', :accessor => lambda { |a| a.text }
437
436
  # elements
438
- n.abstract :path => 'abstract'
437
+ n.abstract :path => 'abstract'
439
438
  n.accessCondition :path => 'm:accessCondition'
440
- n.classification :path => 'm:classification'
441
- n.extension :path => 'm:extension'
442
- n.genre :path => 'm:genre'
443
- n.identifier :path => 'm:identifier'
444
- n.language :path => 'm:language'
445
- n.location :path => 'm:location'
446
- n.name_el :path => 'm:name' # Note: 'name' is used by Nokogiri
447
- n.personal_name :path => 'm:name[@type="personal"]'
448
- n.corporate_name :path => 'm:name[@type="corporate"]'
439
+ n.classification :path => 'm:classification'
440
+ n.extension :path => 'm:extension'
441
+ n.genre :path => 'm:genre'
442
+ n.identifier :path => 'm:identifier'
443
+ n.language :path => 'm:language'
444
+ n.location :path => 'm:location'
445
+ n.name_el :path => 'm:name' # Note: 'name' is used by Nokogiri
446
+ n.personal_name :path => 'm:name[@type="personal"]'
447
+ n.corporate_name :path => 'm:name[@type="corporate"]'
449
448
  n.conference_name :path => 'm:name[@type="conference"]'
450
- n.note :path => 'm:note'
451
- n.originInfo :path => 'm:originInfo'
452
- n.part :path => 'm:part'
449
+ n.note :path => 'm:note'
450
+ n.originInfo :path => 'm:originInfo'
451
+ n.part :path => 'm:part'
453
452
  n.physicalDescription :path => 'm:physicalDescription'
454
- n.recordInfo :path => 'm:recordInfo'
455
- n.subject :path => 'm:subject'
453
+ n.recordInfo :path => 'm:recordInfo'
454
+ n.subject :path => 'm:subject'
456
455
  n.tableOfContents :path => 'm:tableOfContents'
457
- n.targetAudience :path => 'm:targetAudience'
458
- n.titleInfo :path => 'm:titleInfo'
459
- n.typeOfResource :path => 'm:typeOfResource'
456
+ n.targetAudience :path => 'm:targetAudience'
457
+ n.titleInfo :path => 'm:titleInfo'
458
+ n.typeOfResource :path => 'm:typeOfResource'
460
459
  end
461
460
 
462
461
  # SUBJECT -----------------------------------------------------------------------------
463
- t.subject :path => '/m:mods/m:subject'
462
+ t.subject :path => '/m:mods/m:subject'
464
463
  t._subject :path => '//m:subject' do |n|
465
464
  # attributes
466
465
  n.displayLabel :path => '@displayLabel', :accessor => lambda { |a| a.text }
@@ -471,9 +470,9 @@ module Mods
471
470
  n.send attr_name, :path => "@#{attr_name}", :accessor => lambda { |a| a.text }
472
471
  }
473
472
  # child elements
474
- n.cartographics :path => 'm:cartographics' do |n1|
475
- n1.scale :path => 'm:scale'
476
- n1.projection :path => 'm:projection'
473
+ n.cartographics :path => 'm:cartographics' do |n1|
474
+ n1.scale :path => 'm:scale'
475
+ n1.projection :path => 'm:projection'
477
476
  n1.coordinates :path => 'm:coordinates'
478
477
  Mods::Subject::CARTOGRAPHICS_CHILD_ELEMENTS.each { |elname|
479
478
  n1.send elname, :path => "m:#{elname}"
@@ -494,7 +493,7 @@ module Mods
494
493
  gc.send attr_name, :path => "@#{attr_name}", :accessor => lambda { |a| a.text }
495
494
  }
496
495
  # convenience method
497
- gc.translated_value :path => '.', :accessor => lambda { |gc_node|
496
+ gc.translated_value :path => '.', :accessor => lambda { |gc_node|
498
497
  code_val ||= gc_node.text
499
498
  xval = nil
500
499
  if code_val
@@ -522,10 +521,10 @@ module Mods
522
521
  t1.send attr_name, :path => "@#{attr_name}", :accessor => lambda { |a| a.text }
523
522
  }
524
523
  end
525
- n.personal_name :path => 'm:name[@type="personal"]'
526
- n.corporate_name :path => 'm:name[@type="corporate"]'
524
+ n.personal_name :path => 'm:name[@type="personal"]'
525
+ n.corporate_name :path => 'm:name[@type="corporate"]'
527
526
  n.conference_name :path => 'm:name[@type="conference"]'
528
- n.occupation :path => 'm:occupation' do |n1|
527
+ n.occupation :path => 'm:occupation' do |n1|
529
528
  Mods::AUTHORITY_ATTRIBS.each { |attr_name|
530
529
  n1.send attr_name, :path => "@#{attr_name}", :accessor => lambda { |a| a.text }
531
530
  }
@@ -552,20 +551,20 @@ module Mods
552
551
  end # t.subject
553
552
 
554
553
  # TABLE_OF_CONTENTS ---------------------------------------------------------------------
555
- t.tableOfContents :path => '/m:mods/m:tableOfContents'
554
+ t.tableOfContents :path => '/m:mods/m:tableOfContents'
556
555
  t._tableOfContents :path => '//m:tableOfContents' do |n|
557
- n.displayLabel :path => '@displayLabel', :accessor => lambda { |a| a.text }
558
- n.shareable :path => '@shareable', :accessor => lambda { |a| a.text }
559
- n.type_at :path => '@type', :accessor => lambda { |a| a.text }
556
+ n.displayLabel :path => '@displayLabel', :accessor => lambda { |a| a.text }
557
+ n.shareable :path => '@shareable', :accessor => lambda { |a| a.text }
558
+ n.type_at :path => '@type', :accessor => lambda { |a| a.text }
560
559
  Mods::LANG_ATTRIBS.each { |attr_name|
561
560
  n.send attr_name, :path => "@#{attr_name}", :accessor => lambda { |a| a.text }
562
561
  }
563
562
  end
564
563
 
565
564
  # TARGET_AUDIENCE -----------------------------------------------------------------------
566
- t.targetAudience :path => '/m:mods/m:targetAudience'
565
+ t.targetAudience :path => '/m:mods/m:targetAudience'
567
566
  t._targetAudience :path => '//m:targetAudience' do |n|
568
- n.displayLabel :path => '@displayLabel', :accessor => lambda { |a| a.text }
567
+ n.displayLabel :path => '@displayLabel', :accessor => lambda { |a| a.text }
569
568
  Mods::AUTHORITY_ATTRIBS.each { |attr_name|
570
569
  n.send attr_name, :path => "@#{attr_name}", :accessor => lambda { |a| a.text }
571
570
  }
@@ -575,7 +574,7 @@ module Mods
575
574
  end
576
575
 
577
576
  # TITLE_INFO ----------------------------------------------------------------------------
578
- t.title_info :path => '/m:mods/m:titleInfo'
577
+ t.title_info :path => '/m:mods/m:titleInfo'
579
578
  t._title_info :path => '//m:titleInfo' do |n|
580
579
  Mods::TitleInfo::ATTRIBUTES.each { |attr_name|
581
580
  if attr_name != 'type'
@@ -583,114 +582,114 @@ module Mods
583
582
  else
584
583
  n.type_at :path => "@#{attr_name}", :accessor => lambda { |a| a.text }
585
584
  end
586
- }
587
- n.title :path => 'm:title'
588
- n.subTitle :path => 'm:subTitle'
589
- n.nonSort :path => 'm:nonSort'
585
+ }
586
+ n.title :path => 'm:title'
587
+ n.subTitle :path => 'm:subTitle'
588
+ n.nonSort :path => 'm:nonSort'
590
589
  n.partNumber :path => 'm:partNumber'
591
- n.partName :path => 'm:partName'
590
+ n.partName :path => 'm:partName'
592
591
  # convenience method
593
- n.sort_title :path => '.', :accessor => lambda { |node|
594
- if node.type_at != "alternative" || (node.type_at == "alternative" &&
592
+ n.sort_title :path => '.', :accessor => lambda { |node|
593
+ if node.type_at != "alternative" || (node.type_at == "alternative" &&
595
594
  mods_ng_xml.xpath('/m:mods/m:titleInfo', {'m' => Mods::MODS_NS}).size == 1)
596
- node.title.text + (!node.subTitle.text.empty? ? "#{@title_delimiter}#{node.subTitle.text}" : "" )
595
+ node.title.text + (!node.subTitle.text.empty? ? "#{@title_delimiter}#{node.subTitle.text}" : "" )
597
596
  end
598
597
  }
599
598
  # convenience method
600
- n.full_title :path => '.', :accessor => lambda { |node|
601
- (!node.nonSort.text.empty? ? "#{node.nonSort.text} " : "" ) +
602
- node.title.text +
603
- (!node.subTitle.text.empty? ? "#{@title_delimiter}#{node.subTitle.text}" : "" )
599
+ n.full_title :path => '.', :accessor => lambda { |node|
600
+ (!node.nonSort.text.empty? ? "#{node.nonSort.text} " : "" ) +
601
+ node.title.text +
602
+ (!node.subTitle.text.empty? ? "#{@title_delimiter}#{node.subTitle.text}" : "" )
604
603
  }
605
604
  # convenience method
606
- n.short_title :path => '.', :accessor => lambda { |node|
605
+ n.short_title :path => '.', :accessor => lambda { |node|
607
606
  if node.type_at != "alternative"
608
- (!node.nonSort.text.empty? ? "#{node.nonSort.text} " : "" ) +
607
+ (!node.nonSort.text.empty? ? "#{node.nonSort.text} " : "" ) +
609
608
  node.title.text
610
609
  end
611
610
  }
612
611
  # convenience method
613
- n.alternative_title :path => '.', :accessor => lambda { |node|
612
+ n.alternative_title :path => '.', :accessor => lambda { |node|
614
613
  if node.type_at == "alternative"
615
- (!node.nonSort.text.empty? ? "#{node.nonSort.text} " : "" ) +
614
+ (!node.nonSort.text.empty? ? "#{node.nonSort.text} " : "" ) +
616
615
  node.title.text
617
616
  end
618
617
  }
619
618
  end # t._title_info
620
619
 
621
620
  # TYPE_OF_RESOURCE --------------------------------------------------------------------
622
- t.typeOfResource :path => '/m:mods/m:typeOfResource'
621
+ t.typeOfResource :path => '/m:mods/m:typeOfResource'
623
622
  t._typeOfResource :path => '//m:typeOfResource' do |n|
624
- n.collection :path => '@collection', :accessor => lambda { |a| a.text }
625
- n.displayLabel :path => '@displayLabel', :accessor => lambda { |a| a.text }
626
- n.manuscript :path => '@manuscript', :accessor => lambda { |a| a.text }
627
- n.usage :path => '@usage', :accessor => lambda { |a| a.text }
623
+ n.collection :path => '@collection', :accessor => lambda { |a| a.text }
624
+ n.displayLabel :path => '@displayLabel', :accessor => lambda { |a| a.text }
625
+ n.manuscript :path => '@manuscript', :accessor => lambda { |a| a.text }
626
+ n.usage :path => '@usage', :accessor => lambda { |a| a.text }
628
627
  end
629
628
 
630
629
  end # terminology
631
-
632
- mods_ng_xml.nom!
630
+
631
+ mods_ng_xml.nom!
633
632
  mods_ng_xml
634
633
  end # set_terminology_ns
635
-
634
+
636
635
  # set the NOM terminology; do NOT use namespaces
637
636
  # NOTES:
638
637
  # 1. certain words, such as 'type' 'name' 'description' are reserved words in jruby or nokogiri
639
- # when the terminology would use these words, a suffix of '_at' is added if it is an attribute,
638
+ # when the terminology would use these words, a suffix of '_at' is added if it is an attribute,
640
639
  # (e.g. 'type_at' for @type) and a suffix of '_el' is added if it is an element.
641
- # 2. the underscore prefix variant terms are a way of making subterms for a node available
640
+ # 2. the underscore prefix variant terms are a way of making subterms for a node available
642
641
  # to any instance of said node and are not intended to be used externally
643
642
  # @param mods_ng_xml a Nokogiri::Xml::Document object containing MODS (without namespaces)
644
643
  def set_terminology_no_ns(mods_ng_xml)
645
644
  mods_ng_xml.set_terminology() do |t|
646
645
 
647
- # FIXME: may want to deal with camelcase vs. underscore in method_missing
646
+ # FIXME: may want to deal with camelcase vs. underscore in method_missing
648
647
 
649
648
  # ABSTRACT -------------------------------------------------------------------------------
650
- t.abstract :path => '/mods/abstract'
649
+ t.abstract :path => '/mods/abstract'
651
650
  t._abstract :path => '//abstract' do |n|
652
651
  n.displayLabel :path => '@displayLabel', :accessor => lambda { |a| a.text }
653
- n.type_at :path => '@type', :accessor => lambda { |a| a.text }
652
+ n.type_at :path => '@type', :accessor => lambda { |a| a.text }
654
653
  Mods::LANG_ATTRIBS.each { |attr_name|
655
654
  n.send attr_name, :path => "@#{attr_name}", :accessor => lambda { |a| a.text }
656
655
  }
657
656
  end
658
657
 
659
658
  # ACCESS_CONDITION -----------------------------------------------------------------------
660
- t.accessCondition :path => '/mods/accessCondition'
659
+ t.accessCondition :path => '/mods/accessCondition'
661
660
  t._accessCondition :path => '//accessCondition' do |n|
662
661
  n.displayLabel :path => '@displayLabel', :accessor => lambda { |a| a.text }
663
- n.type_at :path => '@type', :accessor => lambda { |a| a.text }
662
+ n.type_at :path => '@type', :accessor => lambda { |a| a.text }
664
663
  Mods::LANG_ATTRIBS.each { |attr_name|
665
664
  n.send attr_name, :path => "@#{attr_name}", :accessor => lambda { |a| a.text }
666
665
  }
667
666
  end
668
667
 
669
668
  # CLASSIFICATION -------------------------------------------------------------------------
670
- t.classification :path => '/mods/classification'
669
+ t.classification :path => '/mods/classification'
671
670
  t._classification :path => '//classification' do |n|
672
- n.displayLabel :path => '@displayLabel', :accessor => lambda { |a| a.text }
673
- n.edition :path => '@edition', :accessor => lambda { |a| a.text }
671
+ n.displayLabel :path => '@displayLabel', :accessor => lambda { |a| a.text }
672
+ n.edition :path => '@edition', :accessor => lambda { |a| a.text }
674
673
  Mods::AUTHORITY_ATTRIBS.each { |attr_name|
675
674
  n.send attr_name, :path => "@#{attr_name}", :accessor => lambda { |a| a.text }
676
675
  }
677
676
  Mods::LANG_ATTRIBS.each { |attr_name|
678
677
  n.send attr_name, :path => "@#{attr_name}", :accessor => lambda { |a| a.text }
679
678
  }
680
- end
679
+ end
681
680
 
682
681
  # EXTENSION ------------------------------------------------------------------------------
683
- t.extension :path => '/mods/extension'
682
+ t.extension :path => '/mods/extension'
684
683
  t._extension :path => '//extension' do |n|
685
684
  n.displayLabel :path => '@displayLabel', :accessor => lambda { |a| a.text }
686
685
  end
687
686
 
688
687
  # GENRE ----------------------------------------------------------------------------------
689
- t.genre :path => '/mods/genre'
688
+ t.genre :path => '/mods/genre'
690
689
  t._genre :path => '//genre' do |n|
691
690
  n.displayLabel :path => '@displayLabel', :accessor => lambda { |a| a.text }
692
691
  n.type_at :path => '@type', :accessor => lambda { |a| a.text }
693
- n.usage :path => '@usage', :accessor => lambda { |a| a.text }
692
+ n.usage :path => '@usage', :accessor => lambda { |a| a.text }
694
693
  Mods::AUTHORITY_ATTRIBS.each { |attr_name|
695
694
  n.send attr_name, :path => "@#{attr_name}", :accessor => lambda { |a| a.text }
696
695
  }
@@ -700,7 +699,7 @@ module Mods
700
699
  end
701
700
 
702
701
  # IDENTIIER ------------------------------------------------------------------------------
703
- t.identifier :path => '/mods/identifier'
702
+ t.identifier :path => '/mods/identifier'
704
703
  t._identifier :path => '//identifier' do |n|
705
704
  n.displayLabel :path => '@displayLabel', :accessor => lambda { |a| a.text }
706
705
  n.invalid :path => '@invalid', :accessor => lambda { |a| a.text }
@@ -711,7 +710,7 @@ module Mods
711
710
  end
712
711
 
713
712
  # LANGUAGE -------------------------------------------------------------------------------
714
- t.language :path => '/mods/language'
713
+ t.language :path => '/mods/language'
715
714
  t._language :path => '//language' do |n|
716
715
  # attributes
717
716
  n.displayLabel :path => '@displayLabel', :accessor => lambda { |a| a.text }
@@ -720,9 +719,9 @@ module Mods
720
719
  }
721
720
  # child elements
722
721
  n.languageTerm :path => 'languageTerm'
723
- n.code_term :path => 'languageTerm[@type="code"]'
724
- n.text_term :path => 'languageTerm[@type="text"]'
725
- n.scriptTerm :path => 'scriptTerm'
722
+ n.code_term :path => 'languageTerm[@type="code"]'
723
+ n.text_term :path => 'languageTerm[@type="text"]'
724
+ n.scriptTerm :path => 'scriptTerm'
726
725
  end
727
726
  t._languageTerm :path => '//languageTerm' do |lt|
728
727
  lt.type_at :path => '@type', :accessor => lambda { |a| a.text }
@@ -749,12 +748,12 @@ module Mods
749
748
  n.shelfLocator :path => 'shelfLocator'
750
749
  n.url :path => 'url' do |e|
751
750
  e.dateLastAccessed :path => '@dateLastAccessed', :accessor => lambda { |a| a.text }
752
- e.displayLabel :path => '@displayLabel', :accessor => lambda { |a| a.text }
753
- e.note :path => '@note', :accessor => lambda { |a| a.text }
751
+ e.displayLabel :path => '@displayLabel', :accessor => lambda { |a| a.text }
752
+ e.note :path => '@note', :accessor => lambda { |a| a.text }
754
753
  e.access :path => '@access', :accessor => lambda { |a| a.text }
755
- e.usage :path => '@usage', :accessor => lambda { |a| a.text }
754
+ e.usage :path => '@usage', :accessor => lambda { |a| a.text }
756
755
  end
757
- n.holdingSimple :path => 'holdingSimple'
756
+ n.holdingSimple :path => 'holdingSimple'
758
757
  n.holdingExternal :path => 'holdingExternal'
759
758
  end # t.location
760
759
 
@@ -772,15 +771,15 @@ module Mods
772
771
  n.namePart :path => 'namePart' do |np|
773
772
  np.type_at :path => '@type', :accessor => lambda { |a| a.text }
774
773
  end
775
- n.family_name :path => 'namePart[@type="family"]'
776
- n.given_name :path => 'namePart[@type="given"]'
774
+ n.family_name :path => 'namePart[@type="family"]'
775
+ n.given_name :path => 'namePart[@type="given"]'
777
776
  n.termsOfAddress :path => 'namePart[@type="termsOfAddress"]'
778
- n.date :path => 'namePart[@type="date"]'
777
+ n.date :path => 'namePart[@type="date"]'
779
778
 
780
- n.displayForm :path => 'displayForm'
781
- n.affiliation :path => 'affiliation'
779
+ n.displayForm :path => 'displayForm'
780
+ n.affiliation :path => 'affiliation'
782
781
  n.description_el :path => 'description' # description is used by Nokogiri
783
- n.role :path => 'role' do |r|
782
+ n.role :path => 'role' do |r|
784
783
  r.roleTerm :path => 'roleTerm' do |rt|
785
784
  rt.type_at :path => "@type", :accessor => lambda { |a| a.text }
786
785
  Mods::AUTHORITY_ATTRIBS.each { |attr_name|
@@ -788,9 +787,9 @@ module Mods
788
787
  }
789
788
  end
790
789
  # convenience method
791
- r.authority :path => '.', :accessor => lambda { |role_node|
790
+ r.authority :path => '.', :accessor => lambda { |role_node|
792
791
  a = nil
793
- role_node.roleTerm.each { |role_t|
792
+ role_node.roleTerm.each { |role_t|
794
793
  # role_t.authority will be [] if it is missing from an earlier roleTerm
795
794
  if role_t.authority && (!a || a.size == 0)
796
795
  a = role_t.authority
@@ -798,21 +797,21 @@ module Mods
798
797
  }
799
798
  a
800
799
  }
801
- # convenience method
802
- r.code :path => '.', :accessor => lambda { |role_node|
800
+ # convenience method
801
+ r.code :path => '.', :accessor => lambda { |role_node|
803
802
  c = nil
804
- role_node.roleTerm.each { |role_t|
805
- if role_t.type_at == 'code'
803
+ role_node.roleTerm.each { |role_t|
804
+ if role_t.type_at == 'code'
806
805
  c ||= role_t.text
807
806
  end
808
807
  }
809
808
  c
810
809
  }
811
810
  # convenience method
812
- r.value :path => '.', :accessor => lambda { |role_node|
811
+ r.value :path => '.', :accessor => lambda { |role_node|
813
812
  val = nil
814
- role_node.roleTerm.each { |role_t|
815
- if role_t.type_at == 'text'
813
+ role_node.roleTerm.each { |role_t|
814
+ if role_t.type_at == 'text'
816
815
  val ||= role_t.text
817
816
  end
818
817
  }
@@ -842,7 +841,7 @@ module Mods
842
841
  end
843
842
  if !dv.empty?
844
843
  first = true
845
- name_node.namePart.each { |np|
844
+ name_node.namePart.each { |np|
846
845
  if np.type_at == 'termsOfAddress' && !np.text.empty?
847
846
  if first
848
847
  dv = dv + " " + np.text
@@ -861,11 +860,11 @@ module Mods
861
860
  end
862
861
  dv.strip.empty? ? nil : dv.strip
863
862
  }
864
-
863
+
865
864
  # name convenience method
866
865
  n.display_value_w_date :path => '.', :single => true, :accessor => lambda {|name_node|
867
866
  dv = '' + name_node.display_value
868
- name_node.namePart.each { |np|
867
+ name_node.namePart.each { |np|
869
868
  if np.type_at == 'date' && !np.text.empty? && !dv.end_with?(np.text)
870
869
  dv = dv + ", #{np.text}"
871
870
  end
@@ -877,11 +876,11 @@ module Mods
877
876
  }
878
877
  end # t._plain_name
879
878
 
880
- t.personal_name :path => '/mods/name[@type="personal"]'
881
- t._personal_name :path => '//name[@type="personal"]'
882
- t.corporate_name :path => '/mods/name[@type="corporate"]'
883
- t._corporate_name :path => '//name[@type="corporate"]'
884
- t.conference_name :path => '/mods/name[@type="conference"]'
879
+ t.personal_name :path => '/mods/name[@type="personal"]'
880
+ t._personal_name :path => '//name[@type="personal"]'
881
+ t.corporate_name :path => '/mods/name[@type="corporate"]'
882
+ t._corporate_name :path => '//name[@type="corporate"]'
883
+ t.conference_name :path => '/mods/name[@type="conference"]'
885
884
  t._conference_name :path => '//name[@type="conference"]'
886
885
 
887
886
  # NOTE ---------------------------------------------------------------------------------
@@ -923,8 +922,8 @@ module Mods
923
922
  end
924
923
  end
925
924
  }
926
- n.edition :path => 'edition'
927
- n.issuance :path => 'issuance'
925
+ n.edition :path => 'edition'
926
+ n.issuance :path => 'issuance'
928
927
  n.frequency :path => 'frequency' do |f|
929
928
  Mods::AUTHORITY_ATTRIBS.each { |attr_name|
930
929
  f.send attr_name, :path => "@#{attr_name}", :accessor => lambda { |a| a.text }
@@ -936,9 +935,9 @@ module Mods
936
935
  t.part :path => '/mods/part'
937
936
  t._part :path => '//part' do |n|
938
937
  # attributes
939
- n.id_at :path => '@ID', :accessor => lambda { |a| a.text }
940
- n.order :path => '@order', :accessor => lambda { |a| a.text }
941
- n.type_at :path => '@type', :accessor => lambda { |a| a.text }
938
+ n.id_at :path => '@ID', :accessor => lambda { |a| a.text }
939
+ n.order :path => '@order', :accessor => lambda { |a| a.text }
940
+ n.type_at :path => '@type', :accessor => lambda { |a| a.text }
942
941
  n.displayLabel :path => '@displayLabel', :accessor => lambda { |a| a.text }
943
942
  Mods::LANG_ATTRIBS.each { |attr_name|
944
943
  n.send attr_name, :path => "@#{attr_name}", :accessor => lambda { |a| a.text }
@@ -946,35 +945,35 @@ module Mods
946
945
  # child elements
947
946
  n.detail :path => 'detail' do |e|
948
947
  # attributes
949
- e.level :path => '@level', :accessor => lambda { |a| a.text }
950
- e.type_at :path => '@type', :accessor => lambda { |a| a.text }
948
+ e.level :path => '@level', :accessor => lambda { |a| a.text }
949
+ e.type_at :path => '@type', :accessor => lambda { |a| a.text }
951
950
  # elements
952
- e.number :path => 'number'
951
+ e.number :path => 'number'
953
952
  e.caption :path => 'caption'
954
- e.title :path => 'title'
953
+ e.title :path => 'title'
955
954
  end
956
955
  n.extent :path => 'extent' do |e| # TODO: extent is ordered in xml schema
957
956
  # attributes
958
957
  e.unit :path => '@unit', :accessor => lambda { |a| a.text }
959
958
  # elements
960
959
  e.start :path => 'start'
961
- e.end :path => 'end'
960
+ e.end :path => 'end'
962
961
  e.total :path => 'total'
963
- e.list :path => 'list'
962
+ e.list :path => 'list'
964
963
  end
965
- n.date :path => 'date' do |e|
964
+ n.date :path => 'date' do |e|
966
965
  Mods::DATE_ATTRIBS.reject { |a| a == 'keyDate' }.each { |attr_name|
967
966
  e.send attr_name, :path => "@#{attr_name}", :accessor => lambda { |a| a.text }
968
967
  }
969
968
  end
970
- n.text_el :path => 'text' do |e|
969
+ n.text_el :path => 'text' do |e|
971
970
  e.displayLabel :path => '@displayLabel', :accessor => lambda { |a| a.text }
972
- e.type_at :path => '@type', :accessor => lambda { |a| a.text }
971
+ e.type_at :path => '@type', :accessor => lambda { |a| a.text }
973
972
  end
974
973
  end # t._part
975
974
 
976
975
  # PHYSICAL_DESCRIPTION -------------------------------------------------------------------
977
- t.physical_description :path => '/mods/physicalDescription'
976
+ t.physical_description :path => '/mods/physicalDescription'
978
977
  t._physical_description :path => '//physicalDescription' do |n|
979
978
  # attributes
980
979
  n.displayLabel :path => '@displayLabel', :accessor => lambda { |a| a.text }
@@ -1044,31 +1043,31 @@ module Mods
1044
1043
  t.related_item :path => '/mods/relatedItem' do |n|
1045
1044
  # attributes
1046
1045
  n.displayLabel :path => '@displayLabel', :accessor => lambda { |a| a.text }
1047
- n.id_at :path => '@ID', :accessor => lambda { |a| a.text }
1046
+ n.id_at :path => '@ID', :accessor => lambda { |a| a.text }
1048
1047
  n.type_at :path => '@type', :accessor => lambda { |a| a.text }
1049
1048
  # elements
1050
1049
  n.abstract :path => 'abstract'
1051
1050
  n.accessCondition :path => 'accessCondition'
1052
- n.classification :path => 'classification'
1053
- n.extension :path => 'extension'
1054
- n.genre :path => 'genre'
1051
+ n.classification :path => 'classification'
1052
+ n.extension :path => 'extension'
1053
+ n.genre :path => 'genre'
1055
1054
  n.identifier :path => 'identifier'
1056
- n.language :path => 'language'
1057
- n.location :path => 'location'
1058
- n.name_el :path => 'name' # Note: 'name' is used by Nokogiri
1059
- n.personal_name :path => 'name[@type="personal"]'
1060
- n.corporate_name :path => 'name[@type="corporate"]'
1055
+ n.language :path => 'language'
1056
+ n.location :path => 'location'
1057
+ n.name_el :path => 'name' # Note: 'name' is used by Nokogiri
1058
+ n.personal_name :path => 'name[@type="personal"]'
1059
+ n.corporate_name :path => 'name[@type="corporate"]'
1061
1060
  n.conference_name :path => 'name[@type="conference"]'
1062
- n.note :path => 'note'
1061
+ n.note :path => 'note'
1063
1062
  n.originInfo :path => 'originInfo'
1064
- n.part :path => 'part'
1063
+ n.part :path => 'part'
1065
1064
  n.physicalDescription :path => 'physicalDescription'
1066
- n.recordInfo :path => 'recordInfo'
1067
- n.subject :path => 'subject'
1065
+ n.recordInfo :path => 'recordInfo'
1066
+ n.subject :path => 'subject'
1068
1067
  n.tableOfContents :path => 'tableOfContents'
1069
- n.targetAudience :path => 'targetAudience'
1070
- n.titleInfo :path => 'titleInfo'
1071
- n.typeOfResource :path => 'typeOfResource'
1068
+ n.targetAudience :path => 'targetAudience'
1069
+ n.titleInfo :path => 'titleInfo'
1070
+ n.typeOfResource :path => 'typeOfResource'
1072
1071
  end
1073
1072
 
1074
1073
  # SUBJECT -----------------------------------------------------------------------------
@@ -1106,7 +1105,7 @@ module Mods
1106
1105
  gc.send attr_name, :path => "@#{attr_name}", :accessor => lambda { |a| a.text }
1107
1106
  }
1108
1107
  # convenience method
1109
- gc.translated_value :path => '.', :accessor => lambda { |gc_node|
1108
+ gc.translated_value :path => '.', :accessor => lambda { |gc_node|
1110
1109
  code_val ||= gc_node.text
1111
1110
  xval = nil
1112
1111
  if code_val
@@ -1134,8 +1133,8 @@ module Mods
1134
1133
  t1.send attr_name, :path => "@#{attr_name}", :accessor => lambda { |a| a.text }
1135
1134
  }
1136
1135
  end
1137
- n.personal_name :path => 'name[@type="personal"]'
1138
- n.corporate_name :path => 'name[@type="corporate"]'
1136
+ n.personal_name :path => 'name[@type="personal"]'
1137
+ n.corporate_name :path => 'name[@type="corporate"]'
1139
1138
  n.conference_name :path => 'name[@type="conference"]'
1140
1139
  n.occupation :path => 'occupation' do |n1|
1141
1140
  Mods::AUTHORITY_ATTRIBS.each { |attr_name|
@@ -1164,20 +1163,20 @@ module Mods
1164
1163
  end # t.subject
1165
1164
 
1166
1165
  # TABLE_OF_CONTENTS ---------------------------------------------------------------------
1167
- t.tableOfContents :path => '/mods/tableOfContents'
1166
+ t.tableOfContents :path => '/mods/tableOfContents'
1168
1167
  t._tableOfContents :path => '//tableOfContents' do |n|
1169
- n.displayLabel :path => '@displayLabel', :accessor => lambda { |a| a.text }
1170
- n.shareable :path => '@shareable', :accessor => lambda { |a| a.text }
1171
- n.type_at :path => '@type', :accessor => lambda { |a| a.text }
1168
+ n.displayLabel :path => '@displayLabel', :accessor => lambda { |a| a.text }
1169
+ n.shareable :path => '@shareable', :accessor => lambda { |a| a.text }
1170
+ n.type_at :path => '@type', :accessor => lambda { |a| a.text }
1172
1171
  Mods::LANG_ATTRIBS.each { |attr_name|
1173
1172
  n.send attr_name, :path => "@#{attr_name}", :accessor => lambda { |a| a.text }
1174
1173
  }
1175
1174
  end
1176
1175
 
1177
1176
  # TARGET_AUDIENCE -----------------------------------------------------------------------
1178
- t.targetAudience :path => '/mods/targetAudience'
1177
+ t.targetAudience :path => '/mods/targetAudience'
1179
1178
  t._targetAudience :path => '//targetAudience' do |n|
1180
- n.displayLabel :path => '@displayLabel', :accessor => lambda { |a| a.text }
1179
+ n.displayLabel :path => '@displayLabel', :accessor => lambda { |a| a.text }
1181
1180
  Mods::AUTHORITY_ATTRIBS.each { |attr_name|
1182
1181
  n.send attr_name, :path => "@#{attr_name}", :accessor => lambda { |a| a.text }
1183
1182
  }
@@ -1195,43 +1194,43 @@ module Mods
1195
1194
  else
1196
1195
  n.type_at :path => "@#{attr_name}", :accessor => lambda { |a| a.text }
1197
1196
  end
1198
- }
1199
- n.title :path => 'title'
1200
- n.subTitle :path => 'subTitle'
1201
- n.nonSort :path => 'nonSort'
1197
+ }
1198
+ n.title :path => 'title'
1199
+ n.subTitle :path => 'subTitle'
1200
+ n.nonSort :path => 'nonSort'
1202
1201
  n.partNumber :path => 'partNumber'
1203
- n.partName :path => 'partName'
1204
- n.sort_title :path => '.', :accessor => lambda { |node|
1202
+ n.partName :path => 'partName'
1203
+ n.sort_title :path => '.', :accessor => lambda { |node|
1205
1204
  if node.type_at != "alternative" || (node.type_at == "alternative" && mods_ng_xml.xpath('/mods/titleInfo').size == 1)
1206
- node.title.text + (!node.subTitle.text.empty? ? "#{@title_delimiter}#{node.subTitle.text}" : "" )
1205
+ node.title.text + (!node.subTitle.text.empty? ? "#{@title_delimiter}#{node.subTitle.text}" : "" )
1207
1206
  end
1208
1207
  }
1209
- n.full_title :path => '.', :accessor => lambda { |node|
1210
- (!node.nonSort.text.empty? ? "#{node.nonSort.text} " : "" ) +
1211
- node.title.text +
1212
- (!node.subTitle.text.empty? ? "#{@title_delimiter}#{node.subTitle.text}" : "" )
1208
+ n.full_title :path => '.', :accessor => lambda { |node|
1209
+ (!node.nonSort.text.empty? ? "#{node.nonSort.text} " : "" ) +
1210
+ node.title.text +
1211
+ (!node.subTitle.text.empty? ? "#{@title_delimiter}#{node.subTitle.text}" : "" )
1213
1212
  }
1214
- n.short_title :path => '.', :accessor => lambda { |node|
1213
+ n.short_title :path => '.', :accessor => lambda { |node|
1215
1214
  if node.type_at != "alternative"
1216
- (!node.nonSort.text.empty? ? "#{node.nonSort.text} " : "" ) +
1215
+ (!node.nonSort.text.empty? ? "#{node.nonSort.text} " : "" ) +
1217
1216
  node.title.text
1218
1217
  end
1219
1218
  }
1220
- n.alternative_title :path => '.', :accessor => lambda { |node|
1219
+ n.alternative_title :path => '.', :accessor => lambda { |node|
1221
1220
  if node.type_at == "alternative"
1222
- (!node.nonSort.text.empty? ? "#{node.nonSort.text} " : "" ) +
1221
+ (!node.nonSort.text.empty? ? "#{node.nonSort.text} " : "" ) +
1223
1222
  node.title.text
1224
1223
  end
1225
1224
  }
1226
1225
  end # t._title_info
1227
1226
 
1228
1227
  # TYPE_OF_RESOURCE --------------------------------------------------------------------
1229
- t.typeOfResource :path => '/mods/typeOfResource'
1228
+ t.typeOfResource :path => '/mods/typeOfResource'
1230
1229
  t._typeOfResource :path => '//typeOfResource' do |n|
1231
- n.collection :path => '@collection', :accessor => lambda { |a| a.text }
1232
- n.displayLabel :path => '@displayLabel', :accessor => lambda { |a| a.text }
1233
- n.manuscript :path => '@manuscript', :accessor => lambda { |a| a.text }
1234
- n.usage :path => '@usage', :accessor => lambda { |a| a.text }
1230
+ n.collection :path => '@collection', :accessor => lambda { |a| a.text }
1231
+ n.displayLabel :path => '@displayLabel', :accessor => lambda { |a| a.text }
1232
+ n.manuscript :path => '@manuscript', :accessor => lambda { |a| a.text }
1233
+ n.usage :path => '@usage', :accessor => lambda { |a| a.text }
1235
1234
  end
1236
1235
 
1237
1236
  end # terminology