Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
2 tasks done
jviotti opened this issue Jun 12, 2024 · 3 comments
Open
2 tasks done
Labels
bug Something isn't working stale

Comments

@jviotti
Copy link

jviotti commented Jun 12, 2024

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?

Are you willing to work on this issue ?

Yes I am willing to submit a PR!

@jviotti jviotti added the bug Something isn't working label Jun 12, 2024
Copy link

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.

@jviotti
Copy link
Author

jviotti commented Jun 17, 2024

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

Copy link

This issue has been automatically marked as stale because it has not had recent activity 😴

It will be closed in 120 days if no further activity occurs. To unstale this issue, add a comment with a detailed explanation.

There can be many reasons why some specific issue has no activity. The most probable cause is lack of time, not lack of interest. AsyncAPI Initiative is a Linux Foundation project not owned by a single for-profit company. It is a community-driven initiative ruled under open governance model.

Let us figure out together how to push this issue forward. Connect with us through one of many communication channels we established here.

Thank you for your patience ❤️

@github-actions github-actions bot added the stale label Oct 16, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working stale
Projects
None yet
Development

No branches or pull requests

1 participant