Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Does JSON Schema validation in common-js utils support references?

Does JSON Schema validation in common-js utils support references? I can not do this with https://github.com/kriszyp/commonjs-utils/blob/master/json-schema.js

I tried following code:

{
  "type" : "object",
  "required" : true,
  "properties" : {
    "id" : {
      "type" : "number",
      "required" : true
    },
    "related" : {
      "type" : "array",
      "required" : true,
      "items" : {"$ref": "$#"}
    }
  }
}

I can go ahead and prepare my schema with out references, but it would be nice to know if it is possible.

like image 240
Lalith Avatar asked Dec 21 '11 20:12

Lalith


1 Answers

I do not know, however your ref seems to be wrong, remove the "$" sign i.e.:

"items" : {"$ref": "#"}

Here is a copy pasted post I put on the json forum concerning references:

According to the draft 03 here is what I understood about specifying an id and referencing it from anywhere. Please comment if something is wrong. The cases are written in the following : a. The uri from where I retrieve the schema b. the schema got c. how to refer to this schema

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#"}
like image 56
Flavien Volken Avatar answered Nov 08 '22 02:11

Flavien Volken