jsi 0.8.2 → 0.9.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.
Files changed (146) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +3 -2
  3. data/CHANGELOG.md +8 -3
  4. data/LICENSE.md +2 -3
  5. data/README.md +68 -31
  6. data/docs/Glossary.md +313 -0
  7. data/jsi.gemspec +1 -0
  8. data/lib/jsi/base/mutability.rb +4 -0
  9. data/lib/jsi/base/node.rb +63 -24
  10. data/lib/jsi/base.rb +556 -173
  11. data/lib/jsi/metaschema_node/bootstrap_schema.rb +106 -56
  12. data/lib/jsi/metaschema_node.rb +227 -160
  13. data/lib/jsi/ptr.rb +32 -15
  14. data/lib/jsi/ref.rb +197 -0
  15. data/lib/jsi/registry.rb +311 -0
  16. data/lib/jsi/schema/cxt/child_application.rb +35 -0
  17. data/lib/jsi/schema/cxt/inplace_application.rb +37 -0
  18. data/lib/jsi/schema/cxt.rb +80 -0
  19. data/lib/jsi/schema/dialect.rb +137 -0
  20. data/lib/jsi/schema/draft04.rb +113 -5
  21. data/lib/jsi/schema/draft06.rb +123 -5
  22. data/lib/jsi/schema/draft07.rb +157 -5
  23. data/lib/jsi/schema/draft202012.rb +303 -0
  24. data/lib/jsi/schema/dynamic_anchor_map.rb +63 -0
  25. data/lib/jsi/schema/element.rb +69 -0
  26. data/lib/jsi/schema/elements/anchor.rb +13 -0
  27. data/lib/jsi/schema/elements/array_validation.rb +82 -0
  28. data/lib/jsi/schema/elements/comment.rb +10 -0
  29. data/lib/jsi/schema/{validation → elements}/const.rb +11 -7
  30. data/lib/jsi/schema/elements/contains.rb +59 -0
  31. data/lib/jsi/schema/elements/contains_minmax.rb +91 -0
  32. data/lib/jsi/schema/elements/content_encoding.rb +10 -0
  33. data/lib/jsi/schema/elements/content_media_type.rb +10 -0
  34. data/lib/jsi/schema/elements/content_schema.rb +16 -0
  35. data/lib/jsi/schema/elements/default.rb +11 -0
  36. data/lib/jsi/schema/elements/definitions.rb +19 -0
  37. data/lib/jsi/schema/elements/dependencies.rb +99 -0
  38. data/lib/jsi/schema/elements/dependent_required.rb +49 -0
  39. data/lib/jsi/schema/elements/dependent_schemas.rb +69 -0
  40. data/lib/jsi/schema/elements/dynamic_ref.rb +69 -0
  41. data/lib/jsi/schema/elements/enum.rb +26 -0
  42. data/lib/jsi/schema/elements/examples.rb +10 -0
  43. data/lib/jsi/schema/elements/format.rb +10 -0
  44. data/lib/jsi/schema/elements/id.rb +30 -0
  45. data/lib/jsi/schema/elements/if_then_else.rb +82 -0
  46. data/lib/jsi/schema/elements/info_bool.rb +10 -0
  47. data/lib/jsi/schema/elements/info_string.rb +10 -0
  48. data/lib/jsi/schema/elements/items.rb +93 -0
  49. data/lib/jsi/schema/elements/items_prefixed.rb +96 -0
  50. data/lib/jsi/schema/elements/not.rb +31 -0
  51. data/lib/jsi/schema/elements/numeric.rb +137 -0
  52. data/lib/jsi/schema/elements/numeric_draft04.rb +77 -0
  53. data/lib/jsi/schema/elements/object_validation.rb +55 -0
  54. data/lib/jsi/schema/elements/pattern.rb +35 -0
  55. data/lib/jsi/schema/elements/properties.rb +145 -0
  56. data/lib/jsi/schema/elements/property_names.rb +48 -0
  57. data/lib/jsi/schema/elements/ref.rb +62 -0
  58. data/lib/jsi/schema/elements/required.rb +34 -0
  59. data/lib/jsi/schema/elements/self.rb +24 -0
  60. data/lib/jsi/schema/elements/some_of.rb +180 -0
  61. data/lib/jsi/schema/elements/string_validation.rb +57 -0
  62. data/lib/jsi/schema/elements/type.rb +43 -0
  63. data/lib/jsi/schema/elements/unevaluated_items.rb +54 -0
  64. data/lib/jsi/schema/elements/unevaluated_properties.rb +54 -0
  65. data/lib/jsi/schema/elements/xschema.rb +10 -0
  66. data/lib/jsi/schema/elements/xvocabulary.rb +10 -0
  67. data/lib/jsi/schema/elements.rb +101 -0
  68. data/lib/jsi/schema/issue.rb +3 -4
  69. data/lib/jsi/schema/schema_ancestor_node.rb +103 -50
  70. data/lib/jsi/schema/vocabulary.rb +36 -0
  71. data/lib/jsi/schema.rb +519 -337
  72. data/lib/jsi/schema_classes.rb +168 -124
  73. data/lib/jsi/schema_set.rb +67 -126
  74. data/lib/jsi/set.rb +23 -0
  75. data/lib/jsi/simple_wrap.rb +13 -16
  76. data/lib/jsi/struct.rb +57 -0
  77. data/lib/jsi/uri.rb +40 -0
  78. data/lib/jsi/util/private/memo_map.rb +9 -13
  79. data/lib/jsi/util/private.rb +57 -12
  80. data/lib/jsi/util/typelike.rb +19 -64
  81. data/lib/jsi/util.rb +52 -34
  82. data/lib/jsi/validation/error.rb +41 -2
  83. data/lib/jsi/validation/result.rb +118 -71
  84. data/lib/jsi/validation.rb +1 -6
  85. data/lib/jsi/version.rb +1 -1
  86. data/lib/jsi.rb +158 -41
  87. data/lib/schemas/json-schema.org/draft/2020-12/schema.rb +67 -0
  88. data/lib/schemas/json-schema.org/draft-04/schema.rb +63 -106
  89. data/lib/schemas/json-schema.org/draft-06/schema.rb +56 -105
  90. data/lib/schemas/json-schema.org/draft-07/schema.rb +67 -124
  91. data/readme.rb +3 -3
  92. data/{resources}/schemas/2020-12_strict.json +19 -0
  93. data/{resources}/schemas/json-schema.org/draft/2020-12/meta/applicator.json +48 -0
  94. data/{resources}/schemas/json-schema.org/draft/2020-12/meta/content.json +17 -0
  95. data/{resources}/schemas/json-schema.org/draft/2020-12/meta/core.json +51 -0
  96. data/{resources}/schemas/json-schema.org/draft/2020-12/meta/format-annotation.json +14 -0
  97. data/{resources}/schemas/json-schema.org/draft/2020-12/meta/format-assertion.json +14 -0
  98. data/{resources}/schemas/json-schema.org/draft/2020-12/meta/meta-data.json +37 -0
  99. data/{resources}/schemas/json-schema.org/draft/2020-12/meta/unevaluated.json +15 -0
  100. data/{resources}/schemas/json-schema.org/draft/2020-12/meta/validation.json +98 -0
  101. data/{resources}/schemas/json-schema.org/draft/2020-12/schema.json +58 -0
  102. metadata +69 -47
  103. data/lib/jsi/schema/application/child_application/contains.rb +0 -25
  104. data/lib/jsi/schema/application/child_application/draft04.rb +0 -21
  105. data/lib/jsi/schema/application/child_application/draft06.rb +0 -28
  106. data/lib/jsi/schema/application/child_application/draft07.rb +0 -28
  107. data/lib/jsi/schema/application/child_application/items.rb +0 -18
  108. data/lib/jsi/schema/application/child_application/properties.rb +0 -25
  109. data/lib/jsi/schema/application/child_application.rb +0 -13
  110. data/lib/jsi/schema/application/draft04.rb +0 -8
  111. data/lib/jsi/schema/application/draft06.rb +0 -8
  112. data/lib/jsi/schema/application/draft07.rb +0 -8
  113. data/lib/jsi/schema/application/inplace_application/dependencies.rb +0 -28
  114. data/lib/jsi/schema/application/inplace_application/draft04.rb +0 -25
  115. data/lib/jsi/schema/application/inplace_application/draft06.rb +0 -26
  116. data/lib/jsi/schema/application/inplace_application/draft07.rb +0 -32
  117. data/lib/jsi/schema/application/inplace_application/ifthenelse.rb +0 -20
  118. data/lib/jsi/schema/application/inplace_application/ref.rb +0 -18
  119. data/lib/jsi/schema/application/inplace_application/someof.rb +0 -44
  120. data/lib/jsi/schema/application/inplace_application.rb +0 -14
  121. data/lib/jsi/schema/application.rb +0 -12
  122. data/lib/jsi/schema/ref.rb +0 -186
  123. data/lib/jsi/schema/validation/array.rb +0 -69
  124. data/lib/jsi/schema/validation/contains.rb +0 -25
  125. data/lib/jsi/schema/validation/dependencies.rb +0 -49
  126. data/lib/jsi/schema/validation/draft04/minmax.rb +0 -93
  127. data/lib/jsi/schema/validation/draft04.rb +0 -110
  128. data/lib/jsi/schema/validation/draft06.rb +0 -120
  129. data/lib/jsi/schema/validation/draft07.rb +0 -157
  130. data/lib/jsi/schema/validation/enum.rb +0 -25
  131. data/lib/jsi/schema/validation/ifthenelse.rb +0 -46
  132. data/lib/jsi/schema/validation/items.rb +0 -54
  133. data/lib/jsi/schema/validation/not.rb +0 -20
  134. data/lib/jsi/schema/validation/numeric.rb +0 -121
  135. data/lib/jsi/schema/validation/object.rb +0 -45
  136. data/lib/jsi/schema/validation/pattern.rb +0 -34
  137. data/lib/jsi/schema/validation/properties.rb +0 -101
  138. data/lib/jsi/schema/validation/property_names.rb +0 -32
  139. data/lib/jsi/schema/validation/ref.rb +0 -40
  140. data/lib/jsi/schema/validation/required.rb +0 -27
  141. data/lib/jsi/schema/validation/someof.rb +0 -90
  142. data/lib/jsi/schema/validation/string.rb +0 -47
  143. data/lib/jsi/schema/validation/type.rb +0 -49
  144. data/lib/jsi/schema/validation.rb +0 -49
  145. data/lib/jsi/schema_registry.rb +0 -200
  146. data/lib/jsi/util/private/attr_struct.rb +0 -141
