diff --git a/jsonschema-core.xml b/jsonschema-core.xml index db34921a..0d9f2c24 100644 --- a/jsonschema-core.xml +++ b/jsonschema-core.xml @@ -323,23 +323,23 @@ -
+
- The "id" keyword defines a URI for the schema, + The "$id" keyword defines a URI for the schema, and the base URI that other URI references within the schema are resolved against. - The "id" keyword itself is resolved against the base URI that the object as a whole appears in. + The "$id" keyword itself is resolved against the base URI that the object as a whole appears in. If present, the value for this keyword MUST be a string, and MUST represent a valid URI-reference. This value SHOULD be normalized, and SHOULD NOT be an empty fragment <#> or an empty string <>. - The root schema of a JSON Schema document SHOULD contain an "id" keyword with an absolute-URI (containing a scheme, but no fragment). + The root schema of a JSON Schema document SHOULD contain an "$id" keyword with an absolute-URI (containing a scheme, but no fragment). To name subschemas in a JSON Schema document, - subschemas can use "id" to give themselves a document-local identifier. - This form of "id" keyword MUST begin with a hash ("#") to identify it as a fragment URI reference, + subschemas can use "$id" to give themselves a document-local identifier. + This form of "$id" keyword MUST begin with a hash ("#") to identify it as a fragment URI reference, followed by a letter ([A-Za-z]), followed by any number of letters, digits ([0-9]), hyphens ("-"), underscores ("_"), colons (":"), or periods ("."). @@ -350,18 +350,18 @@ Schemas can be identified by any URI that has been given to them, including a JSON Pointer or - their URI given directly by "id". + their URI given directly by "$id". - Tools SHOULD take note of the URIs that schemas, including subschemas, provide for themselves using "id". + Tools SHOULD take note of the URIs that schemas, including subschemas, provide for themselves using "$id". This is known as "Internal referencing". @@ -402,14 +402,14 @@ - When an implementation encounters the <#/definitions/single> schema, it resolves the "id" URI reference + When an implementation encounters the <#/definitions/single> schema, it resolves the "$id" URI reference against the current base URI to form <http://example.net/root.json#item>. @@ -434,7 +434,7 @@ Implementations SHOULD be able to associate arbitrary URIs with an arbitrary schema and/or - automatically associate a schema's "id"-given URI, depending on the trust that the the validator + automatically associate a schema's "$id"-given URI, depending on the trust that the the validator has in the schema. @@ -442,6 +442,18 @@ When multiple schemas try to identify with the same URI, validators SHOULD raise an error condition.
+
+ "id" is likely to be deleted from the spec before RFC. + + Implementations MAY support "id" as a synonym for "$id" to aid + in migrating schemas from older drafts, however schema authors + SHOULD NOT make use of "id" and MUST NOT assume it is supported. + + + The behavior when "$id" and "id" are present with different values is undefined. + Implementations MAY issue a warning or error for such schemas. + +
@@ -563,7 +575,7 @@ User-Agent: so-cool-json-schema/1.0.2 curl/7.43.0 Validators MUST NOT fall into an infinite loop. - Servers need to take care that malicious parties can't change the functionality of existing schemas by uploading a schema with an pre-existing or very similar "id". + Servers need to take care that malicious parties can't change the functionality of existing schemas by uploading a schema with an pre-existing or very similar "$id". Individual JSON Schema vocabularies are liable to also have their own security considerations. Consult the respective specifications for more information. diff --git a/schema.json b/schema.json index d44cd480..c47fa4e0 100644 --- a/schema.json +++ b/schema.json @@ -29,7 +29,12 @@ }, "type": "object", "properties": { + "$id": { + "type": "string", + "format": "uriref" + }, "id": { + "description": "This keyword has been deprecated in favor of \"$id\"", "type": "string", "format": "uriref" },