feedback from an RDF API implementation

Hi All,

Some good news, Gavin Carothers (cc'd) has successfully implemented the 
RDF API in python:
   https://github.com/norcalrdf/pymantic/blob/master/pymantic/primitives.py

Good news, since they managed to do it straight from the doc without 
needing support, and with only minor (imo) feedback.

To quickly outline the feedback:

1- Expand on the difference between Graph.import and Graph.merge

2- Note about encoding of the values in the API, convert to UTF-8 or 
what? particularly around handling N-Triples and the like.

3- They ended up needing to implement a Graph.match function, in 
addition to Graph.filter, the primary reason for this being that the 
filter function accepts a closure, meaning that the details of the 
filter are not visible to the Graph implementation, therefore the 
execution of the filter cannot be optimized, which can be an issue with 
large graphs. Thus the Graph.match method they implemented accepted a 
simple "partial triple" to match against, for instance one with only the 
subject and predicate set, in their library this meant a difference of 
50ms for match rather than 50s for filter.

4- DataParser.parse method requires a callback. Whilst this is needed 
for async operation, it isn't for sync scripts, thus should be optional 
/ nullable.

5- Some general notes that reminded me we were going to drop the 
DataSerializer interface, and need to asap.

6- They intentionally avoided the GraphLiteral interface, "as using them 
would mean making the data un SPARQLable?" - which I must concead, has 
almost twisted my arm to say that the GraphLiteral interface (well 
renamed version of it) should be made optional or defined as an 
extension to the core interfaces.

7- a reminder that Language tags can be more than just 2-chars, and we 
need to handle that (will send a note to the group as it affects RDFa 
Core 1.1 IIRC).

and here's an extract of the tail end of the conversation:

[[
Gavin Carothers: Also, the RDF API isn't the API we expose to users
Nathan: awesome!
Gavin Carothers: the final API looks like: 
https://github.com/norcalrdf/pymantic/blob/master/pymantic/vocab/skos.py
Nathan: that's the whole goal of it, well maybe expose to advanced users 
and extensions - idea was to make something that libs could implement in 
order to swap/mix/match reusable modules or interface implementations
Gavin Carothers: ::nods::
Gavin Carothers: that's how we treated it
]]

Best,

Nathan

Received on Thursday, 21 April 2011 21:56:24 UTC