- From: Melvin Carvalho <melvincarvalho@gmail.com>
- Date: Sat, 4 May 2013 15:49:14 +0200
- To: public-rww <public-rww@w3.org>, Nathan Rixham <nrixham@gmail.com>
- Message-ID: <CAKaEYhJfEKp9Tb9H8naBYB_F16+LhWKadYZSTi5CxSeRBGMLZw@mail.gmail.com>
FYI ---------- Forwarded message ---------- From: Markus Lanthaler <markus.lanthaler@gmx.net> Date: 4 May 2013 15:12 Subject: Transforming JSON APIs to JSON-LD To: public-linked-json@w3.org Hi all, I just had a conversation with Vikash on IRC and showed him how a response from a API exposing JSON can be transformed to JSON-LD using Antonio Garrote's json-ld-macros [1]. I think this is interesting for other people as well so here a short description of the necessary steps: 1) define a macro to transform from JSON to JSON-LD 2) retrieve the resource 3) run the macro to transform to JSON-LD 4) optionally, expand the JSON-LD to inspect it Here's a jsfiddle illustrating it: http://jsfiddle.net/9ZU8q/4/ Please note that this is a minimal example. I've just set @vocab in the context. So all URLs are still interpreted as strings. Properties such as "followers_url" would have to be type-coerced in the context so that a JSON-LD processor would recognize them as URLs. Unfortunately jQuery's promises don't assimilate DOMFutures (or I missed something) so there's some nesting in line 36. I've also included the full IRC transcript below which include a couple of more details. [1] https://github.com/antoniogarrote/json-ld-macros Cheers, Markus -------- Full transcript ---------- [13:39] mlnt hi vikash [13:43] vikash mlnt, hey! [13:43] vikash thanks mlnt for coming :-) [13:44] vikash First of all, apologies.. json-ld-macros had slipped my mind entirely :/ [13:45] vikash but after the email, I have cloned the repo and its working locally as well and I see there are issues too :) [13:45] vikash before I ask further questions mlnt can you first elaborate on your points... [13:46] mlnt well, what didn't you understand in my mail? [13:47] vikash mlnt, ok! From the first line, did you mean that I can reuse the code base for the creator. Though I see it uses context of socialrdf.. which is in a way vague [13:47] mlnt also, it is typically better to discuss things on the mailing list since that allows other people to chime in or learn by just lurking on the list.. don't be affraid if you don't understand something, just ask :-) [13:48] vikash thanks :-) [13:48] mlnt sure, it's open source [13:48] mlnt so you can reuse it [13:48] vikash so from the json-ld-macros, I can understand the algo for conversion [13:48] vikash and use that in my html :-) [13:49] mlnt right [13:49] mlnt in your HTML you would provide some UI to generate the transformation rules for json-ld-macros [13:49] vikash can you elaborate the term transformation rules. [13:49] mlnt json-ld-macros is not restricted to socialrdf [13:50] mlnt you can use anything with it [13:50] mlnt it is completely generic [13:50] vikash ok! Please correct me if I am wrong here. [13:50] vikash Say [13:51] vikash I take the input for transformation rules, if use inputs it then its cool, else I will use schema.org as default [13:51] vikash *user inputs [13:51] vikash ? [13:51] vikash Also … "If you are talking about the schema.org tool, that's slightly different because you don't have a JSON document to start with." ??? [13:53] mlnt the demo uses GitHub's API [13:54] mlnt so it's similar to your task transforming LinkedIN's API [13:54] vikash yup. [13:54] vikash And... [13:55] mlnt let's keep using GitHub's API for the moment because it doesn't need authentication [13:55] mlnt do you have curl installed? [13:55] vikash yup! [13:55] mlnt ok [13:56] mlnt run [13:56] mlnt curl -k https://api.github.com/users/lanthaler [13:56] mlnt you will get back a JSON object [13:56] vikash did that. also by testing ?callbacks :0 [13:56] vikash :) [13:59] mlnt no, we don't need that for the moment [13:59] mlnt ok, so the goal now is to translate that into valid JSON-LD [13:59] vikash yes... [14:00] mlnt to do so you have to write some transformation rules [14:00] mlnt let me set-up a jsfiddle [14:00] vikash thanks' [14:01] vikash all this will be very useful in docs and tutorials :) [14:07] mlnt ok [14:07] mlnt here's the JSfiddle: http://jsfiddle.net/9ZU8q/ [14:07] mlnt it just renders the GitHub data as is at the moment [14:08] vikash yes! JSON.stringify() :-) [14:08] mlnt no we can start describing the transformation [14:08] mlnt let's start by adding a context [14:09] vikash Yo \o/ [14:09] vikash ... [14:10] mlnt http://jsfiddle.net/9ZU8q/1/ [14:11] mlnt ok, so this adds a @context which just sets @vocab [14:13] mlnt that's already valid JSON-LD [14:14] mlnt you have two tasks [14:14] mlnt a) write the transformation rules for the LinkedIN API [14:14] mlnt b) create a UI which makes it simple to create such transformation rules [14:16] vikash Yes, so thats pretty evident now. But say I am planning to work on the first part! just the creator app. For that I can ask the user his @vocab? [14:17] vikash so the creator tool will just be http://jsfiddle.net/9ZU8q/1/ with a @vocab either provided as user input or schema.org which becomes pretty evident? [14:17] vikash which could be one way [14:19] vikash I will ask few more questions but before that can you please throw some light on "nt. It would be nice if you could describe the forms using JSON-LD as well instead of hard-coding them into HTML." [14:21] mlnt no, for the creator app you would predefine a couple of things for certain schema.org types [14:21] vikash yes.. [14:22] vikash intact lets do one thing. [14:22] mlnt so you don't ask the user for @vocab but for the type.. so Person, Event, etc. [14:22] vikash Let me implement something small [14:22] vikash depending upon which we shall improve. [14:23] vikash I think that ways I will understand better. [14:23] vikash mlnt, can you explain the last point.. the hard-coding one.. [14:24] vikash and mlnt sorry if I woke you up early morning :D [14:25] mlnt it's 2pm here [14:25] mlnt I'm in Europe [14:25] mlnt so all right :-) [14:26] vikash hehe! Oh! I thought you are also staying in US or MIT Boston :-P [14:27] mlnt no [14:27] mlnt Austria at the moment [14:27] mlnt but I'm from Italy originally [14:27] mlnt btw. here's the final jsfiddle: http://jsfiddle.net/9ZU8q/2/ [14:27] mlnt transforms the data to json-ld and then expands it [14:28] vikash mlnt, and .. just small bits of info on "create a UI which makes it simple to create such transformation rules" [14:28] vikash mlnt, Did you complete the github App for JSON to JSON-LD :P [14:28] vikash ? [14:29] vikash mlnt, And thanks! This is very helpful :) [14:29] mlnt sorry, I don't understand your question [14:31] vikash mlnt, Does this last fiddle the entire JSON to JSON-LD conversion tool for github api? [14:33] mlnt no, it just converts GitHub user representations [14:33] vikash mlnt, because thats one of my brownie tasks :-) *wink* [14:33] mlnt so just for urls starting with https://api.github.com/users/ [14:33] vikash Cool! That was very insightful! [14:33] mlnt you have to look up the API documentation and do something similar for the other representations [14:34] vikash expanded representations are always required? [14:34] vikash mlnt, ^ [14:34] mlnt perhaps it is possible to create a single context that you can then simple reference in your transformation rules [14:34] vikash yes.. I saw that example in spec :) [14:34] mlnt no, expanded representation just shows you nicely how it is interpreted in JSON-LD [14:34] mlnt it shows you how all the properties etc. are expanded to URLs [14:35] vikash Yes! [14:35] mlnt in the example you'll see that name is expanded to http://example.com/name because I used @vocab: http://example.com/ [14:35] vikash yes! I could figure that out :-) [14:36] mlnt It also shows you that all URLs are still just interpreted as values (strings) instead of URLs, e.g., followers_url [14:36] mlnt so you would have to adjust your context or transformation rules accordingly [14:40] vikash mlnt, and where shall be the code mirror used? [14:41] vikash will read the macro js, jsonld.js, future.js and other related files and will implement something now! [14:43] mlnt ok [14:44] mlnt doesn't matter where the code will be used [14:44] mlnt we will find a place [14:44] vikash cool! so I am keeping that aside for time being [14:44] vikash :D [14:47] vikash mlnt, Thanks a tonne :D [14:50] mlnt your are welcome
Received on Saturday, 4 May 2013 13:49:43 UTC