Я довольно новичок в использовании rdflib, и моя проблема довольно проста. У меня есть несколько n-тройных файлов, содержащих довольно внимательное количество данных, в то время как каждый файл имеет тот же домен в своем предмете, домен в объекте отличается для каждого файла. Теперь я хочу, чтобы ввести один или более, файлы и сравнить их с любым другим файлом в наборе данных, чтобы получить тройки, которые содержат один и тот же предмет: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 owl: sameAs o)' тройки из обоих файлов вместо всех '(s p o)'? Или образец примера «owl: sameAs» является примером? – AKSW
, так как могут быть тройки, которые могут содержать другие предикаты, а затем owl: samAs - дополнительная проверка для обеспечения целостности набора данных. –