@@ -1,15 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module JSI
4
- metaschema_document = ::JSON.parse(SCHEMAS_PATH.join('json-schema.org/draft-06/schema.json').read)
5
- JSONSchemaDraft06 = JSI.new_metaschema_module(metaschema_document,
6
- schema_implementation_modules: [JSI::Schema::Draft06],
7
- )
4
+ metaschema_document = Util.json_parse_freeze(SCHEMAS_PATH.join('json-schema.org/draft-06/schema.json').read)
5
+ JSONSchemaDraft06 = JSI.new_metaschema_node(metaschema_document,
6
+ dialect: JSI::Schema::Draft06::DIALECT,
7
+ ).jsi_schema_module
8
8
 
9
9
  # the JSI schema module for `http://json-schema.org/draft-06/schema`
10
10
  module JSONSchemaDraft06
11
11
  # @!parse extend JSI::SchemaModule::MetaSchemaModule
12
- # @!parse include JSI::Schema::Draft06
13
12
 
14
13
 
15
14
  Id = properties['$id']
@@ -57,93 +56,50 @@ module JSI
57
56
  SimpleType = definitions['simpleTypes']
58
57
  StringArray = definitions['stringArray']
59
58
 
60
- module Id
61
- end
62
- module Xschema
63
- end
64
- module Ref
65
- end
66
- module Title
67
- end
68
- module Description
69
- end
70
- module Default
71
- end
72
- module Examples
73
- end
74
- module MultipleOf
75
- end
76
- module Maximum
77
- end
78
- module ExclusiveMaximum
79
- end
80
- module Minimum
81
- end
82
- module ExclusiveMinimum
83
- end
84
- module MaxLength
85
- end
86
- module MinLength
87
- end
88
- module Pattern
89
- end
90
- module AdditionalItems
91
- end
92
- module Items
93
- end
94
- module MaxItems
95
- end
96
- module MinItems
97
- end
98
- module UniqueItems
99
- end
100
- module Contains
101
- end
102
- module MaxProperties
103
- end
104
- module MinProperties
105
- end
106
- module Required
107
- end
108
- module AdditionalProperties
109
- end
110
- module Definitions
111
- end
112
- module Properties
113
- end
114
- module PatternProperties
115
- end
116
- module Dependencies
117
- end
118
- module PropertyNames
119
- end
120
- module Const
121
- end
122
- module Enum
123
- end
124
- module Type
125
- end
126
- module Format
127
- end
128
- module AllOf
129
- end
130
- module AnyOf
131
- end
132
- module OneOf
133
- end
134
- module Not
135
- end
59
+ module Id end
60
+ module Xschema end
61
+ module Ref end
62
+ module Title end
63
+ module Description end
64
+ module Default end
65
+ module Examples end
66
+ module MultipleOf end
67
+ module Maximum end
68
+ module ExclusiveMaximum end
69
+ module Minimum end
70
+ module ExclusiveMinimum end
71
+ module MaxLength end
72
+ module MinLength end
73
+ module Pattern end
74
+ module AdditionalItems end
75
+ module Items end
76
+ module MaxItems end
77
+ module MinItems end
78
+ module UniqueItems end
79
+ module Contains end
80
+ module MaxProperties end
81
+ module MinProperties end
82
+ module Required end
83
+ module AdditionalProperties end
84
+ module Definitions end
85
+ module Properties end
86
+ module PatternProperties end
87
+ module Dependencies end
88
+ module PropertyNames end
89
+ module Const end
90
+ module Enum end
91
+ module Type end
92
+ module Format end
93
+ module AllOf end
94
+ module AnyOf end
95
+ module OneOf end
96
+ module Not end
136
97
 
