-
-
Notifications
You must be signed in to change notification settings - Fork 333
Description
In PR #248 we forbade the use of $schema
in subschemas. I can't remember why I approved this.
One use case we've noted over and over is that of "packing" multiple schema files into one. It's the main justification for the base-uri-changing functionality of "$id"
. What that means is that the only time something being a root schema matters is if it is the root schema of the entry point file for processing.
Once you are using multiple files, then whether you $ref
to another file (with no fragment or "#" as the fragment), or whether you pre-process and "pack" that file into the original file, the result is the same. But in the former, the referenced schema is a root schema. In the latter case, it is a subschema.
That means that using $ref
, you can reference a draft-04 schema from a draft-06 schema. But if you pack it, suddenly that is illegal, because you can't use $schema
in the packed subschema to switch the processing rules.
This seems very wrong.
@awwright you wrote the PR- do you remember why it seemed correct? What am I missing?
I know @epoberezkin had some concerns about implementation, but I don't recall why that was compelling- the first thing you do on processing a schema is check $schema
to set the rules for processing the rest of the schema (this is how my embryonic implementation handled things before I decided it was probably best to leave that to other libraries). Perhaps @Julian has thoughts on this as well?