Я использую Jena с TDB.Я успешно храню тройки, но мне нужно указать, что определенное свойство "isA" является транзитивным, чтобы использовать TransitiveReasoner для вывода.
Ниже приведены некоторые методы, которые я использую:
private void AddTriple(String arg1, String pred, String arg2) {
Resource r = m.createResource(NS + arg1);
Property p = m.createProperty(NS + pred);
Property p2 = m.createProperty(NS + arg2);
r.addProperty(p, p2);
}
private void addTest() {
AddTriple("cat", "isA", "feline");
AddTriple("feline", "isA", "mammal");
AddTriple("mammal", "isA", "animal");
m.close();
}
Я загружаю модель следующим образом:
Dataset dataset = TDBFactory.createDataset(directory);
m = dataset.getDefaultModel();
addTest();
Я настраиваю рассуждение следующим образом:
Reasoner reasoner = ReasonerRegistry.getTransitiveReasoner();
InfModel inference = ModelFactory.createInfModel(reasoner, m);
Модель логического вывода содержит:
<ModelCom {http://namespace/test#cat @http://namespace/test#isA http://namespace/test#feline; http://namespace/test#feline @http://namespace/test#isA http://namespace/test#mammal; http://namespace/test#mammal @http://namespace/test#isA http://namespace/test#animal} | >
Поскольку свойство «isA» не указано как транзитивное, модель вывода содержит те же самые тройки, что и исходная модель.Как я могу указать, что свойство isA является транзитивным, поэтому я могу получить следующие тройки:
cat isA mammal
cat isA animal