cff 0.4.0 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
data/lib/cff/reference.rb CHANGED
@@ -1,4 +1,6 @@
1
- # Copyright (c) 2018 Robert Haines.
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright (c) 2018-2021 The Ruby Citation File Format Developers.
2
4
  #
3
5
  # Licensed under the Apache License, Version 2.0 (the "License");
4
6
  # you may not use this file except in compliance with the License.
@@ -19,25 +21,95 @@ module CFF
19
21
  # software itself, e.g., a software paper describing the abstract concepts of
20
22
  # the software, a paper describing an algorithm that has been implemented in
21
23
  # the software version, etc.
24
+ #
25
+ # Reference implements all of the fields listed in the
26
+ # [CFF standard](https://citation-file-format.github.io/). Complex
27
+ # fields - `authors`, `contact`, `editors`, `editors_series`, `identifiers`,
28
+ # `keywords`, `languages`, `patent_states`, `recipients`, `senders` and
29
+ # `translators` - are documented below. All other fields are simple strings
30
+ # and can be set as such. A field which has not been set will return the
31
+ # empty string. The simple fields are (with defaults in parentheses):
32
+ #
33
+ # * `abbreviation`
34
+ # * `abstract`
35
+ # * `collection_doi`
36
+ # * `collection_title`
37
+ # * `collection_type`
38
+ # * `commit`
39
+ # * `conference`
40
+ # * `copyright`
41
+ # * `data-type`
42
+ # * `database`
43
+ # * `database_provider`
44
+ # * `date_accessed` - *Note:* returns a `Date` object
45
+ # * `date_downloaded` - *Note:* returns a `Date` object
46
+ # * `date_published` - *Note:* returns a `Date` object
47
+ # * `date_released` - *Note:* returns a `Date` object
48
+ # * `department`
49
+ # * `doi`
50
+ # * `edition`
51
+ # * `end`
52
+ # * `entry`
53
+ # * `filename`
54
+ # * `format`
55
+ # * `institution`
56
+ # * `isbn`
57
+ # * `issn`
58
+ # * `issue`
59
+ # * `issue_date` - *Note:* returns a `Date` object
60
+ # * `issue_title`
61
+ # * `journal`
62
+ # * `license` - *Note:* see documentation for `license =` below
63
+ # * `license_url`
64
+ # * `loc_end`
65
+ # * `loc_start`
66
+ # * `location`
67
+ # * `medium`
68
+ # * `month`
69
+ # * `nihmsid`
70
+ # * `notes`
71
+ # * `number`
72
+ # * `number_volumes`
73
+ # * `pages`
74
+ # * `pmcid`
75
+ # * `publisher`
76
+ # * `repository`
77
+ # * `repository_code`
78
+ # * `repository_artifact`
79
+ # * `scope`
80
+ # * `section`
81
+ # * `start`
82
+ # * `status` - *Note:* see documentation for `status =` below
83
+ # * `thesis_type`
84
+ # * `title`
85
+ # * `type` - *Note:* see documentation for `type =` below
86
+ # * `url`
87
+ # * `version`
88
+ # * `volume`
89
+ # * `volume_title`
90
+ # * `year`
91
+ # * `year_original`
22
92
  class Reference < ModelPart
23
93
 
94
+ include Licensable
95
+
24
96
  ALLOWED_FIELDS = [
25
97
  'abbreviation', 'abstract', 'authors', 'collection-doi',
26
98
  'collection-title', 'collection-type', 'commit', 'conference', 'contact',
27
99
  'copyright', 'data-type', 'database', 'database-provider',
28
100
  'date-accessed', 'date-downloaded', 'date-published', 'date-released',
29
101
  'department', 'doi', 'edition', 'editors', 'editors-series', 'end',
30
- 'entry', 'filename', 'institution', 'isbn', 'issn', 'issue', 'issue-date',
31
- 'issue-title', 'journal', 'keywords', 'license', 'license-url', 'loc-end',
32
- 'loc-start', 'location', 'medium', 'month', 'nihmsid', 'notes', 'number',
33
- 'number-volumes', 'pages', 'patent-states', 'pmcid', 'publisher',
34
- 'recipients', 'repository', 'repository-code', 'repository-artifact',
35
- 'scope', 'section', 'senders', 'start', 'status', 'thesis-type', 'title',
36
- 'translators', 'type', 'url', 'version', 'volume', 'volume-title', 'year',
37
- 'year-original'
102
+ 'entry', 'filename', 'identifiers', 'institution', 'isbn', 'issn',
103
+ 'issue', 'issue-date', 'issue-title', 'journal', 'keywords', 'license',
104
+ 'license-url', 'loc-end', 'loc-start', 'location', 'medium', 'month',
105
+ 'nihmsid', 'notes', 'number', 'number-volumes', 'pages', 'patent-states',
106
+ 'pmcid', 'publisher', 'recipients', 'repository', 'repository-code',
107
+ 'repository-artifact', 'scope', 'section', 'senders', 'start', 'status',
108
+ 'thesis-type', 'title', 'translators', 'type', 'url', 'version',
109
+ 'volume', 'volume-title', 'year', 'year-original'
38
110
  ].freeze # :nodoc:
39
111
 
40
- # The [defined set of reference types](https://citation-file-format.github.io/1.0.3/specifications/#/reference-types).
112
+ # The [defined set of reference types](https://github.com/citation-file-format/citation-file-format#reference-types).
41
113
  REFERENCE_TYPES = [
42
114
  'art', 'article', 'audiovisual', 'bill', 'blog', 'book', 'catalogue',
43
115
  'conference', 'conference-paper', 'data', 'database', 'dictionary',
@@ -51,7 +123,7 @@ module CFF
51
123
  'thesis', 'unpublished', 'video', 'website'
52
124
  ].freeze
53
125
 
54
- # The [defined set of reference status types](https://citation-file-format.github.io/1.0.3/specifications/#/status-strings).
126
+ # The [defined set of reference status types](https://github.com/citation-file-format/citation-file-format#status-strings).
55
127
  REFERENCE_STATUS_TYPES = [
56
128
  'abstract', 'advance-online', 'in-preparation', 'in-press',
57
129
  'pre-print', 'submitted'
@@ -59,15 +131,18 @@ module CFF
59
131
 
60
132
  # :call-seq:
61
133
  # new(title) -> Reference
134
+ # new(title) { |ref| block } -> Reference
62
135
  # new(title, type) -> Reference
136
+ # new(title, type) { |ref| block } -> Reference
63
137
  #
64
138
  # Create a new Reference with the supplied title and, optionally, type.
65
139
  # If type is not given, or is not one of the
66
- # [defined set of reference types](https://citation-file-format.github.io/1.0.3/specifications/#/reference-types),
140
+ # [defined set of reference types](https://github.com/citation-file-format/citation-file-format#reference-types),
67
141
  # 'generic' will be used by default.
68
- def initialize(param, *more)
142
+ def initialize(param, *more) # rubocop:disable Metrics/AbcSize
69
143
  if param.is_a?(Hash)
70
144
  @fields = build_model(param)
145
+ @fields.default = ''
71
146
  else
72
147
  @fields = Hash.new('')
73
148
  type = more[0] &&= more[0].downcase
@@ -76,9 +151,13 @@ module CFF
76
151
  end
77
152
 
78
153
  [
79
- 'authors', 'contact', 'editors', 'editors-series', 'keywords',
80
- 'patent-states', 'recipients', 'senders', 'translators'
81
- ].each { |field| @fields[field] = [] if @fields[field].empty? }
154
+ 'authors', 'contact', 'editors', 'editors-series', 'identifiers',
155
+ 'keywords', 'patent-states', 'recipients', 'senders', 'translators'
156
+ ].each do |field|
157
+ @fields[field] = [] if @fields[field].empty?
158
+ end
159
+
160
+ yield self if block_given?
82
161
  end
83
162
 
84
163
  # :call-seq:
@@ -91,6 +170,7 @@ module CFF
91
170
  @fields['languages'] = [] if @fields['languages'].empty?
92
171
  lang = LanguageList::LanguageInfo.find(lang)
93
172
  return if lang.nil?
173
+
94
174
  lang = lang.iso_639_3
95
175
  @fields['languages'] << lang unless @fields['languages'].include? lang
96
176
  end
@@ -111,17 +191,6 @@ module CFF
111
191
  @fields['languages'].empty? ? [] : @fields['languages'].dup
112
192
  end
113
193
 
114
- # :call-seq:
115
- # license = license
116
- #
117
- # Set the license of this Reference. Only licenses that conform to the
118
- # [SPDX License List](https://spdx.org/licenses/) will be accepted. If you
119
- # need specify a different license you should set `license-url` with a link
120
- # to the license instead.
121
- def license=(lic)
122
- @fields['license'] = lic unless SpdxLicenses.lookup(lic).nil?
123
- end
124
-
125
194
  # :call-seq:
126
195
  # date_accessed = date
127
196
  #
@@ -166,19 +235,19 @@ module CFF
166
235
  @fields['date-released'] = date
167
236
  end
168
237
 
169
- # :call-seq:
170
- # format -> String
171
- #
172
238
  # Returns the format of this Reference.
173
- def format
239
+ #
240
+ # This method is explicitly defined to override the private format method
241
+ # that all objects seem to have.
242
+ def format # :nodoc:
174
243
  @fields['format']
175
244
  end
176
245
 
177
- # :call-seq:
178
- # format = format
179
- #
180
246
  # Sets the format of this Reference.
181
- def format=(fmt)
247
+ #
248
+ # This method is explicitly defined to override the private format method
249
+ # that all objects seem to have.
250
+ def format=(fmt) # :nodoc:
182
251
  @fields['format'] = fmt
