Re: PROPOSAL to close ISSUE-61: Does the RDFa API need a vocabulary helper

On Jan 13, 2011, at 10:38 , Nathan wrote:

[snip]
> 
>> 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.

I was actually wondering about how this could be done in javascript. In Python, though not trivial, it is possibly to modify an objects __dict__, as it called there, ie, adding a new method to an object dynamically with any name created run-time...

> 
> 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
>  ...

This is actually very close to what I am used to, which is

foaf = Namespace('http://xmlns.com/foaf/0.1/')

although, for my instinct, the first argument ('foaf') is actually superfluous. But I can live with that...

Ivan


> 
> 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


----
Ivan Herman, W3C Semantic Web Activity Lead
Home: http://www.w3.org/People/Ivan/
mobile: +31-641044153
PGP Key: http://www.ivan-herman.net/pgpkey.html
FOAF: http://www.ivan-herman.net/foaf.rdf

Received on Thursday, 13 January 2011 10:04:57 UTC