137
- module SchemaArray
138
- end
139
- module NonNegativeInteger
140
- end
141
- module NonNegativeIntegerDefault0
142
- end
143
- module SimpleType
144
- end
145
- module StringArray
146
- end
98
+ module SchemaArray end
99
+ module NonNegativeInteger end
100
+ module NonNegativeIntegerDefault0 end
101
+ module SimpleType end
102
+ module StringArray end
147
103
 
148
104
  Example = Examples.items
149
105
  Dependencies::Dependency = Dependencies.additionalProperties
@@ -151,21 +107,16 @@ module JSI
151
107
  NonNegativeIntegerDefault0::Default0 = NonNegativeIntegerDefault0.allOf[1]
152
108
  StringItem = StringArray.items
153
109
 
154
- module Example
155
- end
156
- module Dependencies::Dependency
157
- end
158
- module Type::Array
159
- end
160
- module NonNegativeIntegerDefault0::Default0
161
- end
162
- module StringItem
163
- end
110
+ module Example end
111
+ module Dependencies::Dependency end
112
+ module Type::Array end
113
+ module NonNegativeIntegerDefault0::Default0 end
114
+ module StringItem end
164
115
  end
165
116
 
166
- JSONSchemaOrgDraft06 = JSONSchemaDraft06
167
-
168
- # @deprecated after v0.7.0, alias of {JSONSchemaDraft06}
169
- module JSONSchemaOrgDraft06
117
+ module JSONSchemaDraft06::PropertyReaders
118
+ def ref(**kw) self['$ref', **kw] end
119
+ def format(**kw) self['format', **kw] end
170
120
  end