183
252
  end
184
253
 
@@ -186,9 +255,9 @@ module CFF
186
255
  # status = status
187
256
  #
188
257
  # Sets the status of this Reference. The status is restricted to a
189
- # [defined set of status types](https://citation-file-format.github.io/1.0.3/specifications/#/status-strings).
258
+ # [defined set of status types](https://github.com/citation-file-format/citation-file-format#status-strings).
190
259
  def status=(status)
191
- status.downcase!
260
+ status = status.downcase
192
261
  @fields['status'] = status if REFERENCE_STATUS_TYPES.include?(status)
193
262
  end
194
263
 
@@ -196,17 +265,17 @@ module CFF
196
265
  # type = type
197
266
  #
198
267
  # Sets the type of this Reference. The type is restricted to a
199
- # [defined set of reference types](https://citation-file-format.github.io/1.0.3/specifications/#/reference-types).
268
+ # [defined set of reference types](https://github.com/citation-file-format/citation-file-format#reference-types).
200
269
  def type=(type)
201
- type.downcase!
270
+ type = type.downcase
202
271
  @fields['type'] = type if REFERENCE_TYPES.include?(type)
203
272
  end
204
273
 
205
274
  # Override superclass #fields as References contain model parts too.
206
275
  def fields # :nodoc:
207
276
  [
208
- 'authors', 'contact', 'editors', 'editors-series', 'recipients',
209
- 'senders', 'translators'
277
+ 'authors', 'contact', 'editors', 'editors-series', 'identifiers',
278
+ 'recipients', 'senders', 'translators'
210
279
  ].each do |field|
211
280
  normalize_modelpart_array!(@fields[field])
212
281
  end
@@ -221,7 +290,18 @@ module CFF
221
290
  'authors', 'contact', 'editors', 'editors-series', 'recipients',
222
291
  'senders', 'translators'
223
292
  ].each do |field|
224
- build_actor_collection!(fields[field])
293
+ build_actor_collection!(fields[field]) if fields.include?(field)
294
+ end
295
+
296
+ [
297
+ 'conference', 'database-provider', 'institution', 'location',
298
+ 'publisher'
299
+ ].each do |field|
300
+ fields[field] &&= Entity.new(fields[field])
301
+ end
302
+
303
+ (fields['identifiers'] || []).map! do |i|
304
+ Identifier.new(i)
225
305
  end
226
306
 
227
307
  fields
@@ -324,6 +404,25 @@ module CFF
324
404
  #
325
405
  # Series editors can be a Person or Entity.
326
406
 
407
+ ##
408
+ # :method: identifiers
409
+ # :call-seq:
410
+ # identifiers -> Array
411
+ #
412
+ # Return the list of identifiers for this citation. To add a identifier to
413
+ # the list, use:
414
+ #
415
+ # ```
416
+ # model.identifiers << identifier
417
+ # ```
418
+
419
+ ##
420
+ # :method: identifiers=
421
+ # :call-seq:
422
+ # identifiers = array_of_identifiers -> Array
423
+ #
424
+ # Replace the list of identifiers for this citation.
425
+
327
426
  ##
328
427
  # :method: keywords
329
428
  # :call-seq:
data/lib/cff/util.rb CHANGED
@@ -1,4 +1,6 @@
1
- # Copyright (c) 2018 Robert Haines.
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright (c) 2018-2021 The Ruby Citation File Format Developers.
2
4
  #
3
5
  # Licensed under the Apache License, Version 2.0 (the "License");
4
6
  # you may not use this file except in compliance with the License.
@@ -12,6 +14,8 @@
12
14
  # See the License for the specific language governing permissions and
13
15
  # limitations under the License.
14
16
 
17
+ require 'rubygems'
18
+
15
19
  ##
16
20
  module CFF
17
21
 
@@ -21,6 +25,16 @@ module CFF
21
25
  module Util
22
26
  # :stopdoc:
23
27
 
28
+ def update_cff_version(version)
29
+ return '' if version.nil? || version.empty?
30
+
31
+ if Gem::Version.new(version) < Gem::Version.new(MIN_VALIDATABLE_VERSION)
32
+ MIN_VALIDATABLE_VERSION
33
+ else
34
+ version
35
+ end
36
+ end
37
+
24
38
  def method_to_field(name)
25
39
  name.tr('_', '-')
26
40
  end
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright (c) 2018-2021 The Ruby Citation File Format Developers.
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ require 'json_schema'
18
+
19
+ ##
20
+ module CFF
21
+
22
+ # Methods to validate CFF files/models against a formal schema.
23
+ module Validatable
24
+
25
+ # :nodoc:
26
+ SCHEMA = JsonSchema.parse!(SCHEMA_FILE)
27
+
28
+ # :call-seq:
29
+ # validate!(fail_fast: false)
30
+ #
31
+ # Validate a CFF file or model and raise a ValidationError upon failure.
32
+ # If an error is raised it will contain the detected validation failures
33
+ # for further inspection. Setting `fail_fast` to true will fail validation
34
+ # at the first detected failure, rather than gathering and returning all
35
+ # failures.
36
+ def validate!(fail_fast: false)
37
+ result = validate(fail_fast: fail_fast)
38
+ return if result[0]
39
+
40
+ raise ValidationError.new(result[1])
41
+ end
42
+
43
+ # :call-seq:
44
+ # validate(fail_fast: false) -> Array
45
+ #
46
+ # Validate a CFF file or model and return an array with the result. The
47
+ # result array is a two-element array, with `true`/`false` at index 0 to
48
+ # indicate pass/fail, and an array of errors at index 1 (if any).
49
+ # Setting `fail_fast` to true will fail validation at the first detected
50
+ # failure, rather than gathering and returning all failures.
51
+ def validate(fail_fast: false)
52
+ SCHEMA.validate(fields, fail_fast: fail_fast)
53
+ end
54
+ end
55
+ end
data/lib/cff/version.rb CHANGED
@@ -1,4 +1,6 @@
1
- # Copyright (c) 2018 Robert Haines.
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright (c) 2018-2021 The Ruby Citation File Format Developers.
2
4
  #
3
5
  # Licensed under the Apache License, Version 2.0 (the "License");
4
6
  # you may not use this file except in compliance with the License.
@@ -15,6 +17,7 @@
15
17
  ##
16
18
  module CFF
17
19
  # :nodoc:
18
- VERSION = '0.4.0'.freeze
19
- DEFAULT_SPEC_VERSION = '1.0.3'.freeze
20
+ VERSION = '0.8.0'
21
+ DEFAULT_SPEC_VERSION = '1.2.0'
22
+ MIN_VALIDATABLE_VERSION = '1.2.0'
20
23
  end
