Listing 7. Insertion of Facts into an RDF Datasource from a Script // --- globals --- klass.datasource = Cc["@mozilla.org/rdf/datasource;1" + "?name=in-memory-datasource"]; klass.rdf = Cc["@mozilla.org/rdf/rdf-service;1"]; var schema = "http://www.example.org/ProcData#"; var props = [ "pid", "ppid", "pcpu", "time", "vsz", "group", "nice", "user", "args" ]; var rdf = klass.rdf.getService(Ci.nsIRDFService); var root = rdf.GetResource(schema + "ProcList"); var child = rdf.GetResource(schema + "child"); var preds = []; for (var p in props) preds[p] = rdf.GetResource(schema + props[p]); // --- mainline --- window.addEventListener("load",load_handler,true); // --- functions --- function update_tree() { var tree = document.getElementById("proc-tree"); // get the in-memory ds, not the rdf:localstore var ds = tree.database.GetDataSources(); ds = ( ds.getNext(), ds.getNext() ); ds = ds.QueryInterface(Ci.nsIRDFDataSource); var sub, pred, obj; for (var i=0; i < psdata.length; i++) { if ( psdata[i][1] == "0" ) // a root node sub = root; else // a child node sub = rdf.GetResource( schema + "process-" + psdata[i][1]); pred = child; obj = rdf.GetResource( schema + "process-" + psdata[i][0]); ds.Assert(sub, pred, obj, true); // add all properties for this process sub = obj; for (var j=0; j < psdata[i].length; j++) { pred = preds[j]; obj = rdf.GetLiteral(psdata[i][j]); ds.Assert(sub, pred, obj, true); } } } function load_handler() { var tree = document.getElementById("proc-tree"); var ds = klass.datasource.createInstance( Ci.nsIRDFInMemoryDataSource); tree.database.AddDataSource(ds); update_tree(); }