121
+ JSONSchemaDraft06.include(JSONSchemaDraft06::PropertyReaders)
171
122
  end
@@ -1,15 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module JSI
4
- metaschema_document = ::JSON.parse(SCHEMAS_PATH.join('json-schema.org/draft-07/schema.json').read)
5
- JSONSchemaDraft07 = JSI.new_metaschema_module(metaschema_document,
6
- schema_implementation_modules: [JSI::Schema::Draft07],
7
- )
4
+ metaschema_document = Util.json_parse_freeze(SCHEMAS_PATH.join('json-schema.org/draft-07/schema.json').read)
5
+ JSONSchemaDraft07 = JSI.new_metaschema_node(metaschema_document,
6
+ dialect: JSI::Schema::Draft07::DIALECT,
7
+ ).jsi_schema_module
8
8
 
9
9
  # the JSI schema module for `http://json-schema.org/draft-07/schema`
10
10
  module JSONSchemaDraft07
11
11
  # @!parse extend JSI::SchemaModule::MetaSchemaModule
12
- # @!parse include JSI::Schema::Draft07
13
12
 
14
13
 
15
14
  Id = properties['$id']
@@ -64,135 +63,79 @@ module JSI
64
63
  SimpleType = definitions['simpleTypes']
65
64
  StringArray = definitions['stringArray']
