jsonschema-rs icon indicating copy to clipboard operation
jsonschema-rs copied to clipboard

Can't resolve local url schema

Open djpesic opened this issue 1 year ago • 2 comments

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 avatar Nov 27 '23 00:11 djpesic

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.

djpesic avatar Nov 28 '23 01:11 djpesic

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

eirnym avatar Feb 11 '24 20:02 eirnym