StrixDB
StrixDB est une base de données dédiée RDF. Elle est conçue pour permettre la manipulation et le raisonnement pour des graphes RDF de taille moyenne.
Développé par | Olivier Poirel |
---|---|
Écrit en | C, C++ |
Environnement | Windows |
Langues | Anglais |
Type | Web sémantique |
Licence | propriétaire |
Site web | strixdb |
Caractéristiques
StrixDB a les caractéristiques suivantes :
- requêtes avec SPARQL et modifications avec SPARQL/Update.
- inférence dans SPARQL avec des règles Datalog (règles avec récursion, négation et négation dans la récursion).
- propriétés ACID (atomicity, consistency, isolation, durability). StrixDB utilise le SGBD Gigabase.
- serialisation des graphes RDF au format standard XML ou Turtle.
StrixDB peut être utilisé :
- en tant que serveur SPARQL (utilisation en tant que module d'un serveur HTTP Apache).
- en tant qu'application avec le langage de script Lua.
- appelé par tout langage de programmation en tant que DLL.
La résolution Datalog utilise une variante de l'algorithme SLG[1] adaptée aux triples RDF.
Exemples de règles
Les règles s'expriment dans une syntaxe inspirée de Datalog ou de Turtle. En supposant que la ressource http://myserver/famillyRules contienne les règles suivantes :
prefix ns: <http://myserver/familly#>.
prefix foaf: <http://xmlns.com/foaf/0.1/>.
{?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).
Les règles peuvent être utilisées dans une requête SPARQL en utilisant la clause USING. Cette clause, spécifique à StrixDB est similaire à la clause FROM.
PREFIX ns: <http://myserver/familly#>
SELECT ?person ?ancestor
USING <http://myserver/famillyRules>
WHERE { ?person ns:ancestorOf ?ancestor }
Exemple de raisonnement OWL
Les règles suivantes implementent le raisonnement sur les propriétés d'OWL. Remarque: les prédicats peuvent être des variables.
?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).
Liens internes
Liens externes
Références
- Tabled Evaluation with Delaying for General Logic Programs - Weidong Chen, David S. Warren (1996)