66
65
 
67
- module Id
68
- end
69
- module Xschema
70
- end
71
- module Ref
72
- end
73
- module Comment
74
- end
75
- module Title
76
- end
77
- module Description
78
- end
79
- module Default
80
- end
81
- module ReadOnly
82
- end
83
- module Examples
84
- end
85
- module MultipleOf
86
- end
87
- module Maximum
88
- end
89
- module ExclusiveMaximum
90
- end
91
- module Minimum
92
- end
93
- module ExclusiveMinimum
94
- end
95
- module MaxLength
96
- end
97
- module MinLength
98
- end
99
- module Pattern
100
- end
101
- module AdditionalItems
102
- end
103
- module Items
104
- end
105
- module MaxItems
106
- end
107
- module MinItems
108
- end
109
- module UniqueItems
110
- end
111
- module Contains
112
- end
113
- module MaxProperties
114
- end
115
- module MinProperties
116
- end
117
- module Required
118
- end
119
- module AdditionalProperties
120
- end
121
- module Definitions
122
- end
123
- module Properties
124
- end
125
- module PatternProperties
126
- end
127
- module Dependencies
128
- end
129
- module PropertyNames
130
- end
131
- module Const
132
- end
133
- module Enum
134
- end
135
- module Type
136
- end
137
- module Format
138
- end
139
- module ContentMediaType
140
- end
141
- module ContentEncoding
142
- end
143
- module If
144
- end
145
- module Then
146
- end
147
- module Else
148
- end
149
- module AllOf
150
- end
151
- module AnyOf
152
- end
153
- module OneOf
154
- end
155
- module Not
156
- end
66
+ module Id end
67
+ module Xschema end
68
+ module Ref end
69
+ module Comment end
70
+ module Title end
71
+ module Description end
72
+ module Default end
73
+ module ReadOnly end
74
+ module Examples end
75
+ module MultipleOf end
76
+ module Maximum end
77
+ module ExclusiveMaximum end
78
+ module Minimum end
79
+ module ExclusiveMinimum end
80
+ module MaxLength end
81
+ module MinLength end
82
+ module Pattern end
83
+ module AdditionalItems end
84
+ module Items end
85
+ module MaxItems end
86
+ module MinItems end
87
+ module UniqueItems end
88
+ module Contains end
89
+ module MaxProperties end
90
+ module MinProperties end
91
+ module Required end
92
+ module AdditionalProperties end
93
+ module Definitions end
94
+ module Properties end
95
+ module PatternProperties end
96
+ module Dependencies end
97
+ module PropertyNames end
98
+ module Const end
99
+ module Enum end
100
+ module Type end
101
+ module Format end
102
+ module ContentMediaType end
103
+ module ContentEncoding end
104
+ module If end
105
+ module Then end
106
+ module Else end
107
+ module AllOf end
108
+ module AnyOf end
109
+ module OneOf end
110
+ module Not end
157
111
 
