Skip to content

Commit

Permalink
improved codes from CLOUD9
Browse files Browse the repository at this point in the history
  • Loading branch information
baxtree committed Jan 9, 2012
1 parent 6be0cd7 commit c4cf8b4
Show file tree
Hide file tree
Showing 6 changed files with 367 additions and 361 deletions.
92 changes: 47 additions & 45 deletions example/example.js
Original file line number Original file line Diff line number Diff line change
@@ -1,46 +1,48 @@
var rdf2json = require("../lib/rdf2json"); var rdf2json = require("../lib/rdf2json");
var sys = require("sys"); var sys = require("sys");
rdf2json.convertFileIntoRDFJSON("./test/wine.rdf", "flat", function(err, rdfjson){ rdf2json.convertFileIntoRDFJSON("./test/wine.rdf", "flat", function(err, rdfjson){
var obj = eval("("+ rdfjson +")"); if(err) sys.puts("Something wrong here ...");
sys.puts(JSON.stringify(obj)); var obj = eval("("+ rdfjson +")");
}); sys.puts(JSON.stringify(obj));

});
rdf2json.convertURLIntoRDFJSON("http://www.w3.org/TR/owl-guide/wine.rdf", "sparql", function(err, rdfjson){
var obj = eval("("+ rdfjson +")"); rdf2json.convertURLIntoRDFJSON("http://www.w3.org/TR/owl-guide/wine.rdf", "sparql", function(err, rdfjson){
sys.puts(JSON.stringify(obj)); if(err) sys.puts("Something wrong here ...");
}); var obj = eval("("+ rdfjson +")");

sys.puts(JSON.stringify(obj));
rdf2json.convertStringIntoRDFJSON("" + });
"<?xml version=\"1.0\"?>" +
" <!DOCTYPE rdf:RDF [" + rdf2json.convertStringIntoRDFJSON("" +
" <!ENTITY vin \"http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#\" >" + "<?xml version=\"1.0\"?>" +
" <!ENTITY food \"http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#\" >" + " <!DOCTYPE rdf:RDF [" +
" <!ENTITY owl \"http://www.w3.org/2002/07/owl#\" >" + " <!ENTITY vin \"http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#\" >" +
" <!ENTITY xsd \"http://www.w3.org/2001/XMLSchema#\" >" + " <!ENTITY food \"http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#\" >" +
"]>" + " <!ENTITY owl \"http://www.w3.org/2002/07/owl#\" >" +
"<rdf:RDF" + " <!ENTITY xsd \"http://www.w3.org/2001/XMLSchema#\" >" +
" xmlns = \"http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#\"" + "]>" +
" xmlns:vin = \"http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#\"" + "<rdf:RDF" +
" xml:base = \"http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#\"" + " xmlns = \"http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#\"" +
" xmlns:food= \"http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#\"" + " xmlns:vin = \"http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#\"" +
" xmlns:owl = \"http://www.w3.org/2002/07/owl#\"" + " xml:base = \"http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#\"" +
" xmlns:rdf = \"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"" + " xmlns:food= \"http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#\"" +
" xmlns:rdfs= \"http://www.w3.org/2000/01/rdf-schema#\"" + " xmlns:owl = \"http://www.w3.org/2002/07/owl#\"" +
" xmlns:xsd = \"http://www.w3.org/2001/XMLSchema#\">" + " xmlns:rdf = \"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"" +
"" + " xmlns:rdfs= \"http://www.w3.org/2000/01/rdf-schema#\"" +
" <owl:Ontology rdf:about=\"\">" + " xmlns:xsd = \"http://www.w3.org/2001/XMLSchema#\">" +
" <rdfs:comment>An example OWL ontology</rdfs:comment>" + "" +
" <owl:priorVersion>" + " <owl:Ontology rdf:about=\"\">" +
" <owl:Ontology rdf:about=\"http://www.w3.org/TR/2003/CR-owl-guide-20030818/wine\"/>" + " <rdfs:comment>An example OWL ontology</rdfs:comment>" +
" </owl:priorVersion>" + " <owl:priorVersion>" +
" <owl:imports rdf:resource=\"http://www.w3.org/TR/2003/PR-owl-guide-20031209/food\"/>" + " <owl:Ontology rdf:about=\"http://www.w3.org/TR/2003/CR-owl-guide-20030818/wine\"/>" +
" <rdfs:comment>Derived from the DAML Wine ontology at " + " </owl:priorVersion>" +
" http://ontolingua.stanford.edu/doc/chimaera/ontologies/wines.daml" + " <owl:imports rdf:resource=\"http://www.w3.org/TR/2003/PR-owl-guide-20031209/food\"/>" +
" Substantially changed, in particular the Region based relations." + " <rdfs:comment>Derived from the DAML Wine ontology at " +
" </rdfs:comment>" + " http://ontolingua.stanford.edu/doc/chimaera/ontologies/wines.daml" +
" <rdfs:label>Wine Ontology</rdfs:label>" + " Substantially changed, in particular the Region based relations." +
" </owl:Ontology>" + " </rdfs:comment>" +
"</rdf:RDF>", "talis", function(err, rdfjson){ " <rdfs:label>Wine Ontology</rdfs:label>" +
var obj = eval("("+ rdfjson +")"); " </owl:Ontology>" +
sys.puts(JSON.stringify(obj)); "</rdf:RDF>", "talis", function(err, rdfjson){
var obj = eval("("+ rdfjson +")");
sys.puts(JSON.stringify(obj));
}); });
2 changes: 1 addition & 1 deletion lib/rdf2json/index.js
Original file line number Original file line Diff line number Diff line change
@@ -1,2 +1,2 @@
var rdf2json = require("./node-rdf2json"); var rdf2json = require("./node-rdf2json");
module.exports = rdf2json; module.exports = rdf2json;
297 changes: 148 additions & 149 deletions lib/rdf2json/node-rdf2json.js
Original file line number Original file line Diff line number Diff line change
@@ -1,150 +1,149 @@
var http = require("http"); var sys = require("sys");
var sys = require("sys"); var RDF = require("../vendor/rdf-parser/parser").RDF;
var RDF = require("../vendor/rdf-parser/parser").RDF; var fs = require("fs");
var fs = require("fs");

