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 +4 -4
- data/lib/stanford-mods/concerns/origin_info.rb +53 -58
- data/lib/stanford-mods/coordinate.rb +5 -2
- data/lib/stanford-mods/imprint.rb +145 -49
- data/lib/stanford-mods/version.rb +1 -1
- data/lib/stanford-mods.rb +1 -2
- data/spec/fixtures/searchworks_imprint_data.rb +11 -11
- data/spec/imprint_spec.rb +35 -10
- data/spec/lib/stanford-mods/coordinate_spec.rb +3 -5
- data/spec/origin_info_spec.rb +560 -208
- data/spec/sw_publication_spec.rb +0 -24
- data/stanford-mods.gemspec +1 -1
- metadata +5 -10
- data/lib/stanford-mods/date_parsing.rb +0 -70
- data/spec/fixtures/searchworks_pub_date_data.rb +0 -979
- data/spec/fixtures/spotlight_pub_date_data.rb +0 -316
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c9c63c6699eef72da80bbf9e15d892248dfc21a7550588aac09843ef26d1869f
|
4
|
+
data.tar.gz: f820451452017ec653c4eabd48d19cb23a36fcfafbad814272dd26c9cc9b9d42
|
5
5
|
SHA512:
|
6
|
-
metadata.gz: '
|
7
|
-
data.tar.gz:
|
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
|
19
|
-
def pub_year_int(
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
end
|
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
|
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(
|
37
|
-
|
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
|
-
#
|
48
|
-
#
|
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(
|
60
|
-
|
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
|
-
|
85
|
-
|
86
|
-
#
|
87
|
-
#
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
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
|
-
|
94
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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 =
|
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'].
|
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 =
|
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
|
-
|
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 (
|
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) { "#{
|
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
|
-
|
166
|
-
|
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
|
-
|
170
|
-
|
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}
|
179
|
-
# Any dates before the year 1000 are explicitly marked
|
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}
|
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
|
-
|
189
|
-
|
190
|
-
|
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 "
|
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
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
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
|
-
#
|
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 =
|
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
|
-
|
250
|
-
if
|
251
|
-
range = DateRange.new(start:
|
252
|
-
stop:
|
253
|
-
|
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
|
-
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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>
|