158
- module SchemaArray
159
- end
160
- module NonNegativeInteger
161
- end
162
- module NonNegativeIntegerDefault0
163
- end
164
- module SimpleType
165
- end
166
- module StringArray
167
- end
112
+ module SchemaArray end
113
+ module NonNegativeInteger end
114
+ module NonNegativeIntegerDefault0 end
115
+ module SimpleType end
116
+ module StringArray end
168
117
 
169
118
  Example = Examples.items
170
- PatternPropertyPattern = PatternProperties.propertyNames
119
+ PatternProperties::Pattern = PatternProperties.propertyNames
171
120
  Dependencies::Dependency = Dependencies.additionalProperties
172
121
  Enum::Item = Enum.items
173
122
  Type::Array = Type.anyOf[1]
174
123
  NonNegativeIntegerDefault0::Default0 = NonNegativeIntegerDefault0.allOf[1]
175
124
  StringItem = StringArray.items
176
125
 
177
- module Example
178
- end
179
- module PatternPropertyPattern
180
- end
181
- module Dependencies::Dependency
182
- end
183
- module Enum::Item
184
- end
185
- module Type::Array
186
- end
187
- module NonNegativeIntegerDefault0::Default0
188
- end
189
- module StringItem
190
- end
126
+ module Example end
127
+ module PatternProperties::Pattern end
128
+ module Dependencies::Dependency end
129
+ module Enum::Item end
130
+ module Type::Array end
131
+ module NonNegativeIntegerDefault0::Default0 end
132
+ module StringItem end
191
133
  end
192
134
 
193
- JSONSchemaOrgDraft07 = JSONSchemaDraft07
194
-
195
- # @deprecated after v0.7.0, alias of {JSONSchemaDraft07}
196
- module JSONSchemaOrgDraft07
135
+ module JSONSchemaDraft07::PropertyReaders
136
+ def ref(**kw) self['$ref', **kw] end
137
+ def comment(**kw) self['$comment', **kw] end
138
+ def format(**kw) self['format', **kw] end
197
139
  end
140
+ JSONSchemaDraft07.include(JSONSchemaDraft07::PropertyReaders)
198
141
  end
data/readme.rb CHANGED
@@ -78,11 +78,11 @@ bad = Contact.new_jsi({'phone' => [{'number' => [5, 5, 5]}]})
78
78
  print 'bad: '
79
79
  pp bad
80
80
 
81
- print 'bad.phone.jsi_validate: '
82
- pp bad.phone.jsi_validate
81
+ print 'bad.phone[0].jsi_validate: '
82
+ pp bad.phone[0].jsi_validate
83
83
 
84
84
  print 'bill.transform_values(&:size): '
85
- pp bill.transform_values(&:size)
85
+ pp bill.transform_values(&:size) if Hash.method_defined?(:transform_values)
86
86
 
87
87
  print "bill['nickname']: "
88
88
  pp bill['nickname']
