1

文字列として送信された Jena ルールを以下のメソッドに追加しようとしています。ただし、E://1_1_1 に書き込まれたオントロジーに新しい変更がないことを確認できるため、ルールは追加されていません。これを行う方法を教えてください。関連する可能性のある SO に関するその他の質問は26292160349652です。どちらも私の場合と似ています。

public String ValidateAndConfigureRule(String string) {     

    try{
        GenericRuleReasoner reasoner = new GenericRuleReasoner(Rule.parseRules(string));
        Model oModel = m.getOntology();

        reasoner.setDerivationLogging(true);            
        reasoner.setOWLTranslation(true);
        reasoner.setTraceOn(true);
        reasoner.setTransitiveClosureCaching(true);

        InfModel inf = ModelFactory.createInfModel(reasoner, oModel);

        inf.write(new FileWriter("E://1_1_1"));

        Model baseModel = ModelFactory.createDefaultModel();            
        baseModel.add(inf);

        final OntModel model  = ModelFactory.createOntologyModel(OntModelSpec.OWL_DL_MEM_RULE_INF, baseModel);          

        ValidityReport validity = model.validate();
    }
}

ルール自体は、 がオブジェクト プロパティであり、が個体であり、ルール文字列の「:」に必要な接頭辞が付い[ r1: (?x :objProp1 :ind_x) -> (?x :objProp2 :ind_y) ]た形式です。objPropind_xind_y

4

2 に答える 2

1

Andy の回答は、ここで最も重要な部分を捉えています。ルールベースの推論モデルを定義すると、モデルの内容はアサートおよび推論されたトリプルです。ルールはモデルに書き込まれません。ルールは、データではなく推論の一部です。

これは、実際には、OWL データと一緒に SWRL ルールを記述できるようにシリアライゼーション形式を定義した SWRL ルールとは対照的です。ルールはデータとともに記述できるため、Jena ルールの代わりに SWRL ルールとそれらをサポートする推論ツール (Pellet、HermiT など) の使用を検討することもできます。

回避策として、Jena ルールのテキストを OWL オントロジーのアノテーション プロパティの値として保存し、オントロジーをロードするときに再度読み込むこともできます。つまり、次のような結果になる可能性があります。

@prefix : <http://example.org/my-ontology/>

<http://example.org/my-ontology>
        a                owl:Ontology ;
        rdfs:comment     "My ontology with some Jena rules"@en ;
        :hasJenaRules    "...rule content here..." .

次に、オントロジーをロードすると、プロパティ:hasJenaRulesを持つトリプルがあるかどうかを確認できます。存在する場合は、それらのオブジェクトを取得して Jena ルールとして解析し、ルールを使用して推論を作成できます。Jena を使用してデータと一緒にルールを保存するには、これが最も簡単な方法だと思います。

于 2015-01-05T15:11:47.300 に答える
0

InfModel を作成すると、変更されていない基本データが書き込まれます。ルールは書かない。

于 2015-01-02T20:12:41.087 に答える