問題タブ [jena-rules]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - InfModel を先に印刷すると、印刷された表現が後で変更されますか?
推論 API をいじっている Jena 2.5.5 (Linux 上) で奇妙な効果が得られます。次のコードは、簡略化されたバージョンです。最初は空のモデルと一般的なルール推論を作成しています。特定のステートメントに再帰規則を追加します。InfModel を取得するためにモデルに推論機能を追加します。次に、一致するステートメントを作成し、それをモデルに追加します。
結果: InfModel には、ステートメントとその逆の両方が含まれます。これまでのところ、それはそれがすべきことです。
ここでSystem.out.println()
、一致するステートメントをモデルに追加する前に InfModel を使用すると、結果はまったく異なります。ルールが実行されないように見えるため、InfModel には元のステートメントの逆が含まれなくなります。
モデルをコンソールに書き込むと、コードの機能はどのように変化しますか? この動作は文書化されていますか?
jena - 推論のルールを変更する方法
Jena フレームワークで Eclipse を使用して Web アプリケーションを開発しています。私のアプリケーションは次のことを行います。
名前、電子メール、興味(C言語、Javaなど)、職業、ユーザー名、およびパスワードの情報を使用して、新しいユーザーを登録します。
この情報は、user.rdf という名前の rdf ファイルに保存されます。
新しい希望のユーザー名とパスワードを使用して、新しいユーザー アカウントが作成されます。新しいユーザーがログインすると、ユーザーの興味に応じて、データベース内のすべての関連書籍が開きます。
ここで、新しいユーザーに次のことを推奨する必要があります。
彼/彼女が C 言語に興味がある場合は、C++ の本が彼に推奨され、リストが画面に表示されます。
これには、事実とルールを必要とする推論エンジンが必要であることを私は知っています。事実は、ユーザーの関心を格納する rdf ファイルになります。ルール ファイルは、推奨事項が実行されるときにルールに基づいて表示されます。
次の内容の user.rdf ファイルがあります。
ユーザー Suresh と Anvika は実際には Protege で作成されたもので、ファイルはアプリケーションを介して他のユーザーの詳細で更新されます。
test.rules ファイルには以下が含まれます。
出てくる推論は
今、行が原因で
推論は、LikeC++ の Anvika の推奨事項をユーザーに提供します。しかし、C 言語にも関心があるユーザー Raj にも同じことが欠けています。この行により、ユーザー Anvika のみが推測されていることがわかりました。しかし、この行は Protege によって自動的に追加されました。私のプログラムはそれをしません。では、アプリケーションを介してその行を追加するにはどうすればよいですか。これが不可能な場合は、ルールを変更して正しい結果を推測する方法を教えてください。
私を助けてください。私は長い間これに打たれました。
java - Jena Reasoner が Rule 対応の Reasoner であるかどうかを判断するにはどうすればよいですか
Jena は、モデルの推論を返すときに汎用 Reasoner インターフェースを提供します。それがルールベースであるかどうかを判断するにはどうすればよいので、ルールをGenericRuleReasoner
操作するためにメソッドをキャストして使用できますか?
注: instanceof
:)を使用せずに
例
したがって、推論はcom.hp.hpl.jena.reasoner.rulesys.OWLMicroReasoner
決定されますが、それがルール対応のものであるかどうかを決定することによって.getClass()
にキャストしたいと思います。GenericRuleReasoner
sparql - すべてのデータをメモリにロードせずに Jena で推論する方法はありますか?
推論する RDF データが大量にあり、独自の推論ルールを開発する必要があります。私の質問は、これを行う方法があるかどうかということです? Jena ルールと SPARQL を使用しても問題ありませんか? Jena ルールと sparql クエリはすべてのデータをメモリにロードする必要がありますか? すぐに回答を得たいと思っています。事前に感謝します!
rdf - Jena Rules: float から double (およびその逆) へのリテラル値の型変換を実行する方法は?
追加を実行するための次の Jena ルールがあります。
ルールはほぼ正しく機能しており、目的の加算結果を実行しています。私が抱えている問題は、sum 関数に渡される値が両方とも float であるのに、返される値 (?somme) が double として返されることです。
これによる予期しない結果は、結果に小さな 10 進数が追加されることです (これは型変換と関係があると思います)。
たとえば、2.2、2.5、および 2.7 の 3 つの値の合計を求めたいとします。私が得た結果は 7.1000000953674316 です (これは近いですが、まったく正しくありません)。
この Jena ルールを使用して、float 値 (?valeur & ?oldValeur) を double 型に変換し、これらの新しい double 値で sum 関数を実行し、最後に出力 (?somme) を変換する方法はありますか?フロート値に?
これを行うことで、余分な小数点以下の桁数が出力に追加されない可能性があると思います。
rdf - 後方連鎖 Jena reasoner
シンプルで純粋な後方連鎖推論を作成しようとするために、Jena のドキュメントを読んでいます。小さなオントロジーに適用する単純な後方連鎖規則があります。InfModel を取得したときにすべての含意が計算されるわけではないため、クエリごとに後方連鎖を実行する方法があるかどうか疑問に思っていました。
むしろ、要求されたときだけです。したがって、以下のルールの場合:
特定のクラスのすべてのタイプを検索するクエリを登録して、上記のルールを実行することはできますか?