@@ -0,0 +1,19 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://json-schema.org/draft/2020-12/strict",
4
+ "$vocabulary": {
5
+ "https://json-schema.org/draft/2020-12/vocab/core": true,
6
+ "https://json-schema.org/draft/2020-12/vocab/applicator": true,
7
+ "https://json-schema.org/draft/2020-12/vocab/unevaluated": true,
8
+ "https://json-schema.org/draft/2020-12/vocab/validation": true,
9
+ "https://json-schema.org/draft/2020-12/vocab/meta-data": true,
10
+ "https://json-schema.org/draft/2020-12/vocab/format-annotation": true,
11
+ "https://json-schema.org/draft/2020-12/vocab/content": true
12
+ },
13
+ "$dynamicAnchor": "meta",
14
+
15
+ "title": "Strict version of Core and Validation specifications meta-schema, disallowing all unknown keywords",
16
+ "$ref": "https://json-schema.org/draft/2020-12/schema",
17
+
18
+ "unevaluatedProperties": false
19
+ }
@@ -0,0 +1,48 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://json-schema.org/draft/2020-12/meta/applicator",
4
+ "$vocabulary": {
5
+ "https://json-schema.org/draft/2020-12/vocab/applicator": true
6
+ },
7
+ "$dynamicAnchor": "meta",
8
+
9
+ "title": "Applicator vocabulary meta-schema",
10
+ "type": ["object", "boolean"],
11
+ "properties": {
12
+ "prefixItems": { "$ref": "#/$defs/schemaArray" },
13
+ "items": { "$dynamicRef": "#meta" },
14
+ "contains": { "$dynamicRef": "#meta" },
15
+ "additionalProperties": { "$dynamicRef": "#meta" },
16
+ "properties": {
17
+ "type": "object",
18
+ "additionalProperties": { "$dynamicRef": "#meta" },
19
+ "default": {}
20
+ },
21
+ "patternProperties": {
22
+ "type": "object",
23
+ "additionalProperties": { "$dynamicRef": "#meta" },
24
+ "propertyNames": { "format": "regex" },
25
+ "default": {}
26
+ },
27
+ "dependentSchemas": {
28
+ "type": "object",
29
+ "additionalProperties": { "$dynamicRef": "#meta" },
30
+ "default": {}
31
+ },
32
+ "propertyNames": { "$dynamicRef": "#meta" },
33
+ "if": { "$dynamicRef": "#meta" },
34
+ "then": { "$dynamicRef": "#meta" },
35
+ "else": { "$dynamicRef": "#meta" },
36
+ "allOf": { "$ref": "#/$defs/schemaArray" },
37
+ "anyOf": { "$ref": "#/$defs/schemaArray" },
38
+ "oneOf": { "$ref": "#/$defs/schemaArray" },
39
+ "not": { "$dynamicRef": "#meta" }
40
+ },
41
+ "$defs": {
42
+ "schemaArray": {
43
+ "type": "array",
44
+ "minItems": 1,
45
+ "items": { "$dynamicRef": "#meta" }
46
+ }
47
+ }
48
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://json-schema.org/draft/2020-12/meta/content",
4
+ "$vocabulary": {
5
+ "https://json-schema.org/draft/2020-12/vocab/content": true
6
+ },
7
+ "$dynamicAnchor": "meta",
8
+
9
+ "title": "Content vocabulary meta-schema",
10
+
11
+ "type": ["object", "boolean"],
12
+ "properties": {
13
+ "contentEncoding": { "type": "string" },
14
+ "contentMediaType": { "type": "string" },
15
+ "contentSchema": { "$dynamicRef": "#meta" }
16
+ }
17
+ }
@@ -0,0 +1,51 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://json-schema.org/draft/2020-12/meta/core",
4
+ "$vocabulary": {
5
+ "https://json-schema.org/draft/2020-12/vocab/core": true
6
+ },
7
+ "$dynamicAnchor": "meta",
8
+
9
+ "title": "Core vocabulary meta-schema",
10
+ "type": ["object", "boolean"],
11
+ "properties": {
12
+ "$id": {
13
+ "$ref": "#/$defs/uriReferenceString",
14
+ "$comment": "Non-empty fragments not allowed.",
15
+ "pattern": "^[^#]*#?$"
16
+ },
17
+ "$schema": { "$ref": "#/$defs/uriString" },
18
+ "$ref": { "$ref": "#/$defs/uriReferenceString" },
19
+ "$anchor": { "$ref": "#/$defs/anchorString" },
20
+ "$dynamicRef": { "$ref": "#/$defs/uriReferenceString" },
21
+ "$dynamicAnchor": { "$ref": "#/$defs/anchorString" },
22
+ "$vocabulary": {
23
+ "type": "object",
24
+ "propertyNames": { "$ref": "#/$defs/uriString" },
25
+ "additionalProperties": {
26
+ "type": "boolean"
27
+ }
28
+ },
29
+ "$comment": {
30
+ "type": "string"
31
+ },
32
+ "$defs": {
33
+ "type": "object",
34
+ "additionalProperties": { "$dynamicRef": "#meta" }
35
+ }
36
+ },
37
+ "$defs": {
38
+ "anchorString": {
39
+ "type": "string",
40
+ "pattern": "^[A-Za-z_][-A-Za-z0-9._]*$"
41
+ },
42
+ "uriString": {
43
+ "type": "string",
44
+ "format": "uri"
45
+ },
46
+ "uriReferenceString": {
47
+ "type": "string",
48
+ "format": "uri-reference"
49
+ }
50
+ }
51
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://json-schema.org/draft/2020-12/meta/format-annotation",
4
+ "$vocabulary": {
5
+ "https://json-schema.org/draft/2020-12/vocab/format-annotation": true
6
+ },
7
+ "$dynamicAnchor": "meta",
8
+
9
+ "title": "Format vocabulary meta-schema for annotation results",
10
+ "type": ["object", "boolean"],
11
+ "properties": {
12
+ "format": { "type": "string" }
13
+ }
14
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://json-schema.org/draft/2020-12/meta/format-assertion",
4
+ "$vocabulary": {
5
+ "https://json-schema.org/draft/2020-12/vocab/format-assertion": true
6
+ },
7
+ "$dynamicAnchor": "meta",
8
+
9
+ "title": "Format vocabulary meta-schema for assertion results",
10
+ "type": ["object", "boolean"],
11
+ "properties": {
12
+ "format": { "type": "string" }
13
+ }
14
+ }
@@ -0,0 +1,37 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://json-schema.org/draft/2020-12/meta/meta-data",
4
+ "$vocabulary": {
5
+ "https://json-schema.org/draft/2020-12/vocab/meta-data": true
6
+ },
7
+ "$dynamicAnchor": "meta",
8
+
9
+ "title": "Meta-data vocabulary meta-schema",
10
+
11
+ "type": ["object", "boolean"],
12
+ "properties": {
13
+ "title": {
14
+ "type": "string"
15
+ },
16
+ "description": {
17
+ "type": "string"
18
+ },
19
+ "default": true,
20
+ "deprecated": {
21
+ "type": "boolean",
22
+ "default": false
23
+ },
24
+ "readOnly": {
25
+ "type": "boolean",
26
+ "default": false
27
+ },
28
+ "writeOnly": {
29
+ "type": "boolean",
30
+ "default": false
31
+ },
32
+ "examples": {
33
+ "type": "array",
34
+ "items": true
35
+ }
36
+ }
37
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://json-schema.org/draft/2020-12/meta/unevaluated",
4
+ "$vocabulary": {
5
+ "https://json-schema.org/draft/2020-12/vocab/unevaluated": true
6
+ },
7
+ "$dynamicAnchor": "meta",
8
+
9
+ "title": "Unevaluated applicator vocabulary meta-schema",
10
+ "type": ["object", "boolean"],
11
+ "properties": {
12
+ "unevaluatedItems": { "$dynamicRef": "#meta" },
13
+ "unevaluatedProperties": { "$dynamicRef": "#meta" }
14
+ }
15
+ }