From Wikipedia, the free encyclopedia
Jump to: navigation, search
StrixDB logo.png
Developer(s) Olivier Poirel
Written in C, C++
Operating system Windows
Available in English
Type Semantic Web, Triplestore
License proprietary

StrixDB is a Triplestore designed to manipulate middle sized RDF graphs.


StrixDB main features are:

  • compliance with SPARQL and SPARQL/Update.
  • Datalog inference integrated with SPARQL (rules with recursion, negation and negation in recursion).
  • ACID database transaction (with rollback on errors). StrixDB is based on Gigabase.
  • supports serialisation of RDF graphs in RDF/XML format or Turtle

StrixDB could be used as:

  • a web server with the w3c SPARQL/protocol (it is an Apache Web server module).
  • a standalone console application (it is also a Lua module).
  • in any programming language through its DLL API.

The Datalog resolution uses a version of SLG [1] algorithm adapted to RDF triples.

Example of rules[edit]

Rules could use a Turtle or a Datalog inspired syntax. Suppose we have the following rules stored as rules resource http://myserver/famillyRules

prefix ns: <http://myserver/familly#>.
prefix foaf: <>.
{?x ns:ancestorOf ?y } :- {?x ns:parentOf ?y}
{?x ns:ancestorOf ?y} :- {?x ns:parentOf ?z. ?z ns:ancestorOf ?y}

ns:motherOf(?mother,?child) :- ns:parentOf(?mother,?child), not ns:fatherOf(?mother,?child).

ns:fatherOf(?f,?child) :- ns:parentOf(?f,?child), not foaf:gender(?f,foaf:female).

These rules could be used into a SPARQL request with the USING clause specific to StrixDB. USING clause specify rules resources in a similar way as the FROM clauses specify the RDF datasets.

PREFIX ns: <http://myserver/familly#>
SELECT ?person ?ancestor
USING <http://myserver/famillyRules>
WHERE { ?person ns:ancestorOf ?ancestor }

Example of OWL reasoning[edit]

The following rules show how to make some OWL property reasoning (as shown, variables as predicate is admissible):

?p(?x,?y) :- a(?p, owl:SymmetricProperty), ?p(?y,?x).

?p(?x,?y) :- a(?p, owl:TransitiveProperty), ?p(?x,?z), ?p(?z,?y).

?invers1(?x,?y) :- owl:inverseOf(?invers1,?invers2), ?invers2(?y,?x).
?invers1(?x,?y) :- owl:inverseOf(?invers2,?invers1), ?invers2(?y,?x).

?equiv1(?x,?y) :- owl:equivalentProperty(?equiv1,?equiv2), ?equiv2(?x,?y).
?equiv1(?x,?y) :- owl:equivalentProperty(?equiv2,?equiv1), ?equiv2(?x,?y).

?p(?x,?y) :- rdfs:subPropertyOf(?p1,?p), ?p1(?x,?y).

See also[edit]

External links[edit]


  1. ^ Tabled Evaluation with Delaying for General Logic Programs - Weidong Chen, David S. Warren (1996)