Reflections on the RDFa API

Hi all!

It is nice to see the progress on the RDF and RDFa APIs! I like that
PropertyGroup has been renamed, and e.g. the addition of getSubjects,
getProperties and getValues to DocumentData.

I have some suggestions for additions and improvements.

## Projections ##

I'd like to see Projection gain some methods to be able to traverse
the graph (entirely via Projections):

* getRel + retRels (or getProjection + getProjections)
* getRev + getRevs (or e.g. getSubjectProjection + getSubjectProjections)

An example of how usage would be like with these additions:

    var me = document.data.getProjection("http://example.org/me");
    var homepage = me.getRel("foaf:homepage");
    var title = homepage.get("dc:title");

Or one chained expression:

    var title =
data.getProjection("http://example.org/me").getRel("foaf:homepage").get("dc:title");

Work with my friends:

    me.getRels("foaf:knows").forEach(function (friend) {
        alert(friend.get("foaf:name"));
    });

Reverse relations (things created by me):

    var myCreations = me.getRevs("dct:creator");

The WebIDL for these would be something like:

    Projection    getRel (in DOMString uriOrCurie);
    Projection[]  getRels (in DOMString uriOrCurie);

    Projection    getRev (in DOMString uriOrCurie);
    Projection[]  getRevs (in DOMString uriOrCurie);

(I've mentioned these ideas before [1], [2].)

This resource-oriented way of working isn't uncommon in other RDF
API:s. Jena for instance has a Resource interface [3] reminiscent of
this. Recently, I've also added a new utility class in RDFLib [4]
which is inspired by both Jenas Resource and to some extent the RDFa
Projection. The discussion of this addition [5] explains some design
decisions and relations to e.g. RDF object mappers, etc.


## Literals with language ##

I also think that, since language tagged literals are converted to
plain strings when get/getAll is used, one should be able to provide a
language parameter to those methods. That would be used to filter out
only literals with the given language.

(Alternatives to that might be being able to pass language to the
getProjection(s) methods, next to (or as part of) the template
parameter. For comparison, in e.g. the Oort Python lib [6], I pass
language to a context, which is sort of like the Profile in the RDF
API. Language is also used in Gluon profiles [7] for this purpose
(predictable conversion of literals with language).)

Example:

    var title = homepage.get("dc:title", "en");


What do you think?

Best regards,
Niklas
--
<http://neverspace.net/>


[1]: http://lists.w3.org/Archives/Public/public-rdfa-wg/2010Jun/0046.html
[2]: http://lists.w3.org/Archives/Public/public-rdfa-wg/2010Nov/0078.html
[3]: http://www.openjena.org/tutorial/RDF_API/#ch-Navigating%20a%20Model
[4]: http://code.google.com/p/rdflib/source/browse/rdflib/description.py?r=feature%2Fresource-oriented-api
[5] http://code.google.com/p/rdflib/issues/detail?id=166
[6]: http://oort.to/
[7]: http://code.google.com/p/oort/wiki/Gluon#Compact_Profiles

Received on Thursday, 14 April 2011 09:51:13 UTC