stanford-mods 3.0.0 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 70d3b7093c830baa3c12f4c2c438549eb451fa4b6bb6c57f458382f0e8e53dc2
4
- data.tar.gz: 044edaeef524c4a701ebbc0e25f08d0c3fb5068b04cc36ab8769772004a73a85
3
+ metadata.gz: c9c63c6699eef72da80bbf9e15d892248dfc21a7550588aac09843ef26d1869f
4
+ data.tar.gz: f820451452017ec653c4eabd48d19cb23a36fcfafbad814272dd26c9cc9b9d42
5
5
  SHA512:
6
- metadata.gz: '097830e7c3b1136a279dfce41ac426ae860ab020f27bb1550a3f2a5f23b7fcbc1c7f7952f35f06a44aed7100d0d410c39adcbb17a70b270174c85b757d1aca4b'
7
- data.tar.gz: 7aa1c33f53fdbd4160d99a14739b4dcbd37950f4d8ab8238ee1886d4b6db4aaa9b5dec4c92f74842db80aa9839ec2d7e27a570a4fb7cde4862afc54b79c9e6a4
6
+ metadata.gz: '0817296bebb438d882509919ff0b6fb2ec0e1accd71b379209f3b3b5f4cbd684d8208d8aab7ff3ce5f745860c4331af9098afadb5d066bd406016625c63d3701'
7
+ data.tar.gz: 4ed8b47a3186c3f241d2b543358138c71bea5f7128fc483e1d78117af1224b75db1fb4524763c726b011f414524b7d732a54096dd07d38a909c13a05116cc3ca
@@ -15,15 +15,23 @@ module Stanford
15
15
  # look for a keyDate and use it if there is one; otherwise pick earliest date
16
16
  # @param [Boolean] ignore_approximate true if approximate dates (per qualifier attribute) should be ignored; false if approximate dates should be included
17
17
  # @return [Integer] publication year as an Integer
18
- # @note for sorting: 5 B.C. => -5; 666 B.C. => -666
19
- def pub_year_int(fields = [:dateIssued, :dateCreated, :dateCaptured], ignore_approximate: false)
20
- fields.each do |date_key|
21
- values = mods_ng_xml.origin_info.send(date_key)
22
- values = values.reject(&method(:is_approximate)) if ignore_approximate
23
-
24
- earliest_date = Stanford::Mods::OriginInfo.best_or_earliest_year(values)
25
- return earliest_date.year_int_from_date_str if earliest_date&.year_int_from_date_str
26
- end; nil
18
+ # @note for sorting: 5 BCE => -5; 666 BCE => -666
19
+ def pub_year_int(ignore_approximate: false)
20
+ date = earliest_preferred_date(ignore_approximate: ignore_approximate)
21
+
22
+ return unless date
23
+
24
+ if date.is_a? Stanford::Mods::Imprint::DateRange
25
+ date = date.start || date.stop
26
+ end
27
+
28
+ edtf_date = date.date
29
+
30
+ if edtf_date.is_a?(EDTF::Interval)
31
+ edtf_date.from.year
32
+ else
33
+ edtf_date.year
34
+ end
27
35
  end
28
36
 
29
37
  # return a single string intended for lexical sorting for pub date
@@ -31,39 +39,19 @@ module Stanford
31
39
  # look for a keyDate and use it if there is one; otherwise pick earliest date
32
40
  # @param [Boolean] ignore_approximate true if approximate dates (per qualifier attribute) should be ignored; false if approximate dates should be included
33
41
  # @return [String] single String containing publication year for lexical sorting
34
- # @note for string sorting 5 B.C. = -5 => -995; 6 B.C. => -994, so 6 B.C. sorts before 5 B.C.
42
+ # @note for string sorting 5 BCE = -5 => -995; 6 BCE => -994, so 6 BCE sorts before 5 BCE
35
43
  # @deprecated use pub_year_int
36
- def pub_year_sort_str(fields = [:dateIssued, :dateCreated, :dateCaptured], ignore_approximate: false)
37
- fields.each do |date_key|
38
- values = mods_ng_xml.origin_info.send(date_key)
39
- values = values.reject(&method(:is_approximate)) if ignore_approximate
40
-
41
- earliest_date = Stanford::Mods::OriginInfo.best_or_earliest_year(values)
42
- return earliest_date.sortable_year_string_from_date_str if earliest_date&.sortable_year_string_from_date_str
43
- end; nil
44
+ def pub_year_sort_str(ignore_approximate: false)
45
+ earliest_preferred_date(ignore_approximate: ignore_approximate)&.sort_key
44
46
  end
