[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]
Subject: X3J JSON Schema draft
Following is a cut of the X3J JSON schema I've been working on. A newer cut is in the works, with better support for arrays of property values. The PDX example Drummond posted is also translated to the newer version, but I want to work on the link contract bit a little before posting that. { "version":"0.5.1", "id":"X3J", "description":"XDI graph in JSON", "type":"object", "properties":{ "id":{ "optional":true, "type":"string", "format":"XRI", "description":"Identifier for graph, an XRI" }, "prefixes:{ "optional":true, "type":"array", "items":{ "type":"string" } }, "tags":{ "optional":true, "type":"array", "items":{ "type":"string" } }, "content":{ "properties":{ }, "additionalProperties":{ "type":"object", "description":"subject", "optional":"true", "properties":{ }, "additionalProperties":{ "type":"array", "description":"predicate", "optional":"true", "items":{ "description":"object", "type": [ { "type":"object", "description":"Object value that is an XRI", "properties":{ "xri": {"type":"string", "format":"xri"} } }, { "type":"object", "description":"Object value that is a non-string literal", "properties":{ "format": {"type":"string", "description":"MIME Media type for data value"}, "value": {"type":"string"} } }, { "type":"object", "description":"Object value that is a xsd:string literal with an optional language specified", "properties":{ "string": {"type":"string", "description":"The string value"}, "lang": { "type":"string", "format":"ftp://ftp.isi.edu/in-notes/bcp/bcp47.txt", "optional":true } } }, { "type":"object", "description":"Object value that is a xsd:duration", "properties":{ "duration": {"type":"string", "description":"The value"} } }, { "type":"object", "description":"Object value that is a xsd:dateTime", "properties":{ "dateTime": {"type":"string", "description":"The value"} } }, { "type":"object", "description":"Object value that is a xsd:time", "properties":{ "time": {"type":"string", "description":"The value"} } }, { "type":"object", "description":"Object value that is a xsd:date", "properties":{ "date": {"type":"string", "description":"The value"} } }, { "type":"object", "description":"Object value that is a xsd:gYearMonth", "properties":{ "gYearMonth": {"type":"string", "description":"The value"} } }, { "type":"object", "description":"Object value that is a xsd:gYear", "properties":{ "gYear": {"type":"string", "description":"The value"} } }, { "type":"object", "description":"Object value that is a xsd:gMonth", "properties":{ "gMonth": {"type":"string", "description":"The value"} } }, { "type":"object", "description":"Object value that is a xsd:gMonthDay", "properties":{ "gMonthDay": {"type":"string", "description":"The value"} } }, { "type":"object", "description":"Object value that is a xsd:gDay", "properties":{ "gDay": {"type":"string", "description":"The value"} } }, { "type":"object", "description":"Object value that is a xsd:gMonth", "properties":{ "gMonth": {"type":"string", "description":"The value"} } }, { "type":"object", "description":"Object value that is a xsd:boolean", "properties":{ "boolean": {"type":"boolean", "description":"The value"} } }, { "type":"object", "description":"Object value that is a xsd:base64binary", "properties":{ "base64binary": {"type":"string", "description":"The value"} } }, { "type":"object", "description":"Object value that is a xsd:hexBinary", "properties":{ "hexBinary": {"type":"string", "description":"The value"} } }, { "type":"object", "description":"Object value that is a xsd:float", "properties":{ "float": {"type":"number", "description":"The value"} } }, { "type":"object", "description":"Object value that is a xsd:double", "properties":{ "double": {"type":"number", "description":"The value"} } }, { "type":"object", "description":"Object value that is a xsd:decimal", "properties":{ "decimal": {"type":"number", "description":"The value"} } }, { "type":"object", "description":"Object value that is a xsd:integer", "properties":{ "integer": {"type":"number", "description":"The value"} } }, { "type":"object", "description":"Object value that is a xsd:nonPositiveInteger", "properties":{ "nonPositiveInteger": {"type":"number", "description":"The value"} } }, { "type":"object", "description":"Object value that is a xsd:negativeInteger", "properties":{ "negativeInteger": {"type":"number", "description":"The value"} } }, { "type":"object", "description":"Object value that is a xsd:long", "properties":{ "long": {"type":"number", "description":"The value"} } }, { "type":"object", "description":"Object value that is a xsd:int", "properties":{ "int": {"type":"number", "description":"The value"} } }, { "type":"object", "description":"Object value that is a xsd:short", "properties":{ "short": {"type":"number", "description":"The value"} } }, { "type":"object", "description":"Object value that is a xsd:byte", "properties":{ "byte": {"type":"number", "description":"The value"} } }, { "type":"object", "description":"Object value that is a xsd:nonNegativeInteger", "properties":{ "nonNegativeInteger": {"type":"number", "description":"The value"} } }, { "type":"object", "description":"Object value that is a xsd:unsignedLong", "properties":{ "unsignedLong": {"type":"number", "description":"The value"} } }, { "type":"object", "description":"Object value that is a xsd:positiveInteger", "properties":{ "positiveInteger": {"type":"number", "description":"The value"} } }, { "type":"object", "description":"Object value that is a xsd:unsignedInt", "properties":{ "unsignedInt": {"type":"number", "description":"The value"} } }, { "type":"object", "description":"Object value that is a xsd:unsignedShort", "properties":{ "unsignedShort": {"type":"number", "description":"The value"} } }, { "type":"object", "description":"Object value that is a xsd:unsignedByte", "properties":{ "unsignedByte": {"type":"number", "description":"The value"} } }, { "type":"object", "description":"Object value that is a context", "properties":{ "/": { "type":"object", "description":"The XDI-JSON for the context content" "schema": { "version":"0.5.1", "id":"X3J" } } } } ] } } } } } Two caveats: ------------ - XDI prefixes working model : take form of {nsprefix}..{name}, ex pdx..$address - Referencing a schema that's recursive..., not in JSON Schema spec AFAIK , went with form of: { "type":"object", "schema": { "version":"0.5.1", "id":"XDI-JSON" } } Next step is to take an example XDI document, maybe PDX example is a a good one that's publicly releasable, convert it to X3J, and validate against the above schema using http://james.newtonking.com/projects/json/schema.aspx. I've already started on that and expect to have it finished by the end of the weekend.
[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]