Example #1
0
 return function (params, callback) {
   return jsonld.toRDF(params, db.jsonld.options, function (err, triples) {
     if (err) { throw err; }
     var result = triples['@default'].map(function (triple) {
       return ['subject', 'predicate', 'object'].reduce(function(acc, key) {
         var node = triple[key];
         // uses type field set to 'blank node' by jsonld.js toRDF()
         if (node.type === 'blank node') {
           node.value = db.v('@id');
         }
         // preserve object data types using double quotation for literals
         // and don't keep data type for strings without defined language
         if(key === 'object' && triple.object.datatype){
           if(triple.object.datatype.match(XSDTYPE)){
             if(triple.object.datatype === 'http://www.w3.org/2001/XMLSchema#string'){
               node.value = '"' + triple.object.value + '"';
             } else {
               node.value = '"' + triple.object.value + '"^^<' + triple.object.datatype + '>';
             }
           } else if(triple.object.datatype.match(RDFLANGSTRING)){
             node.value = '"' + triple.object.value + '"@' + triple.object.language;
           }
         }
         acc[key] = node.value;
         return acc;
       }, {});
     });
     callback(null, result);
   });
 };
Example #2
0
function parse(rawDocument, contentType, convertCallback) {
    var n3Parser = N3.Parser();
    var n3Writer;
    var triples = [];
    var prefixes = {};

    if (contentType === 'application/ld+json') {
        var jsonDocument;
        try {
            jsonDocument = JSON.parse(rawDocument);
        } catch (err) {
            convertCallback(err, null);
        }
        jsonld.toRDF(jsonDocument, {
            format: 'application/nquads'
        }, nquadCallback);
    } else if (contentType === 'application/nquads' ||
        contentType === 'application/n-quads') {
        nquadCallback(null, rawDocument);
    } else {
        convertCallback(new Error("Wrong content type"), null);
    }

    function nquadCallback(err, nquads) {
        if (err) {
            debug("Error parsing nquads: " + err);
            convertCallback(err, null);
        }
        try {
            n3Parser.parse(nquads, tripleCallback, prefixCallback);
        } catch (err) {
            convertCallback(err, null);
        }
    }

    function tripleCallback(err, triple, prefixes) {
        if (err) {
            convertCallback(err, null);
        }
        if (triple) {
            triples.push(triple);
        } else {
            n3Writer = N3.Writer({
                prefixes: prefixes
            });
            for (var i = 0; i < triples.length; i++) {
                n3Writer.addTriple(triples[i]);
            }
            n3Writer.end(convertCallback);
        }
    }

    function prefixCallback(prefix, iri) {
        prefixes[prefix] = iri;
    }
}
 $scope.toRDF = function () {
   var jsonld = require('jsonld');
   var copiedForm = jQuery.extend(true, {}, $rootScope.jsonToSave);
   if (copiedForm) {
     jsonld.toRDF(copiedForm, {format: 'application/nquads'}, function (err, nquads) {
       $rootScope.jsonToRDF = nquads;
       return nquads;
     });
   }
 };
Example #4
0
 stream = stream.pipe(es.map(function (data, submit) {
   jsonld.toRDF(data, {format: 'application/nquads'}, function(err, out) {
     if (err) {
       console.error(err);
       submit(null, {});
     }
     else {
       submit(err, out);
     }
   });
 }))
// Extracts triples from a JSON-LD document
function extractTriples(json, addTriple, done) {
  jsonld.toRDF(json, function (error, triples) {
    for (var graphName in triples) {
      triples[graphName].forEach(function (triple) {
        addTriple(triple.subject.value,
                  triple.predicate.value,
                  convertEntity(triple.object));
      });
    }
    done(error);
  });
}
Example #6
0
  onSocketMessage: function(ewd) {

    var wsMsg = ewd.webSocketMessage;
    var type = wsMsg.type;
    var params = wsMsg.params;
    var sessid = ewd.session.$('ewd_sessid')._value;
    
    if (type === 'EWD.form.login') {
      console.log('login: '******'') return 'You must enter a username';
      if (params.password === '') return 'You must enter a password';
      //if (params.username !== 'rob' && params.username !== 'Rob') return 'Invalid login';
      //if (params.password !== 'secret') return 'Invalid login';

      ewd.session.setAuthenticated();

      ewd.sendWebSocketMsg({
        type: 'loggedInAs',
        message: {
          fullName: params.username,
        }
      });
      return ''; 
    };

    if (!ewd.session.isAuthenticated) return;
	if (type === 'EWD.form.queryText' || type==='FMQL.subquery') {
		if (params.queryText === '') return 'no query entered';
		var result = ewd.mumps.function('WRAP^FMQLEWD', sessid, params.queryText);
		var qresult = new ewd.mumps.GlobalNode('%zewdTemp', [sessid]);
		var array = qresult._getDocument();
		//for (var i=0;i<array.length;i++){
		//}
		var bquery=array.join('');
		var jdata=JSON.parse(bquery);
		ewd.sendWebSocketMsg({
			type: 'FMQLJData',
			message: {
				data: jdata
			}
		});
		jsonld.toRDF(jdata, {format: 'application/nquads'}, function(err,nquads) {
			ewd.sendWebSocketMsg({
				type: 'testld',
				message: {
					err:err,
					nquads:nquads
					}
			});
		});
		return 'got '+array.length;
	};
  }
