|  | 
| 158 | 158 | 
 | 
| 159 | 159 |         <section title="General validation considerations"> | 
| 160 | 160 | 
 | 
| 161 |  | -            <section title="Keywords and instance primitive types"> | 
|  | 161 | +            <section title="Constraints and missing keywords"> | 
| 162 | 162 |                 <t> | 
| 163 |  | -                    Most validation keywords only limit the range of values within a certain primitive type. | 
| 164 |  | -                    When the primitive type of the instance is not of the type targeted by the keyword, the | 
| 165 |  | -                    validation succeeds. | 
|  | 163 | +                    Each JSON Schema validation keyword adds constraints that | 
|  | 164 | +                    an instance must satisfy in order to successfully validate. | 
| 166 | 165 |                 </t> | 
| 167 | 166 |                 <t> | 
| 168 |  | -                    For example, the "maxLength" keyword will only restrict certain strings (that are too long) from being valid. | 
| 169 |  | -                    If the instance is a number, boolean, null, array, or object, the keyword passes validation. | 
| 170 |  | -                </t> | 
|  | 167 | +                    Validation keywords that are missing never restrict validation. | 
|  | 168 | +                    In some cases, this no-op behavior is identical to a keyword that | 
|  | 169 | +                    exists with certain values, and these values are noted where relevant. | 
|  | 170 | +                </t> | 
|  | 171 | +                <figure> | 
|  | 172 | +                    <preamble> | 
|  | 173 | +                        From this principle, it follows that all JSON values | 
|  | 174 | +                        successfully validate against the empty schema: | 
|  | 175 | +                    </preamble> | 
|  | 176 | +                    <artwork> | 
|  | 177 | +<![CDATA[ | 
|  | 178 | +{} | 
|  | 179 | +]]> | 
|  | 180 | +                    </artwork> | 
|  | 181 | +                </figure> | 
|  | 182 | +                <figure> | 
|  | 183 | +                    <preamble> | 
|  | 184 | +                        Similarly, it follows that no JSON value successfully | 
|  | 185 | +                        validates against the empty schema's negation: | 
|  | 186 | +                    </preamble> | 
|  | 187 | +                    <artwork> | 
|  | 188 | +<![CDATA[ | 
|  | 189 | +{ | 
|  | 190 | +    "not": {} | 
|  | 191 | +} | 
|  | 192 | +]]> | 
|  | 193 | +                    </artwork> | 
|  | 194 | +                </figure> | 
| 171 | 195 |             </section> | 
| 172 | 196 | 
 | 
| 173 |  | -            <section title="Validation of primitive types and child values"> | 
| 174 |  | -                <t> | 
| 175 |  | -                    Two of the primitive types, array and object, allow for child values.  The validation of | 
| 176 |  | -                    the primitive type is considered separately from the validation of child instances. | 
| 177 |  | -                </t> | 
|  | 197 | +            <section title="Keyword independence"> | 
| 178 | 198 |                 <t> | 
| 179 |  | -                    For arrays, primitive type validation consists of validating restrictions on length. | 
|  | 199 | +                    Validation keywords typically operate independently, without | 
|  | 200 | +                    affecting each other's outcomes. | 
| 180 | 201 |                 </t> | 
| 181 | 202 |                 <t> | 
| 182 |  | -                    For objects, primitive type validation consists of validating restrictions on the presence | 
| 183 |  | -                    or absence of property names. | 
| 184 |  | -                </t> | 
| 185 |  | -            </section> | 
| 186 |  | - | 
| 187 |  | -            <section title="Missing keywords"> | 
| 188 |  | -                <t> | 
| 189 |  | -                    Validation keywords that are missing never restrict validation. | 
| 190 |  | -                    In some cases, this no-op behavior is identical to a keyword that exists with certain values, | 
| 191 |  | -                    and these values are noted where known. | 
|  | 203 | +                    For schema author convenience, there are some exceptions: | 
|  | 204 | +                    <list> | 
|  | 205 | +	                    <t>"additionalProperties", whose behavior is defined in terms of "properties" and "patternProperties"</t> | 
|  | 206 | +                        <t>"additionalItems", whose behavior is defined in terms of "items"</t> | 
|  | 207 | +                        <t>"minimum" and "maximum", whose behavior may change for a special value of "exclusiveMinimum" and "exclusiveMaximum", respectively</t> | 
|  | 208 | +                    </list> | 
|  | 209 | +                    </list> | 
| 192 | 210 |                 </t> | 
| 193 | 211 |             </section> | 
| 194 | 212 | 
 | 
| 195 |  | -            <section title="Linearity"> | 
| 196 |  | -                <!-- I call this "linear" in the same manner e.g. waves are linear, they don't interact with each other --> | 
|  | 213 | +            <section title="Keywords and instance primitive types"> | 
| 197 | 214 |                 <t> | 
| 198 |  | -                    Validation keywords typically operate independent of each other, without affecting each other. | 
|  | 215 | +                    Most validation keywords only limit the range of values within a certain primitive type. | 
|  | 216 | +                    When the primitive type of the instance is not of the type targeted by the keyword, the | 
|  | 217 | +                    validation succeeds. | 
| 199 | 218 |                 </t> | 
| 200 | 219 |                 <t> | 
| 201 |  | -                    For author convenience, there are some exceptions: | 
| 202 |  | -                    <list> | 
| 203 |  | -                        <t>"additionalProperties", whose behavior is defined in terms of "properties" and "patternProperties";</t> | 
| 204 |  | -                        <t>"additionalItems", whose behavior is defined in terms of "items"; and</t> | 
| 205 |  | -                        <t>"minimum" and "maximum", whose behavior may change for a special value of "exclusiveMinimum" and "exclusiveMaximum", respectively.</t> | 
| 206 |  | -                    </list> | 
|  | 220 | +                    For example, the "maxLength" keyword will only restrict certain strings (that are too long) from being valid. | 
|  | 221 | +                    If the instance is a number, boolean, null, array, or object, the keyword passes validation. | 
| 207 | 222 |                 </t> | 
| 208 | 223 |             </section> | 
| 209 |  | - | 
| 210 | 224 |         </section> | 
| 211 | 225 | 
 | 
| 212 | 226 |         <section title="Meta-schema"> | 
|  | 
0 commit comments