JSON Referencing and Schema

Preview:

Citation preview

Persistent Computing on the Web with

JSON Schema and Referencing

Kris Zyp

Copyright SitePen, Inc. 2008. All Rights Reserved

Overview

•JSON Referencing

•JSON Schema

•The possiblities...

Copyright SitePen, Inc. 2008. All Rights Reserved

JSON + Hyperlinks = JSON Referencing

Copyright SitePen, Inc. 2008. All Rights Reserved

http://www.sitepen.com/blog/2008/06/17/json-referencing-in-dojo/

JSON Referencing

•Cyclic

•Multiple references

•Cross-message references

•Cross-site references

Copyright SitePen, Inc. 2008. All Rights Reserved

JSON Referencing (ID Based)

{“name”:”Kris Zyp”,“id”:”kriszyp”,“children”:[{“id”:”jennikazyp”,“name”:”Jennika Zyp”}],“spouse”:{“name”:”Nicole Zyp”,“spouse”:{“$ref”:”kriszyp”},“children”:[{“$ref”:”jennikazyp”}]

}}

Copyright SitePen, Inc. 2008. All Rights Reserved

JSON Referencing (Path Based)

{“name”:”Kris Zyp”,“children”:[{“name”:”Jennika Zyp”}],“spouse”:{“name”:”Nicole Zyp”,“spouse”:{“$ref”:”#”},“children”:{“$ref”:”#.children”}

}}

Copyright SitePen, Inc. 2008. All Rights Reserved

JSON Referencing (ID + Path)

{“name”:”Kris Zyp”,“id”:”kriszyp”,“children”:[{“name”:”Jennika Zyp”}],“friends”:[{“$ref”:”jesse#.spouse”}]

}

Copyright SitePen, Inc. 2008. All Rights Reserved

JSON + Schema = JSON Schema

Copyright SitePen, Inc. 2008. All Rights Reserved

JSON Schema

schema:{"description":"A person", "type":"object", "properties": {"name": {"type":"string"}, "age" : {"type":"integer", "maximum":125}}}

instance:{“name”:”Kris”, “age”:30}

Copyright SitePen, Inc. 2008. All Rights Reserved

JSON Schema

Schema:{"description":"A person", "type":"object", "properties": {"name": {"type":"string"}, "age" : {"type":"integer", "maximum":125,

“optional”:true}, “friends”: {“type”:”array”,

“items”:{“type”:”object”}} }}

instance:{“name”:”Kris”, “friends”:[{“name”:”Nikki”}]}

Copyright SitePen, Inc. 2008. All Rights Reserved

JSON Schema

Schema:{“type”:”array”,“items”:[{“type”:”string”},{“type”:”number”}]

}

instance:[“foo”,44]

Copyright SitePen, Inc. 2008. All Rights Reserved

JSON Schema

Schema:{"description":"A person", "type":["object",”string”]}

instance:“foo”

instance:{“prop”:3}

Copyright SitePen, Inc. 2008. All Rights Reserved

JSON Schema

Schema:{"description":"A person", "type":["object",”string”]}

instance:“foo”

instance:{“prop”:3}

Copyright SitePen, Inc. 2008. All Rights Reserved

JSON Schema

schema:{"description":"A person", "type":"object", "properties": {"name": {"type":"string"}, "gender" : {"type":"string",

"enum”:[“male”,”female”]}}, “additionalProperties”:false}

instance:{“name”:”Kris”, “gender”:”male”}

Copyright SitePen, Inc. 2008. All Rights Reserved

What can we do with these?

Copyright SitePen, Inc. 2008. All Rights Reserved

JSON Schema + JSON Referencing

{"description":"A Social Person", “id”:”socialperson”, "type":"object", "properties": {"name": {"type":"string"}, "age" : {

"type":"integer", "maximum":125

}, "friends" : {

“type” : ”array”,“items” : {“$ref”:”socialperson”}

} }, “extends”:{“$ref”:”person”}}

Copyright SitePen, Inc. 2008. All Rights Reserved

http://blog.medryx.org/2008/07/24/jsonreststore-overview/

JSON Referencing + REST

•Lazy loading - Generic clients can auto-load objects as necessary

•Object identificationcan be used for saving state changes

Copyright SitePen, Inc. 2008. All Rights Reserved

JSON Referencing + REST

GET /Person/3

{ “name”:”Kris”, “friends”:[

{“$ref”:”4”},{“$ref”:”5”}

]}

Copyright SitePen, Inc. 2008. All Rights Reserved

JSON Referencing + JSON-RPC

POST /person/kriszyp

{“method”:”addFriend”,“id”:”1”,“params”:[{“$ref”:”jessesmith”}]

}

Copyright SitePen, Inc. 2008. All Rights Reserved

Applying data definitions to code

Copyright SitePen, Inc. 2008. All Rights Reserved

JSON Schema + Typed Code

Copyright SitePen, Inc. 2008. All Rights Reserved

JSON Schema Interfaces

Copyright SitePen, Inc. 2008. All Rights Reserved

JSON Schema Interface

{"description":"A person", "type":"object", "properties": {"name": {"type":"string"} }, “methods”:{ “getName”:{“returns”:{“type”:”string”}, “params”:[]}, “setName”:{“params”:[{“type”:”string”}]}, }}

Copyright SitePen, Inc. 2008. All Rights Reserved

Cross-site Referencing

{“name”:”Kris Zyp”,“id”:”kriszyp”,“friends”:[{“$ref”:”http://thezyps.com/person/nikki”},{“$ref”:”http://social.com/user/33”}

]}

Copyright SitePen, Inc. 2008. All Rights Reserved

Cross-site Typing

Copyright SitePen, Inc. 2008. All Rights Reserved

Mobile code (run anywhere)

•Code can run anywhere

-Server JavaScript Environment

-Browser JavaScript Environment

•Consistent persisted data structures across environments

Copyright SitePen, Inc. 2008. All Rights Reserved

Connecting and structuring data for the

futureJSON Schema and JSON

Referencing

Copyright SitePen, Inc. 2008. All Rights Reserved