@biothings-explorer/query_graph_handler
Version:
A nodejs module to query TRAPI Query Graph
51 lines (42 loc) • 1.48 kB
JavaScript
const bl = require('biolink-model');
var path = require('path');
const debug = require('debug')('bte:biothings-explorer-trapi:EdgeReverse');
class BioLinkModel {
constructor() {
if (!BioLinkModel.instance) {
debug('BioLink-model class is initiated.');
let biolink_file = path.resolve(__dirname, './biolink.json');
this.biolink = new bl.BioLink();
this.biolink.loadSync(biolink_file);
}
return BioLinkModel.instance;
}
reverse(predicate) {
if (typeof predicate === 'string') {
if (predicate in this.biolink.slotTree.objects) {
if (this.biolink.slotTree.objects[predicate].symmetric === true) {
return predicate;
}
return this.biolink.slotTree.objects[predicate].inverse;
}
}
return undefined;
}
getDescendantClasses(className) {
if (className in this.biolink.classTree.objects) {
const descendants = this.biolink.classTree.getDescendants(className).map((entity) => entity.name);
return [...descendants, ...[className]];
}
return className;
}
getDescendantPredicates(predicate) {
if (predicate in this.biolink.slotTree.objects) {
const descendants = this.biolink.slotTree.getDescendants(predicate).map((entity) => entity.name);
return [...descendants, ...[predicate]];
}
return [predicate];
}
}
const BioLinkModelInstance = new BioLinkModel();
Object.freeze(BioLinkModelInstance);
module.exports = BioLinkModelInstance;