@objectstack/spec 0.1.1 → 0.1.2

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.
Files changed (136) hide show
  1. package/README.md +73 -1
  2. package/dist/api/contract.zod.d.ts +1733 -0
  3. package/dist/api/contract.zod.d.ts.map +1 -0
  4. package/dist/api/contract.zod.js +138 -0
  5. package/dist/data/dataset.zod.d.ts +2 -2
  6. package/dist/data/field.zod.d.ts +1648 -10
  7. package/dist/data/field.zod.d.ts.map +1 -1
  8. package/dist/data/field.zod.js +149 -8
  9. package/dist/data/mapping.zod.d.ts +215 -2
  10. package/dist/data/mapping.zod.d.ts.map +1 -1
  11. package/dist/data/object.zod.d.ts +505 -25
  12. package/dist/data/object.zod.d.ts.map +1 -1
  13. package/dist/data/object.zod.js +32 -5
  14. package/dist/data/query.zod.d.ts +349 -0
  15. package/dist/data/query.zod.d.ts.map +1 -1
  16. package/dist/data/query.zod.js +77 -1
  17. package/dist/data/trigger.zod.d.ts +354 -0
  18. package/dist/data/trigger.zod.d.ts.map +1 -0
  19. package/dist/data/trigger.zod.js +195 -0
  20. package/dist/data/validation.zod.d.ts +83 -43
  21. package/dist/data/validation.zod.d.ts.map +1 -1
  22. package/dist/data/validation.zod.js +51 -5
  23. package/dist/index.d.ts +8 -0
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +9 -0
  26. package/dist/system/api.zod.d.ts +130 -4
  27. package/dist/system/api.zod.d.ts.map +1 -1
  28. package/dist/system/api.zod.js +4 -1
  29. package/dist/system/datasource.zod.d.ts +89 -6
  30. package/dist/system/datasource.zod.d.ts.map +1 -1
  31. package/dist/system/datasource.zod.js +33 -5
  32. package/dist/system/discovery.zod.d.ts +174 -0
  33. package/dist/system/discovery.zod.d.ts.map +1 -0
  34. package/dist/system/discovery.zod.js +53 -0
  35. package/dist/system/driver.zod.d.ts +1525 -0
  36. package/dist/system/driver.zod.d.ts.map +1 -0
  37. package/dist/system/driver.zod.js +290 -0
  38. package/dist/system/license.zod.d.ts +2 -2
  39. package/dist/system/manifest.zod.d.ts +323 -52
  40. package/dist/system/manifest.zod.d.ts.map +1 -1
  41. package/dist/system/manifest.zod.js +91 -17
  42. package/dist/system/plugin.zod.d.ts +3516 -0
  43. package/dist/system/plugin.zod.d.ts.map +1 -0
  44. package/dist/system/plugin.zod.js +226 -0
  45. package/dist/system/territory.zod.d.ts +1 -1
  46. package/dist/system/webhook.zod.d.ts +3 -3
  47. package/dist/ui/action.zod.d.ts +19 -12
  48. package/dist/ui/action.zod.d.ts.map +1 -1
  49. package/dist/ui/action.zod.js +7 -1
  50. package/dist/ui/app.zod.d.ts +109 -3
  51. package/dist/ui/app.zod.d.ts.map +1 -1
  52. package/dist/ui/app.zod.js +13 -2
  53. package/dist/ui/dashboard.zod.d.ts +9 -3
  54. package/dist/ui/dashboard.zod.d.ts.map +1 -1
  55. package/dist/ui/dashboard.zod.js +7 -1
  56. package/dist/ui/page.zod.d.ts +6 -6
  57. package/dist/ui/report.zod.d.ts +9 -0
  58. package/dist/ui/report.zod.d.ts.map +1 -1
  59. package/dist/ui/report.zod.js +7 -1
  60. package/dist/ui/theme.zod.d.ts +1221 -0
  61. package/dist/ui/theme.zod.d.ts.map +1 -0
  62. package/dist/ui/theme.zod.js +202 -0
  63. package/dist/ui/widget.zod.d.ts +350 -0
  64. package/dist/ui/widget.zod.d.ts.map +1 -0
  65. package/dist/ui/widget.zod.js +66 -0
  66. package/json-schema/Action.json +8 -2
  67. package/json-schema/ActionParam.json +8 -2
  68. package/json-schema/Address.json +40 -0
  69. package/json-schema/AggregationFunction.json +19 -0
  70. package/json-schema/AggregationNode.json +42 -0
  71. package/json-schema/Animation.json +56 -0
  72. package/json-schema/ApiCapabilities.json +28 -0
  73. package/json-schema/ApiError.json +27 -0
  74. package/json-schema/ApiRoutes.json +41 -0
  75. package/json-schema/App.json +13 -2
  76. package/json-schema/AsyncValidation.json +70 -0
  77. package/json-schema/BaseResponse.json +63 -0
  78. package/json-schema/BorderRadius.json +44 -0
  79. package/json-schema/Breakpoints.json +36 -0
  80. package/json-schema/BulkRequest.json +29 -0
  81. package/json-schema/BulkResponse.json +108 -0
  82. package/json-schema/ColorPalette.json +83 -0
  83. package/json-schema/ConditionalValidation.json +793 -0
  84. package/json-schema/CreateRequest.json +20 -0
  85. package/json-schema/CrossFieldValidation.json +56 -0
  86. package/json-schema/CustomValidator.json +57 -0
  87. package/json-schema/Datasource.json +0 -18
  88. package/json-schema/DeleteResponse.json +68 -0
  89. package/json-schema/Discovery.json +114 -0
  90. package/json-schema/DriverCapabilities.json +39 -0
  91. package/json-schema/DriverDefinition.json +66 -0
  92. package/json-schema/DriverInterface.json +58 -0
  93. package/json-schema/DriverOptions.json +23 -0
  94. package/json-schema/DriverType.json +1 -18
  95. package/json-schema/ExportRequest.json +786 -0
  96. package/json-schema/Field.json +75 -4
  97. package/json-schema/FieldType.json +8 -2
  98. package/json-schema/FieldWidgetProps.json +327 -0
  99. package/json-schema/I18nContext.json +12 -0
  100. package/json-schema/JoinNode.json +455 -0
  101. package/json-schema/JoinType.json +15 -0
  102. package/json-schema/ListRecordResponse.json +103 -0
  103. package/json-schema/LocationCoordinates.json +36 -0
  104. package/json-schema/Logger.json +25 -0
  105. package/json-schema/Manifest.json +243 -18
  106. package/json-schema/Mapping.json +328 -0
  107. package/json-schema/ModificationResult.json +46 -0
  108. package/json-schema/Object.json +103 -6
  109. package/json-schema/ObjectCapabilities.json +26 -0
  110. package/json-schema/ObjectQLClient.json +12 -0
  111. package/json-schema/Plugin.json +20 -0
  112. package/json-schema/PluginContext.json +91 -0
  113. package/json-schema/PluginLifecycle.json +11 -0
  114. package/json-schema/Query.json +328 -0
  115. package/json-schema/RecordData.json +11 -0
  116. package/json-schema/Router.json +12 -0
  117. package/json-schema/Scheduler.json +12 -0
  118. package/json-schema/ScopedStorage.json +12 -0
  119. package/json-schema/Shadow.json +44 -0
  120. package/json-schema/SingleRecordResponse.json +69 -0
  121. package/json-schema/Spacing.json +64 -0
  122. package/json-schema/SystemAPI.json +12 -0
  123. package/json-schema/Theme.json +543 -0
  124. package/json-schema/ThemeMode.json +14 -0
  125. package/json-schema/Trigger.json +73 -0
  126. package/json-schema/TriggerAction.json +14 -0
  127. package/json-schema/TriggerContext.json +61 -0
  128. package/json-schema/TriggerTiming.json +13 -0
  129. package/json-schema/Typography.json +142 -0
  130. package/json-schema/UpdateRequest.json +20 -0
  131. package/json-schema/ValidationRule.json +583 -0
  132. package/json-schema/WindowFunction.json +24 -0
  133. package/json-schema/WindowFunctionNode.json +104 -0
  134. package/json-schema/WindowSpec.json +65 -0
  135. package/json-schema/ZIndex.json +44 -0
  136. package/package.json +8 -3
