Re: Storing/Retrieving RDF URIs

Axel Hecht <[email protected]> Thu, 30 Aug 2007 02:25:36 +0200
Newsgroups gmane.comp.mozilla.devel.rdf
Message-ID <[email protected]>
neil.stansbury () redbacksystems ! com wrote:
> Hi all,
> 
> I am in dire need of an elegant solution storing & retrieving 
> potentially hundreds of RDF reference URIs. I started out with constants 
> in my code but this is really starting to get unwieldy and unmanageable.
> 
> What I really need is some form of dynamically loadable lookup/hash 
> table that I can get the correct URI from but without resorting to loads 
> of keys declared as constants.
> 
> One potential way I can see would be to load the RDF schemas themselves 
> into a datasource, which has the advantage of them being dynamic but 
> doesn't really help me retrieve them.
> 
> The only solution I can come up with is as a class of getters but again 
> makes it difficult to overload the base class, something like:
> 
> dcTable = New DublinCoreTable()
> uri = dcTable.getTitle()
> 
> 
> Just wondered if anyone else has crossed and solved this problem?
> 

Something like

var dc =
   new Vocabulary("http://purl.org/dc/elements/1.1/",
                  ['title', 'creator', 'subject', 'description',
                   'publisher', 'contributor', 'date', 'type', 'format',
                   'identifier', 'source', 'language', 'relation', 
'coverage',
                   'rights']);


with

function Vocabulary(basepath, leafs) {
   for each (leaf in leafs) {
     this[leaf] = RDFS.GetResource(basepath + leaf);
   };
   this.__contains__ = function(url) {
     var bpl = basepath.length;
     if (url.substr(0, bpl) != basepath) {
       return false;
     }
     return url.substr(bpl) in this;
   };
   this.toString = function() {
     return basepath;
   };
};
Vocabulary.prototype = {};


might do the trick for you.

There isn't a lot to improve here, sadly. Parsing schemas fails badly, 
because the Mozilla RDF/XML parser is broken on xml:base, and using js 
magic fails as regular js doesn't have default lookup hooks. You could 
write one in C++, but that seemed overkill to me. I hope js2 will have 
those hooks, really.

You could use __defineGetter__, too, if you want to be dead sure about 
the const'ness.

Axel