Reasoner
A simple linked data reasoner...
This module began life as part of the ActivityStrea.ms implementation (http://github.com/jasnell/activitystrea.ms).
Requirements:
This module requires Node.js 4.0.0 and uses ES6 language features.
Install:
npm install reasoner
Example:
const rdf = require('linkeddata-vocabs').rdf;
const Reasoner = require('reasoner');
const Graph = Reasoner.Graph;
const graph = new Graph();
graph.add({
subject: 'http://example.org/foo',
predicate: rdf.type,
object: 'http://example.org/bar'
});
graph.add({
subject: 'http://example.org/foo',
predicate: rdf.type,
object: 'http://example.org/baz'
});
graph.add({
subject: 'http://example.org/foo',
predicate: rdfs.subClassOf,
object: 'http://example.org/boo'
});
graph.add({
subject: 'http://example.org/boo',
predicate: rdfs.subClassOf,
object: 'http://example.org/aaa'
});
graph.add({
subject: 'http://example.org/aaa',
predicate: rdfs.subClassOf,
object: 'http://example.org/ccc'
});
graph.add({
subject: 'http://example.org/bar',
predicate: rdfs.subClassOf,
object: 'http://example.org/aaa'
});
graph.add({
subject: 'http://example.org/bbb',
predicate: rdfs.subClassOf,
object: 'http://example.org/aaa'
});
const reasoner = new Reasoner(graph);
const node = reasoner.node('http://example.org/foo');
node.is('http://example.org/bar'); // true
node.is('http://example.org/boo'); // true
node.is('http://example.org/aaa'); // true
node.is('http://example.org/ccc'); // true
node.is('http://example.org/bbb'); // false
API
Reasoner([graph])
Constructor: Creates a new Reasoner. Either a single Reasoner.Graph
instance, or an array
of Reasoner.Graph
instances can be provided to the constructor to be bound
automatically when the Reasoner is created.
<number> Reasoner.prototype.size
Property: The total number of triples known to the Reasoner.
Reasoner.prototype.bind(graph)
Method: Binds a single Reasoner.Graph
instance to the Reasoner.
<Reasoner.Node> Reasoner.prototype.node(uri)
Method: Returns a Reasoner.Node
instance. A Node represents a single subject known to
the Reasoner.
<Reasoner.Literal> Reasoner.prototype.literal(value[, options])
Method: Utility method that creates new Reasoner.Literal
Reasoner.Graph()
Constructor: Creates a new Reasoner.Graph
instance. A Graph is essentially a thin wrapper
around an N3.Store
object.
<number> Reasoner.Graph.prototype.size
Property : Returns the total number of triples known to the Graph.
Reasoner.Graph.prototype.add(triple)
Method: Adds a single triple to the Graph. The argument is an object with three
properties: subject
, predicate
and object
.
const Graph = Graph;const graph = ; graph;
Reasoner.Graph.prototype.merge(graph)
Method: Merge the specified Graph into this Graph.
Reasoner.Graph.prototype.find(triple)
Method: Search the Graph for triples matching the specified pattern.
const Graph = Graph;const graph = ; graph; const triples = graph;for const triple of triples console;
Reasoner.Node
Object: The Reasoner.Node
object provides access to explicit and inferred information
about a single subject known to the Reasoner.
const Reasoner = ;const Graph = ReasonerGraph;const graph = ; graph; const reasoner = graph;const node = reasoner;// ...
Reasoner.Node.prototype.id
Property: The Subject URI
Reasoner.Node.prototype.findInbound(predicate)
Method: Searches for all triples known to the Reasoner for which this node is the object.
Reasoner.Node.prototype.find(predicate)
Method: Searches for all triples known to the Reasoner for which this node is the subject.
Reasoner.Node.prototype.literal(predicate)
Method: Searches for literal values with the specified predicate.
var literals = node;for let literal of literals console; console; console;;
Reasoner.Node.prototype.types
Property: The collection of rdf:type
explicitly defined for this subject.
Reasoner.Node.prototype.subProperties
Property: A listing of Reasoner.Node
objects representing other subjects defined as
rdfs:subPropertyOf
this subject.
Reasoner.Node.prototype.subClasses
Property: A listing of Reasoner.Node
objects representing other
subjects defined as rdfs:subClassOf
this subject.
Reasoner.Node.prototype.superProperties
Property: A listing of Reasoner.Node
objects representing other
subjects for which this node can be considered a sub-property.
Reasoner.Node.prototype.superClasses
Property: A listing of Reasoner.Node
objects representing other
subjects for which this node can be considered a sub-class.
Reasoner.Node.prototype.is(type)
Method: Returns true
if this subject can be considered to be an instance of the
specified type. Specifically, this will return true
if:
- It has
rdf:type
type
- One of it's
rdf:type
's istype
- It has
rdfs:subClassOf
type
- One of it's superClasses is
type
- It has
rdfs:subPropertyOf
type
- One of it's superProperties is
type
Reasoner.Literal
Object: Represents a literal value.
Reasoner.Literal.prototype.valueOf()
Method: Returns the value of the literal.
<Reasoner.Node> Reasoner.Literal.prototype.type
Property: A Reasoner.Node
representing the Literal type.
<LanguageTag> Reasoner.Literal.prototype.language
Property: A LanguageTag
representing the Literal language. (The LanguageTag
object is
provided by the rfc5646
module in npm)