- From: Keith Alexander <k.j.w.alexander@gmail.com>
- Date: Thu, 10 Mar 2011 16:05:04 +0000
- To: Joshua Shinavier <josh@fortytwo.net>
- Cc: Toby Inkster <tai@g5n.co.uk>, public-rdf-wg@w3.org, semantic-web@w3.org
On Thu, Mar 10, 2011 at 8:29 AM, Joshua Shinavier <josh@fortytwo.net> wrote:
> Hi Toby,
>
>
> On Thu, Mar 10, 2011 at 7:17 AM, Toby Inkster <tai@g5n.co.uk> wrote:
>> Here's a simple criterion...
>> [...]
>
>
> I like what you're trying to do, although I think the criterion as it
> stands is a bit *too* simple. For one thing, it's not hard trade off
> compactness of the client code with that of the serialization format.
Would "merging multiple graphs" make sense as a good task to judge a
data structure for RDF by?
> E.g. these 14 lines of code should do what you asked:
>
> function get_name_new(d, homepage)
> {
> var foaf = function(term)
> { return 'http://xmlns.com/foaf/0.1/' + term; }
> var s = d['ops'][homepage][foaf('homepage')];
> for (var i in s) {
> var o = d['spo'][s[i]][foaf('name')];
> for (var j in o) {
> if (o[j]['type'] == 'literal') {
> return o[j]['value'];
> }
> }
> }
> }
>
> ...provided that you're willing to put up with weird, verbose JSON like this:
>
> {
> 'spo' : {
> 'http://example.org/ns#toby' : {
> 'http://xmlns.com/foaf/0.1/homepage' : [{
> 'value' : 'http://tobyinkster.co.uk/',
> 'type' : 'uri'
> }],
> 'http://xmlns.com/foaf/0.1/name' : [{
> 'value' : 'toby',
> 'type' : 'literal'
> }]
> }
> },
> 'ops' : {
> 'http://tobyinkster.co.uk/' : {
> 'http://xmlns.com/foaf/0.1/homepage' : [
> 'http://example.org/ns#toby'
> ]
> },
> 'literal toby' : {
> 'http://xmlns.com/foaf/0.1/name' : [
> 'http://example.org/ns#toby'
> ]
> }
> }
> };
>
>
> Best regards,
>
> Joshua
>
>
> --
> Joshua Shinavier
> Tetherless World Constellation PhD student
> http://tw.rpi.edu/wiki/Joshua_Shinavier
> http://fortytwo.net
>
>
>
>
>>
>> Let's assume we have a serialisation 's' and an object 'd' that has
>> been parsed using a standard JSON parser with no special RDF knowledge,
>> so it's just a structure of arrays and objects.
>>
>> Now, write a function get_name(o, homepage) which, given 'd' as its
>> input data and a foaf:homepage URI, returns the foaf:name for the owner
>> of the homepage. (The function is not required to perform any RDFS/OWL
>> inference.)
>>
>> i.e. it is asked to perform the equivalent of:
>>
>> PREFIX foaf: <http://xmlns.com/foaf/0.1/>
>> SELECT ?name
>> WHERE {
>> GRAPH ?d {
>> ?person foaf:homepage ?homepage
>> foaf:name ?name .
>> }
>> FILTER(is_iri(?homepage) && is_literal(?name))
>> }
>> LIMIT 1
>>
>> Use Javascript, pseudo-code or whatever.
>>
>> Here's my example for Talis' RDF/JSON:
>>
>> function get_name (d, homepage)
>> {
>> var foaf = function (term)
>> { return 'http://xmlns.com/foaf/0.1/' + term; }
>> for (var s in d) {
>> var matches_homepage = false;
>> if (d[s][foaf('homepage')]) {
>> for (var i in d[s][foaf('homepage')]) {
>> o = d[s][foaf('homepage')][i];
>> if (o['value']==homepage && o['type']=='uri') {
>> matches_homepage = true;
>> }
>> }
>> }
>> if (matches_homepage && d[s][foaf('name')]) {
>> for (var i in d[s][foaf('name')]) {
>> o = d[s][foaf('name')][i];
>> if (o['type']=='literal') {
>> return o['value'];
>> }
>> }
>> }
>> }
>> }
>>
>> 24 lines. I think that line count is a good measure of the quality of
>> the serialisation. (Low line counts being good.)
>>
>> The challenge for people proposing supposedly friendly JSON
>> serialisations with features like CURIEs, arbitrarily nested objects,
>> heuristics, etc is to beat that line count.
>>
>> --
>> Toby A Inkster
>> <mailto:mail@tobyinkster.co.uk>
>> <http://tobyinkster.co.uk>
>>
>>
>>
>
>
Received on Thursday, 10 March 2011 16:07:29 UTC