Once the basic schema is agreed... here a proposal with FAKE extensions (soon to be also in the wiki):
{
"$schema":"http://json-schema.org/draft-07/schema#",
"type":"object",
"required":[
"Project"
],
"properties":{
"Project":{
"$id":"#/properties/Project",
"$comment": "Definition as text to be replaced with a URL once available, can we use format:URL?",
"definition": "An explanation about the purpose of this instance.",
"type":"object",
"required":[
"projectCore"
],
"properties":{
"projectCore":{
"$id":"#/properties/Project/properties/projectCore",
"type":"object",
"required":[
"projectGUID"
,"projectName"
,"projectDescription"
,"projectWebPage"
,"projectStartDate"
,"projectEndDate"
,"projectDuration"
,"projectStatus"
],
"properties":{
"projectGUID":{
"$id":"#/properties/Project/properties/projectCore/properties/projectGUID"
,"definition": "An explanation about the purpose of this instance. Definition as text to be replaced with a URL once available."
,"type":"string"
},
"projectName":{
"$id":"#/properties/Project/properties/projectCore/properties/projectName"
,"definition": "An explanation about the purpose of this instance. Definition as text to be replaced with a URL once available."
,"type":"string"
},
"projectDescription":{
"$id":"#/properties/Project/properties/projectCore/properties/projectDescription"
,"definition": "An explanation about the purpose of this instance. Definition as text to be replaced with a URL once available."
,"type":"string"
},
"projectWebPage":{
"$id":"#/properties/Project/properties/projectCore/properties/projectWebPage"
,"definition": "An explanation about the purpose of this instance. Definition as text to be replaced with a URL once available."
,"type":"string"
,"examples":["http://.../csp/topics/..."]
},
"projectStartDate":{
"$id":"#/properties/Project/properties/projectCore/properties/projectStartDate"
,"definition": "An explanation about the purpose of this instance. Definition as text to be replaced with a URL once available."
,"type":"string"
,"format": "date"
},
"projectEndDate":{
"$id":"#/properties/Project/properties/projectCore/properties/projectEndDate"
,"definition": "An explanation about the purpose of this instance. Definition as text to be replaced with a URL once available."
,"type":["null","string"]
,"default":null
},
"projectDuration":{
"$id":"#/properties/Project/properties/projectCore/properties/projectDuration"
,"definition": "An explanation about the purpose of this instance. Definition as text to be replaced with a URL once available."
,"type":"number"
,"minimum":0
,"default":0
},
"projectStatus":{
"$id":"#/properties/Project/properties/projectCore/properties/projectStatus"
,"definition": "An explanation about the purpose of this instance. Definition as text to be replaced with a URL once available."
,"type":"string"
,"enum": ["Ongoing", "Ended"]
}
}
},
"projectExtensions":{
"$id":"#/properties/Project/properties/projectExtensions"
,"definition": "An explanation about the purpose of this instance. Definition as text to be replaced with a URL once available."
,"type":"object"
,"properties":{
"projectDetailedInformation":{
"$id":"#/properties/Project/properties/projectExtensions/properties/projectDetailedInformation"
,"definition": "An explanation about the purpose of this instance. Definition as text to be replaced with a URL once available."
,"type":"string"
},
"projectAffiliation":{
"$id":"#/properties/Project/properties/projectExtensions/properties/projectAffiliation"
,"definition": "An explanation about the purpose of this instance. Definition as text to be replaced with a URL once available."
,"type":"string"
},
"projectFunding":{
"$id":"#/properties/Project/properties/projectExtensions/properties/projectFunding"
,"definition": "An explanation about the purpose of this instance. Definition as text to be replaced with a URL once available."
,"type":"object"
,"required":[
"fundingProgramName"
,"fundingProgramDescription"
,"fundingProgramWebPage"
],
"properties":{
"fundingProgramName":{
"$id":"#/properties/Project/properties/projectExtensions/properties/projectFunding/properties/fundingProgramName"
,"definition": "An explanation about the purpose of this instance. Definition as text to be replaced with a URL once available."
,"type":"string"
},
"fundingProgramDescription":{
"$id":"#/properties/Project/properties/projectExtensions/properties/projectFunding/properties/fundingProgramDescription"
,"definition": "An explanation about the purpose of this instance. Definition as text to be replaced with a URL once available."
,"type":"string"
},
"fundingProgramWebPage":{
"$id":"#/properties/Project/properties/projectExtensions/properties/projectFunding/properties/fundingProgramWebPage"
,"definition": "An explanation about the purpose of this instance. Definition as text to be replaced with a URL once available."
,"type":"string"
}
}
}
}
}
}
}
Once the basic schema is agreed... here a proposal with FAKE extensions (soon to be also in the wiki):
{ "$schema":"http://json-schema.org/draft-07/schema#", "type":"object", "required":[ "Project" ], "properties":{ "Project":{ "$id":"#/properties/Project", "$comment": "Definition as text to be replaced with a URL once available, can we use format:URL?", "definition": "An explanation about the purpose of this instance.", "type":"object", "required":[ "projectCore" ], "properties":{ "projectCore":{ "$id":"#/properties/Project/properties/projectCore", "type":"object", "required":[ "projectGUID" ,"projectName" ,"projectDescription" ,"projectWebPage" ,"projectStartDate" ,"projectEndDate" ,"projectDuration" ,"projectStatus" ], "properties":{ "projectGUID":{ "$id":"#/properties/Project/properties/projectCore/properties/projectGUID" ,"definition": "An explanation about the purpose of this instance. Definition as text to be replaced with a URL once available." ,"type":"string" }, "projectName":{ "$id":"#/properties/Project/properties/projectCore/properties/projectName" ,"definition": "An explanation about the purpose of this instance. Definition as text to be replaced with a URL once available." ,"type":"string" }, "projectDescription":{ "$id":"#/properties/Project/properties/projectCore/properties/projectDescription" ,"definition": "An explanation about the purpose of this instance. Definition as text to be replaced with a URL once available." ,"type":"string" }, "projectWebPage":{ "$id":"#/properties/Project/properties/projectCore/properties/projectWebPage" ,"definition": "An explanation about the purpose of this instance. Definition as text to be replaced with a URL once available." ,"type":"string" ,"examples":["http://.../csp/topics/..."] }, "projectStartDate":{ "$id":"#/properties/Project/properties/projectCore/properties/projectStartDate" ,"definition": "An explanation about the purpose of this instance. Definition as text to be replaced with a URL once available." ,"type":"string" ,"format": "date" }, "projectEndDate":{ "$id":"#/properties/Project/properties/projectCore/properties/projectEndDate" ,"definition": "An explanation about the purpose of this instance. Definition as text to be replaced with a URL once available." ,"type":["null","string"] ,"default":null }, "projectDuration":{ "$id":"#/properties/Project/properties/projectCore/properties/projectDuration" ,"definition": "An explanation about the purpose of this instance. Definition as text to be replaced with a URL once available." ,"type":"number" ,"minimum":0 ,"default":0 }, "projectStatus":{ "$id":"#/properties/Project/properties/projectCore/properties/projectStatus" ,"definition": "An explanation about the purpose of this instance. Definition as text to be replaced with a URL once available." ,"type":"string" ,"enum": ["Ongoing", "Ended"]
} }