0
私はかなり新しいrdflibを使用しています。私の問題はやや単純です。私はいくつかのnトリプルファイルをかなりの量のデータが含まれていますが、各ファイルはそれぞれのファイルに同じドメインを持ちますが、オブジェクト内のドメインはファイルごとに異なります。今、私が入力1にしたい、またはそれ以上の、ファイルと同じ主題を含んでトリプル取得するには、データセット内の他のすべてのファイルとそれらを比較する:python rdflib推移的クエリ
[selected file]
a owl:sameAs b
[other files]
a owl:sameAs c
a owl:sameAs d
を出力になるはずです。
b owl:sameAs c
b owl:sameAs d
私は現在選択しているファイル内のすべてのトリプルを繰り返し処理するので、同じ主題と述語が含まれている場合は他のすべてのトリプルをチェックするので、私の現在のアプローチは非常に素朴で時間がかかりすぎます。
...
for mainGraph in mainGraphs:
for s,p,o in mainGraph:
for graph in graphs:
for s1,p1,o1 in graph:
if s == s1 and p == p1:
backlinks.add((o, OWL.sameAs, o1))
...
私はどちらか動作しませんでした、SPARQLクエリを挿入しようとした:
...
for mainGraph in mainGraphs:
for graph in graphs:
union = mainGraph + graph
qres = union.query(
"""SELECT DISTINCT ?x ?y
WHERE
{
?x owl:sameAs+ ?y .
}""")
...
同じことをするだろう、より速く、簡単な方法があるかどうか私の質問です。
ご協力いただければ幸いです。
すべての '(s p o)'の代わりに、両方のファイルから '(s owl:sameAs o)'トリプルだけを選択するべきではありませんか?あるいは、 'owl:sameAs'データサンプルが単なる例ですか? – AKSW
他の述部を含むことができるトリプルが存在する可能性があるので、owl:samAsはデータセットの完全性を保証するための追加チェックです。 –