Example #7
0
 stream = stream.pipe(es.map(function (data, submit) {
   jsonld.toRDF(data, {format: 'application/nquads'}, function(err, out) {
     if (err) {
       console.error(err);
       submit(null, {});
     }
     else {
       out.split('.\n').forEach(function(triplet) {
         worksheet.addRow(CSV.parse(triplet.replace(" ", "@").replace(" ", "@"), "@").pop()).commit();
       });
       submit();
     }
   });
 }));
Example #8
0
 inputs.forEach(function(input) {
   // report what's beeing tested
   var json = JSON.parse(fs.readFileSync(input));
   var validations = [];
   validators.forEach(function(test) {
     // test it!
     validations.push(test(json));
   });
   // dump nquads
   // TODO: collect results then output, so nquads stay with validation
   // TODO: eventually validate this to (obviously...)
   jsonld.toRDF(json, {format: 'application/nquads'},
     function(err, nquads) {
       console.log('Results for ' + input.blue);
       validations.forEach(function(msg) {
         console.log(msg);
       });
       console.log("NQuads:".grey);
       if (!err) console.log(nquads);
       else console.log(err.red);
     }
   );
 });
Example #9
0
/**
 * Parse a string and put the result into the graph kb.
 * Normal method is sync.
 * Unfortunately jsdonld is currently written to need to be called async.
 * Hence the mess below with executeCallback.
 */
