問題タブ [jena]
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 には元のステートメントの逆が含まれなくなります。
モデルをコンソールに書き込むと、コードの機能はどのように変化しますか? この動作は文書化されていますか?
java - JENAOntModelの変更のシリアル化
いくつかのJenaモデル(具体的にはOntModels)をソケット間で同期させる必要があります。これは、一度に1つずつ変更したいと思います(さまざまな理由から、OntModelsに追加または削除された各ステートメントはまた、JESSルールベースを適応させます。)OntModelsでadd/removeイベントをリッスンし、追加/削除されたステートメントと、ステートメントが追加または削除されたことを示すChangeTypeをラップする単純なイベントインスタンスを作成できますが、ステートメントのシリアル化は問題。
残念ながら、私が見つけたJENAシリアル化のドキュメントはすべて、モデル全体をxml / rdf / n3 /などにシリアル化することに関連しています。ステートメントは(とにかく、あるレベルでは)文字列のトリプルであるため、ステートメントレベルでデータをシリアル化します。ただし、Jenaは、「正しいことを行う」プレーンな文字列を使用してステートメントを作成するためのAPIを提供していないようです。型付きリテラルで問題が発生します。例えば:
私はステートメントを作成することができます:
しかし、私が取得できる文字列バージョンは次のようになります。
(^^の前に "がないことに注意してください)
リテラルは正規表現で解析できるため、これはそれほど問題にはなりませんが、適切なリテラルを使用してステートメントを作成することはできませんでした。明らかなアプローチ(ModelCon.createStatement(Resource、Property、String))は、渡された文字列の完全な値を使用して、型指定されていない文字列リテラルを生成します。
個々のイエナステートメントを確実にシリアル化(そしてもちろん逆シリアル化)する方法を知っている人はいますか?
java - 依存関係のあるJenaOntModelを読む
私はオントロジーとイエナの概念に慣れていないので、これを正しく表現しているのかわかりません。
推論を実行できるように、一連の接続されたフクロウファイルを(名前空間の依存関係によって?)メモリ内のJenaモデル(OntModel?)に読み込む必要があります。どうすればよいですか?ファイルの順序は重要ですか?「推論エンジンを実行する」ために特定のメソッドを呼び出す必要がありますか?
semantics - Toggle Jena Reasoner
プログラムで変更している Jena オントロジー モデル ( OntModel ) があります。このモデルは、デフォルトの ModelFactory メソッドを使用して最初に作成され、オントロジー モデル (パラメーターなし) を作成しました。問題は、プログラムが実行され、モデルが変更されたときに、デフォルトの Jena Reasoner が実行される (実行して実行して実行する) ことでした。このプロセスは私が必要としているものに対して完全に遅すぎて、大規模なデータ セットではメモリが不足していました。
プログラムを変更して、別のオントロジー モデル ファクトリ メソッドを使用して、推論機能のないモデルを作成しました。これは非常に高速に実行され、以前に見たメモリの問題はまったく発生しませんでした (非常に大きなデータ セットの場合でも)。このアプローチの問題は、直接クラス型を直接使用することによってのみデータにアクセスできることです (親クラスを使用してオブジェクトにアクセスすることはできません)。
たとえば、「花」と「種」という 2 つのクラス リソースがあるとします。これらは、共通の親である「植物材料」から継承します。私のプログラムはすべての「種」を取り、「種」オブジェクトを「花」オブジェクトに変換する「grow」というメソッドを実行します。Reasoner (マイクロ Reasoner でさえも) を使用すると、「grow」メソッドの実行が遅すぎてメモリ不足になります。Reasoner をオフにすると、「植物材料」クラスを使用してすべての「花」と「種」にアクセスできなくなります。
これを行うための好ましい方法(幸せな媒体)はありますか...スーパークラスを使用してオブジェクトにアクセスできるようにすると同時に、高速でメモリを浪費しないようにすることはできますか?
「成長」メソッドを実行している間は「推論をオフ」にして、メソッドが完了したら元に戻す方法を探していました。これはどういうわけか可能ですか?
java - xml:base を Java の xml ファイルに追加する
Java で xml ファイルに xml:base 宣言を追加したいと考えています。現在、サードパーティのコードによって生成された OutputStream に xml 出力があります。
ファイルは次のように始まります。
そして、私はそれを次のようにしたい:
実用的にこれを行う良い方法が思いつかないので、私は脳のおならか何かを持っているに違いありません。
何か案は?
java - Jena OntModels と bnode の同期
この質問は、 Jena OntModel の変更のシリアル化に関するrcreswickの質問に関連しています。ソケットを介して同期を維持する必要がある 2 つ (またはそれ以上) のマシンに Jena モデルがあります。対処する必要がある主な問題は、モデルに匿名ノード (bnode) が含まれる可能性があることです。これは、任意のモデルに由来する可能性があります。
質問: 私はここで正しい方向に進んでいますか? それとも、私が考慮していない、より優れた、より堅牢なアプローチがありますか?
この問題に対する 3 つのアプローチを考えることができます。
- 完全なモデルをシリアル化します: これは、小規模な更新を同期するには法外にコストがかかります。また、どちらのマシンでも変更が発生する可能性があるため、マシン B のモデルをマシン A のシリアル化されたモデルと単純に置き換えることはできません。それらをマージする必要があります。
- 部分モデルをシリアライズする: ソケット経由で送信する必要がある変更のみを含むシリアライゼーション専用のモデルを使用します。このアプローチには、モデルから削除されたステートメントを表すための特別な語彙が必要です。おそらく、モデルをマシン A からマシン B にシリアル化すると、匿名ノード ID はマシン A に固有になりますが、マシン B で作成された匿名ノードの ID と重複する可能性があります。したがって、匿名ノードの名前を変更し、マッピングを保持する必要があります。将来の変更を正しく処理するために、マシン A の anon ID からマシン B の ID に変更します。
- 個々のステートメントをシリアル化する: このアプローチには特別な語彙は必要ありませんが、それほど堅牢ではない可能性があります。まだ遭遇していない匿名ノード以外の問題はありますか?
- グローバルに一意の bnode ID を生成する (NEW) : ID の前に一意のマシン ID を付けることで、匿名ノードのグローバルに一意の ID を生成できます。残念ながら、 Jena に独自の ID ジェネレーターではなく私の ID ジェネレーターを使用するように指示する方法がわかりません。これにより、bnode ID を再マッピングすることなく、個々のステートメントをシリアル化できます。
この議論をもう少し根拠づける例を次に示します。次のように表されるマシン A のリストがあるとします。
このモデルをマシン A からマシン B にシリアル化します。ここで、マシン B には ID 'a' の (関連のない) 匿名ノードが既にある可能性があるため、ID 'a' を新しい ID 'b' に再マップします。
マシン A でリストが変更されます。
マシン B はこれまでマシン A の ID 'b' に遭遇したことがないため、マシン A の ID 'b' から新しい ID 'c' への新しいマッピングを追加します。
2 台以上のマシンでは、問題はさらに複雑になります。たとえば、3 台目のマシン C がある場合、マシン A の匿名ノード「a」とは異なる独自の匿名ノード「a」を持つことができます。したがって、マシン B は、一般的なリモート ID からローカル ID へのマップだけでなく、他の各マシンの匿名ノード ID からローカル ID へのマップを保持する必要があります。入ってくる変更を処理するとき、ID を正しくマップするために、変更がどこから来たのかを考慮する必要があります。
java - Jena Bnode ID の生成
匿名ノード ID を生成するための Jena のデフォルトの方法をオーバーライドする方法はありますか?
理想的には、ID を生成するファンクタを Jena に渡して、ID をグローバルに一意にする (単にマシンに一意にするだけでなく) ようにしたいと考えています。ファンクターは、AnonId が構築されるたびに使用する必要があります。
これは私の以前の質問に多少関連しています。
編集: AnonId には id パラメータを取るコンストラクタがあることがわかりました。このコンストラクターを至る所で呼び出すことを避け、代わりに ID の生成方法を Jena に (1 回) 伝えるだけにしたいと考えています。
編集2 :そのコンストラクターをあちこちで呼び出すことを気にしなくても、アクセスできないライブラリコードによって匿名ノードが作成される可能性があるため、それは不可能かもしれません。
hibernate - HibernateセッションをRDFトリプルとして読み取る方法はありますか?
WHERE句の関連データがLinkedOpenDataクラウドにあるという基準に基づいて、ローカルのHibernate管理対象データストアに永続オブジェクトを照会する必要があります。
HibernateセッションをRDFとして読み取る方法はありますか?その場合、少なくとも結合されたデータセットを使用して、Hibernateから取得するオブジェクトを決定できます。
できれば、このソリューションは、私が精通しているように、Hibernateセッションをイエナの内部として公開することをお勧めします。さらに、検索のためにRDFS推論とSPARQLのサポートが必要になります。
tree - rdf:Class のすべての祖先を取得する
次の分類法 (非巡回 & 有向グラフ) を想像してください。
1) Jena OWL APIを使用して、すべての親ノードを再帰的に取得せずに、特定のリソース (ホモサピエンスなど) が「哺乳動物」のサブクラスであるかどうかを確認できますか?
2) SPARQLと同じ質問。
ありがとう
rdf - get base namespace from an OWL ontology
Is there a way to get the base namespace from a OWL ontology file, without using DOM or similar, but just using Jena's API? E.g., from an OWL file:
#xA;how could I get http://www.owl-ontologies.com/Ontology1254827934.owl
at runtime?