[BUG] Schemas without `$id` will fail validation on spec-compliant JSON Schema validators
jviotti opened this issue · 3 comments
Describe the bug.
Consider this concise variant of schemas/1.0.0-without-$id.json
:
{
"id": "http://asyncapi.com/definitions/1.0.0/asyncapi.json",
"$schema": "http://json-schema.org/draft-04/schema",
...
"properties": {
...
"externalDocs": {
"$ref": "#/definitions/externalDocs"
},
...
},
"definitions": {
"vendorExtension": {
"id": "http://asyncapi.com/definitions/1.0.0/vendorExtension.json"
...
},
"externalDocs": {
"id": "http://asyncapi.com/definitions/1.0.0/externalDocs.json",
...
"patternProperties": {
"^x-": {
"$ref": "#/definitions/vendorExtension"
}
}
}
}
}
Under a compliant implementation, the $ref
at /definitions/externalDocs/patternProperties/^x-/$ref
will resolve against the identifier at /definitions/externalDocs/id
, leading to /definitions/externalDocs/definitions/vendorExtension
instead of /definitions/vendorExtension
as expected.
Expected behavior
When producing these schema versions without $id
, I think you should actually remove the nested identifiers. That way it works for implementations that don't support $id
(like Visual Studio Code) and for compliant implementations too.
Screenshots
None
How to Reproduce
Try to perform validation using schemas/1.0.0-without-$id.json
🥦 Browser
None
👀 Have you checked for similar open issues?
- I checked and didn't find similar issue
🏢 Have you read the Contributing Guidelines?
- I have read the Contributing Guidelines
Are you willing to work on this issue ?
Yes I am willing to submit a PR!
Welcome to AsyncAPI. Thanks a lot for reporting your first issue. Please check out our contributors guide and the instructions about a basic recommended setup useful for opening a pull request.
Keep in mind there are also other channels you can use to interact with AsyncAPI community. For more details check out this issue.
We properly support this on the JSON Schema CLI v1.1.0 by bundling without identifiers, while avoiding many of these common pitfalls: https://github.com/Intelligence-AI/jsonschema/blob/main/docs/bundle.markdown