@@ -0,0 +1,1882 @@
1
+ {
2
+ "$id": "https://citation-file-format.github.io/1.2.0/schema",
3
+ "$schema": "http://json-schema.org/draft-07/schema",
4
+ "additionalProperties": false,
5
+ "definitions": {
6
+ "address": {
7
+ "description": "An address.",
8
+ "minLength": 1,
9
+ "type": "string"
10
+ },
11
+ "alias": {
12
+ "description": "An alias.",
13
+ "minLength": 1,
14
+ "type": "string"
15
+ },
16
+ "city": {
17
+ "description": "A city",
18
+ "minLength": 1,
19
+ "type": "string"
20
+ },
21
+ "commit": {
22
+ "description": "The (e.g., Git) commit hash or (e.g., Subversion) revision number of the work.",
23
+ "minLength": 1,
24
+ "type": "string"
25
+ },
26
+ "country": {
27
+ "$comment": "ISO 3166-1 alpha-2 codes can be found at https://en.wikipedia.org/wiki/ISO_3166-1",
28
+ "description": "The ISO 3166-1 alpha-2 country code for a country.",
29
+ "enum": [
30
+ "AD",
31
+ "AE",
32
+ "AF",
33
+ "AG",
34
+ "AI",
35
+ "AL",
36
+ "AM",
37
+ "AO",
38
+ "AQ",
39
+ "AR",
40
+ "AS",
41
+ "AT",
42
+ "AU",
43
+ "AW",
44
+ "AX",
45
+ "AZ",
46
+ "BA",
47
+ "BB",
48
+ "BD",
49
+ "BE",
50
+ "BF",
51
+ "BG",
52
+ "BH",
53
+ "BI",
54
+ "BJ",
55
+ "BL",
56
+ "BM",
57
+ "BN",
58
+ "BO",
59
+ "BQ",
60
+ "BR",
61
+ "BS",
62
+ "BT",
63
+ "BV",
64
+ "BW",
65
+ "BY",
66
+ "BZ",
67
+ "CA",
68
+ "CC",
69
+ "CD",
70
+ "CF",
71
+ "CG",
72
+ "CH",
73
+ "CI",
74
+ "CK",
75
+ "CL",
76
+ "CM",
77
+ "CN",
78
+ "CO",
79
+ "CR",
80
+ "CU",
81
+ "CV",
82
+ "CW",
83
+ "CX",
84
+ "CY",
85
+ "CZ",
86
+ "DE",
87
+ "DJ",
88
+ "DK",
89
+ "DM",
90
+ "DO",
91
+ "DZ",
92
+ "EC",
93
+ "EE",
94
+ "EG",
95
+ "EH",
96
+ "ER",
97
+ "ES",
98
+ "ET",
99
+ "FI",
100
+ "FJ",
101
+ "FK",
102
+ "FM",
103
+ "FO",
104
+ "FR",
105
+ "GA",
106
+ "GB",
107
+ "GD",
108
+ "GE",
109
+ "GF",
110
+ "GG",
111
+ "GH",
112
+ "GI",
113
+ "GL",
114
+ "GM",
115
+ "GN",
116
+ "GP",
117
+ "GQ",
118
+ "GR",
119
+ "GS",
120
+ "GT",
121
+ "GU",
122
+ "GW",
123
+ "GY",
124
+ "HK",
125
+ "HM",
126
+ "HN",
127
+ "HR",
128
+ "HT",
129
+ "HU",
130
+ "ID",
131
+ "IE",
132
+ "IL",
133
+ "IM",
134
+ "IN",
135
+ "IO",
136
+ "IQ",
137
+ "IR",
138
+ "IS",
139
+ "IT",
140
+ "JE",
141
+ "JM",
142
+ "JO",
143
+ "JP",
144
+ "KE",
145
+ "KG",
146
+ "KH",
147
+ "KI",
148
+ "KM",
149
+ "KN",
150
+ "KP",
151
+ "KR",
152
+ "KW",
153
+ "KY",
154
+ "KZ",
155
+ "LA",
156
+ "LB",
157
+ "LC",
158
+ "LI",
159
+ "LK",
160
+ "LR",
161
+ "LS",
162
+ "LT",
163
+ "LU",
164
+ "LV",
165
+ "LY",
166
+ "MA",
167
+ "MC",
168
+ "MD",
169
+ "ME",
170
+ "MF",
171
+ "MG",
172
+ "MH",
173
+ "MK",
174
+ "ML",
175
+ "MM",
176
+ "MN",
177
+ "MO",
178
+ "MP",
179
+ "MQ",
180
+ "MR",
181
+ "MS",
182
+ "MT",
183
+ "MU",
184
+ "MV",
185
+ "MW",
186
+ "MX",
187
+ "MY",
188
+ "MZ",
189
+ "NA",
190
+ "NC",
191
+ "NE",
192
+ "NF",
193
+ "NG",
194
+ "NI",
195
+ "NL",
196
+ "NO",
197
+ "NP",
198
+ "NR",
199
+ "NU",
200
+ "NZ",
201
+ "OM",
202
+ "PA",
203
+ "PE",
204
+ "PF",
205
+ "PG",
206
+ "PH",
207
+ "PK",
208
+ "PL",
209
+ "PM",
210
+ "PN",
211
+ "PR",
212
+ "PS",
213
+ "PT",
214
+ "PW",
215
+ "PY",
216
+ "QA",
217
+ "RE",
218
+ "RO",
219
+ "RS",
220
+ "RU",
221
+ "RW",
222
+ "SA",
223
+ "SB",
224
+ "SC",
225
+ "SD",
226
+ "SE",
227
+ "SG",
228
+ "SH",
229
+ "SI",
230
+ "SJ",
231
+ "SK",
232
+ "SL",
233
+ "SM",
234
+ "SN",
235
+ "SO",
236
+ "SR",
237
+ "SS",
238
+ "ST",
239
+ "SV",
240
+ "SX",
241
+ "SY",
242
+ "SZ",
243
+ "TC",
244
+ "TD",
245
+ "TF",
246
+ "TG",
247
+ "TH",
248
+ "TJ",
249
+ "TK",
250
+ "TL",
251
+ "TM",
252
+ "TN",
253
+ "TO",
254
+ "TR",
255
+ "TT",
256
+ "TV",
257
+ "TW",
258
+ "TZ",
259
+ "UA",
260
+ "UG",
261
+ "UM",
262
+ "US",
263
+ "UY",
264
+ "UZ",
265
+ "VA",
266
+ "VC",
267
+ "VE",
268
+ "VG",
269
+ "VI",
270
+ "VN",
271
+ "VU",
272
+ "WF",
273
+ "WS",
274
+ "YE",
275
+ "YT",
276
+ "ZA",
277
+ "ZM",
278
+ "ZW"
279
+ ],
280
+ "type": "string"
281
+ },
282
+ "date": {
283
+ "$comment": "Note to tool implementers: it is necessary to cast YAML 'date' objects to string objects when validating against this schema.",
284
+ "examples": [
285
+ "1900-01-01",
286
+ "2020-12-31"
287
+ ],
288
+ "format": "date",
289
+ "pattern": "^[0-9]{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$",
290
+ "type": "string"
291
+ },
292
+ "doi": {
293
+ "description": "The DOI of the work (i.e., 10.5281/zenodo.1003150, not the resolver URL http://doi.org/10.5281/zenodo.1003150).",
294
+ "examples": [
295
+ "10.5281/zenodo.1003150"
296
+ ],
297
+ "pattern": "^10\\.\\d{4,9}(\\.\\d+)?/[A-Za-z0-9:/_;\\-\\.\\(\\)\\[\\]\\\\]+$",
298
+ "type": "string"
299
+ },
300
+ "email": {
301
+ "description": "An email address.",
302
+ "pattern": "^[\\S]+@[\\S]+\\.[\\S]{2,}$",
303
+ "type": "string"
304
+ },
305
+ "entity": {
306
+ "additionalProperties": false,
307
+ "description": "An entity, i.e., an institution, team, research group, company, conference, etc., as opposed to a single natural person.",
308
+ "properties": {
309
+ "address": {
310
+ "$ref": "#/definitions/address",
311
+ "description": "The entity's address."
312
+ },
313
+ "alias": {
314
+ "$ref": "#/definitions/alias",
315
+ "description": "The entity's alias."
316
+ },
317
+ "city": {
318
+ "$ref": "#/definitions/city",
319
+ "description": "The entity's city."
320
+ },
321
+ "country": {
322
+ "$ref": "#/definitions/country",
323
+ "description": "The entity's country."
324
+ },
325
+ "date-end": {
326
+ "$ref": "#/definitions/date",
327
+ "description": "The entity's ending date, e.g., when the entity is a conference."
328
+ },
329
+ "date-start": {
330
+ "$ref": "#/definitions/date",
331
+ "description": "The entity's starting date, e.g., when the entity is a conference."
332
+ },
333
+ "email": {
334
+ "$ref": "#/definitions/email",
335
+ "description": "The entity's email address."
336
+ },
337
+ "fax": {
338
+ "$ref": "#/definitions/fax",
339
+ "description": "The entity's fax number."
340
+ },
341
+ "location": {
342
+ "description": "The entity's location, e.g., when the entity is a conference.",
343
+ "minLength": 1,
344
+ "type": "string"
345
+ },
346
+ "name": {
347
+ "description": "The entity's name.",
348
+ "minLength": 1,
349
+ "type": "string"
350
+ },
351
+ "orcid": {
352
+ "$ref": "#/definitions/orcid",
353
+ "description": "The entity's orcid."
354
+ },
355
+ "post-code": {
356
+ "$ref": "#/definitions/post-code",
357
+ "description": "The entity's post code."
358
+ },
359
+ "region": {
360
+ "$ref": "#/definitions/region",
361
+ "description": "The entity's region."
362
+ },
363
+ "tel": {
364
+ "$ref": "#/definitions/tel",
365
+ "description": "The entity's telephone number."
366
+ },
367
+ "website": {
368
+ "$ref": "#/definitions/url",
369
+ "description": "The entity's website."
370
+ }
371
+ },
372
+ "required": [
373
+ "name"
374
+ ],
375
+ "type": "object"
376
+ },
377
+ "fax": {
378
+ "description": "A fax number.",
379
+ "minLength": 1,
380
+ "type": "string"
381
+ },
382
+ "identifier": {
383
+ "anyOf": [
384
+ {
385
+ "additionalProperties": false,
386
+ "properties": {
387
+ "description": {
388
+ "$ref": "#/definitions/identifier-description"
389
+ },
390
+ "type": {
391
+ "enum": [
392
+ "doi"
393
+ ],
394
+ "type": "string"
395
+ },
396
+ "value": {
397
+ "$ref": "#/definitions/doi"
398
+ }
399
+ },
400
+ "required": [
401
+ "type",
402
+ "value"
403
+ ],
404
+ "type": "object"
405
+ },
406
+ {
407
+ "additionalProperties": false,
408
+ "properties": {
409
+ "description": {
410
+ "$ref": "#/definitions/identifier-description"
411
+ },
412
+ "type": {
413
+ "enum": [
414
+ "url"
415
+ ],
416
+ "type": "string"
417
+ },
418
+ "value": {
419
+ "$ref": "#/definitions/url"
420
+ }
421
+ },
422
+ "required": [
423
+ "type",
424
+ "value"
425
+ ],
426
+ "type": "object"
427
+ },
428
+ {
429
+ "additionalProperties": false,
430
+ "properties": {
431
+ "description": {
432
+ "$ref": "#/definitions/identifier-description"
433
+ },
434
+ "type": {
435
+ "enum": [
436
+ "swh"
437
+ ],
438
+ "type": "string"
439
+ },
440
+ "value": {
441
+ "$ref": "#/definitions/swh-identifier"
442
+ }
443
+ },
444
+ "required": [
445
+ "type",
446
+ "value"
447
+ ],
448
+ "type": "object"
449
+ },
450
+ {
451
+ "additionalProperties": false,
452
+ "properties": {
453
+ "description": {
454
+ "$ref": "#/definitions/identifier-description"
455
+ },
456
+ "type": {
457
+ "enum": [
458
+ "other"
459
+ ],
460
+ "type": "string"
461
+ },
462
+ "value": {
463
+ "minLength": 1,
464
+ "type": "string"
465
+ }
466
+ },
467
+ "required": [
468
+ "type",
469
+ "value"
470
+ ],
471
+ "type": "object"
472
+ }
473
+ ],
474
+ "description": "An identifier for a work."
475
+ },
476
+ "identifier-description": {
477
+ "description": "A description for a specific identifier value.",
478
+ "examples": [
479
+ "The version DOI for this version, which has a relation childOf with the concept DOI specified in the doi field in the root of this file.",
480
+ "The identifier provided by Archival Repository, which points to this version of the software."
481
+ ],
482
+ "minLength": 1,
483
+ "type": "string"
484
+ },
485
+ "license": {
486
+ "description": "An SPDX license identifier.",
487
+ "oneOf": [
488
+ {
489
+ "$ref": "#/definitions/license-enum",
490
+ "examples": [
491
+ "Apache-2.0",
492
+ "MIT"
493
+ ]
494
+ },
495
+ {
496
+ "$comment": "When there are multiple licenses, it is assumed their relationship is OR, not AND",
497
+ "examples": [
498
+ [
499
+ "Apache-2.0",
500
+ "MIT"
501
+ ],
502
+ [
503
+ "GPL-3.0",
504
+ "GPL-3.0-or-later"
505
+ ]
506
+ ],
507
+ "items": {
508
+ "$ref": "#/definitions/license-enum"
509
+ },
510
+ "minItems": 1,
511
+ "type": "array",
512
+ "uniqueItems": true
513
+ }
514
+ ]
515
+ },
516
+ "license-enum": {
517
+ "$comment": "Use https://github.com/citation-file-format/get-spdx-licenses to update this enum in the future",
518
+ "description": "SPDX license list; releaseDate=2021-05-14; source=https://raw.githubusercontent.com/spdx/license-list-data/master/json/licenses.json",
519
+ "enum": [
520
+ "0BSD",
521
+ "AAL",
522
+ "Abstyles",
523
+ "Adobe-2006",
524
+ "Adobe-Glyph",
525
+ "ADSL",
526
+ "AFL-1.1",
527
+ "AFL-1.2",
528
+ "AFL-2.0",
529
+ "AFL-2.1",
530
+ "AFL-3.0",
531
+ "Afmparse",
532
+ "AGPL-1.0",
533
+ "AGPL-1.0-only",
534
+ "AGPL-1.0-or-later",
535
+ "AGPL-3.0",
536
+ "AGPL-3.0-only",
537
+ "AGPL-3.0-or-later",
538
+ "Aladdin",
539
+ "AMDPLPA",
540
+ "AML",
541
+ "AMPAS",
542
+ "ANTLR-PD",
543
+ "ANTLR-PD-fallback",
544
+ "Apache-1.0",
545
+ "Apache-1.1",
546
+ "Apache-2.0",
547
+ "APAFML",
548
+ "APL-1.0",
549
+ "APSL-1.0",
550
+ "APSL-1.1",
551
+ "APSL-1.2",
552
+ "APSL-2.0",
553
+ "Artistic-1.0",
554
+ "Artistic-1.0-cl8",
555
+ "Artistic-1.0-Perl",
556
+ "Artistic-2.0",
557
+ "Bahyph",
558
+ "Barr",
559
+ "Beerware",
560
+ "BitTorrent-1.0",
561
+ "BitTorrent-1.1",
562
+ "blessing",
563
+ "BlueOak-1.0.0",
564
+ "Borceux",
565
+ "BSD-1-Clause",
566
+ "BSD-2-Clause",
567
+ "BSD-2-Clause-FreeBSD",
568
+ "BSD-2-Clause-NetBSD",
569
+ "BSD-2-Clause-Patent",
570
+ "BSD-2-Clause-Views",
571
+ "BSD-3-Clause",
572
+ "BSD-3-Clause-Attribution",
573
+ "BSD-3-Clause-Clear",
574
+ "BSD-3-Clause-LBNL",
575
+ "BSD-3-Clause-Modification",
576
+ "BSD-3-Clause-No-Nuclear-License",
577
+ "BSD-3-Clause-No-Nuclear-License-2014",
578
+ "BSD-3-Clause-No-Nuclear-Warranty",
579
+ "BSD-3-Clause-Open-MPI",
580
+ "BSD-4-Clause",
581
+ "BSD-4-Clause-Shortened",
582
+ "BSD-4-Clause-UC",
583
+ "BSD-Protection",
584
+ "BSD-Source-Code",
585
+ "BSL-1.0",
586
+ "BUSL-1.1",
587
+ "bzip2-1.0.5",
588
+ "bzip2-1.0.6",
589
+ "C-UDA-1.0",
590
+ "CAL-1.0",
591
+ "CAL-1.0-Combined-Work-Exception",
592
+ "Caldera",
593
+ "CATOSL-1.1",
594
+ "CC-BY-1.0",
595
+ "CC-BY-2.0",
596
+ "CC-BY-2.5",
597
+ "CC-BY-3.0",
598
+ "CC-BY-3.0-AT",
599
+ "CC-BY-3.0-US",
600
+ "CC-BY-4.0",
601
+ "CC-BY-NC-1.0",
602
+ "CC-BY-NC-2.0",
603
+ "CC-BY-NC-2.5",
604
+ "CC-BY-NC-3.0",
605
+ "CC-BY-NC-4.0",
606
+ "CC-BY-NC-ND-1.0",
607
+ "CC-BY-NC-ND-2.0",
608
+ "CC-BY-NC-ND-2.5",
609
+ "CC-BY-NC-ND-3.0",
610
+ "CC-BY-NC-ND-3.0-IGO",
611
+ "CC-BY-NC-ND-4.0",
612
+ "CC-BY-NC-SA-1.0",
613
+ "CC-BY-NC-SA-2.0",
614
+ "CC-BY-NC-SA-2.5",
615
+ "CC-BY-NC-SA-3.0",
616
+ "CC-BY-NC-SA-4.0",
617
+ "CC-BY-ND-1.0",
618
+ "CC-BY-ND-2.0",
619
+ "CC-BY-ND-2.5",
620
+ "CC-BY-ND-3.0",
621
+ "CC-BY-ND-4.0",
622
+ "CC-BY-SA-1.0",
623
+ "CC-BY-SA-2.0",
624
+ "CC-BY-SA-2.0-UK",
625
+ "CC-BY-SA-2.1-JP",
626
+ "CC-BY-SA-2.5",
627
+ "CC-BY-SA-3.0",
628
+ "CC-BY-SA-3.0-AT",
629
+ "CC-BY-SA-4.0",
630
+ "CC-PDDC",
631
+ "CC0-1.0",
632
+ "CDDL-1.0",
633
+ "CDDL-1.1",
634
+ "CDL-1.0",
635
+ "CDLA-Permissive-1.0",
636
+ "CDLA-Sharing-1.0",
637
+ "CECILL-1.0",
638
+ "CECILL-1.1",
639
+ "CECILL-2.0",
640
+ "CECILL-2.1",
641
+ "CECILL-B",
642
+ "CECILL-C",
643
+ "CERN-OHL-1.1",
644
+ "CERN-OHL-1.2",
645
+ "CERN-OHL-P-2.0",
646
+ "CERN-OHL-S-2.0",
647
+ "CERN-OHL-W-2.0",
648
+ "ClArtistic",
649
+ "CNRI-Jython",
650
+ "CNRI-Python",
651
+ "CNRI-Python-GPL-Compatible",
652
+ "Condor-1.1",
653
+ "copyleft-next-0.3.0",
654
+ "copyleft-next-0.3.1",
655
+ "CPAL-1.0",
656
+ "CPL-1.0",
657
+ "CPOL-1.02",
658
+ "Crossword",
659
+ "CrystalStacker",
660
+ "CUA-OPL-1.0",
661
+ "Cube",
662
+ "curl",
663
+ "D-FSL-1.0",
664
+ "diffmark",
665
+ "DOC",
666
+ "Dotseqn",
667
+ "DRL-1.0",
668
+ "DSDP",
669
+ "dvipdfm",
670
+ "ECL-1.0",
671
+ "ECL-2.0",
672
+ "eCos-2.0",
673
+ "EFL-1.0",
674
+ "EFL-2.0",
675
+ "eGenix",
676
+ "Entessa",
677
+ "EPICS",
678
+ "EPL-1.0",
679
+ "EPL-2.0",
680
+ "ErlPL-1.1",
681
+ "etalab-2.0",
682
+ "EUDatagrid",
683
+ "EUPL-1.0",
684
+ "EUPL-1.1",
685
+ "EUPL-1.2",
686
+ "Eurosym",
687
+ "Fair",
688
+ "Frameworx-1.0",
689
+ "FreeBSD-DOC",
690
+ "FreeImage",
691
+ "FSFAP",
692
+ "FSFUL",
693
+ "FSFULLR",
694
+ "FTL",
695
+ "GD",
696
+ "GFDL-1.1",
697
+ "GFDL-1.1-invariants-only",
698
+ "GFDL-1.1-invariants-or-later",
699
+ "GFDL-1.1-no-invariants-only",
700
+ "GFDL-1.1-no-invariants-or-later",
701
+ "GFDL-1.1-only",
702
+ "GFDL-1.1-or-later",
703
+ "GFDL-1.2",
704
+ "GFDL-1.2-invariants-only",
705
+ "GFDL-1.2-invariants-or-later",
706
+ "GFDL-1.2-no-invariants-only",
707
+ "GFDL-1.2-no-invariants-or-later",
708
+ "GFDL-1.2-only",
709
+ "GFDL-1.2-or-later",
710
+ "GFDL-1.3",
711
+ "GFDL-1.3-invariants-only",
712
+ "GFDL-1.3-invariants-or-later",
713
+ "GFDL-1.3-no-invariants-only",
714
+ "GFDL-1.3-no-invariants-or-later",
715
+ "GFDL-1.3-only",
716
+ "GFDL-1.3-or-later",
717
+ "Giftware",
718
+ "GL2PS",
719
+ "Glide",
720
+ "Glulxe",
721
+ "GLWTPL",
722
+ "gnuplot",
723
+ "GPL-1.0",
724
+ "GPL-1.0-only",
725
+ "GPL-1.0-or-later",
726
+ "GPL-1.0+",
727
+ "GPL-2.0",
728
+ "GPL-2.0-only",
729
+ "GPL-2.0-or-later",
730
+ "GPL-2.0-with-autoconf-exception",
731
+ "GPL-2.0-with-bison-exception",
732
+ "GPL-2.0-with-classpath-exception",
733
+ "GPL-2.0-with-font-exception",
734
+ "GPL-2.0-with-GCC-exception",
735
+ "GPL-2.0+",
736
+ "GPL-3.0",
737
+ "GPL-3.0-only",
738
+ "GPL-3.0-or-later",
739
+ "GPL-3.0-with-autoconf-exception",
740
+ "GPL-3.0-with-GCC-exception",
741
+ "GPL-3.0+",
742
+ "gSOAP-1.3b",
743
+ "HaskellReport",
744
+ "Hippocratic-2.1",
745
+ "HPND",
746
+ "HPND-sell-variant",
747
+ "HTMLTIDY",
748
+ "IBM-pibs",
749
+ "ICU",
750
+ "IJG",
751
+ "ImageMagick",
752
+ "iMatix",
753
+ "Imlib2",
754
+ "Info-ZIP",
755
+ "Intel",
756
+ "Intel-ACPI",
757
+ "Interbase-1.0",
758
+ "IPA",
759
+ "IPL-1.0",
760
+ "ISC",
761
+ "JasPer-2.0",
762
+ "JPNIC",
763
+ "JSON",
764
+ "LAL-1.2",
765
+ "LAL-1.3",
766
+ "Latex2e",
767
+ "Leptonica",
768
+ "LGPL-2.0",
769
+ "LGPL-2.0-only",
770
+ "LGPL-2.0-or-later",
771
+ "LGPL-2.0+",
772
+ "LGPL-2.1",
773
+ "LGPL-2.1-only",
774
+ "LGPL-2.1-or-later",
775
+ "LGPL-2.1+",
776
+ "LGPL-3.0",
777
+ "LGPL-3.0-only",
778
+ "LGPL-3.0-or-later",
779
+ "LGPL-3.0+",
780
+ "LGPLLR",
781
+ "Libpng",
782
+ "libpng-2.0",
783
+ "libselinux-1.0",
784
+ "libtiff",
785
+ "LiLiQ-P-1.1",
786
+ "LiLiQ-R-1.1",
787
+ "LiLiQ-Rplus-1.1",
788
+ "Linux-OpenIB",
789
+ "LPL-1.0",
790
+ "LPL-1.02",
791
+ "LPPL-1.0",
792
+ "LPPL-1.1",
793
+ "LPPL-1.2",
794
+ "LPPL-1.3a",
795
+ "LPPL-1.3c",
796
+ "MakeIndex",
797
+ "MirOS",
798
+ "MIT",
799
+ "MIT-0",
800
+ "MIT-advertising",
801
+ "MIT-CMU",
802
+ "MIT-enna",
803
+ "MIT-feh",
804
+ "MIT-Modern-Variant",
805
+ "MIT-open-group",
806
+ "MITNFA",
807
+ "Motosoto",
808
+ "mpich2",
809
+ "MPL-1.0",
810
+ "MPL-1.1",
811
+ "MPL-2.0",
812
+ "MPL-2.0-no-copyleft-exception",
813
+ "MS-PL",
814
+ "MS-RL",
815
+ "MTLL",
816
+ "MulanPSL-1.0",
817
+ "MulanPSL-2.0",
818
+ "Multics",
819
+ "Mup",
820
+ "NAIST-2003",
821
+ "NASA-1.3",
822
+ "Naumen",
823
+ "NBPL-1.0",
824
+ "NCGL-UK-2.0",
825
+ "NCSA",
826
+ "Net-SNMP",
827
+ "NetCDF",
828
+ "Newsletr",
829
+ "NGPL",
830
+ "NIST-PD",
831
+ "NIST-PD-fallback",
832
+ "NLOD-1.0",
833
+ "NLPL",
834
+ "Nokia",
835
+ "NOSL",
836
+ "Noweb",
837
+ "NPL-1.0",
838
+ "NPL-1.1",
839
+ "NPOSL-3.0",
840
+ "NRL",
841
+ "NTP",
842
+ "NTP-0",
843
+ "Nunit",
844
+ "O-UDA-1.0",
845
+ "OCCT-PL",
846
+ "OCLC-2.0",
847
+ "ODbL-1.0",
848
+ "ODC-By-1.0",
849
+ "OFL-1.0",
850
+ "OFL-1.0-no-RFN",
851
+ "OFL-1.0-RFN",
852
+ "OFL-1.1",
853
+ "OFL-1.1-no-RFN",
854
+ "OFL-1.1-RFN",
855
+ "OGC-1.0",
856
+ "OGDL-Taiwan-1.0",
857
+ "OGL-Canada-2.0",
858
+ "OGL-UK-1.0",
859
+ "OGL-UK-2.0",
860
+ "OGL-UK-3.0",
861
+ "OGTSL",
862
+ "OLDAP-1.1",
863
+ "OLDAP-1.2",
864
+ "OLDAP-1.3",
865
+ "OLDAP-1.4",
866
+ "OLDAP-2.0",
867
+ "OLDAP-2.0.1",
868
+ "OLDAP-2.1",
869
+ "OLDAP-2.2",
870
+ "OLDAP-2.2.1",
871
+ "OLDAP-2.2.2",
872
+ "OLDAP-2.3",
873
+ "OLDAP-2.4",
874
+ "OLDAP-2.5",
875
+ "OLDAP-2.6",
876
+ "OLDAP-2.7",
877
+ "OLDAP-2.8",
878
+ "OML",
879
+ "OpenSSL",
880
+ "OPL-1.0",
881
+ "OSET-PL-2.1",
882
+ "OSL-1.0",
883
+ "OSL-1.1",
884
+ "OSL-2.0",
885
+ "OSL-2.1",
886
+ "OSL-3.0",
887
+ "Parity-6.0.0",
888
+ "Parity-7.0.0",
889
+ "PDDL-1.0",
890
+ "PHP-3.0",
891
+ "PHP-3.01",
892
+ "Plexus",
893
+ "PolyForm-Noncommercial-1.0.0",
894
+ "PolyForm-Small-Business-1.0.0",
895
+ "PostgreSQL",
896
+ "PSF-2.0",
897
+ "psfrag",
898
+ "psutils",
899
+ "Python-2.0",
900
+ "Qhull",
901
+ "QPL-1.0",
902
+ "Rdisc",
903
+ "RHeCos-1.1",
904
+ "RPL-1.1",
905
+ "RPL-1.5",
906
+ "RPSL-1.0",
907
+ "RSA-MD",
908
+ "RSCPL",
909
+ "Ruby",
910
+ "SAX-PD",
911
+ "Saxpath",
912
+ "SCEA",
913
+ "Sendmail",
914
+ "Sendmail-8.23",
915
+ "SGI-B-1.0",
916
+ "SGI-B-1.1",
917
+ "SGI-B-2.0",
918
+ "SHL-0.5",
919
+ "SHL-0.51",
920
+ "SimPL-2.0",
921
+ "SISSL",
922
+ "SISSL-1.2",
923
+ "Sleepycat",
924
+ "SMLNJ",
925
+ "SMPPL",
926
+ "SNIA",
927
+ "Spencer-86",
928
+ "Spencer-94",
929
+ "Spencer-99",
930
+ "SPL-1.0",
931
+ "SSH-OpenSSH",
932
+ "SSH-short",
933
+ "SSPL-1.0",
934
+ "StandardML-NJ",
935
+ "SugarCRM-1.1.3",
936
+ "SWL",
937
+ "TAPR-OHL-1.0",
938
+ "TCL",
939
+ "TCP-wrappers",
940
+ "TMate",
941
+ "TORQUE-1.1",
942
+ "TOSL",
943
+ "TU-Berlin-1.0",
944
+ "TU-Berlin-2.0",
945
+ "UCL-1.0",
946
+ "Unicode-DFS-2015",
947
+ "Unicode-DFS-2016",
948
+ "Unicode-TOU",
949
+ "Unlicense",
950
+ "UPL-1.0",
951
+ "Vim",
952
+ "VOSTROM",
953
+ "VSL-1.0",
954
+ "W3C",
955
+ "W3C-19980720",
956
+ "W3C-20150513",
957
+ "Watcom-1.0",
958
+ "Wsuipa",
959
+ "WTFPL",
960
+ "wxWindows",
961
+ "X11",
962
+ "Xerox",
963
+ "XFree86-1.1",
964
+ "xinetd",
965
+ "Xnet",
966
+ "xpp",
967
+ "XSkat",
968
+ "YPL-1.0",
969
+ "YPL-1.1",
970
+ "Zed",
971
+ "Zend-2.0",
972
+ "Zimbra-1.3",
973
+ "Zimbra-1.4",
974
+ "Zlib",
975
+ "zlib-acknowledgement",
976
+ "ZPL-1.1",
977
+ "ZPL-2.0",
978
+ "ZPL-2.1"
979
+ ],
980
+ "type": "string"
981
+ },
982
+ "orcid": {
983
+ "description": "Identifier for an author, see https://orcid.org.",
984
+ "format": "uri",
985
+ "pattern": "https://orcid\\.org/[0-9]{4}-[0-9]{4}-[0-9]{4}-[0-9]{3}[0-9X]{1}",
986
+ "type": "string"
987
+ },
988
+ "person": {
989
+ "additionalProperties": false,
990
+ "description": "A person.",
991
+ "properties": {
992
+ "address": {
993
+ "$ref": "#/definitions/address",
994
+ "description": "The person's address."
995
+ },
996
+ "affiliation": {
997
+ "description": "The person's affilitation.",
998
+ "minLength": 1,
999
+ "type": "string"
1000
+ },
1001
+ "alias": {
1002
+ "$ref": "#/definitions/alias",
1003
+ "description": "The person's alias."
1004
+ },
1005
+ "city": {
1006
+ "$ref": "#/definitions/city",
1007
+ "description": "The person's city."
1008
+ },
1009
+ "country": {
1010
+ "$ref": "#/definitions/country",
1011
+ "description": "The person's country."
1012
+ },
1013
+ "email": {
1014
+ "$ref": "#/definitions/email",
1015
+ "description": "The person's email address."
1016
+ },
1017
+ "family-names": {
1018
+ "description": "The person's family names.",
1019
+ "minLength": 1,
1020
+ "type": "string"
1021
+ },
1022
+ "fax": {
1023
+ "$ref": "#/definitions/fax",
1024
+ "description": "The person's fax number."
1025
+ },
1026
+ "given-names": {
1027
+ "description": "The person's given names.",
1028
+ "minLength": 1,
1029
+ "type": "string"
1030
+ },
1031
+ "name-particle": {
1032
+ "description": "The person's name particle, e.g., a nobiliary particle or a preposition meaning 'of' or 'from' (for example 'von' in 'Alexander von Humboldt').",
1033
+ "examples": [
1034
+ "von"
1035
+ ],
1036
+ "minLength": 1,
1037
+ "type": "string"
1038
+ },
1039
+ "name-suffix": {
1040
+ "description": "The person's name-suffix, e.g. 'Jr.' for Sammy Davis Jr. or 'III' for Frank Edwin Wright III.",
1041
+ "examples": [
1042
+ "Jr.",
1043
+ "III"
1044
+ ],
1045
+ "minLength": 1,
1046
+ "type": "string"
1047
+ },
1048
+ "orcid": {
1049
+ "$ref": "#/definitions/orcid",
1050
+ "description": "The person's ORCID."
1051
+ },
1052
+ "post-code": {
1053
+ "$ref": "#/definitions/post-code",
1054
+ "description": "The person's post-code."
1055
+ },
1056
+ "region": {
1057
+ "$ref": "#/definitions/region",
1058
+ "description": "The person's region."
1059
+ },
1060
+ "tel": {
1061
+ "$ref": "#/definitions/tel",
1062
+ "description": "The person's phone number."
1063
+ },
1064
+ "website": {
1065
+ "$ref": "#/definitions/url",
1066
+ "description": "The person's website."
1067
+ }
1068
+ },
1069
+ "type": "object"
1070
+ },
1071
+ "post-code": {
1072
+ "anyOf": [
1073
+ {
1074
+ "minLength": 1,
1075
+ "type": "string"
1076
+ },
1077
+ {
1078
+ "type": "number"
1079
+ }
1080
+ ],
1081
+ "description": "A post code."
1082
+ },
1083
+ "reference": {
1084
+ "additionalProperties": false,
1085
+ "description": "A reference to a work.",
1086
+ "properties": {
1087
+ "abbreviation": {
1088
+ "description": "The abbreviation of a work.",
1089
+ "minLength": 1,
1090
+ "type": "string"
1091
+ },
1092
+ "abstract": {
1093
+ "description": "The abstract of a work.",
1094
+ "minLength": 1,
1095
+ "type": "string"
1096
+ },
1097
+ "authors": {
1098
+ "description": "The author(s) of a work.",
1099
+ "items": {
1100
+ "anyOf": [
1101
+ {
1102
+ "$ref": "#/definitions/person"
1103
+ },
1104
+ {
1105
+ "$ref": "#/definitions/entity"
1106
+ }
1107
+ ]
1108
+ },
1109
+ "minItems": 1,
1110
+ "type": "array",
1111
+ "uniqueItems": true
1112
+ },
1113
+ "collection-doi": {
1114
+ "$ref": "#/definitions/doi",
1115
+ "description": "The DOI of a collection containing the work."
1116
+ },
1117
+ "collection-title": {
1118
+ "description": "The title of a collection or proceedings.",
1119
+ "minLength": 1,
1120
+ "type": "string"
1121
+ },
1122
+ "collection-type": {
1123
+ "description": "The type of a collection.",
1124
+ "minLength": 1,
1125
+ "type": "string"
1126
+ },
1127
+ "commit": {
1128
+ "$ref": "#/definitions/commit"
1129
+ },
1130
+ "conference": {
1131
+ "$ref": "#/definitions/entity",
1132
+ "description": "The conference where the work was presented."
1133
+ },
1134
+ "contact": {
1135
+ "description": "The contact person, group, company, etc. for a work.",
1136
+ "items": {
1137
+ "anyOf": [
1138
+ {
1139
+ "$ref": "#/definitions/person"
1140
+ },
1141
+ {
1142
+ "$ref": "#/definitions/entity"
1143
+ }
1144
+ ]
1145
+ },
1146
+ "minItems": 1,
1147
+ "type": "array",
1148
+ "uniqueItems": true
1149
+ },
1150
+ "copyright": {
1151
+ "description": "The copyright information pertaining to the work.",
1152
+ "minLength": 1,
1153
+ "type": "string"
1154
+ },
1155
+ "data-type": {
1156
+ "description": "The data type of a data set.",
1157
+ "minLength": 1,
1158
+ "type": "string"
1159
+ },
1160
+ "database": {
1161
+ "description": "The name of the database where a work was accessed/is stored.",
1162
+ "minLength": 1,
1163
+ "type": "string"
1164
+ },
1165
+ "database-provider": {
1166
+ "$ref": "#/definitions/entity",
1167
+ "description": "The provider of the database where a work was accessed/is stored."
1168
+ },
1169
+ "date-accessed": {
1170
+ "$ref": "#/definitions/date",
1171
+ "description": "The date the work was accessed."
1172
+ },
1173
+ "date-downloaded": {
1174
+ "$ref": "#/definitions/date",
1175
+ "description": "The date the work has been downloaded."
1176
+ },
1177
+ "date-published": {
1178
+ "$ref": "#/definitions/date",
1179
+ "description": "The date the work has been published."
1180
+ },
1181
+ "date-released": {
1182
+ "$ref": "#/definitions/date",
1183
+ "description": "The date the work has been released."
1184
+ },
1185
+ "department": {
1186
+ "description": "The department where a work has been produced.",
1187
+ "minLength": 1,
1188
+ "type": "string"
1189
+ },
1190
+ "doi": {
1191
+ "$ref": "#/definitions/doi",
1192
+ "description": "The DOI of the work."
1193
+ },
1194
+ "edition": {
1195
+ "description": "The edition of the work.",
1196
+ "minLength": 1,
1197
+ "type": "string"
1198
+ },
1199
+ "editors": {
1200
+ "description": "The editor(s) of a work.",
1201
+ "items": {
1202
+ "anyOf": [
1203
+ {
1204
+ "$ref": "#/definitions/person"
1205
+ },
1206
+ {
1207
+ "$ref": "#/definitions/entity"
1208
+ }
1209
+ ]
1210
+ },
1211
+ "minItems": 1,
1212
+ "type": "array",
1213
+ "uniqueItems": true
1214
+ },
1215
+ "editors-series": {
1216
+ "description": "The editor(s) of a series in which a work has been published.",
1217
+ "items": {
1218
+ "anyOf": [
1219
+ {
1220
+ "$ref": "#/definitions/person"
1221
+ },
1222
+ {
1223
+ "$ref": "#/definitions/entity"
1224
+ }
1225
+ ]
1226
+ },
1227
+ "minItems": 1,
1228
+ "type": "array",
1229
+ "uniqueItems": true
1230
+ },
1231
+ "end": {
1232
+ "anyOf": [
1233
+ {
1234
+ "type": "integer"
1235
+ },
1236
+ {
1237
+ "minLength": 1,
1238
+ "type": "string"
1239
+ }
1240
+ ],
1241
+ "description": "The end page of the work."
1242
+ },
1243
+ "entry": {
1244
+ "description": "An entry in the collection that constitutes the work.",
1245
+ "minLength": 1,
1246
+ "type": "string"
1247
+ },
1248
+ "filename": {
1249
+ "description": "The name of the electronic file containing the work.",
1250
+ "minLength": 1,
1251
+ "type": "string"
1252
+ },
1253
+ "format": {
1254
+ "description": "The format in which a work is represented.",
1255
+ "minLength": 1,
1256
+ "type": "string"
1257
+ },
1258
+ "identifiers": {
1259
+ "description": "The identifier(s) of the work.",
1260
+ "items": {
1261
+ "$ref": "#/definitions/identifier"
1262
+ },
1263
+ "minItems": 1,
1264
+ "type": "array",
1265
+ "uniqueItems": true
1266
+ },
1267
+ "institution": {
1268
+ "$ref": "#/definitions/entity",
1269
+ "description": "The institution where a work has been produced or published."
1270
+ },
1271
+ "isbn": {
1272
+ "description": "The ISBN of the work.",
1273
+ "pattern": "^[0-9\\- ]{10,17}X?$",
1274
+ "type": "string"
1275
+ },
1276
+ "issn": {
1277
+ "description": "The ISSN of the work.",
1278
+ "pattern": "^\\d{4}-\\d{3}[\\dxX]$",
1279
+ "type": "string"
1280
+ },
1281
+ "issue": {
1282
+ "anyOf": [
1283
+ {
1284
+ "minLength": 1,
1285
+ "type": "string"
1286
+ },
1287
+ {
1288
+ "type": "number"
1289
+ }
1290
+ ],
1291
+ "description": "The issue of a periodical in which a work appeared."
1292
+ },
1293
+ "issue-date": {
1294
+ "description": "The publication date of the issue of a periodical in which a work appeared.",
1295
+ "minLength": 1,
1296
+ "type": "string"
1297
+ },
1298
+ "issue-title": {
1299
+ "description": "The name of the issue of a periodical in which the work appeared.",
1300
+ "minLength": 1,
1301
+ "type": "string"
1302
+ },
1303
+ "journal": {
1304
+ "description": "The name of the journal/magazine/newspaper/periodical where the work was published.",
1305
+ "minLength": 1,
1306
+ "type": "string"
1307
+ },
1308
+ "keywords": {
1309
+ "description": "Keywords pertaining to the work.",
1310
+ "items": {
1311
+ "minLength": 1,
1312
+ "type": "string"
1313
+ },
1314
+ "minItems": 1,
1315
+ "type": "array",
1316
+ "uniqueItems": true
1317
+ },
1318
+ "languages": {
1319
+ "description": "The language identifier(s) of the work according to ISO 639 language strings.",
1320
+ "items": {
1321
+ "maxLength": 3,
1322
+ "minLength": 2,
1323
+ "pattern": "^[a-z]{2,3}$",
1324
+ "type": "string"
1325
+ },
1326
+ "minItems": 1,
1327
+ "type": "array",
1328
+ "uniqueItems": true
1329
+ },
1330
+ "license": {
1331
+ "$ref": "#/definitions/license"
1332
+ },
1333
+ "license-url": {
1334
+ "$ref": "#/definitions/url",
1335
+ "description": "The URL of the license text under which the work is licensed (only for non-standard licenses not included in the SPDX License List)."
1336
+ },
1337
+ "loc-end": {
1338
+ "anyOf": [
1339
+ {
1340
+ "type": "integer"
1341
+ },
1342
+ {
1343
+ "minLength": 1,
1344
+ "type": "string"
1345
+ }
1346
+ ],
1347
+ "description": "The line of code in the file where the work ends."
1348
+ },
1349
+ "loc-start": {
1350
+ "anyOf": [
1351
+ {
1352
+ "type": "integer"
1353
+ },
1354
+ {
1355
+ "minLength": 1,
1356
+ "type": "string"
1357
+ }
1358
+ ],
1359
+ "description": "The line of code in the file where the work starts."
1360
+ },
1361
+ "location": {
1362
+ "$ref": "#/definitions/entity",
1363
+ "description": "The location of the work."
1364
+ },
1365
+ "medium": {
1366
+ "description": "The medium of the work.",
1367
+ "minLength": 1,
1368
+ "type": "string"
1369
+ },
1370
+ "month": {
1371
+ "anyOf": [
1372
+ {
1373
+ "maximum": 12,
1374
+ "minimum": 1,
1375
+ "type": "integer"
1376
+ },
1377
+ {
1378
+ "enum": [
1379
+ "1",
1380
+ "2",
1381
+ "3",
1382
+ "4",
1383
+ "5",
1384
+ "6",
1385
+ "7",
1386
+ "8",
1387
+ "9",
1388
+ "10",
1389
+ "11",
1390
+ "12"
1391
+ ],
1392
+ "type": "string"
1393
+ }
1394
+ ],
1395
+ "description": "The month in which a work has been published."
1396
+ },
1397
+ "nihmsid": {
1398
+ "description": "The NIHMSID of a work.",
1399
+ "minLength": 1,
1400
+ "type": "string"
1401
+ },
1402
+ "notes": {
1403
+ "description": "Notes pertaining to the work.",
1404
+ "minLength": 1,
1405
+ "type": "string"
1406
+ },
1407
+ "number": {
1408
+ "anyOf": [
1409
+ {
1410
+ "minLength": 1,
1411
+ "type": "string"
1412
+ },
1413
+ {
1414
+ "type": "number"
1415
+ }
1416
+ ],
1417
+ "description": "The accession number for a work."
1418
+ },
1419
+ "number-volumes": {
1420
+ "anyOf": [
1421
+ {
1422
+ "type": "integer"
1423
+ },
1424
+ {
1425
+ "minLength": 1,
1426
+ "type": "string"
1427
+ }
1428
+ ],
1429
+ "description": "The number of volumes making up the collection in which the work has been published."
1430
+ },
1431
+ "pages": {
1432
+ "anyOf": [
1433
+ {
1434
+ "type": "integer"
1435
+ },
1436
+ {
1437
+ "minLength": 1,
1438
+ "type": "string"
1439
+ }
1440
+ ],
1441
+ "description": "The number of pages of the work."
1442
+ },
1443
+ "patent-states": {
1444
+ "description": "The states for which a patent is granted.",
1445
+ "items": {
1446
+ "minLength": 1,
1447
+ "type": "string"
1448
+ },
1449
+ "minItems": 1,
1450
+ "type": "array",
1451
+ "uniqueItems": true
1452
+ },
1453
+ "pmcid": {
1454
+ "description": "The PMCID of a work.",
1455
+ "pattern": "^PMC[0-9]{7}$",
1456
+ "type": "string"
1457
+ },
1458
+ "publisher": {
1459
+ "$ref": "#/definitions/entity",
1460
+ "description": "The publisher who has published the work."
1461
+ },
1462
+ "recipients": {
1463
+ "description": "The recipient(s) of a personal communication.",
1464
+ "items": {
1465
+ "anyOf": [
1466
+ {
1467
+ "$ref": "#/definitions/entity"
1468
+ },
1469
+ {
1470
+ "$ref": "#/definitions/person"
1471
+ }
1472
+ ]
1473
+ },
1474
+ "minItems": 1,
1475
+ "type": "array",
1476
+ "uniqueItems": true
1477
+ },
1478
+ "repository": {
1479
+ "$ref": "#/definitions/url",
1480
+ "description": "The URL of the work in a repository (when the repository is neither a source code repository nor a build artifact repository)."
1481
+ },
1482
+ "repository-artifact": {
1483
+ "$ref": "#/definitions/url",
1484
+ "description": "The URL of the work in a build artifact/binary repository."
1485
+ },
1486
+ "repository-code": {
1487
+ "$ref": "#/definitions/url",
1488
+ "description": "The URL of the work in a source code repository."
1489
+ },
1490
+ "scope": {
1491
+ "description": "The scope of the reference, e.g., the section of the work it adheres to.",
1492
+ "minLength": 1,
1493
+ "type": "string"
1494
+ },
1495
+ "section": {
1496
+ "anyOf": [
1497
+ {
1498
+ "minLength": 1,
1499
+ "type": "string"
1500
+ },
1501
+ {
1502
+ "type": "number"
1503
+ }
1504
+ ],
1505
+ "description": "The section of a work that is referenced."
1506
+ },
1507
+ "senders": {
1508
+ "description": "The sender(s) of a personal communication.",
1509
+ "items": {
1510
+ "anyOf": [
1511
+ {
1512
+ "$ref": "#/definitions/entity"
1513
+ },
1514
+ {
1515
+ "$ref": "#/definitions/person"
1516
+ }
1517
+ ]
1518
+ },
1519
+ "minItems": 1,
1520
+ "type": "array",
1521
+ "uniqueItems": true
1522
+ },
1523
+ "start": {
1524
+ "anyOf": [
1525
+ {
1526
+ "type": "integer"
1527
+ },
1528
+ {
1529
+ "minLength": 1,
1530
+ "type": "string"
1531
+ }
1532
+ ],
1533
+ "description": "The start page of the work."
1534
+ },
1535
+ "status": {
1536
+ "description": "The publication status of the work.",
1537
+ "enum": [
1538
+ "abstract",
1539
+ "advance-online",
1540
+ "in-preparation",
1541
+ "in-press",
1542
+ "preprint",
1543
+ "submitted"
1544
+ ],
1545
+ "type": "string"
1546
+ },
1547
+ "term": {
1548
+ "description": "The term being referenced if the work is a dictionary or encyclopedia.",
1549
+ "minLength": 1,
1550
+ "type": "string"
1551
+ },
1552
+ "thesis-type": {
1553
+ "description": "The type of the thesis that is the work.",
1554
+ "minLength": 1,
1555
+ "type": "string"
1556
+ },
1557
+ "title": {
1558
+ "description": "The title of the work.",
1559
+ "minLength": 1,
1560
+ "type": "string"
1561
+ },
1562
+ "translators": {
1563
+ "description": "The translator(s) of a work.",
1564
+ "items": {
1565
+ "anyOf": [
1566
+ {
1567
+ "$ref": "#/definitions/entity"
1568
+ },
1569
+ {
1570
+ "$ref": "#/definitions/person"
1571
+ }
1572
+ ]
1573
+ },
1574
+ "minItems": 1,
1575
+ "type": "array",
1576
+ "uniqueItems": true
1577
+ },
1578
+ "type": {
1579
+ "description": "The type of the work.",
1580
+ "enum": [
1581
+ "art",
1582
+ "article",
1583
+ "audiovisual",
1584
+ "bill",
1585
+ "blog",
1586
+ "book",
1587
+ "catalogue",
1588
+ "conference-paper",
1589
+ "conference",
1590
+ "data",
1591
+ "database",
1592
+ "dictionary",
1593
+ "edited-work",
1594
+ "encyclopedia",
1595
+ "film-broadcast",
1596
+ "generic",
1597
+ "government-document",
1598
+ "grant",
1599
+ "hearing",
1600
+ "historical-work",
1601
+ "legal-case",
1602
+ "legal-rule",
1603
+ "magazine-article",
1604
+ "manual",
1605
+ "map",
1606
+ "multimedia",
1607
+ "music",
1608
+ "newspaper-article",
1609
+ "pamphlet",
1610
+ "patent",
1611
+ "personal-communication",
1612
+ "proceedings",
1613
+ "report",
1614
+ "serial",
1615
+ "slides",
1616
+ "software-code",
1617
+ "software-container",
1618
+ "software-executable",
1619
+ "software-virtual-machine",
1620
+ "software",
1621
+ "sound-recording",
1622
+ "standard",
1623
+ "statute",
1624
+ "thesis",
1625
+ "unpublished",
1626
+ "video",
1627
+ "website"
1628
+ ],
1629
+ "type": "string"
1630
+ },
1631
+ "url": {
1632
+ "$ref": "#/definitions/url",
1633
+ "description": "The URL of the work."
1634
+ },
1635
+ "version": {
1636
+ "$ref": "#/definitions/version",
1637
+ "description": "The version of the work."
1638
+ },
1639
+ "volume": {
1640
+ "anyOf": [
1641
+ {
1642
+ "type": "integer"
1643
+ },
1644
+ {
1645
+ "minLength": 1,
1646
+ "type": "string"
1647
+ }
1648
+ ],
1649
+ "description": "The volume of the periodical in which a work appeared."
1650
+ },
1651
+ "volume-title": {
1652
+ "description": "The title of the volume in which the work appeared.",
1653
+ "minLength": 1,
1654
+ "type": "string"
1655
+ },
1656
+ "year": {
1657
+ "anyOf": [
1658
+ {
1659
+ "type": "integer"
1660
+ },
1661
+ {
1662
+ "minLength": 1,
1663
+ "type": "string"
1664
+ }
1665
+ ],
1666
+ "description": "The year in which a work has been published."
1667
+ },
1668
+ "year-original": {
1669
+ "anyOf": [
1670
+ {
1671
+ "type": "integer"
1672
+ },
1673
+ {
1674
+ "minLength": 1,
1675
+ "type": "string"
1676
+ }
1677
+ ],
1678
+ "description": "The year of the original publication."
1679
+ }
1680
+ },
1681
+ "required": [
1682
+ "authors",
1683
+ "title",
1684
+ "type"
1685
+ ],
1686
+ "type": "object"
1687
+ },
1688
+ "region": {
1689
+ "description": "A region.",
1690
+ "minLength": 1,
1691
+ "type": "string"
1692
+ },
1693
+ "swh-identifier": {
1694
+ "$comment": "Software Heritage identifiers are documented here: https://docs.softwareheritage.org/devel/swh-model/persistent-identifiers.html.",
1695
+ "description": "The Software Heritage identifier (without further qualifiers such as origin, visit, anchor, path).",
1696
+ "examples": [
1697
+ "swh:1:cnt:94a9ed024d3859793618152ea559a168bbcbb5e2",
1698
+ "swh:1:dir:d198bc9d7a6bcf6db04f476d29314f157507d505",
1699
+ "swh:1:rev:309cf2674ee7a0749978cf8265ab91a60aea0f7d",
1700
+ "swh:1:rel:22ece559cc7cc2364edc5e5593d63ae8bd229f9f",
1701
+ "swh:1:snp:c7c108084bc0bf3d81436bf980b46e98bd338453"
1702
+ ],
1703
+ "pattern": "^swh:1:(snp|rel|rev|dir|cnt):[0-9a-fA-F]{40}$",
1704
+ "type": "string"
1705
+ },
1706
+ "tel": {
1707
+ "description": "A phone number.",
1708
+ "minLength": 1,
1709
+ "type": "string"
1710
+ },
1711
+ "url": {
1712
+ "format": "uri",
1713
+ "pattern": "^(https|http|ftp|sftp)://.+",
1714
+ "type": "string"
1715
+ },
1716
+ "version": {
1717
+ "anyOf": [
1718
+ {
1719
+ "minLength": 1,
1720
+ "type": "string"
1721
+ },
1722
+ {
1723
+ "type": "number"
1724
+ }
1725
+ ]
1726
+ }
1727
+ },
1728
+ "description": "A file with citation metadata for software or datasets.",
1729
+ "properties": {
1730
+ "abstract": {
1731
+ "description": "A description of the software or dataset.",
1732
+ "minLength": 1,
1733
+ "type": "string"
1734
+ },
1735
+ "authors": {
1736
+ "description": "The author(s) of the software or dataset.",
1737
+ "items": {
1738
+ "anyOf": [
1739
+ {
1740
+ "$ref": "#/definitions/person"
1741
+ },
1742
+ {
1743
+ "$ref": "#/definitions/entity"
1744
+ }
1745
+ ]
1746
+ },
1747
+ "minItems": 1,
1748
+ "type": "array",
1749
+ "uniqueItems": true
1750
+ },
1751
+ "cff-version": {
1752
+ "description": "The version of CFF used for providing the citation metadata.",
1753
+ "examples": [
1754
+ "1.2.0"
1755
+ ],
1756
+ "pattern": "^1\\.2\\.0$",
1757
+ "type": "string"
1758
+ },
1759
+ "commit": {
1760
+ "$ref": "#/definitions/commit"
1761
+ },
1762
+ "contact": {
1763
+ "description": "The contact person, group, company, etc. for the software or dataset.",
1764
+ "items": {
1765
+ "anyOf": [
1766
+ {
1767
+ "$ref": "#/definitions/person"
1768
+ },
1769
+ {
1770
+ "$ref": "#/definitions/entity"
1771
+ }
1772
+ ]
1773
+ },
1774
+ "minItems": 1,
1775
+ "type": "array",
1776
+ "uniqueItems": true
1777
+ },
1778
+ "date-released": {
1779
+ "$ref": "#/definitions/date",
1780
+ "description": "The date the work has been released."
1781
+ },
1782
+ "doi": {
1783
+ "$ref": "#/definitions/doi"
1784
+ },
1785
+ "identifiers": {
1786
+ "description": "The identifiers of the software or dataset.",
1787
+ "items": {
1788
+ "$ref": "#/definitions/identifier"
1789
+ },
1790
+ "minItems": 1,
1791
+ "type": "array",
1792
+ "uniqueItems": true
1793
+ },
1794
+ "keywords": {
1795
+ "description": "Keywords that describe the work.",
1796
+ "items": {
1797
+ "minLength": 1,
1798
+ "type": "string"
1799
+ },
1800
+ "minItems": 1,
1801
+ "type": "array",
1802
+ "uniqueItems": true
1803
+ },
1804
+ "license": {
1805
+ "$ref": "#/definitions/license"
1806
+ },
1807
+ "license-url": {
1808
+ "$ref": "#/definitions/url",
1809
+ "description": "The URL of the license text under which the software or dataset is licensed (only for non-standard licenses not included in the SPDX License List)."
1810
+ },
1811
+ "message": {
1812
+ "default": "If you use this software, please cite it using the metadata from this file.",
1813
+ "description": "A message to the human reader of the file to let them know what to do with the citation metadata.",
1814
+ "examples": [
1815
+ "If you use this software, please cite it using the metadata from this file.",
1816
+ "Please cite this software using these metadata.",
1817
+ "Please cite this software using the metadata from 'preferred-citation'."
1818
+ ],
1819
+ "minLength": 1,
1820
+ "type": "string"
1821
+ },
1822
+ "preferred-citation": {
1823
+ "$ref": "#/definitions/reference",
1824
+ "description": "A reference to another work that should be cited instead of the software or dataset itself."
1825
+ },
1826
+ "references": {
1827
+ "description": "Reference(s) to other creative works.",
1828
+ "items": {
1829
+ "$ref": "#/definitions/reference"
1830
+ },
1831
+ "minItems": 1,
1832
+ "type": "array",
1833
+ "uniqueItems": true
1834
+ },
1835
+ "repository": {
1836
+ "$ref": "#/definitions/url",
1837
+ "description": "The URL of the software or dataset in a repository (when the repository is neither a source code repository nor a build artifact repository).",
1838
+ "examples": [
1839
+ "https://edoc.hu-berlin.de/handle/18452/23016",
1840
+ "https://ascl.net/2105.013"
1841
+ ]
1842
+ },
1843
+ "repository-artifact": {
1844
+ "$ref": "#/definitions/url",
1845
+ "description": "The URL of the software in a build artifact/binary repository."
1846
+ },
1847
+ "repository-code": {
1848
+ "$ref": "#/definitions/url",
1849
+ "description": "The URL of the software or dataset in a source code repository."
1850
+ },
1851
+ "title": {
1852
+ "description": "The name of the software or dataset.",
1853
+ "minLength": 1,
1854
+ "type": "string"
1855
+ },
1856
+ "type": {
1857
+ "default": "software",
1858
+ "description": "The type of the work.",
1859
+ "enum": [
1860
+ "dataset",
1861
+ "software"
1862
+ ],
1863
+ "type": "string"
1864
+ },
1865
+ "url": {
1866
+ "$ref": "#/definitions/url",
1867
+ "description": "The URL of a landing page/website for the software or dataset."
1868
+ },
1869
+ "version": {
1870
+ "$ref": "#/definitions/version",
1871
+ "description": "The version of the software or dataset."
1872
+ }
1873
+ },
1874
+ "required": [
1875
+ "authors",
1876
+ "cff-version",
1877
+ "message",
1878
+ "title"
1879
+ ],
1880
+ "title": "Citation File Format",
1881
+ "type": "object"
1882
+ }