45
47
 
46
- # return a single string intended for display of pub year
47
- # 0 < year < 1000: add A.D. suffix
48
- # year < 0: add B.C. suffix. ('-5' => '5 B.C.', '700 B.C.' => '700 B.C.')
49
- # 195u => 195x
50
- # 19uu => 19xx
51
- # '-5' => '5 B.C.'
52
- # '700 B.C.' => '700 B.C.'
53
- # '7th century' => '7th century'
54
- # date ranges?
55
- # prefer dateIssued (any) before dateCreated (any) before dateCaptured (any)
56
- # look for a keyDate and use it if there is one; otherwise pick earliest date
48
+ # return a single string intended for display of pub year (or year range)
49
+ #
50
+ # @param [Array<Symbol>] fields array of field types to use to look for dates.
57
51
  # @param [Boolean] ignore_approximate true if approximate dates (per qualifier attribute)
58
52
  # should be ignored; false if approximate dates should be included
59
- def pub_year_display_str(fields = [:dateIssued, :dateCreated, :dateCaptured], ignore_approximate: false)
60
- fields.each do |date_key|
61
- values = mods_ng_xml.origin_info.send(date_key)
62
- values = values.reject(&method(:is_approximate)) if ignore_approximate
63
-
64
- earliest_date = Stanford::Mods::OriginInfo.best_or_earliest_year(values)
65
- return earliest_date.date_str_for_display if earliest_date&.date_str_for_display
66
- end; nil
53
+ def pub_year_display_str(ignore_approximate: false)
54
+ earliest_preferred_date(ignore_approximate: ignore_approximate)&.decoded_value(allowed_precisions: [:year, :decade, :century], ignore_unparseable: true, display_original_text: false)
67
55
  end
68
56
 
69
57
  # @return [Array<Stanford::Mods::Imprint>] array of imprint objects
@@ -81,32 +69,39 @@ module Stanford
81
69
  imprints.map(&:display_str).reject(&:empty?).join('; ')
82
70
  end
83
71
 
84
- # remove Elements from NodeSet if they have a qualifier attribute of 'approximate' or 'questionable'
85
- # @param [Nokogiri::XML::Element] node the date element
86
- # @return [Boolean]
87
- # @private
88
- def is_approximate(node)
89
- qualifier = node["qualifier"] if node.respond_to?('[]')
90
- qualifier == 'approximate' || qualifier == 'questionable'
91
- end
72
+ private
73
+
74
+ # The rules for which date to pick is a little complicated:
75
+ #
76
+ # 1) Examine the date elements of the provided fields.
77
+ # 2) Discard any we can't parse a year out of.
78
+ # 3) (if ignore_approximate is true, used only by exhibits for Feigenbaum), throw out any qualified dates (or ranges if either the start or end is qualified)
79
+ # 4) If that set of date elements has elements with a keyDate, prefer those.
80
+ # 5) If there were encoded dates, prefer those.
81
+ # 6) Choose the earliest date (or starting date of a range).
82
+ #
83
+ # Finally, format the date or range of an encoded date, or just pluck out the year from an unencoded one.
84
+ def earliest_preferred_date(fields: [:dateIssued, :dateCreated, :dateCaptured], ignore_approximate: false)
85
+ local_imprints = imprints
86
+
87
+ fields.each do |field_name|
88
+ potential_dates = local_imprints.flat_map do |imprint|
89
+ dates = imprint.dates([field_name])
90
+ dates = dates.select(&:parsed_date?)
91
+ dates = dates.reject(&:qualified?) if ignore_approximate
92
+
93
+ dates
94
+ end
92
95
 
93
- # get earliest parseable year from the passed date elements
94
- # @param [Array<Nokogiri::XML::Element>] date_el_array the elements from which to select a pub date
95
- # @return [Stanford::Mods::DateParsing]
96
- def self.best_or_earliest_year(date_el_array)
97
- key_dates, other_dates = date_el_array.partition { |node| node['keyDate'] == 'yes' }
96
+ preferred_dates = potential_dates.select(&:key_date?).presence || potential_dates
97
+ best_dates = (preferred_dates.select { |x| x.encoding.present? }.presence || preferred_dates)
98
98
 
