W3C home > Mailing lists > Public > public-rdf-comments@w3.org > November 2011

Benchmarking RDF in JSON

From: Toby Inkster <tai@g5n.co.uk>
Date: Sat, 12 Nov 2011 15:18:24 +0000
To: semantic-web@w3.org, public-rdf-comments@w3.org
Message-ID: <20111112151824.220157c2@miranda.g5n.co.uk>
I'm not talking about benchmarking in terms of "how fast?" but in terms
of "how easy?". There are a number of different ways of encoding RDF in
JSON, with specifications at various different levels of maturity. This
is a simple benchmark to compare how easy they are to work with:

In your favourite programming language, given an object representing
the deserialised form of a JSON file, encoded to the specification
being tested, write a function "name_for_homepage" which takes a URL,
finds which person (or organisation, etc - I don't care about the
rdf:type triple) has that URL as their foaf:homepage, and return that
person's name. Sometimes there will be more than one person with the
same homepage, or they'll have multiple names. If so, just return a
single arbitrary result. If there are no results, return null.

For example, using Talis' RDF/JSON, and Perl, and assuming $data holds
the deserialized data, we can write the function as follows:

sub name_for_homepage
{
  # Perl's idiom for function arguments
  my ($homepage) = @_;

  # Pseudo-constants
  my $FOAF_HOMEPAGE = 'http://xmlns.com/foaf/0.1/homepage';
  my $FOAF_NAME     = 'http://xmlns.com/foaf/0.1/name';

  # Examine each predicate-object list
  RESOURCE: foreach my $po_list (values %{$data})
  {
    # Skip over resources with no foaf:name
    next RESOURCE unless exists $po_list->{$FOAF_NAME};

    # Skip over resources which don't have the right homepage URI
    next RESOURCE unless grep
      { $_->{value} eq $homepage and $_->{type} eq 'uri' }
      @{ $po_list->{$FOAF_HOMEPAGE} || [] };

    # Return the zeroth foaf:name
    return $data->{$subject}{$FOAF_NAME}[0]{'value'};
  }

  # No success.
  return undef;
}

Pretty simple. The problem with many proposed RDF in JSON
serialisations is that they try to make the JSON look pretty at the
expense of processing simplicity. For example, add CURIES, and then
consumers have to add code that expands them. Use nested objects for
bnodes, and suddenly the code to crawl the structure becomes a lot more
complex.

So my challenge to other JSON serialisations is to make
name_for_homepage simpler (or at least not require it to become any
more complex). Are there any contenders?

-- 
Toby A Inkster
<mailto:mail@tobyinkster.co.uk>
<http://tobyinkster.co.uk>
Received on Saturday, 12 November 2011 15:18:26 UTC

This archive was generated by hypermail 2.4.0 : Friday, 17 January 2020 16:59:29 UTC