Skip to content

Instantly share code, notes, and snippets.

@alternatex
Created November 23, 2013 22:24
Show Gist options
  • Save alternatex/7620771 to your computer and use it in GitHub Desktop.
Save alternatex/7620771 to your computer and use it in GitHub Desktop.
JSON Schema References

JSON Schema References

See original thread on SO [here] (http://stackoverflow.com/questions/8595832/does-json-schema-validation-in-common-js-utils-support-references/9083630#9083630)

1. A schema without any "id" property

I fetch : http://someSite.com/somePath
I get : { }
I can ref it : {"$ref":"http://someSite.com/somePath#"}

2. Same absolute id and uri path

I fetch : http://someSite.com/somePath
I get : {"id":"http://someSite.com/somePath#"}
I can ref it : {"$ref":"http://someSite.com/somePath#"}

3. Different absolute id and path

I fetch : http://someSite.com/somePath
I get : {"id":"http://anotherSite.com/anotherPath#"}
I can ref it : {"$ref":"http://anotherSite.com/anotherPath#"}

4. Relative - a fragment

I fetch : http://someSite.com/somePath
I get : {"id":"#something"}
I can ref it : {"$ref":"http://someSite.com/somePath#something"}

5. Relative path and fragment

I fetch : http://someSite.com/somePath
I get : {"id":"/oneMore/path#something"}
I can ref it : {"$ref":"http://someSite.com/somePath/oneMore/path#something"}

6. Relative path from file

I fetch : file:///someFolder/someFile
I get : {"id":"/oneMore/path#something"}
I can ref it : {"$ref":"file:///someFolder/someFile/oneMore/path#something"}

7. Inner schema (sub schema) with id "#subschema" (no id for the main schema)

I fetch : http://someSite.com/somePath
I get : {"properties" : { "aKeyName" : { "id":"#subschema" }}}
I can ref it : {"$ref":"http://someSite.com/somePath#subschema"}

8. Inner schema (sub schema) with id "#subschema"

I fetch : http://someSite.com/somePath
I get : { {"id":"#mainSchema"}, "properties" : { "aKeyName" : { "id":"#subschema" }} }
I can ref it : {"$ref":"http://someSite.com/somePath#subschema"}
I can also do: {"$ref":"http://someSite.com/somePath#mainSchema/properties/aKeyName"}

9. Inner schema (within the property under the "aKeyName") but no id at all

I fetch : http://someSite.com/somePath
I get : { "properties" : { "aKeyName" : { }} }
can ref it: {"$ref":"http://someSite.com/somePath#/properties/aKeyName"}

10. Inner schema (sub schema) with a main custom absolute uri"

I fetch : http://someSite.com/somePath
I get : { {"id":"scheme://something"}, "properties" : { "aKeyName" : { "id":"#subschema" }} }
I can ref it : {"$ref":"scheme://something#subschema"}
I can also do: {"$ref":"scheme://something#/properties/aKeyName"}

11. Inner schema with it's own absolute uri"

I fetch : http://someSite.com/somePath
I get : { {"id":"#main"}, "properties" : { "aKeyName" : { "id":"http://domain.com/subSchema" }} }
I can ref it : {"$ref":"http://domain.com/subSchema#"}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment