spec-json-schemas icon indicating copy to clipboard operation
spec-json-schemas copied to clipboard

[BUG] Schemas without `$id` will fail validation on spec-compliant JSON Schema validators

Open jviotti opened this issue 8 months ago • 2 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?

  • [X] I checked and didn't find similar issue

🏢 Have you read the Contributing Guidelines?

Are you willing to work on this issue ?

Yes I am willing to submit a PR!

jviotti avatar Jun 12 '24 17:06 jviotti