Нужно сделать недвижимость переходной - PullRequest
1 голос
/ 24 марта 2012

Я использую 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

1 Ответ

2 голосов
/ 25 марта 2012

"Когда кто-то определяет свойство P как транзитивное свойство, это означает, что если пара (x, y) является экземпляром P, а пара (y, z) также является экземпляром P, то мы можем сделать вывод, что пара (x, z) также является экземпляром P. Синтаксически, свойство определяется как транзитивное, делая его экземпляром встроенного класса OWL owl: TransitiveProperty, который определяется как подкласс owl: ObjectProperty. " - http://www.w3.org/TR/owl-ref/#TransitiveProperty-def

Следовательно, вам нужно определить свое свойство как транзитивное, вы можете сделать это, добавив следующую тройку RDF к вашей модели Jena:

<http://namespace/test#isA> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2002/07/owl#TransitiveProperty>

m.add (ResourceFactory.createResource (NS + "isA"), RDF.type, OWL.TransitiveProperty)

Я также рекомендую вам прочитать документацию на веб-сайте Jena относительно онтологий и логических выводов:

...