qa 2.0.0 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (86) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +54 -6
  3. data/app/controllers/qa/application_controller.rb +24 -0
  4. data/app/controllers/qa/linked_data_terms_controller.rb +116 -51
  5. data/app/controllers/qa/terms_controller.rb +7 -2
  6. data/app/models/qa/mesh_tree.rb +5 -9
  7. data/app/models/qa/subject_mesh_term.rb +2 -7
  8. data/config/authorities/linked_data/agrovoc.json +8 -1
  9. data/config/initializers/linked_data_authorities.rb +1 -17
  10. data/config/routes.rb +11 -0
  11. data/lib/generators/qa/apidoc/USAGE +11 -0
  12. data/lib/generators/qa/apidoc/apidoc_generator.rb +22 -0
  13. data/lib/generators/qa/apidoc/templates/public/qa/apidoc/apidoc.json +1322 -0
  14. data/lib/generators/qa/apidoc/templates/public/qa/apidoc/favicon-16x16.png +0 -0
  15. data/lib/generators/qa/apidoc/templates/public/qa/apidoc/favicon-32x32.png +0 -0
  16. data/lib/generators/qa/apidoc/templates/public/qa/apidoc/index.html +61 -0
  17. data/lib/generators/qa/apidoc/templates/public/qa/apidoc/oauth2-redirect.html +67 -0
  18. data/lib/generators/qa/apidoc/templates/public/qa/apidoc/swagger-ui-bundle.js +93 -0
  19. data/lib/generators/qa/apidoc/templates/public/qa/apidoc/swagger-ui-bundle.js.map +1 -0
  20. data/lib/generators/qa/apidoc/templates/public/qa/apidoc/swagger-ui-standalone-preset.js +14 -0
  21. data/lib/generators/qa/apidoc/templates/public/qa/apidoc/swagger-ui-standalone-preset.js.map +1 -0
  22. data/lib/generators/qa/apidoc/templates/public/qa/apidoc/swagger-ui.css +3 -0
  23. data/lib/generators/qa/apidoc/templates/public/qa/apidoc/swagger-ui.css.map +1 -0
  24. data/lib/generators/qa/apidoc/templates/public/qa/apidoc/swagger-ui.js +9 -0
  25. data/lib/generators/qa/apidoc/templates/public/qa/apidoc/swagger-ui.js.map +1 -0
  26. data/lib/generators/qa/install/install_generator.rb +11 -0
  27. data/lib/generators/qa/install/templates/config/initializers/qa.rb +13 -0
  28. data/lib/generators/qa/local/tables/mysql/mysql_generator.rb +1 -1
  29. data/lib/generators/qa/local/tables/tables_generator.rb +1 -1
  30. data/lib/qa.rb +16 -0
  31. data/lib/qa/authorities/assign_fast_subauthority.rb +3 -3
  32. data/lib/qa/authorities/getty/aat.rb +13 -6
  33. data/lib/qa/authorities/getty/tgn.rb +11 -22
  34. data/lib/qa/authorities/getty/ulan.rb +13 -16
  35. data/lib/qa/authorities/linked_data.rb +1 -0
  36. data/lib/qa/authorities/linked_data/authority_service.rb +47 -0
  37. data/lib/qa/authorities/linked_data/config.rb +9 -3
  38. data/lib/qa/authorities/linked_data/config/search_config.rb +16 -2
  39. data/lib/qa/authorities/linked_data/config/term_config.rb +17 -3
  40. data/lib/qa/authorities/linked_data/find_term.rb +4 -3
  41. data/lib/qa/authorities/linked_data/generic_authority.rb +8 -1
  42. data/lib/qa/authorities/linked_data/rdf_helper.rb +15 -0
  43. data/lib/qa/authorities/linked_data/search_query.rb +19 -3
  44. data/lib/qa/authorities/loc/generic_authority.rb +2 -2
  45. data/lib/qa/authorities/loc_subauthority.rb +2 -2
  46. data/lib/qa/authorities/local.rb +2 -4
  47. data/lib/qa/authorities/local/file_based_authority.rb +1 -1
  48. data/lib/qa/authorities/local/mysql_table_based_authority.rb +11 -2
  49. data/lib/qa/authorities/local/table_based_authority.rb +2 -1
  50. data/lib/qa/authorities/mesh_tools/mesh_data_parser.rb +1 -1
  51. data/lib/qa/authorities/mesh_tools/mesh_importer.rb +1 -1
  52. data/lib/qa/authorities/oclcts/generic_oclc_authority.rb +1 -3
  53. data/lib/qa/configuration.rb +34 -0
  54. data/lib/qa/version.rb +1 -1
  55. data/lib/tasks/mesh.rake +3 -3
  56. data/spec/controllers/linked_data_terms_controller_spec.rb +247 -18
  57. data/spec/controllers/terms_controller_spec.rb +87 -12
  58. data/spec/fixtures/authorities/linked_data/lod_encoding_config.json +91 -0
  59. data/spec/fixtures/authorities/linked_data/lod_term_id_param_config.json +27 -0
  60. data/spec/fixtures/authorities/linked_data/lod_term_uri_param_config.json +27 -0
  61. data/spec/fixtures/{lexvo_snippet.rdf → lexvo_snippet.rdf.xml} +1 -0
  62. data/spec/lib/authorities/assign_fast_spec.rb +3 -1
  63. data/spec/lib/authorities/file_based_authority_spec.rb +19 -11
  64. data/spec/lib/authorities/geonames_spec.rb +3 -3
  65. data/spec/lib/authorities/getty/aat_spec.rb +14 -8
  66. data/spec/lib/authorities/getty/tgn_spec.rb +8 -15
  67. data/spec/lib/authorities/getty/ulan_spec.rb +8 -6
  68. data/spec/lib/authorities/getty_spec.rb +2 -1
  69. data/spec/lib/authorities/linked_data/authority_service_spec.rb +47 -0
  70. data/spec/lib/authorities/linked_data/generic_authority_spec.rb +56 -14
  71. data/spec/lib/authorities/linked_data/search_config_spec.rb +33 -19
  72. data/spec/lib/authorities/linked_data/search_query_spec.rb +67 -15
  73. data/spec/lib/authorities/linked_data/term_config_spec.rb +34 -20
  74. data/spec/lib/authorities/loc_spec.rb +9 -9
  75. data/spec/lib/authorities/local_spec.rb +7 -8
  76. data/spec/lib/authorities/oclcts_spec.rb +27 -20
  77. data/spec/lib/authorities/table_based_authority_spec.rb +5 -3
  78. data/spec/lib/authorities_loc_subauthorities.rb +2 -2
  79. data/spec/lib/configuration_spec.rb +58 -0
  80. data/spec/lib/mesh_data_parser_spec.rb +2 -0
  81. data/spec/lib/services/rdf_authority_parser_spec.rb +1 -1
  82. data/spec/lib/tasks/mesh.rake_spec.rb +13 -12
  83. data/spec/models/subject_mesh_term_spec.rb +2 -0
  84. data/spec/requests/cors_headers_spec.rb +118 -0
  85. data/spec/spec_helper.rb +2 -2
  86. metadata +167 -137
