mods 2.0.1 → 2.0.2

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