99
- sortable_dates = key_dates.map { |x| DateParsing.new(x) }.select(&:sortable_year_string_from_date_str)
100
- sortable_dates = other_dates.map { |x| DateParsing.new(x) }.select(&:sortable_year_string_from_date_str) if sortable_dates.empty?
101
- results = {}
99
+ earliest_date = best_dates.min_by(&:sort_key)
102
100
 
103
- # this is a little weird; instead of just the earliest sorting date, if there are multiple
104
- # dates with the same sort key, we want to make sure we get the last occurring one?
105
- sortable_dates.each do |v|
106
- results[v.sortable_year_string_from_date_str] = v
101
+ return earliest_date if earliest_date
107
102
  end
108
103
 
109
- results[results.keys.min]
104
+ nil
110
105
  end
111
106
  end # class Record
112
107
  end
@@ -65,11 +65,14 @@ module Stanford
65
65
  # @param [String] point coordinate point in degrees notation
66
66
  # @return [Float] converted value in decimal notation
67
67
  def coord_to_decimal(point)
68
- regex = /(?<dir>[NESW])\s*(?<deg>\d+)[°⁰º](?:(?<min>\d+)[ʹ'])?(?:(?<sec>\d+)[ʺ"])?/
68
+ regex = Regexp.union(
69
+ /(?<dir>[NESW])\s*(?<deg>\d+)[°⁰º](?:(?<min>\d+)[ʹ'])?(?:(?<sec>\d+)[ʺ"])?/,
70
+ /^\s*(?<dir>[NESW])\s*(?<deg>\d+(?:[.]\d+)?)\s*$/
71
+ )
69
72
  match = regex.match(point)
70
73
  return Float::INFINITY unless match
71
74
 
72
- dec = match['deg'].to_i
75
+ dec = match['deg'].to_f
73
76
  dec += match['min'].to_f / 60
74
77
  dec += match['sec'].to_f / 60 / 60
75
78
  dec = -1 * dec if match['dir'] == 'W' || match['dir'] == 'S'
@@ -35,6 +35,17 @@ module Stanford
35
35
  ed_place_pub_dates
36
36
  end
37
37
 
38
+ # array of parsed but unformattted date values, for a given list of
39
+ # elements to pull data from
40
+ def dates(date_field_keys = [:dateIssued, :dateCreated, :dateCaptured, :copyrightDate])
41
+ date_field_keys.map do |date_field|
42
+ next unless element.respond_to?(date_field)
43
+
44
+ date_elements = element.send(date_field)
45
+ parse_dates(date_elements) if date_elements.present?
46
+ end.compact.flatten
47
+ end
48
+
38
49
  private
39
50
 
40
51
  def compact_and_join_with_delimiter(values, delimiter)
@@ -117,22 +128,10 @@ module Stanford
117
128
  # DATE processing methods ------
118
129
 
119
130
  def date_str
120
- date_vals = origin_info_date_vals
131
+ date_vals = unique_dates_for_display(dates).map(&:qualified_value)
121
132
  return if date_vals.empty?
122
- date_vals.map(&:strip).join(' ')
123
- end
124
-
125
- def origin_info_date_vals
126
- date_field_keys.map do |date_field|
127
- next unless element.respond_to?(date_field)
128
-
129
- date_elements = element.send(date_field)
130
- parse_dates(date_elements) if date_elements.present?
131
- end.compact.flatten
132
- end
133
133
 
134
- def date_field_keys
135
- [:dateIssued, :dateCreated, :dateCaptured, :copyrightDate]
134
+ date_vals.map(&:strip).join(' ')
136
135
  end
137
136
 
138
137
  class DateValue
@@ -148,26 +147,87 @@ module Stanford
148
147
  text.present? && !['9999', '0000-00-00', 'uuuu'].include?(text.strip)
149
148
  end
150
149
 
150
+ def key_date?
151
+ value.key?
152
+ end
153
+
154
+ def qualified?
155
+ qualifier.present?
156
+ end
157
+
158
+ def parsed_date?
159
+ date.present?
160
+ end
161
+
162
+ def sort_key
163
+ year = if date.is_a?(EDTF::Interval)
164
+ date.from.year
165
+ else
166
+ date.year
167
+ end
168
+
169
+ str = if year < 1
170
+ (-1 * year - 1000).to_s
171
+ else
172
+ year.to_s
173
+ end
174
+
175
+ case value.precision
176
+ when :decade
177
+ str[0..2] + "-"
178
+ when :century
179
+ str[0..1] + "--"
180
+ else
181
+ str.rjust(4, "0")
182
+ end
183
+ end
184
+
151
185
  # Element text reduced to digits and hyphen. Captures date ranges and
152
- # negative (B.C.) dates. Used for comparison/deduping.
186
+ # negative (BCE) dates. Used for comparison/deduping.
153
187
  def base_value
154
188
  if text =~ /^\[?1\d{3}-\d{2}\??\]?$/
155
189
  return text.sub(/(\d{2})(\d{2})-(\d{2})/, '\1\2-\1\3')
156
190
  end
157
191
 
158
- text.gsub(/(?<![\d])(\d{1,3})([xu-]{1,3})/i) { "#{$1}#{'0' * $2.length}"}.scan(/[\d-]/).join
192
+ text.gsub(/(?<![\d])(\d{1,3})([xu-]{1,3})/i) { "#{Regexp.last_match(1)}#{'0' * Regexp.last_match(2).length}" }.scan(/[\d-]/).join
159
193
  end
160
194
 
161
195
  # Decoded version of the date, if it was encoded. Strips leading zeroes.
162
- def decoded_value
196
+ def decoded_value(allowed_precisions: [:day, :month, :year, :decade, :century], ignore_unparseable: false, display_original_text: true)
197
+ return if ignore_unparseable && !date
163
198
  return text.strip unless date
164
199
 
165
- unless encoding.present?
166
- return text.strip unless text =~ /^-?\d+$/ || text =~ /^[\dXxu?-]{4}$/
200
+ if display_original_text
201
+ unless encoding.present?
202
+ return text.strip unless text =~ /^-?\d+$/ || text =~ /^[\dXxu?-]{4}$/
203
+ end
167
204
  end
168
205
 
169
- # Delegate to the appropriate decoding method, if any
170
- case value.precision
206
+ if date.is_a?(EDTF::Interval)
207
+ if value.precision == :century || value.precision == :decade
208
+ return format_date(date, value.precision, allowed_precisions)
209
+ end
210
+
211
+ range = [
212
+ format_date(date.min, date.min.precision, allowed_precisions),
213
+ format_date(date.max, date.max.precision, allowed_precisions)
214
+ ].uniq.compact
215
+
216
+ return text.strip if range.empty?
217
+
218
+ range.join(' - ')
219
+ else
220
+ format_date(date, value.precision, allowed_precisions) || text.strip
221
+ end
222
+ end
223
+
224
+ # Returns the date in the format specified by the precision.
225
+ # Allowed_precisions should be ordered by granularity and supports e.g.
226
+ # getting a year precision when the actual date is more precise.
227
+ def format_date(date, precision, allowed_precisions)
228
+ precision = allowed_precisions.first unless allowed_precisions.include?(precision)
229
+
230
+ case precision
171
231
  when :day
172
232
  date.strftime('%B %e, %Y')
173
233
  when :month
@@ -175,41 +235,54 @@ module Stanford
175
235
  when :year
176
236
  year = date.year
177
237
  if year < 1
178
- "#{year.abs + 1} B.C."
179
- # Any dates before the year 1000 are explicitly marked A.D.
238
+ "#{year.abs + 1} BCE"
239
+ # Any dates before the year 1000 are explicitly marked CE
180
240
  elsif year > 1 && year < 1000
181
- "#{year} A.D."
241
+ "#{year} CE"
182
242
  else
183
243
  year.to_s
184
244
  end
185
- when :century
186
- return "#{(date.to_s[0..1].to_i + 1).ordinalize} century"
187
245
  when :decade
188
- return "#{date.year}s"
189
- else
190
- text.strip
246
+ "#{date.year}s"
247
+ when :century
248
+ if date.year.negative?
249
+ "#{((date.year / 100).abs + 1).ordinalize} century BCE"
250
+ else
251
+ "#{((date.year / 100) + 1).ordinalize} century"
252
+ end
191
253
  end
192
254
  end
193
255
 
194
- # Decoded date with "B.C." or "A.D." and qualifier markers. See (outdated):
256
+ # Decoded date with "BCE" or "CE" and qualifier markers. See (outdated):
195
257
  # https://consul.stanford.edu/display/chimera/MODS+display+rules#MODSdisplayrules-3b.%3CoriginInfo%3E
196
258
  def qualified_value
197
- date = decoded_value
198
-
199
- return "[ca. #{date}]" if qualifier == 'approximate'
200
- return "[#{date}?]" if qualifier == 'questionable'
201
- return "[#{date}]" if qualifier == 'inferred'
202
-
203
- date
259
+ qualified_format = case qualifier
260
+ when 'approximate'
261
+ '[ca. %s]'
262
+ when 'questionable'
263
+ '[%s?]'
264
+ when 'inferred'
265
+ '[%s]'
266
+ else
267
+ '%s'
268
+ end
269
+
270
+ format(qualified_format, decoded_value)
204
271
  end
205
272
  end
206
273
 
207
274
  class DateRange
275
+ attr_reader :start, :stop
276
+
208
277
  def initialize(start: nil, stop: nil)
209
278
  @start = start
210
279
  @stop = stop
211
280
  end
212
281
 
282
+ def sort_key
283
+ @start&.sort_key || @stop&.sort_key
284
+ end
285
+
213
286
  # Base value as hyphen-joined string. Used for comparison/deduping.
214
287
  def base_value
215
288
  "#{@start&.base_value}-#{@stop&.base_value}"
@@ -225,12 +298,34 @@ module Stanford
225
298
  @start&.encoding || @stop&.encoding
226
299
  end
227
300
 
228
- # Decoded dates with "B.C." or "A.D." and qualifier markers applied to
301
+ # If either date in the range is qualified in any way
302
+ def qualified?
303
+ @start&.qualified? || @stop&.qualified?
304
+ end
305
+
306
+ # If either date in the range is a key date
307
+ def key_date?
308
+ @start&.key_date? || @stop&.key_date?
309
+ end
310
+
311
+ # If either date in the range was successfully parsed
312
+ def parsed_date?
313
+ @start&.parsed_date? || @stop&.parsed_date?
314
+ end
315
+
316
+ def decoded_value(**kwargs)
317
+ [
318
+ @start&.decoded_value(**kwargs),
319
+ @stop&.decoded_value(**kwargs)
320
+ ].uniq.join(' - ')
321
+ end
322
+
323
+ # Decoded dates with "BCE" or "CE" and qualifier markers applied to
229
324
  # the entire range, or individually if dates differ.
230
325
  def qualified_value
231
326
  if @start&.qualifier == @stop&.qualifier
232
327
  qualifier = @start&.qualifier || @stop&.qualifier
233
- date = "#{@start&.decoded_value} - #{@stop&.decoded_value}"
328
+ date = decoded_value
234
329
  return "[ca. #{date}]" if qualifier == 'approximate'
235
330
  return "[#{date}?]" if qualifier == 'questionable'
236
331
  return "[#{date}]" if qualifier == 'inferred'
@@ -245,15 +340,19 @@ module Stanford
245
340
  def parse_dates(elements)
246
341
  # convert to DateValue objects and keep only valid ones
247
342
  dates = elements.map(&:as_object).flatten.map { |element| DateValue.new(element) }.select(&:valid?)
343
+
248
344
  # join any date ranges into DateRange objects
249
- point, nonpoint = dates.partition(&:point)
250
- if point.any?
251
- range = DateRange.new(start: point.find { |date| date.point == 'start' },
252
- stop: point.find { |date| date.point == 'end' })
253
- nonpoint.unshift(range)
345
+ point_dates, dates = dates.partition(&:point)
346
+ if point_dates.any?
347
+ range = DateRange.new(start: point_dates.find { |date| date.point == 'start' },
348
+ stop: point_dates.find { |date| date.point == 'end' })
349
+ dates.unshift(range)
350
+ else
351
+ dates
254
352
  end
255
- dates = nonpoint
353
+ end
256
354
 
355
+ def unique_dates_for_display(dates)
257
356
  # ensure dates are unique with respect to their base values
258
357
  dates = dates.group_by(&:base_value).map do |_value, group|
259
358
  next group.first if group.one?
@@ -279,10 +378,7 @@ module Stanford
279
378
  date_ranges.select { |r| r.base_values.include?(date.base_value) }
280
379
  end
281
380
 
282
- dates = dates - duplicated_ranges
283
-
284
- # output formatted dates with qualifiers, A.D./B.C., etc.
285
- dates.map(&:qualified_value)
381
+ dates - duplicated_ranges
286
382
  end
287
383
  end
288
384
  end
@@ -1,6 +1,6 @@
1
1
  module Stanford
2
2
  module Mods
3
3
  # this is the Ruby Gem version
4
- VERSION = '3.0.0'.freeze
4
+ VERSION = '3.3.0'.freeze
5
5
  end
6
6
  end
data/lib/stanford-mods.rb CHANGED
@@ -1,7 +1,6 @@
1
1
  require 'active_support'
2
2
  require 'active_support/core_ext/integer/inflections'
3
3
  require 'mods'
4
- require 'stanford-mods/date_parsing'
5
4
  require 'stanford-mods/coordinate'
6
5
  require 'stanford-mods/imprint'
7
6
  require 'stanford-mods/vocabularies/searchworks_languages'
@@ -18,4 +17,4 @@ require 'stanford-mods/version'
18
17
  module Stanford
19
18
  module Mods
20
19
  end
21
- end
20
+ end
@@ -700,7 +700,7 @@ SEARCHWORKS_IMPRINT_DATA = {
700
700
  <dateIssued encoding="marc" point="start" keyDate="yes">0850</dateIssued>
701
701
  <dateIssued encoding="marc" point="end">1499</dateIssued>
702
702
  <issuance>monographic</issuance>' +
703
- mods_origin_info_end_str => 'California, 850 A.D. - 1499',
703
+ mods_origin_info_end_str => 'California, 850 CE - 1499',
704
704
  # coll rec bd001pp3337
705
705
  # coll rec fn508pj9953
706
706
  mods_origin_info_start_str +
@@ -728,7 +728,7 @@ SEARCHWORKS_IMPRINT_DATA = {
728
728
  <dateCreated point="start" qualifier="approximate" keyDate="yes">850</dateCreated>
729
729
  <dateCreated point="end" qualifier="approximate">1499</dateCreated>
730
730
  <issuance>monographic</issuance>' +
731
- mods_origin_info_end_str => 'England, [ca. 850 A.D. - 1499]',
731
+ mods_origin_info_end_str => 'England, [ca. 850 CE - 1499]',
732
732
  # sc582cv9633
733
733
  mods_origin_info_start_str +
734
734
  '<dateCreated keydate="yes">1314</dateCreated>
@@ -1055,7 +1055,7 @@ SEARCHWORKS_IMPRINT_DATA = {
1055
1055
  <originInfo>
1056
1056
  <dateCreated encoding="edtf" point="start" keyDate="yes">-18</dateCreated>
1057
1057
  <dateCreated encoding="edtf" point="end">-17</dateCreated>' +
1058
- mods_origin_info_end_str => 'Spain; 19 B.C. - 18 B.C.',
1058
+ mods_origin_info_end_str => 'Spain; 19 BCE - 18 BCE',
1059
1059
  # bb408km1389
1060
1060
  mods_origin_info_start_str +
1061
1061
  ' <place supplied="yes">
@@ -1065,7 +1065,7 @@ SEARCHWORKS_IMPRINT_DATA = {
1065
1065
  <originInfo>
1066
1066
  <dateCreated encoding="edtf" point="start" keyDate="yes">-1</dateCreated>
1067
1067
  <dateCreated encoding="edtf" point="end">11</dateCreated>' +
1068
- mods_origin_info_end_str => 'Lyon (France); 2 B.C. - 11 A.D.',
1068
+ mods_origin_info_end_str => 'Lyon (France); 2 BCE - 11 CE',
1069
1069
  # cs470ng8064
1070
1070
  mods_origin_info_start_str +
1071
1071
  ' <place supplied="yes">
@@ -1075,7 +1075,7 @@ SEARCHWORKS_IMPRINT_DATA = {
1075
1075
  <originInfo>
1076
1076
  <dateCreated encoding="edtf" point="start" keyDate="yes">-1</dateCreated>
1077
1077
  <dateCreated encoding="edtf" point="end">0</dateCreated>' +
1078
- mods_origin_info_end_str => 'Antioch (Turkey) (?); 2 B.C. - 1 B.C.',
1078
+ mods_origin_info_end_str => 'Antioch (Turkey) (?); 2 BCE - 1 BCE',
1079
1079
  # vh834jh5059
1080
1080
  mods_origin_info_start_str +
1081
1081
  ' <place supplied="yes">
@@ -1085,7 +1085,7 @@ SEARCHWORKS_IMPRINT_DATA = {
1085
1085
  <originInfo>
1086
1086
  <dateCreated encoding="edtf" point="start" keyDate="yes">13</dateCreated>
1087
1087
  <dateCreated encoding="edtf" point="end">14</dateCreated>' +
1088
- mods_origin_info_end_str => 'Lyon (France); 13 A.D. - 14 A.D.',
1088
+ mods_origin_info_end_str => 'Lyon (France); 13 CE - 14 CE',
1089
1089
  # sk424bh9379
1090
1090
  mods_origin_info_start_str +
1091
1091
  ' <place supplied="yes">
@@ -1095,7 +1095,7 @@ SEARCHWORKS_IMPRINT_DATA = {
1095
1095
  <originInfo>
1096
1096
  <dateCreated encoding="edtf" point="start" keyDate="yes">34</dateCreated>
1097
1097
  <dateCreated encoding="edtf" point="end">35</dateCreated>' +
1098
- mods_origin_info_end_str => 'Alexandria (Egypt); 34 A.D. - 35 A.D.'
1098
+ mods_origin_info_end_str => 'Alexandria (Egypt); 34 CE - 35 CE'
1099
1099
  },
1100
1100
  # rigler
1101
1101
  'rumsey' =>
@@ -1235,7 +1235,7 @@ SEARCHWORKS_IMPRINT_DATA = {
1235
1235
  '<dateIssued encoding="marc" point="start">800</dateIssued>
1236
1236
  <dateIssued encoding="marc" point="end">1899</dateIssued>
1237
1237
  <issuance>monographic</issuance>' +
1238
- mods_origin_info_end_str => '800 A.D. - 1899',
1238
+ mods_origin_info_end_str => '800 CE - 1899',
1239
1239
  # dc882bs3541
1240
1240
  mods_origin_info_start_str +
1241
1241
  '<place>
@@ -1245,7 +1245,7 @@ SEARCHWORKS_IMPRINT_DATA = {
1245
1245
  <dateCreated encoding="w3cdtf" point="end" qualifier="approximate">0799</dateCreated>
1246
1246
  <dateCreated encoding="w3cdtf" keyDate="yes"/>
1247
1247
  <issuance>monographic</issuance>' +
1248
- mods_origin_info_end_str => 'Egypt, [ca. 700 A.D. - 799 A.D.]',
1248
+ mods_origin_info_end_str => 'Egypt, [ca. 700 CE - 799 CE]',
1249
1249
  # hg026ds6978
1250
1250
  mods_origin_info_start_str +
1251
1251
  '<place>
@@ -1253,7 +1253,7 @@ SEARCHWORKS_IMPRINT_DATA = {
1253
1253
  </place>
1254
1254
  <dateCreated encoding="w3cdtf" keyDate="yes">0816</dateCreated>
1255
1255
  <issuance>monographic</issuance>' +
1256
- mods_origin_info_end_str => 'Central Arab lands, 816 A.D.',
1256
+ mods_origin_info_end_str => 'Central Arab lands, 816 CE',
1257
1257
  # ch617yk2621
1258
1258
  mods_origin_info_start_str +
1259
1259
  '<place>
@@ -1273,7 +1273,7 @@ SEARCHWORKS_IMPRINT_DATA = {
1273
1273
  <dateCreated encoding="w3cdtf" point="end" qualifier="approximate">1000</dateCreated>
1274
1274
  <dateCreated encoding="w3cdtf" keyDate="yes"/>
1275
1275
  <issuance>monographic</issuance>' +
1276
- mods_origin_info_end_str => 'Byzantine Empire, [ca. 950 A.D. - 1000]',
1276
+ mods_origin_info_end_str => 'Byzantine Empire, [ca. 950 CE - 1000]',
1277
1277
  # hj537kj5737
1278
1278
  mods_origin_info_start_str +
1279
1279
  '<dateIssued>15th century CE</dateIssued>