@@ -38,38 +38,263 @@
38
38
  },
39
39
  "description": "Array of required permission strings"
40
40
  },
41
- "menus": {
41
+ "objects": {
42
+ "type": "array",
43
+ "items": {
44
+ "type": "string"
45
+ },
46
+ "description": "Glob patterns for ObjectQL schemas files"
47
+ },
48
+ "datasources": {
49
+ "type": "array",
50
+ "items": {
51
+ "type": "string"
52
+ },
53
+ "description": "Glob patterns for Datasource definitions"
54
+ },
55
+ "dependencies": {
56
+ "type": "object",
57
+ "additionalProperties": {
58
+ "type": "string"
59
+ },
60
+ "description": "Package dependencies"
61
+ },
62
+ "configuration": {
63
+ "type": "object",
64
+ "properties": {
65
+ "title": {
66
+ "type": "string"
67
+ },
68
+ "properties": {
69
+ "type": "object",
70
+ "additionalProperties": {
71
+ "type": "object",
72
+ "properties": {
73
+ "type": {
74
+ "type": "string",
75
+ "enum": [
76
+ "string",
77
+ "number",
78
+ "boolean",
79
+ "array",
80
+ "object"
81
+ ],
82
+ "description": "Data type of the setting"
83
+ },
84
+ "default": {
85
+ "description": "Default value"
86
+ },
87
+ "description": {
88
+ "type": "string",
89
+ "description": "Tooltip description"
90
+ },
91
+ "required": {
92
+ "type": "boolean",
93
+ "description": "Is this setting required?"
94
+ },
95
+ "secret": {
96
+ "type": "boolean",
97
+ "description": "If true, value is encrypted/masked (e.g. API Keys)"
98
+ },
99
+ "enum": {
100
+ "type": "array",
101
+ "items": {
102
+ "type": "string"
103
+ },
104
+ "description": "Allowed values for select inputs"
105
+ }
106
+ },
107
+ "required": [
108
+ "type"
109
+ ],
110
+ "additionalProperties": false
111
+ },
112
+ "description": "Map of configuration keys to their definitions"
113
+ }
114
+ },
115
+ "required": [
116
+ "properties"
117
+ ],
118
+ "additionalProperties": false,
119
+ "description": "Plugin configuration settings"
120
+ },
121
+ "contributes": {
122
+ "type": "object",
123
+ "properties": {
124
+ "kinds": {
125
+ "type": "array",
126
+ "items": {
127
+ "type": "object",
128
+ "properties": {
129
+ "id": {
130
+ "type": "string",
131
+ "description": "The generic identifier of the kind (e.g., \"sys.bi.report\")"
132
+ },
133
+ "globs": {
134
+ "type": "array",
135
+ "items": {
136
+ "type": "string"
137
+ },
138
+ "description": "File patterns to watch (e.g., [\"**/*.report.ts\"])"
139
+ },
140
+ "description": {
141
+ "type": "string",
142
+ "description": "Description of what this kind represents"
143
+ }
144
+ },
145
+ "required": [
146
+ "id",
147
+ "globs"
148
+ ],
149
+ "additionalProperties": false
150
+ },
151
+ "description": "New Metadata Types to recognize"
152
+ },
153
+ "events": {
154
+ "type": "array",
155
+ "items": {
156
+ "type": "string"
157
+ },
158
+ "description": "Events this plugin listens to"
159
+ },
160
+ "menus": {
161
+ "type": "object",
162
+ "additionalProperties": {
163
+ "type": "array",
164
+ "items": {
165
+ "type": "object",
166
+ "properties": {
167
+ "id": {
168
+ "type": "string"
169
+ },
170
+ "label": {
171
+ "type": "string"
172
+ },
173
+ "command": {
174
+ "type": "string"
175
+ }
176
+ },
177
+ "required": [
178
+ "id",
179
+ "label"
180
+ ],
181
+ "additionalProperties": false
182
+ }
183
+ },
184
+ "description": "UI Menu contributions"
185
+ },
186
+ "themes": {
187
+ "type": "array",
188
+ "items": {
189
+ "type": "object",
190
+ "properties": {
191
+ "id": {
192
+ "type": "string"
193
+ },
194
+ "label": {
195
+ "type": "string"
196
+ },
197
+ "path": {
198
+ "type": "string"
199
+ }
200
+ },
201
+ "required": [
202
+ "id",
203
+ "label",
204
+ "path"
205
+ ],
206
+ "additionalProperties": false
207
+ },
208
+ "description": "Theme contributions"
209
+ },
210
+ "translations": {
211
+ "type": "array",
212
+ "items": {
213
+ "type": "object",
214
+ "properties": {
215
+ "locale": {
216
+ "type": "string"
217
+ },
218
+ "path": {
219
+ "type": "string"
220
+ }
221
+ },
222
+ "required": [
223
+ "locale",
224
+ "path"
225
+ ],
226
+ "additionalProperties": false
227
+ },
228
+ "description": "Translation resources"
229
+ },
230
+ "actions": {
231
+ "type": "array",
232
+ "items": {
233
+ "type": "object",
234
+ "properties": {
235
+ "name": {
236
+ "type": "string",
237
+ "description": "Unique action name"
238
+ },
239
+ "label": {
240
+ "type": "string"
241
+ },
242
+ "description": {
243
+ "type": "string"
244
+ },
245
+ "input": {
246
+ "description": "Input validation schema"
247
+ },
248
+ "output": {
249
+ "description": "Output schema"
250
+ }
251
+ },
252
+ "required": [
253
+ "name"
254
+ ],
255
+ "additionalProperties": false
256
+ },
257
+ "description": "Exposed server actions"
258
+ }
259
+ },
260
+ "additionalProperties": false,
261
+ "description": "Platform contributions"
262
+ },
263
+ "data": {
42
264
  "type": "array",
43
265
  "items": {
44
266
  "type": "object",
45
267
  "properties": {
46
- "label": {
268
+ "object": {
47
269
  "type": "string",
48
- "description": "Display label for the menu item"
270
+ "description": "Target Object Name"
49
271
  },
50
- "path": {
51
- "type": "string",
52
- "description": "Navigation path (route) for the menu item"
272
+ "records": {
273
+ "type": "array",
274
+ "items": {
275
+ "type": "object",
276
+ "additionalProperties": {}
277
+ },
278
+ "description": "List of records to insert"
53
279
  },
54
- "icon": {
280
+ "mode": {
55
281
  "type": "string",
56
- "description": "Optional icon identifier for the menu item"
282
+ "enum": [
283
+ "upsert",
284
+ "insert",
285
+ "ignore"
286
+ ],
287
+ "default": "upsert",
288
+ "description": "Seeding mode"
57
289
  }
58
290
  },
59
291
  "required": [
60
- "label",
61
- "path"
292
+ "object",
293
+ "records"
62
294
  ],
63
295
  "additionalProperties": false
64
296
  },
65
- "description": "Navigation menu structure"
66
- },
67
- "objects": {
68
- "type": "array",
69
- "items": {
70
- "type": "string"
71
- },
72
- "description": "Glob patterns for ObjectQL schemas files"
297
+ "description": "Initial seed data"
73
298
  },
74
299
  "extensions": {
75
300
  "type": "object",
@@ -158,6 +158,148 @@
158
158
  },
159
159
  "description": "Fields to retrieve"
160
160
  },
161
+ "aggregations": {
162
+ "type": "array",
163
+ "items": {
164
+ "type": "object",
165
+ "properties": {
166
+ "function": {
167
+ "type": "string",
168
+ "enum": [
169
+ "count",
170
+ "sum",
171
+ "avg",
172
+ "min",
173
+ "max",
174
+ "count_distinct",
175
+ "array_agg",
176
+ "string_agg"
177
+ ],
178
+ "description": "Aggregation function"
179
+ },
180
+ "field": {
181
+ "type": "string",
182
+ "description": "Field to aggregate (optional for COUNT(*))"
183
+ },
184
+ "alias": {
185
+ "type": "string",
186
+ "description": "Result column alias"
187
+ },
188
+ "distinct": {
189
+ "type": "boolean",
190
+ "description": "Apply DISTINCT before aggregation"
191
+ }
192
+ },
193
+ "required": [
194
+ "function",
195
+ "alias"
196
+ ],
197
+ "additionalProperties": false
198
+ },
199
+ "description": "Aggregation functions (GROUP BY)"
200
+ },
201
+ "windowFunctions": {
202
+ "type": "array",
203
+ "items": {
204
+ "type": "object",
205
+ "properties": {
206
+ "function": {
207
+ "type": "string",
208
+ "enum": [
209
+ "row_number",
210
+ "rank",
211
+ "dense_rank",
212
+ "percent_rank",
213
+ "lag",
214
+ "lead",
215
+ "first_value",
216
+ "last_value",
217
+ "sum",
218
+ "avg",
219
+ "count",
220
+ "min",
221
+ "max"
222
+ ],
223
+ "description": "Window function name"
224
+ },
225
+ "field": {
226
+ "type": "string",
227
+ "description": "Field to operate on (for aggregate window functions)"
228
+ },
229
+ "alias": {
230
+ "type": "string",
231
+ "description": "Result column alias"
232
+ },
233
+ "over": {
234
+ "type": "object",
235
+ "properties": {
236
+ "partitionBy": {
237
+ "type": "array",
238
+ "items": {
239
+ "type": "string"
240
+ },
241
+ "description": "PARTITION BY fields"
242
+ },
243
+ "orderBy": {
244
+ "type": "array",
245
+ "items": {
246
+ "type": "object",
247
+ "properties": {
248
+ "field": {
249
+ "type": "string"
250
+ },
251
+ "order": {
252
+ "type": "string",
253
+ "enum": [
254
+ "asc",
255
+ "desc"
256
+ ],
257
+ "default": "asc"
258
+ }
259
+ },
260
+ "required": [
261
+ "field"
262
+ ],
263
+ "additionalProperties": false
264
+ },
265
+ "description": "ORDER BY specification"
266
+ },
267
+ "frame": {
268
+ "type": "object",
269
+ "properties": {
270
+ "type": {
271
+ "type": "string",
272
+ "enum": [
273
+ "rows",
274
+ "range"
275
+ ]
276
+ },
277
+ "start": {
278
+ "type": "string",
279
+ "description": "Frame start (e.g., \"UNBOUNDED PRECEDING\", \"1 PRECEDING\")"
280
+ },
281
+ "end": {
282
+ "type": "string",
283
+ "description": "Frame end (e.g., \"CURRENT ROW\", \"1 FOLLOWING\")"
284
+ }
285
+ },
286
+ "additionalProperties": false,
287
+ "description": "Window frame specification"
288
+ }
289
+ },
290
+ "additionalProperties": false,
291
+ "description": "Window specification (OVER clause)"
292
+ }
293
+ },
294
+ "required": [
295
+ "function",
296
+ "alias",
297
+ "over"
298
+ ],
299
+ "additionalProperties": false
300
+ },
301
+ "description": "Window functions with OVER clause"
302
+ },
161
303
  "filters": {
162
304
  "anyOf": [
163
305
  {
@@ -205,6 +347,188 @@
205
347
  ],
206
348
  "description": "Filtering criteria"
207
349
  },
350
+ "joins": {
351
+ "type": "array",
352
+ "items": {
353
+ "type": "object",
354
+ "properties": {
355
+ "type": {
356
+ "type": "string",
357
+ "enum": [
358
+ "inner",
359
+ "left",
360
+ "right",
361
+ "full"
362
+ ],
363
+ "description": "Join type"
364
+ },
365
+ "object": {
366
+ "type": "string",
367
+ "description": "Object/table to join"
368
+ },
369
+ "alias": {
370
+ "type": "string",
371
+ "description": "Table alias"
372
+ },
373
+ "on": {
374
+ "anyOf": [
375
+ {
376
+ "type": "array",
377
+ "minItems": 3,
378
+ "maxItems": 3,
379
+ "items": [
380
+ {
381
+ "type": "string"
382
+ },
383
+ {
384
+ "type": "string",
385
+ "enum": [
386
+ "=",
387
+ "!=",
388
+ "<>",
389
+ ">",
390
+ ">=",
391
+ "<",
392
+ "<=",
393
+ "startswith",
394
+ "contains",
395
+ "notcontains",
396
+ "between",
397
+ "in",
398
+ "notin",
399
+ "is_null",
400
+ "is_not_null"
401
+ ]
402
+ },
403
+ {}
404
+ ]
405
+ },
406
+ {
407
+ "type": "array",
408
+ "items": {
409
+ "anyOf": [
410
+ {
411
+ "type": "string"
412
+ },
413
+ {
414
+ "anyOf": [
415
+ {
416
+ "type": "array",
417
+ "minItems": 3,
418
+ "maxItems": 3,
419
+ "items": [
420
+ {
421
+ "type": "string"
422
+ },
423
+ {
424
+ "type": "string",
425
+ "enum": [
426
+ "=",
427
+ "!=",
428
+ "<>",
429
+ ">",
430
+ ">=",
431
+ "<",
432
+ "<=",
433
+ "startswith",
434
+ "contains",
435
+ "notcontains",
436
+ "between",
437
+ "in",
438
+ "notin",
439
+ "is_null",
440
+ "is_not_null"
441
+ ]
442
+ },
443
+ {}
444
+ ]
445
+ },
446
+ {
447
+ "type": "array",
448
+ "items": {
449
+ "anyOf": [
450
+ {
451
+ "type": "string"
452
+ },
453
+ {}
454
+ ]
455
+ }
456
+ }
457
+ ]
458
+ }
459
+ ]
460
+ }
461
+ }
462
+ ],
463
+ "description": "Join condition"
464
+ },
465
+ "subquery": {
466
+ "description": "Subquery instead of object"
467
+ }
468
+ },
469
+ "required": [
470
+ "type",
471
+ "object",
472
+ "on"
473
+ ],
474
+ "additionalProperties": false
475
+ },
476
+ "description": "Table joins"
477
+ },
478
+ "groupBy": {
479
+ "type": "array",
480
+ "items": {
481
+ "type": "string"
482
+ },
483
+ "description": "GROUP BY fields"
484
+ },
485
+ "having": {
486
+ "anyOf": [
487
+ {
488
+ "type": "array",
489
+ "minItems": 3,
490
+ "maxItems": 3,
491
+ "items": [
492
+ {
493
+ "type": "string"
494
+ },
495
+ {
496
+ "type": "string",
497
+ "enum": [
498
+ "=",
499
+ "!=",
500
+ "<>",
501
+ ">",
502
+ ">=",
503
+ "<",
504
+ "<=",
505
+ "startswith",
506
+ "contains",
507
+ "notcontains",
508
+ "between",
509
+ "in",
510
+ "notin",
511
+ "is_null",
512
+ "is_not_null"
513
+ ]
514
+ },
515
+ {}
516
+ ]
517
+ },
518
+ {
519
+ "type": "array",
520
+ "items": {
521
+ "anyOf": [
522
+ {
523
+ "type": "string"
524
+ },
525
+ {}
526
+ ]
527
+ }
528
+ }
529
+ ],
530
+ "description": "HAVING clause for aggregation filtering"
531
+ },
208
532
  "sort": {
209
533
  "type": "array",
210
534
  "items": {
@@ -236,6 +560,10 @@
236
560
  "skip": {
237
561
  "type": "number",
238
562
  "description": "Offset results"
563
+ },
564
+ "distinct": {
565
+ "type": "boolean",
566
+ "description": "SELECT DISTINCT flag"
239
567
  }
240
568
  },
241
569
  "required": [
@@ -0,0 +1,46 @@
1
+ {
2
+ "$ref": "#/definitions/ModificationResult",
3
+ "definitions": {
4
+ "ModificationResult": {
5
+ "type": "object",
6
+ "properties": {
7
+ "id": {
8
+ "type": "string",
9
+ "description": "Record ID if processed"
10
+ },
11
+ "success": {
12
+ "type": "boolean"
13
+ },
14
+ "errors": {
15
+ "type": "array",
16
+ "items": {
17
+ "type": "object",
18
+ "properties": {
19
+ "code": {
20
+ "type": "string",
21
+ "description": "Error code (e.g. validation_error)"
22
+ },
23
+ "message": {
24
+ "type": "string",
25
+ "description": "Readable error message"
26
+ },
27
+ "details": {
28
+ "description": "Additional error context (e.g. field validation errors)"
29
+ }
30
+ },
31
+ "required": [
32
+ "code",
33
+ "message"
34
+ ],
35
+ "additionalProperties": false
36
+ }
37
+ }
38
+ },
39
+ "required": [
40
+ "success"
41
+ ],
42
+ "additionalProperties": false
43
+ }
44
+ },
45
+ "$schema": "http://json-schema.org/draft-07/schema#"
46
+ }