cff 0.4.0 → 0.8.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.
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
+ }