- From: Scott Simmons <ssimmons@opengeospatial.org>
- Date: Fri, 16 Oct 2015 06:50:21 -0600
- To: Ed Parsons <eparsons@google.com>
- Cc: allaves@fi.upm.es, Peter Baumann <p.baumann@jacobs-university.de>, Jeremy Tandy <jeremy.tandy@gmail.com>, Linda van den Brink <l.vandenbrink@geonovum.nl>, "SDW WG (public-sdw-wg@w3.org)" <public-sdw-wg@w3.org>
- Message-Id: <509D0B09-4D09-4250-9C05-7C055980D103@opengeospatial.org>
Superb, Jeremy! I now have complete my first advanced course in JSON in just a few minutes. I personally like JSON-LD. Scott > On Oct 16, 2015, at 5:43 AM, Ed Parsons <eparsons@google.com> wrote: > > Thanks Jeremy, a great intro ! > > ed > > > On Fri, 16 Oct 2015 at 12:41 <allaves@fi.upm.es <mailto:allaves@fi.upm.es>> wrote: > Indeed! Thanks for the summary, Jeremy. > > +1 for JSON-LD as Best Practice. > > Alejandro > > > Peter Baumann <p.baumann@jacobs-university.de <mailto:p.baumann@jacobs-university.de>> escribió: > > > thanks for this primer on links in JSON, Jeremy - I learnt something! > > Bottom line, JSON-LD makes a lot of sense to me. > > -Peter > > > > > > On 2015-10-16 11:00, Jeremy Tandy wrote: > >> Hi > >> > >> Indeed, JSON-LD does resolve the problem of links ... > >> > >> However, there is some concern that formalism of JSON-LD places an > >> additional > >> burden over an above the use of 'plain-old-JSON' (as I call it) ... so there > >> are still folks out there not wanting to adopt JSON-LD. > >> > >> Taking a look at some basic concepts in JSON-LD (from [1]): > >> > >> plain-old JSON = > >> > >> ``` > >> { > >> "name": "Manu Sporny", > >> "homepage": "http://manu.sporny.org/ <http://manu.sporny.org/>", > >> "image": "http://manu.sporny.org/images/manu.png <http://manu.sporny.org/images/manu.png>" > >> } > >> ``` > >> > >> JSON-LD = > >> > >> ``` > >> { > >> "http://schema.org/name <http://schema.org/name>": "Manu Sporny", > >> "http://schema.org/url <http://schema.org/url>": { "@id": "http://manu.sporny.org/ <http://manu.sporny.org/>" }, ← > >> The '@id' keyword means 'This value is an identifier that is an IRI' > >> "http://schema.org/image <http://schema.org/image>": { "@id": > >> "http://manu.sporny.org/images/manu.png <http://manu.sporny.org/images/manu.png>" } > >> } > >> ``` > >> > >> Looking at the final name-value pair (relating the profile object for 'Manu > >> Sporny' to his chosen picture), there's quite a lot going on here ... > >> > >> 1) in the plain-old JSON, the link is provided as a simple URL that > >> applications can _infer_ means that if they follow it they can find > >> something > >> useful > >> 2) there are no semantics provided for the `image` name ... > >> applications need > >> to know somehow what it means; perhaps because the developer has read the > >> documentation! > >> 3) in the JSON-LD version we see that the target is an object with a > >> name-value pair that has name of `@id`; this mechanism is used to > >> say "here's > >> an identified something" ... it's an explicit link > >> 4) the `image` name is replaced by a fully qualified URL > >> `http://schema.org/image` <http://schema.org/image> that, when resolved, provides you with the > >> information about the semantics of that name. > >> > >> If desired, you can also express the Type of the thing being linked to by > >> including a name-value pair with name of `@type` in the object ... > >> > >> One can also use JSON-LDs `@context` (see [2]) to make the > >> resulting JSON look > >> more 'normal': > >> > >> ``` > >> { > >> "@context": > >> { > >> "name": "http://schema.org/name <http://schema.org/name>", > >> "image": { > >> "@id": "http://schema.org/image <http://schema.org/image>", > >> "@type": "@id" > >> }, > >> "homepage": { > >> "@id": "http://schema.org/url <http://schema.org/url>", > >> "@type": "@id" > >> } > >> }, > >> "name": "Manu Sporny", > >> "homepage": "http://manu.sporny.org/ <http://manu.sporny.org/>", > >> "image": "http://manu.sporny.org/images/manu.png <http://manu.sporny.org/images/manu.png>" > >> } > >> ``` > >> > >> (the `@context` object can be referenced via HTTP header so the > >> JSON document > >> itself doesn't even need to include it) > >> > >> Here we see that the name `image` has been mapped to > >> `http://schema.org/image` <http://schema.org/image> > >> and that the type of that object has been set to `@id` ... meaning that > >> `image` will always refer to a link. > >> > >> So this works for me ... but there is no general agreement how > >> links should be > >> done in 'plain-old' JSON. > >> > >> Looking at Simon Cox's OM-JSON presentation (from the OGC TC meeting in > >> Nottingham) he proposes using names like `href`, `rel` and `title` > >> (etc) which > >> (mostly) map to the properties of XLINKs [3] ... e.g. > >> > >> ``` > >> { > >> "id": "spec1", > >> "sampledFeature": { > >> "href": "http://example.org/featureA <http://example.org/featureA>", "title": "test feature A" > >> }, > >> "complex": [ > >> { "rel": "http://example.org/parent <http://example.org/parent>", "href": > >> "http://example.org/sample2 <http://example.org/sample2>" }, > >> { "rel": "http://example.org/child <http://example.org/child>", "href": > >> "http://example.org/sample3 <http://example.org/sample3>" } > >> ], > >> ... > >> } > >> ``` > >> > >> Looking at Link-Objects [4], GeoJSON provides a different > >> mechanism. The spec > >> says: > >> > >> A link object has one required member: |"href"|, and one optional > >> member: |"type"|. > >> > >> for example: > >> > >> ``` > >> |"crs": { > >> "type": "link", > >> "properties": { > >> "href": "http://example.com/crs/42 <http://example.com/crs/42>", > >> "type": "proj4" > >> } > >> }| > >> ``` > >> > >> Part of the problem is that encodings using 'plain-old' JSON don't often > >> bother explicitly identifying the resource that they are talking about. > >> Looking at GeoJSON [4], for example, all that spec says about > >> identifying this is: > >> > >> * > >> > >> If a feature has a commonly used identifier, that identifier should be > >> included as a member of the feature object with the name |"id"|. > >> > >> It doesn't provide any guidance about what that identifier should be (in > >> contrast to the web-architecture and DWBP that say use HTTP URIs to identify > >> things). Usually in JSON, the relationships between things are > >> asserted by the > >> nesting of objects ... which is not always convenient or possible. > >> > >> So ... is JSON a link-poor format? Perhaps the problem is that there are any > >> number of ways to do links but none that work for everyone. The only > >> formalised standard mechanism (that I know of) is provided by > >> JSON-LD. Perhaps > >> this is one of the best practices we should assert? > >> > >> HTH, Jeremy > >> > >> [1]: http://www.w3.org/TR/json-ld/#basic-concepts <http://www.w3.org/TR/json-ld/#basic-concepts> > >> [2]: http://www.w3.org/TR/json-ld/#the-context <http://www.w3.org/TR/json-ld/#the-context> > >> [3]: http://www.w3.org/TR/xlink11/ <http://www.w3.org/TR/xlink11/> > >> [4]: http://geojson.org/geojson-spec.html#link-objects <http://geojson.org/geojson-spec.html#link-objects> > >> [5]: http://geojson.org/geojson-spec.html#feature-objects <http://geojson.org/geojson-spec.html#feature-objects> > >> > >> On Fri, 16 Oct 2015 at 07:28 Linda van den Brink <l.vandenbrink@geonovum.nl <mailto:l.vandenbrink@geonovum.nl> > >> <mailto:l.vandenbrink@geonovum.nl <mailto:l.vandenbrink@geonovum.nl>>> wrote: > >> > >> Hi all, > >> > >> > >> > >> In the last telecon Jeremy commented on JSON, saying it is a ‘link poor > >> format’. I’m curious as to what he meant. Is JSON-LD not > >> supposed to solve > >> that? > >> > >> > >> > >> @Jeremy could you expand on this? > >> > >> > >> > >> Linda > >> > >> > >> > >> > >> > > > > -- > > Dr. Peter Baumann > > - Professor of Computer Science, Jacobs University Bremen > > www.faculty.jacobs-university.de/pbaumann <http://www.faculty.jacobs-university.de/pbaumann> > > mail: p.baumann@jacobs-university.de <mailto:p.baumann@jacobs-university.de> > > tel: +49-421-200-3178, fax: +49-421-200-493178 > > - Executive Director, rasdaman GmbH Bremen (HRB 26793) > > www.rasdaman.com <http://www.rasdaman.com/>, mail: baumann@rasdaman.com <mailto:baumann@rasdaman.com> > > tel: 0800-rasdaman, fax: 0800-rasdafax, mobile: +49-173-5837882 > > "Si forte in alienas manus oberraverit hec peregrina epistola > > incertis ventis dimissa, sed Deo commendata, precamur ut ei reddatur > > cui soli destinata, nec preripiat quisquam non sibi parata." (mail > > disclaimer, AD 1083) > > > > > -- > Ed Parsons > Geospatial Technologist, Google > > Google Voice +44 (0)20 7881 4501 > www.edparsons.com <http://www.edparsons.com/> @edparsons >
Received on Friday, 16 October 2015 12:50:53 UTC