- From: Manu Sporny <msporny@digitalbazaar.com>
- Date: Fri, 04 May 2012 00:11:41 -0400
- To: RDF WG <public-rdf-wg@w3.org>
The subject of the e-mail is a bit tongue-in-cheek, but after being forced to work with RDF lists in the RDFa work and now again in the JSON-LD work - I really, truly hate the way RDF Lists are modeled. Just a few anecdotes to why: * The addition of RDF List processing is one of the most complex features of RDFa 1.1 and the triples that are generated are nearly useless in their raw form to developers. It took me a full 38 hours to implement support for it in librdfa - which was the grand total amount of time that it took me to implement the first cut of the librdfa processor in C. Yes, this is partly due to the difficulty of expressing a list in a hierarchical document expressing RDF, but even the resulting triples just make no sense to someone that isn't a programmer. You can't expect Web developers to know what a linked list is. * The addition of RDF List processing in JSON-LD created many hours of head-scratching and pain because of the awkwardness of the RDF data model when it comes to lists. It also prevented us from implementing lists of lists because the algorithm to do so became fantastically complex - corner cases related to lists started mounting fairly quickly and we had to fence the work to not fall into the endless pit of RDF List related issues. * We went out of our way to not support RDF Lists in the PaySwarm implementations we've been doing. It was only when we created JSON-LD did we figure out a way to use them without having to give everybody that didn't know anything about RDF, who wanted to learn the PaySwarm API, a lesson in RDF Lists 101. The solution was to hide RDF Lists from developers entirely. In summary - RDF Lists are difficult to implement, even for people that know quite a bit about RDF. They are fantastically difficult to grasp for Web developers. They are really hard to author in many of the RDF syntaxes. I'd like to propose something that the group should seriously consider: 1. Add lists as a first-class citizen for all RDF serializations - deprecate all serializations that don't support lists as first-class citizens. 2. Get rid of the the Seq, Bag and List classes - replace with two datatypes - rdf:ordered and rdf:unordered. All "lists" in RDF are ordered by default. So, N-Triples and N-Quads could look something like this: # ordered list <s> <p> ["O1", "O2"@ja, <http://example.org/>] . # unordered list <s> <p> ["01", "O2"@ja, <http://example.org/>]^^rdf:unordered . or even: # ordered list <s> <p> ["O1", "O2"@ja, <http://example.org/>] . # unordered list <s> <p> ("01", "O2"@ja, <http://example.org/>) . If we had started with this, it would mean that RDF Lists would have a direct mapping to JSON (which got lists right, IMHO). The beauty of JSON is that by default, the list has order... and if you don't care about order, you just process the list in any order. If you care about order, start from the beginning and go to the end. JSON got lists right because they make the default case ordered and the corner-case unordered. RDF did it backwards and got it wrong. While this idea isn't fully baked, I've been sitting on it for two years now and thought I should send it out while I was still agitated about having to foist RDF Lists onto Web developers. This is one of those bits of RDF that has been hurting the cause for over a decade. Surely, this has been discussed before? Anyone have a link? -- manu -- Manu Sporny (skype: msporny, twitter: manusporny) President/CEO - Digital Bazaar, Inc. blog: PaySwarm Website for Developers Launched http://digitalbazaar.com/2012/02/22/new-payswarm-alpha/
Received on Friday, 4 May 2012 04:12:10 UTC