- From: Nathan <nathan@webr3.org>
- Date: Tue, 12 Oct 2010 10:31:00 +0100
- To: Tim Berners-Lee <timbl@w3.org>
- CC: Manu Sporny <msporny@digitalbazaar.com>, RDFA Working Group <public-rdfa-wg@w3.org>
Tim Berners-Lee wrote:
> On 2010-10 -11, at 20:23, Manu Sporny wrote:
>> var c = document.data.context.resolveCurie;
>> var t1 = data.createTriple(me, c('rdf:type'), c('foaf:Person') );
>
> That will work.
>
>> var t2 = data.createTriple(me, c('foaf:givenname') , myName );
>> var t3 = data.createTriple(me, c('foaf:homepage') , myHomepage );
>
> No, this will not work.
> You must distinguish between a literal string "http://whatever" and a symbol <http://whatever>..
This natively will work because c (context.resolveCurie) returns an IRI
/ symbol not a string.
It's also worth noting that c('foaf:name') may not resolve (if the
prefix is unknown) whereas foaf('name') will always return the expected IRI.
>>>> In other words, creating an object just to create a CURIE
>
> You are not creating a curie.
> RDF graphs don't have curies in them.
> You are creating an RDF node which has a URI.
I do have a general worry with regards curies which I've voiced
previously, in that heavy usage of curies can lead to people thinking of
'foaf:name' as a globally unique name; whereas a namespace approach
makes it clear that the URI is the globally unique name. Sometimes by
trying to make things more simple you actually make them more complex.
> I wish we could write doSomething(foaf.name)
> That is nice Javascript.
If an API dereferenced the ontology then there's no reason why this
couldn't be implemented, a Namespace() function would simply have to
return an object rather than a function, saying that in javascript an
object is a function so there's no reason it couldn't provide both options
foaf = ns('http://...');
foaf.name // would work
foaf('name') // would work
>> I think the points above still stand, what do you think?
>
> I don't think they do.
> You have to figure out what you are going to pass.
> You have to allow someone to either use a prefixed URI or a full long URI or give a string or a number (or a Date).
> I've been writing lots of javascipt and I am happy to learn new tricks but I am sure that the
> user needs a consistent model and a simple compose-able rules.
>
> document.data.add(me, foaf('knows'), you);
> d = document.data
> d.add(me, foaf('name'), "John Doe");
> d.add(me, foaf('knows'), mydoc('sally');
> d.add(me, foaf('age'), 3);
> d.add(me, foaf('kidsAges'), [10, 6]); // Makes an RDF Collection
> d.add(me, foaf('dob'), new Date('1921-09-19')); // Makes the right datatype
>
> Where any of the three parameters to add can take any of the forms (modulo the RDF model).
> The aim is to coerce from the natural javascript to the appropriate RDF in a very consistent way.
This certainly resonates with me, and I'm personally implementing this
functionality on top of / in addition to the core RDF API.
In many ways it appears that other than the RDFa/document specific
functionality, the core RDF API which we are creating is more of a
standardized API of core functionality for library implementers, rather
than an easy to use Javascript API for end users.
I do look forward to the day when we have that user friendly javascript
api for rdf, and part of me feels it's a shame this isn't being produced
where RDF/HTML/Javascript collide (RDFa), but over all I'm glad we're
making progress towards that day.
Best,
Nathan
Received on Tuesday, 12 October 2010 09:31:51 UTC