function generateFlatRDFJSONString(triples) {
function generateFlatRDFJSONString(triples) { var rdfjson = "";
var rdfjson = ""; for ( var i = 0; i < triples.length; i++) {
for ( var i = 0; i < triples.length; i++) { rdfjson += "{";
rdfjson += "{"; var subject = triples[i].subject.toString();
var subject = triples[i].subject.toString(); var predicate = triples[i].predicate.toString();
var predicate = triples[i].predicate.toString(); var object = triples[i].object == undefined ? undefined
var object = triples[i].object == undefined ? undefined : triples[i].object.toString();
: triples[i].object.toString(); var lang = triples[i].lang ? triples[i].lang.toString() : "";
var lang = triples[i].lang ? triples[i].lang.toString() : ""; var datatype = triples[i].datatype ? triples[i].datatype.toString()
var datatype = triples[i].datatype ? triples[i].datatype.toString() : "";
: ""; if (triples[i].type == "resource") {
if (triples[i].type == "resource") { rdfjson += "\"s\" : { \"type\" : \"uri\", \"uri\" : \"" + subject
rdfjson += "\"s\" : { \"type\" : \"uri\", \"uri\" : \"" + subject + "\" },";
+ "\" },"; rdfjson += "\"p\" : \"" + predicate + "\",";
rdfjson += "\"p\" : \"" + predicate + "\","; rdfjson += "\"o\" : { \"type\" : \"uri\", \"uri\" : \"" + object
rdfjson += "\"o\" : { \"type\" : \"uri\", \"uri\" : \"" + object + "\" }";
+ "\" }"; } else {
} else { rdfjson += "\"s\" : { \"type\" : \"uri\", \"uri\" : \"" + subject
rdfjson += "\"s\" : { \"type\" : \"uri\", \"uri\" : \"" + subject + "\" },";
+ "\" },"; rdfjson += "\"p\" : \"" + predicate + "\",";
rdfjson += "\"p\" : \"" + predicate + "\","; rdfjson += "\"o\" : { \"type\" : \"literal\", \"val\" : \""
rdfjson += "\"o\" : { \"type\" : \"literal\", \"val\" : \"" + object + "\" , \"lang\" : \"" + lang
+ object + "\" , \"lang\" : \"" + lang + "\", \"datatype\" : \"" + datatype + "\"}";
+ "\", \"datatype\" : \"" + datatype + "\"}"; }
} if (i != (triples.length - 1)) {
if (i != (triples.length - 1)) { rdfjson += "},";
rdfjson += "},"; } else {
} else { rdfjson += "}";
rdfjson += "}"; }
} }
} return rdfjson;
return rdfjson; }
}

