- From: Nathan <nathan@webr3.org>
- Date: Thu, 13 Jan 2011 09:38:07 +0000
- To: Manu Sporny <msporny@digitalbazaar.com>
- CC: Ivan Herman <ivan@w3.org>, RDFa WG <public-rdfa-wg@w3.org>, Tim Berners-Lee <timbl@w3.org>
Manu Sporny wrote:
> On 01/03/2011 12:42 AM, Ivan Herman wrote:
>>> For example, the following is possible when using the RDF API:
>>>
>>> var rdf = document.data.rdf; rdf.prefixes.foaf =
>>> "http://xmlns.com/foaf/0.1/"; var foafname =
>>> rdf.resolve("foaf:name"); // at this point, foafname ==
>>> "http://xmlns.com/foaf/0.1/name"
>>>
>>> Given the code above, the following is also possible using the RDF
>>> API:
>>>
>>> var short = rdf.prefixes.shrink(foafname); // at this point short
>>> == "foaf:name"
>> The direct counterpart of the original issue/proposal would be to
>> have a definition of prefixes so that I could also say
>>
>> var foafname = rdf.prefixes.foaf('name')
>>
>> Ie, once I have defined the prefix I would not have to repeat it
>> verbatim because it becomes a function of its own right.
>
> Hmm, this is an interesting twist on what's in the spec right now and
> may address your request below, Ivan.
first, just a quick note that you can currently do:
rdf.prefixes.foaf + 'name'
rdf.prefixes.foaf.concat('name')
rdf.prefixes.resolve('foaf:name')
rdf.resolve('foaf:name')
however, primarily if you want stable resolution in a modular
environment then you just instantiate your own PrefixMap or Profile and
use that in your script/lib/module
x.foaf + 'name'
...
x.resolve('foaf:name')
moving on to proposal below:
> I haven't tried this out, so there may be something preventing us from
> doing this in JavaScript, but basically, we'd change the PrefixMap
> interface from this:
>
> omittable getter DOMString get(in DOMString prefix);
> omittable setter void set(in DOMString prefix, in DOMString iri);
>
> to this (note the change in return type for get()):
>
> omittable getter PrefixResolver get(in DOMString prefix);
> omittable setter void set(in DOMString prefix, in DOMString iri);
>
> [Callback]
> interface PrefixResolver
> {
> DOMString resolve(in DOMString prefix);
> }
sadly that's not possible, even with ECMAScript-262 v5 features, because
of the setter, it would need to be a defined method such as setPrefix
which would then define a magic property on the object to enable
rdf.prefixes.foaf('name')
However you'd need v5 advanced features and it's far from "normal" js
behaviour.
That said, in a previous revision of the api, there was another
(disputed iirc) approach, which was to change the return type of
Profile::setPrefix from void to a "PrefixResolver", so you'd:
foaf = rdf.setPrefix('foaf', 'http://xmlns.com/foaf/0.1/');
then you could do:
foaf('name')
rdf.resolve('foaf:name')
rdf.prefixes.foaf + name
...
and you could still ignore this functionality and just do the
getter/setter approach if you wanted:
rdf.prefixes.foaf = 'http://xmlns.com/foaf/0.1/'
rdf.resolve('foaf:name')
rdf.prefixes.foaf + name
...
this is something of a happy medium which allows the compact functional
style implemented in tabulator foaf('name'), and the current dictionary
type approach.
Best,
Nathan
Received on Thursday, 13 January 2011 09:40:11 UTC