1

Jena と GenericRuleReasoner がどのように機能するかを学ぼうとしています。これは Apache Jena チュートリアルから取得しました。

[transitiveRule: (?A demo:p ?B), (?B demo:p ?C) -> (?A > demo:p ?C) ]
[symmetricRule: (?Y demo:p ?X) -> (?X demo:p ?Y) ]

別のステートメントを追加する場合

[testPrintRule: (?X demo:p ?Y) -> print(?Y, "for testing")] //Print only this

printコマンドでステートメントのみをリストすることは可能ですか? print ステートメントはコンソールに出力されます。UIに表示したい。

これは、私が現在 Jena でトリプルを取得するために行っていることです。初心者なので間違っていたらすみません。

Property p = ReadOntology.model.getProperty(ns + "demo:p");
List rules = Rule.rulesFromURL(FileLocations.getRulesLoc());
Reasoner reasoner = new GenericRuleReasoner( rules );
InfModel infModel = ModelFactory.createInfModel( reasoner, ReadOntology.model);

StmtIterator train = infModel.listStatements(null, p, (RDFNode)null);
4

1 に答える 1

2

わかりました。あなたの理解が正しければ、2 つの質問があります。

(1) ルールを使用してトリプルを出力できるかどうかを知りたい場合、および

(2) Jena ルールから GUI に何かを書き込めるかどうか知りたい。

答え (1)

次のようなルールでトリプルを印刷できます

[rulePrintTriples: (?s ?p ?o) -> print(?s, ?p, ?o)]

ただし、非常に非効率的である可能性が高いため、そうするべきではないと思います。その上、Jena はすでにこれを簡単に行う方法を持っています。

RDFDataMgr.write(System.out, model, RDFFormat.TTL);

答え (2)

はい、GUI に書き込むルールを作成できますが、そのためには、ここで説明するように独自の組み込み型を作成する必要があります。GUI に何らかの MVC パターンを使用していると仮定すると、カスタム ルール コードでルールがトリガーされたときに GUI のモデルを更新できます。

GUIがまだ初期化されていない場合は脆弱になる可能性があるため、これを行うかどうかは疑問です。より堅牢なアプローチは、トリプルを Jena モデルに追加し、後で GUI が初期化されたときに、Jena モデルに対して SPARQL クエリを実行し、その方法で GUI を設定することです。

イエナのルールについては、ここここに書いています。

于 2018-04-19T10:12:46.737 に答える