function parse (str, kb, base, contentType, callback) {
  try {
    if (contentType === 'text/n3' || contentType === 'text/turtle') {
      var p = N3Parser(kb, kb, base, base, null, null, '', null)
      p.loadBuf(str)
      executeCallback()
    } else if (contentType === 'application/rdf+xml') {
      var parser = new RDFParser(kb)
      parser.parse(Util.parseXML(str), base, kb.sym(base))
      executeCallback()
    } else if (contentType === 'application/xhtml+xml') {
      parseRDFaDOM(Util.parseXML(str, {contentType: 'application/xhtml+xml'}), kb, base)
      executeCallback()
    } else if (contentType === 'text/html') {
      parseRDFaDOM(Util.parseXML(str, {contentType: 'text/html'}), kb, base)
      executeCallback()
    } else if (contentType === 'application/sparql-update') { // @@ we handle a subset
      sparqlUpdateParser(str, kb, base)
      executeCallback()
    } else if (contentType === 'application/ld+json' ||
               contentType === 'application/nquads' ||
               contentType === 'application/n-quads') {
      var n3Parser = N3.Parser()
      var triples = []
      if (contentType === 'application/ld+json') {
        var jsonDocument
        try {
          jsonDocument = JSON.parse(str)
        } catch (parseErr) {
          callback(parseErr, null)
        }
        jsonld.toRDF(jsonDocument,
          {format: 'application/nquads'},
          nquadCallback)
      } else {
        nquadCallback(null, str)
      }
    } else {
      throw new Error("Don't know how to parse " + contentType + ' yet')
    }
  } catch (e) {
    executeErrorCallback(e)
  }

  function executeCallback () {
    if (callback) {
      callback(null, kb)
    } else {
      return
    }
  }

  function executeErrorCallback (e) {
    if (contentType !== 'application/ld+json' ||
      contentType !== 'application/nquads' ||
      contentType !== 'application/n-quads') {
      if (callback) {
        callback(e, kb)
      } else {
        throw new Error('Error trying to parse <' + base + '> as ' +
          contentType + ':\n' + e + ':\n' + e.stack)
      }
    }
  }
/*
  function setJsonLdBase (doc, base) {
    if (doc instanceof Array) {
      return
    }
    if (!('@context' in doc)) {
      doc['@context'] = {}
    }
    doc['@context']['@base'] = base
  }
*/
  function nquadCallback (err, nquads) {
    if (err) {
      callback(err, kb)
    }
    try {
      n3Parser.parse(nquads, tripleCallback)
    } catch (err) {
      callback(err, kb)
    }
  }

  function tripleCallback (err, triple, prefixes) {
    if (err) {
      callback(err, kb)
    }
    if (triple) {
      triples.push(triple)
    } else {
      for (var i = 0; i < triples.length; i++) {
        addTriple(kb, triples[i])
      }
      callback(null, kb)
    }
  }

  function addTriple (kb, triple) {
    var subject = createTerm(triple.subject)
    var predicate = createTerm(triple.predicate)
    var object = createTerm(triple.object)
    var why = null
    if (triple.graph) {
      why = createTerm(triple.graph)
    }
    kb.add(subject, predicate, object, why)
  }

  function createTerm (termString) {
    var value
    if (N3.Util.isLiteral(termString)) {
      value = N3.Util.getLiteralValue(termString)
      var language = N3.Util.getLiteralLanguage(termString)
      var datatype = new NamedNode(N3.Util.getLiteralType(termString))
      return new Literal(value, language, datatype)
    } else if (N3.Util.isIRI(termString)) {
      return new NamedNode(termString)
    } else if (N3.Util.isBlank(termString)) {
      value = termString.substring(2, termString.length)
      return new BlankNode(value)
    } else {
      return null
    }
  }
}
        fs.readFile(draftLocation, (err, draftData) => {
            if (err) {
                console.error("JSON Schema Draft could not be found at ", draftLocation);
                throw err;
            };
            console.log("Taking Schema Draft found at ", draftLocation);
            var draft = JSON.parse(draftData);

            var ajv = new Ajv(); // options can be passed, e.g. {allErrors: true}
            ajv.addMetaSchema(draft);
            ajv.addSchema(schema, 'td');
            // var validate = ajv.compile(schema);
            // var valid = validate(data);
            // if (!valid) console.log(validate.errors);
            // //OR
            // var valid = ajv.validate(schema, data);
            // if (!valid) console.log(ajv.errors);
            // //OR
            // var valid = ajv.addSchema(schema, 'mySchema')
            //     .validate('mySchema', data);
            // if (!valid) console.log(ajv.errorsText());

            // schema validation

            if (tdJson.hasOwnProperty('properties') || tdJson.hasOwnProperty('actions') || tdJson.hasOwnProperty('events')) {
                if (!tdJson.hasOwnProperty('base')) {
                    //no need to do something. Each href should be absolute
                    console.log(':) Tip: Without base, each href should be an absolute URL');
                } else {
                    //need to check if base finishes with / or not
                    //if it does, hrefs shouldnt start with it, if it doesnt, then hrefs must start with it
                    //QUESTION should there be separate schemas or transformation?
                    try {
                        tdJson = transformHref(tdJson);
                    } catch (err) {
                        console.error('X JSON Schema validation... KO:');
                        console.error('> ' + err);
                        throw err;
                    }
                }

            }
            var valid = ajv.validate('td', tdJson);
            //used to be var valid = ajv.validate('td', e.detail);
            if (valid) {

                console.log('JSON Schema validation... OK');
                checkEnumConst(tdJson);
                checkPropItems(tdJson);
                checkInteractions(tdJson);
                checkSecurity(tdJson);
                checkUniqueness(tdJson);

            } else {

                console.log('X JSON Schema validation... KO:');
                //console.log(ajv.errors);

                //TODO: Handle long error messages in case of oneOf
                console.log('> ' + ajv.errorsText());
            }

            //json ld validation

            jsonld.toRDF(tdJson, {
                format: 'application/nquads'
            }, function (err, triples) {
                if (!err) {

                    console.log('JSON-LD validation... OK');

                } else {

                    console.log('X JSON-LD validation... KO:');
                    console.log('> ' + err);
                }
            });

        });
Example #11
0
// serialize the ontoly to RDF/XML
jsonld.toRDF(jsonldObj, {format: 'application/nquads'}, function(err, nquads) {
  var store = rdflib.graph();
  if (err) {
    console.log(err);
  } else {
    try {
      rdflib.parse(nquads, store, null, 'application/n-quads', function(err) {
        if (err) {
          console.log(err);
        } else {
          // var base = jsonldObj["@context"] && jsonldObj["@context"]["@base"];
          // not using base because is not explicitly set in rdf/xml
          rdflib.serialize(
            null, store, null, 'application/rdf+xml',
            function(err, rdfXml) {
              if (err) {
                console.log(err);
              } else {
                fs.writeFileSync(path.join(ontologiesDir, 'spa.owl'), rdfXml);
                console.log('Ontology in RDF/XML regenerated successfully.');
              }
            });
        }
      });
    } catch (err) {
      console.log(err);
    }
  }
});