function _toRDFJSON(rdf, type, callback) {
function _toRDFJSON(rdf, type, callback) { var rdfjson = "";
var rdfjson = ""; if (type.toLowerCase() == "flat") {
if (type.toLowerCase() == "flat") { var triples = rdf.Match(null, null, null, null);
var triples = rdf.Match(null, null, null, null); rdfjson += "{ \"data\" : [";
rdfjson += "{ \"data\" : ["; rdfjson += generateFlatRDFJSONString(triples);
rdfjson += generateFlatRDFJSONString(triples); rdfjson += "]}";
rdfjson += "]}"; } else if (type.toLowerCase() == "sparql") {
} else if (type.toLowerCase() == "sparql") { var triples = rdf.Match(null, null, null, null);
var triples = rdf.Match(null, null, null, null); rdfjson += "{ \"head\" : { \"vars\" : [\"s\", \"p\", \"o\"]},";
rdfjson += "{ \"head\" : { \"vars\" : [\"s\", \"p\", \"o\"]},"; rdfjson += "\"results\" : { \"bindings\" : [";
rdfjson += "\"results\" : { \"bindings\" : ["; rdfjson += generateFlatRDFJSONString(triples);
rdfjson += generateFlatRDFJSONString(triples); rdfjson += "]}}";
rdfjson += "]}}"; } else if (type.toLowerCase() == "talis") {
} else if (type.toLowerCase() == "talis") { var triples = rdf.Match(null, null, null, null);
var triples = rdf.Match(null, null, null, null); sys.puts(sys.inspect(triples));
sys.puts(sys.inspect(triples)); var subjects = new Array();
var subjects = new Array(); for ( var i = 0; i < triples.length; i++) {
for ( var i = 0; i < triples.length; i++) { if (subjects.indexOf(triples[i].subject) != -1) {
if (subjects.indexOf(triples[i].subject) != -1) { continue;
continue; } else {
} else { subjects.push(triples[i].subject);
subjects.push(triples[i].subject); }
} }
} rdfjson += "{";
rdfjson += "{"; for ( var i = 0; i < subjects.length; i++) {
for ( var i = 0; i < subjects.length; i++) { rdfjson += " \"" + subjects[i] + "\" : {";
rdfjson += " \"" + subjects[i] + "\" : {"; var groupSubjects = rdf.Match(null, subjects[i], null, null);
var groupSubjects = rdf.Match(null, subjects[i], null, null); var predicates = new Array();
var predicates = new Array(); for ( var j = 0; j < groupSubjects.length; j++) {
for ( var j = 0; j < groupSubjects.length; j++) { if (predicates.indexOf(groupSubjects[j].predicate) != -1) {
if (predicates.indexOf(groupSubjects[j].predicate) != -1) { continue;
continue; } else {
} else { predicates.push(groupSubjects[j].predicate);
predicates.push(groupSubjects[j].predicate); }
} }
} for ( var j = 0; j < predicates.length; j++) {
for ( var j = 0; j < predicates.length; j++) { rdfjson += "\"" + predicates[j] + "\" : [";
rdfjson += "\"" + predicates[j] + "\" : ["; groupObjects = rdf
groupObjects = rdf .Match(null, subjects[i], predicates[j], null);
.Match(null, subjects[i], predicates[j], null); for ( var k = 0; k < groupObjects.length; k++) {
for ( var k = 0; k < groupObjects.length; k++) { var object = groupObjects[k].object;
var object = groupObjects[k].object; if (!groupObjects[k].type)
if (!groupObjects[k].type) continue;// TODO If the parsing result is correct,
continue;// TODO If the parsing result is correct, // each statement should always have this
// each statement should always have this // type info.
// type info. if (groupObjects[k].type.toString() == "literal") {
if (groupObjects[k].type.toString() == "literal") { rdfjson += "{ \"value\" : \"" + object.toString()
rdfjson += "{ \"value\" : \"" + object.toString() + "\", \"type\" : \"uri\"";
+ "\", \"type\" : \"uri\""; if (groupObjects[k].datatype) {
if (groupObjects[k].datatype) { rdfjson += ", \"datatype\" : \""
rdfjson += ", \"datatype\" : \"" + groupObjects[k].datatype.toString()
+ groupObjects[k].datatype.toString() + "\"";
+ "\""; }
} if (groupObjects[k].lang) {
if (groupObjects[k].lang) { rdfjson += ", \"lang\" : \""
rdfjson += ", \"lang\" : \"" + groupObjects[k].lang.toString() + "\"";
+ groupObjects[k].lang.toString() + "\""; }
} rdfjson += "}";
rdfjson += "}"; } else if (groupObjects[k].type.toString() == "resource") {
} else if (groupObjects[k].type.toString() == "resource") { if (object.toString().substr(0, 2) == "_:n") {
if (object.toString().substr(0, 2) == "_:n") { rdfjson += "{ \"value\" : \"" + object.toString()
rdfjson += "{ \"value\" : \"" + object.toString() + "\", \"type\" : \"bnode\"}";
+ "\", \"type\" : \"bnode\"}"; } else {
} else { rdfjson += "{ \"value\" : \"" + object.toString()
rdfjson += "{ \"value\" : \"" + object.toString() + "\", \"type\" : \"uri\"}";
+ "\", \"type\" : \"uri\"}"; }
} }
} if (k < groupObjects.length - 1) {
if (k < groupObjects.length - 1) { rdfjson += ",";
rdfjson += ","; }
} }
} rdfjson += "]";
rdfjson += "]"; if (j < predicates.length - 1)
if (j < predicates.length - 1) rdfjson += ",";
rdfjson += ","; }
} rdfjson += "}";
rdfjson += "}"; if (i < subjects.length - 1)
if (i < subjects.length - 1) rdfjson += ",";
rdfjson += ","; }
} rdfjson += "}";
rdfjson += "}"; }
} callback(null, rdfjson);
callback(null, rdfjson); }
}

