2013-07-01 2 views
0

Я начал использовать Йену и протестировал ее основанные на правилах рассуждения, но я не вижу ожидаемых результатов. Я перечислил все индивидуальное заявление и это из моих OWL файлов:Правило Йены не срабатывает, когда ожидается

[http://www.semanticweb.org/ontologies/2012/6/Ontology1342794465827.owl#CreditCardPayment,  http://www.w3.org/1999/02/22-rdf-syntax-ns#type, http://www.w3.org/2000/01/rdf-schema#Resource] 

[http://www.semanticweb.org/ontologies/2012/6/Ontology1342794465827.owl#UseCase, http://www.w3.org/1999/02/22-rdf-syntax-ns#type, http://www.w3.org/2000/01/rdf-schema#Resource] 

Я хочу, чтобы выбрать, чтобы выбрать CreditCardPayment, так что я написал это правило:

@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
@prefix base: <http://www.semanticweb.org/ontologies/2012/6/Ontology1342794465827.owl#> 
[rule1: 
(?use rdf:Type rdfs:Resource) 
-> 
print('test') 
] 

, но правило не срабатывает. Что я сделал с файлом правил? (Я уже опробовал на

[rule1: 
print('test') 
-> 
print('test') 
]) 

и она работает.

ответ

3

Как Дэйв Рейнольдс pointed out на список рассылки пользователям Jena, rdf:type не то же самое, как rdf:Type (конвенция является использование нижнего регистра . предикаты и верхний регистр для классов) в результате правило должно быть:

[rule1: (?use rdf:Type rdfs:Resource) -> print('test') ] 

Вы replied на это сообщение:

Я изменил rdf: Тип для rdf: type, но я получил тот же результат. Требуется ли только одному человеку соответствовать этому правилу (в этом случае есть 2 человека)?

Правило соответствует как можно большему количеству экземпляров, поэтому неважно, сколько ресурсов соответствует ?use, правило должно срабатывать для всех из них. Если есть еще одна проблема, она не отображается ни в одном из кода, который вы нам показали. Более подробное обсуждение по этой теме показало, что ваш полный код Java в этом случае был:

public class Main { 
    public static void main(String[] args) throws MalformedURLException, IOException { 
    // create a basic RAW model that can do no inferencing 
    Model rawModel = FileManager.get().loadModel("file:data/design_pattern.owl"); 

    // create an InfModel that will infer new facts. 
    OntModel infmodel = ModelFactory.createOntologyModel(OntModelSpec.OWL_DL_MEM_RULE_INF, rawModel); 
     StmtIterator i = infmodel.listStatements(); 
     System.out.println("====Begin====="); 
     while (i.hasNext()) { 
      Statement indi = i.next(); 
      System.out.println(indi); 
     } 
     System.out.println("=====End====="); 
     InfModel processRules = (InfModel) processRules("data/rules/rules.txt", infmodel); 
    } 
} 

public static Model processRules(String fileloc, InfModel modelIn) { 
    Model m = ModelFactory.createDefaultModel(); 
    Resource configuration = m.createResource(); 
    configuration.addProperty(ReasonerVocabulary.PROPruleSet, fileloc); 
    Reasoner reasoner = GenericRuleReasonerFactory.theInstance().create(configuration); 
    InfModel infmodel = ModelFactory.createInfModel(reasoner, modelIn); 
    return infmodel; 
} 

Хотя вопрос rdf:type/rdf:Type выше вызвал первоначальное правило не срабатывает, когда ожидается, приведенный выше код также имеет проблему, processRules("data/rules/rules.txt", infmodel); возвращает модель вывода с правилами, но на самом деле не вызывает связанных с ними аргументов. Добавление оператора processRules.prepare(); приводит к тому, что модель вывода выводит на экран правила, создавая ожидаемые результаты.

 Смежные вопросы

  • Нет связанных вопросов^_^