@@ -10,17 +10,12 @@ class Qa::SubjectMeshTerm < ActiveRecord::Base
10
10
  end
11
11
 
12
12
  def synonyms
13
- s = read_attribute(:synonyms)
13
+ s = self[:synonyms]
14
14
  s.nil? ? [] : s.split("|")
15
15
  end
16
16
 
17
17
  def synonyms=(syn_list)
18
- write_attribute(:synonyms,
19
- if syn_list.respond_to?(:join)
20
- syn_list.join('|')
21
- else
22
- syn_list
23
- end)
18
+ self[:synonyms] = syn_list.respond_to?(:join) ? syn_list.join('|') : syn_list
24
19
  end
25
20
 
26
21
  def parents
@@ -31,7 +31,7 @@
31
31
  "url": {
32
32
  "@context": "http://www.w3.org/ns/hydra/context.jsonld",
33
33
  "@type": "IriTemplate",
34
- "template": "http://artemide.art.uniroma2.it:8081/agrovoc/rest/v1/search/?query=*{?query}*&lang={?lang}",
34
+ "template": "http://artemide.art.uniroma2.it:8081/agrovoc/rest/v1/search/?query=*{?query}*&lang={?lang}&maxhits={?maxRecords}",
35
35
  "variableRepresentation": "BasicRepresentation",
36
36
  "mapping": [
37
37
  {
@@ -40,6 +40,13 @@
40
40
  "property": "hydra:freetextQuery",
41
41
  "required": true
42
42
  },
43
+ {
44
+ "@type": "IriTemplateMapping",
45
+ "variable": "maxRecords",
46
+ "property": "hydra:freetextQuery",
47
+ "required": false,
48
+ "default": "20"
49
+ },
43
50
  {
44
51
  "@type": "IriTemplateMapping",
45
52
  "variable": "lang",
@@ -1,17 +1 @@
1
- auth_cfg = {}
2
- # load QA configured linked data authorities
3
- Dir[File.join(Qa::Engine.root, 'config', 'authorities', 'linked_data', '*.json')].each do |fn|
4
- auth = File.basename(fn, '.json').upcase.to_sym
5
- json = File.read(File.expand_path(fn, __FILE__))
6
- cfg = JSON.parse(json).deep_symbolize_keys
7
- auth_cfg[auth] = cfg
8
- end
9
-
10
- # load app configured linked data authorities and overrides
11
- Dir[File.join(Rails.root, 'config', 'authorities', 'linked_data', '*.json')].each do |fn|
12
- auth = File.basename(fn, '.json').upcase.to_sym
13
- json = File.read(File.expand_path(fn, __FILE__))
14
- cfg = JSON.parse(json).deep_symbolize_keys
15
- auth_cfg[auth] = cfg
16
- end
17
- LINKED_DATA_AUTHORITIES_CONFIG = auth_cfg.freeze
1
+ Qa::Authorities::LinkedData::AuthorityService.load_authorities
@@ -1,9 +1,20 @@
1
1
  Qa::Engine.routes.draw do
2
+ get "/list/linked_data/authorities", controller: :linked_data_terms, action: :list
3
+ get "/reload/linked_data/authorities", controller: :linked_data_terms, action: :reload
2
4
  get "/search/linked_data/:vocab(/:subauthority)", controller: :linked_data_terms, action: :search
5
+ get "/fetch/linked_data/:vocab", controller: :linked_data_terms, action: :fetch
3
6
  get "/show/linked_data/:vocab/:id", controller: :linked_data_terms, action: :show
4
7
  get "/show/linked_data/:vocab/:subauthority/:id", controller: :linked_data_terms, action: :show
5
8
  get "/terms/:vocab(/:subauthority)", controller: :terms, action: :index
6
9
  get "/search/:vocab(/:subauthority)", controller: :terms, action: :search
7
10
  get "/show/:vocab/:id", controller: :terms, action: :show
8
11
  get "/show/:vocab/:subauthority/:id", controller: :terms, action: :show
12
+
13
+ match "/search/linked_data/:vocab(/:subauthority)", to: 'application#options', via: [:options]
14
+ match "/show/linked_data/:vocab/:id", to: 'application#options', via: [:options]
15
+ match "/show/linked_data/:vocab/:subauthority/:id", to: 'application#options', via: [:options]
16
+ match "/terms/:vocab(/:subauthority)", to: 'application#options', via: [:options]
17
+ match "/search/:vocab(/:subauthority)", to: 'application#options', via: [:options]
18
+ match "/show/:vocab/:id", to: 'application#options', via: [:options]
19
+ match "/show/:vocab/:subauthority/:id", to: 'application#options', via: [:options]
9
20
  end
@@ -0,0 +1,11 @@
1
+ Description:
2
+ This generator adds interactive documentation for the linked data API.
3
+
4
+ Example:
5
+ rails generate qa:apidoc
6
+
7
+ This will create:
8
+ public/qa/apidoc/*
9
+
10
+ You can access the UI at:
11
+ https://YOUR_APP_HOST/qa/apidoc/
@@ -0,0 +1,22 @@
1
+ class Qa::ApidocGenerator < Rails::Generators::Base
2
+ source_root File.expand_path('../templates', __FILE__)
3
+
4
+ desc """
5
+ This generator makes the following changes to your application:
6
+ 1. Add swagger-docs gem and bundle install
7
+ 2. Add swagger documentation for the QA linked data API
8
+
9
+ """
10
+
11
+ def add_to_gemfile
12
+ gem 'swagger-docs'
13
+
14
+ Bundler.with_clean_env do
15
+ run "bundle install"
16
+ end
17
+ end
18
+
19
+ def copy_api_docs
20
+ directory "public/qa/apidoc", recursive: false
21
+ end
22
+ end
@@ -0,0 +1,1322 @@
1
+ {
2
+ "openapi": "3.0.1",
3
+ "info": {
4
+ "title": "QA 2.2 Linked Data API",
5
+ "version": "2.2",
6
+ "license": {
7
+ "name": "Apache 2.0",
8
+ "url": "http://www.apache.org/licenses/LICENSE-2.0.html"
9
+ }
10
+ },
11
+ "servers": [
12
+ {
13
+ "url": "http://{site_host}/{apiBase}",
14
+ "description": "QA v2.2 API Server",
15
+ "variables": {
16
+ "site_host": {
17
+ "default": "localhost:3000",
18
+ "description": ""
19
+ },
20
+ "apiBase": {
21
+ "default": "qa"
22
+ }
23
+ }
24
+ }
25
+ ],
26
+ "paths": {
27
+ "/list/linked_data/authorities": {
28
+ "get": {
29
+ "summary": "List currently loaded linked data authorities",
30
+ "operationId": "GET_listAuthorities",
31
+ "tags": [
32
+ "Authority Management"
33
+ ],
34
+ "responses": {
35
+ "200": {
36
+ "description": "Successfully accessed authority and received results.",
37
+ "headers": {
38
+ "Access-Control-Allow-Origin": {
39
+ "description": "CORS header will be * if cors_headers_enabled",
40
+ "schema": {
41
+ "type": "string"
42
+ }
43
+ }
44
+ },
45
+ "content": {
46
+ "application/json": {
47
+ "schema": {
48
+ "$ref": "#/components/schemas/linked_data_authorities_list_result"
49
+ }
50
+ }
51
+ }
52
+ }
53
+ }
54
+ }
55
+ },
56
+ "/reload/linked_data/authorities": {
57
+ "get": {
58
+ "summary": "Reload linked data authorities. Using this command avoids having to restart the rails server.",
59
+ "operationId": "GET_reloadAuthorities",
60
+ "tags": [
61
+ "Authority Management"
62
+ ],
63
+ "parameters": [
64
+ {
65
+ "description": "Security token which must be included for this command to execute.",
66
+ "in": "query",
67
+ "name": "auth_token",
68
+ "required": true,
69
+ "schema": {
70
+ "default": "",
71
+ "type": "string"
72
+ }
73
+ }
74
+ ],
75
+ "responses": {
76
+ "200": {
77
+ "description": "Successfully reloaded authorities.",
78
+ "headers": {
79
+ "Access-Control-Allow-Origin": {
80
+ "description": "CORS header will be * if cors_headers_enabled",
81
+ "schema": {
82
+ "type": "string"
83
+ }
84
+ }
85
+ },
86
+ "content": {
87
+ "application/json": {
88
+ "schema": {
89
+ "$ref": "#/components/schemas/linked_data_authorities_list_result"
90
+ }
91
+ }
92
+ }
93
+ },
94
+ "401": {
95
+ "description": "Unauthorized",
96
+ "content": {
97
+ "text/plain": {
98
+ "schema": {
99
+ "type": "string",
100
+ "example": ""
101
+ }
102
+ }
103
+ }
104
+ }
105
+ }
106
+ }
107
+ },
108
+ "/search/linked_data/{vocab}": {
109
+ "get": {
110
+ "summary": "Send a query string to an authority and return search results. Parameters are typical examples. Actual parameters are driven by the authority's config file.",
111
+ "operationId": "GET_searchAuthority",
112
+ "tags": [
113
+ "Search Query"
114
+ ],
115
+ "parameters": [
116
+ {
117
+ "description": "Name of the authority's configuration file.",
118
+ "in": "path",
119
+ "name": "vocab",
120
+ "required": true,
121
+ "schema": {
122
+ "default": "oclc_fast",
123
+ "type": "string"
124
+ }
125
+ },
126
+ {
127
+ "description": "The query string",
128
+ "in": "query",
129
+ "name": "q",
130
+ "required": true,
131
+ "schema": {
132
+ "default": "science",
133
+ "type": "string"
134
+ }
135
+ },
136
+ {
137
+ "description": "Limit number of returned results. NOTE: Most authorities use maxRecords instead of maximumRecords for this parameter.",
138
+ "in": "query",
139
+ "name": "maximumRecords",
140
+ "required": false,
141
+ "schema": {
142
+ "default": 4,
143
+ "type": "integer"
144
+ }
145
+ },
146
+ {
147
+ "description": "Limit string values to this language when multiple languages are provided.",
148
+ "in": "query",
149
+ "name": "lang",
150
+ "required": false,
151
+ "schema": {
152
+ "default": "en",
153
+ "type": "string"
154
+ }
155
+ }
156
+ ],
157
+ "responses": {
158
+ "200": {
159
+ "description": "Successfully accessed authority and received results.",
160
+ "headers": {
161
+ "Access-Control-Allow-Origin": {
162
+ "description": "CORS header will be * if cors_headers_enabled",
163
+ "schema": {
164
+ "type": "string"
165
+ }
166
+ }
167
+ },
168
+ "content": {
169
+ "application/json": {
170
+ "schema": {
171
+ "$ref": "#/components/schemas/linked_data_query_results"
172
+ }
173
+ }
174
+ }
175
+ },
176
+ "400": {
177
+ "description": "Bad Request - occurs when required params are missing (e.g. q)",
178
+ "content": {
179
+ "text/plain": {
180
+ "schema": {
181
+ "type": "string",
182
+ "example": ""
183
+ }
184
+ }
185
+ }
186
+ },
187
+ "500": {
188
+ "description": "Internal Server Error - can be raised while attempting to access the external authority OR during processing of results when results are not a valid RDF Format",
189
+ "content": {
190
+ "text/plain": {
191
+ "schema": {
192
+ "type": "string",
193
+ "example": ""
194
+ }
195
+ }
196
+ }
197
+ },
198
+ "503": {
199
+ "description": "Service Unavailable - can be raised while attempting to access the external authority",
200
+ "content": {
201
+ "text/plain": {
202
+ "schema": {
203
+ "type": "string",
204
+ "example": ""
205
+ }
206
+ }
207
+ }
208
+ }
209
+ }
210
+ },
211
+ "options": {
212
+ "summary": "CORS preflight request",
213
+ "operationId": "OPTIONS_searchAuthority",
214
+ "tags": [
215
+ "Search Query"
216
+ ],
217
+ "parameters": [
218
+ {
219
+ "description": "Name of the authority's configuration file.",
220
+ "in": "path",
221
+ "name": "vocab",
222
+ "required": true,
223
+ "schema": {
224
+ "default": "oclc_fast",
225
+ "type": "string"
226
+ }
227
+ }
228
+ ],
229
+ "responses": {
230
+ "204": {
231
+ "description": "When CORS is enabled, perform CORS preflight for searching an authority",
232
+ "headers": {
233
+ "Access-Control-Allow-Origin": {
234
+ "description": "CORS header will be * if CORS headers are enabled",
235
+ "schema": {
236
+ "type": "string"
237
+ }
238
+ },
239
+ "Access-Control-Allow-Methods": {
240
+ "description": "Indicates which method a future CORS request to the same resource might use.",
241
+ "schema": {
242
+ "type": "string"
243
+ }
244
+ }
245
+ },
246
+ "content": {
247
+ "text/plain": {
248
+ "schema": {
249
+ "type": "string",
250
+ "example": ""
251
+ }
252
+ }
253
+ }
254
+ },
255
+ "501": {
256
+ "description": "OPTIONS action is not implement when CORS headers are not enabled",
257
+ "content": {
258
+ "text/plain": {
259
+ "schema": {
260
+ "type": "string",
261
+ "example": ""
262
+ }
263
+ }
264
+ }
265
+ }
266
+ }
267
+ }
268
+ },
269
+ "/search/linked_data/{vocab}/{subauthority}": {
270
+ "get": {
271
+ "summary": "Send a query string to a subauthority in an authority and return search results.",
272
+ "operationId": "GET_searchSubauthority",
273
+ "tags": [
274
+ "Search Query"
275
+ ],
276
+ "parameters": [
277
+ {
278
+ "description": "Name of the authority's configuration file.",
279
+ "in": "path",
280
+ "name": "vocab",
281
+ "required": true,
282
+ "schema": {
283
+ "default": "oclc_fast",
284
+ "type": "string"
285
+ }
286
+ },
287
+ {
288
+ "description": "Name of the subauthority.",
289
+ "in": "path",
290
+ "name": "subauthority",
291
+ "required": true,
292
+ "schema": {
293
+ "default": "personal_name",
294
+ "type": "string"
295
+ }
296
+ },
297
+ {
298
+ "description": "The query string",
299
+ "in": "query",
300
+ "name": "q",
301
+ "required": true,
302
+ "schema": {
303
+ "default": "twain",
304
+ "type": "string"
305
+ }
306
+ },
307
+ {
308
+ "description": "Limit number of returned results. NOTE: Most authorities use maxRecords instead of maximumRecords for this parameter.",
309
+ "in": "query",
310
+ "name": "maximumRecords",
311
+ "required": false,
312
+ "schema": {
313
+ "default": 4,
314
+ "type": "integer"
315
+ }
316
+ },
317
+ {
318
+ "description": "Limit string values to this language when multiple languages are provided.",
319
+ "in": "query",
320
+ "name": "lang",
321
+ "required": false,
322
+ "schema": {
323
+ "default": "en",
324
+ "type": "string"
325
+ }
326
+ }
327
+ ],
328
+ "responses": {
329
+ "200": {
330
+ "description": "Successfully accessed subauthority in an authority and received results.",
331
+ "headers": {
332
+ "Access-Control-Allow-Origin": {
333
+ "description": "CORS header will be * if CORS headers are enabled",
334
+ "schema": {
335
+ "type": "string"
336
+ }
337
+ }
338
+ },
339
+ "content": {
340
+ "application/json": {
341
+ "schema": {
342
+ "$ref": "#/components/schemas/linked_data_query_results"
343
+ }
344
+ }
345
+ }
346
+ },
347
+ "400": {
348
+ "description": "Bad Request - occurs when required params are missing (e.g. q)",
349
+ "content": {
350
+ "text/plain": {
351
+ "schema": {
352
+ "type": "string",
353
+ "example": ""
354
+ }
355
+ }
356
+ }
357
+ },
358
+ "500": {
359
+ "description": "Internal Server Error - can be raised while attempting to access the external authority OR during processing of results when results are not a valid RDF Format",
360
+ "content": {
361
+ "text/plain": {
362
+ "schema": {
363
+ "type": "string",
364
+ "example": ""
365
+ }
366
+ }
367
+ }
368
+ },
369
+ "503": {
370
+ "description": "Service Unavailable - can be raised while attempting to access the external authority",
371
+ "content": {
372
+ "text/plain": {
373
+ "schema": {
374
+ "type": "string",
375
+ "example": ""
376
+ }
377
+ }
378
+ }
379
+ }
380
+ }
381
+ },
382
+ "options": {
383
+ "summary": "CORS preflight request",
384
+ "operationId": "OPTIONS_searchSubauthority",
385
+ "tags": [
386
+ "Search Query"
387
+ ],
388
+ "parameters": [
389
+ {
390
+ "description": "Name of the authority's configuration file.",
391
+ "in": "path",
392
+ "name": "vocab",
393
+ "required": true,
394
+ "schema": {
395
+ "default": "oclc_fast",
396
+ "type": "string"
397
+ }
398
+ },
399
+ {
400
+ "description": "Name of the subauthority.",
401
+ "in": "path",
402
+ "name": "subauthority",
403
+ "required": true,
404
+ "schema": {
405
+ "default": "personal_name",
406
+ "type": "string"
407
+ }
408
+ }
409
+ ],
410
+ "responses": {
411
+ "204": {
412
+ "description": "Perform CORS preflight for searching a subauthoroity in an authority",
413
+ "headers": {
414
+ "Access-Control-Allow-Origin": {
415
+ "description": "CORS header will be * if CORS headers are enabled",
416
+ "schema": {
417
+ "type": "string"
418
+ }
419
+ },
420
+ "Access-Control-Allow-Methods": {
421
+ "description": "Indicates which method a future CORS request to the same resource might use.",
422
+ "schema": {
423
+ "type": "string"
424
+ }
425
+ }
426
+ },
427
+ "content": {
428
+ "text/plain": {
429
+ "schema": {
430
+ "type": "string",
431
+ "example": ""
432
+ }
433
+ }
434
+ }
435
+ },
436
+ "501": {
437
+ "description": "OPTIONS action is not implement when CORS headers are not enabled",
438
+ "content": {
439
+ "text/plain": {
440
+ "schema": {
441
+ "type": "string",
442
+ "example": ""
443
+ }
444
+ }
445
+ }
446
+ }
447
+ }
448
+ }
449
+ },
450
+ "/show/linked_data/{vocab}/{id}": {
451
+ "get": {
452
+ "operationId": "GET_fetchByIDFromAuthority",
453
+ "summary": "Get a single term from an authority. Generally there are no additional parameters. See the authority's configuration file to be sure. Some authorities support `lang` which can be used to filter the language of returned strings.",
454
+ "tags": [
455
+ "Fetch Term"
456
+ ],
457
+ "parameters": [
458
+ {
459
+ "description": "Name of the authority's configuration file.",
460
+ "in": "path",
461
+ "name": "vocab",
462
+ "required": true,
463
+ "schema": {
464
+ "default": "oclc_fast",
465
+ "type": "string"
466
+ }
467
+ },
468
+ {
469
+ "description": "The ID or URI for the term being retrieved.",
470
+ "in": "path",
471
+ "name": "id",
472
+ "required": true,
473
+ "schema": {
474
+ "default": "1914919",
475
+ "type": "string"
476
+ }
477
+ },
478
+ {
479
+ "description": "The format of the returned result.",
480
+ "in": "query",
481
+ "name": "format",
482
+ "required": false,
483
+ "schema": {
484
+ "default": "json",
485
+ "type": "string",
486
+ "enum": [
487
+ "json",
488
+ "jsonld"
489
+ ]
490
+ }
491
+ }
492
+ ],
493
+ "responses": {
494
+ "200": {
495
+ "description": "Successfully accessed authority and received term.",
496
+ "headers": {
497
+ "Access-Control-Allow-Origin": {
498
+ "description": "CORS header will be * if CORS headers are enabled",
499
+ "schema": {
500
+ "type": "string"
501
+ }
502
+ }
503
+ },
504
+ "content": {
505
+ "application/json": {
506
+ "schema": {
507
+ "$ref": "#/components/schemas/linked_data_term_json_result"
508
+ }
509
+ },
510
+ "application/ld+json": {
511
+ "schema": {
512
+ "$ref": "#/components/schemas/linked_data_term_jsonld_result"
513
+ }
514
+ }
515
+ }
516
+ },
517
+ "400": {
518
+ "description": "Bad Request - occurs when required params are missing (e.g. id)",
519
+ "content": {
520
+ "text/plain": {
521
+ "schema": {
522
+ "type": "string",
523
+ "example": ""
524
+ }
525
+ }
526
+ }
527
+ },
528
+ "404": {
529
+ "description": "Not Found",
530
+ "content": {
531
+ "text/plain": {
532
+ "schema": {
533
+ "type": "string",
534
+ "example": ""
535
+ }
536
+ }
537
+ }
538
+ },
539
+ "500": {
540
+ "description": "Internal Server Error - can be raised while attempting to access the external authority OR during processing of results when results are not a valid RDF Format",
541
+ "content": {
542
+ "text/plain": {
543
+ "schema": {
544
+ "type": "string",
545
+ "example": ""
546
+ }
547
+ }
548
+ }
549
+ },
550
+ "503": {
551
+ "description": "Service Unavailable - can be raised while attempting to access the external authority",
552
+ "content": {
553
+ "text/plain": {
554
+ "schema": {
555
+ "type": "string",
556
+ "example": ""
557
+ }
558
+ }
559
+ }
560
+ }
561
+ }
562
+ },
563
+ "options": {
564
+ "summary": "CORS preflight request",
565
+ "operationId": "OPTIONS_fetchFromAuthority",
566
+ "tags": [
567
+ "Fetch Term"
568
+ ],
569
+ "parameters": [
570
+ {
571
+ "description": "Name of the authority's configuration file.",
572
+ "in": "path",
573
+ "name": "vocab",
574
+ "required": true,
575
+ "schema": {
576
+ "default": "oclc_fast",
577
+ "type": "string"
578
+ }
579
+ },
580
+ {
581
+ "description": "The ID or URI for the term being retrieved.",
582
+ "in": "path",
583
+ "name": "id",
584
+ "required": true,
585
+ "schema": {
586
+ "default": "1914919",
587
+ "type": "string"
588
+ }
589
+ }
590
+ ],
591
+ "responses": {
592
+ "204": {
593
+ "description": "Perform CORS preflight for fetching a term from an authority",
594
+ "headers": {
595
+ "Access-Control-Allow-Origin": {
596
+ "description": "CORS header will be * if CORS headers are enabled",
597
+ "schema": {
598
+ "type": "string"
599
+ }
600
+ },
601
+ "Access-Control-Allow-Methods": {
602
+ "description": "Indicates which method a future CORS request to the same resource might use.",
603
+ "schema": {
604
+ "type": "string"
605
+ }
606
+ }
607
+ },
608
+ "content": {
609
+ "text/plain": {
610
+ "schema": {
611
+ "type": "string",
612
+ "example": ""
613
+ }
614
+ }
615
+ }
616
+ },
617
+ "501": {
618
+ "description": "OPTIONS action is not implement when CORS headers are not enabled",
619
+ "content": {
620
+ "text/plain": {
621
+ "schema": {
622
+ "type": "string",
623
+ "example": ""
624
+ }
625
+ }
626
+ }
627
+ }
628
+ }
629
+ }
630
+ },
631
+ "/show/linked_data/{vocab}/{subauthority}/{id}": {
632
+ "get": {
633
+ "operationId": "GET_fetchByIDFromSubauthority",
634
+ "summary": "Get a single term from a subauthority in an authority. Generally there are no additional parameters. See the authority's configuration file to be sure. Some authorities support `lang` which can be used to filter the language of returned strings.",
635
+ "tags": [
636
+ "Fetch Term"
637
+ ],
638
+ "parameters": [
639
+ {
640
+ "description": "Name of the authority's configuration file.",
641
+ "in": "path",
642
+ "name": "vocab",
643
+ "required": true,
644
+ "schema": {
645
+ "default": "loc",
646
+ "type": "string"
647
+ }
648
+ },
649
+ {
650
+ "description": "Name of the subauthority.",
651
+ "in": "path",
652
+ "name": "subauthority",
653
+ "required": true,
654
+ "schema": {
655
+ "default": "names",
656
+ "type": "string"
657
+ }
658
+ },
659
+ {
660
+ "description": "The ID or URI for the term being retrieved.",
661
+ "in": "path",
662
+ "name": "id",
663
+ "required": true,
664
+ "schema": {
665
+ "default": "n92016188",
666
+ "type": "string"
667
+ }
668
+ },
669
+ {
670
+ "description": "The format of the returned result.",
671
+ "in": "query",
672
+ "name": "format",
673
+ "required": false,
674
+ "schema": {
675
+ "default": "json",
676
+ "type": "string",
677
+ "enum": [
678
+ "json",
679
+ "jsonld"
680
+ ]
681
+ }
682
+ }
683
+ ],
684
+ "responses": {
685
+ "200": {
686
+ "description": "Successfully accessed subauthority in the authority and received term.",
687
+ "headers": {
688
+ "Access-Control-Allow-Origin": {
689
+ "description": "CORS header will be * if CORS headers are enabled",
690
+ "schema": {
691
+ "type": "string"
692
+ }
693
+ }
694
+ },
695
+ "content": {
696
+ "application/json": {
697
+ "schema": {
698
+ "$ref": "#/components/schemas/linked_data_term_json_result"
699
+ }
700
+ },
701
+ "application/ld+json": {
702
+ "schema": {
703
+ "$ref": "#/components/schemas/linked_data_term_jsonld_result"
704
+ }
705
+ }
706
+ }
707
+ },
708
+ "400": {
709
+ "description": "Bad Request - occurs when required params are missing (e.g. id)",
710
+ "content": {
711
+ "text/plain": {
712
+ "schema": {
713
+ "type": "string",
714
+ "example": ""
715
+ }
716
+ }
717
+ }
718
+ },
719
+ "404": {
720
+ "description": "Not Found",
721
+ "content": {
722
+ "text/plain": {
723
+ "schema": {
724
+ "type": "string",
725
+ "example": ""
726
+ }
727
+ }
728
+ }
729
+ },
730
+ "500": {
731
+ "description": "Internal Server Error - can be raised while attempting to access the external authority OR during processing of results when results are not a valid RDF Format",
732
+ "content": {
733
+ "text/plain": {
734
+ "schema": {
735
+ "type": "string",
736
+ "example": ""
737
+ }
738
+ }
739
+ }
740
+ },
741
+ "503": {
742
+ "description": "Service Unavailable - can be raised while attempting to access the external authority",
743
+ "content": {
744
+ "text/plain": {
745
+ "schema": {
746
+ "type": "string",
747
+ "example": ""
748
+ }
749
+ }
750
+ }
751
+ }
752
+ }
753
+ },
754
+ "options": {
755
+ "summary": "CORS preflight request",
756
+ "operationId": "OPTIONS_fetchFromSubauthority",
757
+ "tags": [
758
+ "Fetch Term"
759
+ ],
760
+ "parameters": [
761
+ {
762
+ "description": "Name of the authority's configuration file.",
763
+ "in": "path",
764
+ "name": "vocab",
765
+ "required": true,
766
+ "schema": {
767
+ "default": "loc",
768
+ "type": "string"
769
+ }
770
+ },
771
+ {
772
+ "description": "Name of the subauthority.",
773
+ "in": "path",
774
+ "name": "subauthority",
775
+ "required": true,
776
+ "schema": {
777
+ "default": "names",
778
+ "type": "string"
779
+ }
780
+ },
781
+ {
782
+ "description": "The ID or URI for the term being retrieved.",
783
+ "in": "path",
784
+ "name": "id",
785
+ "required": true,
786
+ "schema": {
787
+ "default": "n92016188",
788
+ "type": "string"
789
+ }
790
+ }
791
+ ],
792
+ "responses": {
793
+ "204": {
794
+ "description": "Perform CORS preflight for fetching a term from a subauthority in an authority",
795
+ "headers": {
796
+ "Access-Control-Allow-Origin": {
797
+ "description": "CORS header will be * if CORS headers are enabled",
798
+ "schema": {
799
+ "type": "string"
800
+ }
801
+ },
802
+ "Access-Control-Allow-Methods": {
803
+ "description": "Indicates which method a future CORS request to the same resource might use.",
804
+ "schema": {
805
+ "type": "string"
806
+ }
807
+ }
808
+ },
809
+ "content": {
810
+ "text/plain": {
811
+ "schema": {
812
+ "type": "string",
813
+ "example": ""
814
+ }
815
+ }
816
+ }
817
+ },
818
+ "501": {
819
+ "description": "OPTIONS action is not implement when CORS headers are not enabled",
820
+ "content": {
821
+ "text/plain": {
822
+ "schema": {
823
+ "type": "string",
824
+ "example": ""
825
+ }
826
+ }
827
+ }
828
+ }
829
+ }
830
+ }
831
+ },
832
+ "/fetch/linked_data/{vocab}": {
833
+ "get": {
834
+ "operationId": "GET_fetchURIFromAuthority",
835
+ "summary": "Get a single term from an authority given the term's URI. Generally there are no additional parameters. See the authority's configuration file to be sure. Some authorities support `lang` which can be used to filter the language of returned strings. NOTE: The authorities provided with QA do not support fetch by URI. See more authority configs at: https://github.com/LD4P/linked_data_authorities",
836
+ "tags": [
837
+ "Fetch Term"
838
+ ],
839
+ "parameters": [
840
+ {
841
+ "description": "Name of the authority's configuration file.",
842
+ "in": "path",
843
+ "name": "vocab",
844
+ "required": true,
845
+ "schema": {
846
+ "default": "loc",
847
+ "type": "string"
848
+ }
849
+ },
850
+ {
851
+ "description": "The URI for the term being retrieved.",
852
+ "in": "query",
853
+ "name": "uri",
854
+ "required": true,
855
+ "schema": {
856
+ "default": "http://id.loc.gov/authorities/genreForms/gf2011026141",
857
+ "type": "string"
858
+ }
859
+ },
860
+ {
861
+ "description": "The format of the returned result.",
862
+ "in": "query",
863
+ "name": "format",
864
+ "required": false,
865
+ "schema": {
866
+ "default": "json",
867
+ "type": "string",
868
+ "enum": [
869
+ "json",
870
+ "jsonld"
871
+ ]
872
+ }
873
+ }
874
+ ],
875
+ "responses": {
876
+ "200": {
877
+ "description": "Successfully accessed authority and received term.",
878
+ "headers": {
879
+ "Access-Control-Allow-Origin": {
880
+ "description": "CORS header will be * if CORS headers are enabled",
881
+ "schema": {
882
+ "type": "string"
883
+ }
884
+ }
885
+ },
886
+ "content": {
887
+ "application/json": {
888
+ "schema": {
889
+ "$ref": "#/components/schemas/linked_data_term_json_result"
890
+ }
891
+ },
892
+ "application/ld+json": {
893
+ "schema": {
894
+ "$ref": "#/components/schemas/linked_data_term_jsonld_result"
895
+ }
896
+ }
897
+ }
898
+ },
899
+ "400": {
900
+ "description": "Bad Request - occurs when required params are missing (e.g. uri)",
901
+ "content": {
902
+ "text/plain": {
903
+ "schema": {
904
+ "type": "string",
905
+ "example": ""
906
+ }
907
+ }
908
+ }
909
+ },
910
+ "404": {
911
+ "description": "Not Found",
912
+ "content": {
913
+ "text/plain": {
914
+ "schema": {
915
+ "type": "string",
916
+ "example": ""
917
+ }
918
+ }
919
+ }
920
+ },
921
+ "500": {
922
+ "description": "Internal Server Error - can be raised while attempting to access the external authority OR during processing of results when results are not a valid RDF Format",
923
+ "content": {
924
+ "text/plain": {
925
+ "schema": {
926
+ "type": "string",
927
+ "example": ""
928
+ }
929
+ }
930
+ }
931
+ },
932
+ "503": {
933
+ "description": "Service Unavailable - can be raised while attempting to access the external authority",
934
+ "content": {
935
+ "text/plain": {
936
+ "schema": {
937
+ "type": "string",
938
+ "example": ""
939
+ }
940
+ }
941
+ }
942
+ }
943
+ }
944
+ },
945
+ "options": {
946
+ "summary": "CORS preflight request",
947
+ "operationId": "OPTIONS_fetchFromAuthority",
948
+ "tags": [
949
+ "Fetch Term"
950
+ ],
951
+ "parameters": [
952
+ {
953
+ "description": "Name of the authority's configuration file.",
954
+ "in": "path",
955
+ "name": "vocab",
956
+ "required": true,
957
+ "schema": {
958
+ "default": "loc",
959
+ "type": "string"
960
+ }
961
+ },
962
+ {
963
+ "description": "The ID or URI for the term being retrieved.",
964
+ "in": "path",
965
+ "name": "id",
966
+ "required": true,
967
+ "schema": {
968
+ "default": "http://id.loc.gov/authorities/genreForms/gf2011026141",
969
+ "type": "string"
970
+ }
971
+ }
972
+ ],
973
+ "responses": {
974
+ "204": {
975
+ "description": "Perform CORS preflight for fetching a term from an authority",
976
+ "headers": {
977
+ "Access-Control-Allow-Origin": {
978
+ "description": "CORS header will be * if CORS headers are enabled",
979
+ "schema": {
980
+ "type": "string"
981
+ }
982
+ },
983
+ "Access-Control-Allow-Methods": {
984
+ "description": "Indicates which method a future CORS request to the same resource might use.",
985
+ "schema": {
986
+ "type": "string"
987
+ }
988
+ }
989
+ },
990
+ "content": {
991
+ "text/plain": {
992
+ "schema": {
993
+ "type": "string",
994
+ "example": ""
995
+ }
996
+ }
997
+ }
998
+ },
999
+ "501": {
1000
+ "description": "OPTIONS action is not implement when CORS headers are not enabled",
1001
+ "content": {
1002
+ "text/plain": {
1003
+ "schema": {
1004
+ "type": "string",
1005
+ "example": ""
1006
+ }
1007
+ }
1008
+ }
1009
+ }
1010
+ }
1011
+ }
1012
+ },
1013
+ "/fetch/linked_data/{vocab}/{subauthority}": {
1014
+ "get": {
1015
+ "operationId": "GET_fetchByURIFromSubauthority",
1016
+ "summary": "Get a single term from a subauthority in an authority given the term's URI. Generally there are no additional parameters. See the authority's configuration file to be sure. Some authorities support `lang` which can be used to filter the language of returned strings. NOTE: There currently aren't any authorities configured that support subauthorities and access terms using a URI instead of an ID. The default values in this example show what you might see but DO NOT WORK with the current LOC config.",
1017
+ "tags": [
1018
+ "Fetch Term"
1019
+ ],
1020
+ "parameters": [
1021
+ {
1022
+ "description": "Name of the authority's configuration file.",
1023
+ "in": "path",
1024
+ "name": "vocab",
1025
+ "required": true,
1026
+ "schema": {
1027
+ "default": "loc",
1028
+ "type": "string"
1029
+ }
1030
+ },
1031
+ {
1032
+ "description": "Name of the subauthority.",
1033
+ "in": "path",
1034
+ "name": "subauthority",
1035
+ "required": true,
1036
+ "schema": {
1037
+ "default": "names",
1038
+ "type": "string"
1039
+ }
1040
+ },
1041
+ {
1042
+ "description": "The URI for the term being retrieved.",
1043
+ "in": "query",
1044
+ "name": "uri",
1045
+ "required": true,
1046
+ "schema": {
1047
+ "default": "http://id.loc.gov/authorities/names/n92016188",
1048
+ "type": "string"
1049
+ }
1050
+ },
1051
+ {
1052
+ "description": "The format of the returned result.",
1053
+ "in": "query",
1054
+ "name": "format",
1055
+ "required": false,
1056
+ "schema": {
1057
+ "default": "json",
1058
+ "type": "string",
1059
+ "enum": [
1060
+ "json",
1061
+ "jsonld"
1062
+ ]
1063
+ }
1064
+ }
1065
+ ],
1066
+ "responses": {
1067
+ "200": {
1068
+ "description": "Successfully accessed subauthority in the authority and received term.",
1069
+ "headers": {
1070
+ "Access-Control-Allow-Origin": {
1071
+ "description": "CORS header will be * if CORS headers are enabled",
1072
+ "schema": {
1073
+ "type": "string"
1074
+ }
1075
+ }
1076
+ },
1077
+ "content": {
1078
+ "application/json": {
1079
+ "schema": {
1080
+ "$ref": "#/components/schemas/linked_data_term_json_result"
1081
+ }
1082
+ },
1083
+ "application/ld+json": {
1084
+ "schema": {
1085
+ "$ref": "#/components/schemas/linked_data_term_jsonld_result"
1086
+ }
1087
+ }
1088
+ }
1089
+ },
1090
+ "400": {
1091
+ "description": "Bad Request - occurs when required params are missing (e.g. uri)",
1092
+ "content": {
1093
+ "text/plain": {
1094
+ "schema": {
1095
+ "type": "string",
1096
+ "example": ""
1097
+ }
1098
+ }
1099
+ }
1100
+ },
1101
+ "404": {
1102
+ "description": "Not Found",
1103
+ "content": {
1104
+ "text/plain": {
1105
+ "schema": {
1106
+ "type": "string",
1107
+ "example": ""
1108
+ }
1109
+ }
1110
+ }
1111
+ },
1112
+ "500": {
1113
+ "description": "Internal Server Error - can be raised while attempting to access the external authority OR during processing of results when results are not a valid RDF Format",
1114
+ "content": {
1115
+ "text/plain": {
1116
+ "schema": {
1117
+ "type": "string",
1118
+ "example": ""
1119
+ }
1120
+ }
1121
+ }
1122
+ },
1123
+ "503": {
1124
+ "description": "Service Unavailable - can be raised while attempting to access the external authority",
1125
+ "content": {
1126
+ "text/plain": {
1127
+ "schema": {
1128
+ "type": "string",
1129
+ "example": ""
1130
+ }
1131
+ }
1132
+ }
1133
+ }
1134
+ }
1135
+ },
1136
+ "options": {
1137
+ "summary": "CORS preflight request",
1138
+ "operationId": "OPTIONS_fetchFromSubauthority",
1139
+ "tags": [
1140
+ "Fetch Term"
1141
+ ],
1142
+ "parameters": [
1143
+ {
1144
+ "description": "Name of the authority's configuration file.",
1145
+ "in": "path",
1146
+ "name": "vocab",
1147
+ "required": true,
1148
+ "schema": {
1149
+ "default": "loc",
1150
+ "type": "string"
1151
+ }
1152
+ },
1153
+ {
1154
+ "description": "Name of the subauthority.",
1155
+ "in": "path",
1156
+ "name": "subauthority",
1157
+ "required": true,
1158
+ "schema": {
1159
+ "default": "names",
1160
+ "type": "string"
1161
+ }
1162
+ },
1163
+ {
1164
+ "description": "The URI for the term being retrieved.",
1165
+ "in": "path",
1166
+ "name": "id",
1167
+ "required": true,
1168
+ "schema": {
1169
+ "default": "http://id.loc.gov/authorities/names/n92016188",
1170
+ "type": "string"
1171
+ }
1172
+ }
1173
+ ],
1174
+ "responses": {
1175
+ "204": {
1176
+ "description": "Perform CORS preflight for fetching a term from a subauthority in an authority",
1177
+ "headers": {
1178
+ "Access-Control-Allow-Origin": {
1179
+ "description": "CORS header will be * if CORS headers are enabled",
1180
+ "schema": {
1181
+ "type": "string"
1182
+ }
1183
+ },
1184
+ "Access-Control-Allow-Methods": {
1185
+ "description": "Indicates which method a future CORS request to the same resource might use.",
1186
+ "schema": {
1187
+ "type": "string"
1188
+ }
1189
+ }
1190
+ },
1191
+ "content": {
1192
+ "text/plain": {
1193
+ "schema": {
1194
+ "type": "string",
1195
+ "example": ""
1196
+ }
1197
+ }
1198
+ }
1199
+ },
1200
+ "501": {
1201
+ "description": "OPTIONS action is not implement when CORS headers are not enabled",
1202
+ "content": {
1203
+ "text/plain": {
1204
+ "schema": {
1205
+ "type": "string",
1206
+ "example": ""
1207
+ }
1208
+ }
1209
+ }
1210
+ }
1211
+ }
1212
+ }
1213
+ }
1214
+ },
1215
+ "components": {
1216
+ "schemas": {
1217
+ "linked_data_authorities_list_result": {
1218
+ "type": "array",
1219
+ "items": {
1220
+ "type": "string"
1221
+ }
1222
+ },
1223
+ "linked_data_query_results": {
1224
+ "type": "array",
1225
+ "items": {
1226
+ "required": [
1227
+ "id",
1228
+ "uri",
1229
+ "label"
1230
+ ],
1231
+ "properties": {
1232
+ "id": {
1233
+ "type": "string"
1234
+ },
1235
+ "uri": {
1236
+ "type": "string"
1237
+ },
1238
+ "label": {
1239
+ "type": "string"
1240
+ },
1241
+ "context": {
1242
+ "type": "object"
1243
+ }
1244
+ }
1245
+ }
1246
+ },
1247
+ "linked_data_term_json_result": {
1248
+ "required": [
1249
+ "id",
1250
+ "uri",
1251
+ "label"
1252
+ ],
1253
+ "properties": {
1254
+ "id": {
1255
+ "type": "string"
1256
+ },
1257
+ "uri": {
1258
+ "type": "string"
1259
+ },
1260
+ "label": {
1261
+ "type": "string"
1262
+ },
1263
+ "altlabel": {
1264
+ "type": "array",
1265
+ "items": {
1266
+ "type": "string"
1267
+ }
1268
+ },
1269
+ "broader": {
1270
+ "type": "array",
1271
+ "items": {
1272
+ "type": "string"
1273
+ }
1274
+ },
1275
+ "narrower": {
1276
+ "type": "array",
1277
+ "items": {
1278
+ "type": "string"
1279
+ }
1280
+ },
1281
+ "sameas": {
1282
+ "type": "array",
1283
+ "items": {
1284
+ "type": "string"
1285
+ }
1286
+ },
1287
+ "predicates": {
1288
+ "type": "object",
1289
+ }
1290
+ }
1291
+ },
1292
+ "linked_data_term_jsonld_result": {
1293
+ "required": [
1294
+ "@context",
1295
+ "@graph"
1296
+ ],
1297
+ "properties": {
1298
+ "@context": {
1299
+ "type": "object"
1300
+ },
1301
+ "@graph": {
1302
+ "type": "object"
1303
+ }
1304
+ }
1305
+ }
1306
+ }
1307
+ },
1308
+ "tags": [
1309
+ {
1310
+ "name": "Authority Management",
1311
+ "description": "Services managing all authorities."
1312
+ },
1313
+ {
1314
+ "name": "Search Query",
1315
+ "description": "Services sending a search query to an authority to retrieve multiple results."
1316
+ },
1317
+ {
1318
+ "name": "Fetch Term",
1319
+ "description": "Services to fetch a single term from an authority."
1320
+ }
1321
+ ]
1322
+ }