Stranger6667 / jsonschema-rs

JSON Schema validation library
https://docs.rs/jsonschema
MIT License
482 stars 90 forks source link

Can't resolve local url schema #441

Open djpesic opened 7 months ago

djpesic commented 7 months ago

I have two json schemas, both placed inside resources/schema directory. Root dir is a cargo project dir. Main schema (extracted and simplified from my project):

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "file://resources/programSegment.schema.json",
  "$defs": {
    "portType": {
      "type": "array",
      "description": "Port list",
      "items": {
        "type": "string"
      }
    }
  },
  "type": "object",
  "properties": {
    "a": {
      "type": "string"
    },
    "b": {
      "$ref": "file://resources/schema/ports.schema.json#/$defs/portType"
    }
  }
}

Second schema:

{
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "$id": "file://resources/ports.schema.json",
    "$defs": {
      "portType": {
        "type": "array",
        "description": "Port list",
        "items": {
          "type": "string"
        }
      }
    }
}

When I create Json example, if portType is placed in the same file with the rest of the schema, everything works with local $ref. If I try to reference to another file, like in the example, validation fails.

djpesic commented 7 months ago

After some debugging, I found that the issue may lie inside resolver.rs file. The current code simply tries to open an absolute path. As I work on Windows, it can't work, because of Windows path format. Also, that approach is not portable. Currently, I wrote my own resolver, who finds schemas inside directory inside cargo project. It would be nice to have such feature implemented.

eirnym commented 4 months ago

Code clearly shows, that it's possible to set custom resolver instead of a default