exports.convertStringIntoRDFJSON = function(rdfxml, type, callback) {
exports.convertStringIntoRDFJSON = function(rdfxml, type, callback) { var rdf = new RDF();
var rdf = new RDF(); rdf.loadRDFXML(rdfxml);
rdf.loadRDFXML(rdfxml); _toRDFJSON(rdf, type, function(err, rdfjson) {
_toRDFJSON(rdf, type, function(err, rdfjson) { callback(null, rdfjson);
callback(null, rdfjson); });
}); };
};

exports.convertFileIntoRDFJSON = function(filepath, type, callback) {
exports.convertFileIntoRDFJSON = function(filepath, type, callback) { var self = this;
var self = this; var rdf = new RDF();
var rdf = new RDF(); fs.readFile(filepath, function(err, data) {
fs.readFile(filepath, function(err, data) { self.convertStringIntoRDFJSON(data, type, function(err, rdfjson) {
self.convertStringIntoRDFJSON(data, type, function(err, rdfjson) { callback(null, rdfjson);
callback(null, rdfjson); });
}); });
}); };
};

exports.convertURLIntoRDFJSON = function(url, type, callback) {
exports.convertURLIntoRDFJSON = function(url, type, callback) { var rdf = new RDF();
var rdf = new RDF(); rdf.getRDFURL(url, function() {
rdf.getRDFURL(url, function() { _toRDFJSON(rdf, type, function(err, rdfjson) {
_toRDFJSON(rdf, type, function(err, rdfjson) { callback(null, rdfjson);
callback(null, rdfjson); });
}); });
});
}; };
Loading

0 comments on commit c4cf8b4

Please sign in to comment.