使用 rdflib 检索不同的值
Retrieving distinct values with rdflib
以下 python 代码是较大部分的一部分(其他一切正常):
import rdflib
g1 = rdflib.Graph()
g1.parse("existing_graph.nt", format="nt")
q = "select ?ent_a ?ent_b where { ?ent_a <http://www.example.org/rel> ?c . " \
"?ent_b <http://www.example.org/rel> ?c. }"
res = g1.query(q)
我希望我的结果只包含 ent_a 不同于 ent_b[=18 的情况=] 找不到相关文档。
仅表示两个事物不同的最简单方法是使用 !=
符号。
select distinct *
where {
?a a ?s.
?b a ?s.
filter (?a!=?b)
}
然而,这个查询很奇怪,因为只写:
select distinct *
where {
?a ?p ?s.
}
您可以提取 每个 与 ?s
有 ?p
关系的不同 ?a
。因此,根据您的使用,您已经生成了结果集。
如果您需要深入挖掘,根据您的评论:
I have an ontology where objects of type "teams" have a "locatedIn" relationship with their "hometown", and I wish to find all of the possible local derbies.
您需要通过添加与第一个 tripe 相关的另一个 tripe 来添加更多限制。例如,在 dbpedia 中,以下查询将为您提供所有球队及其场地:
select distinct *
where{
?o a dbpedia-owl:SportsTeam.
?o dbpedia-owl:ground ?ground.
}
你会得到每一个不同的 ?a ?b
对 FILTER !=
,还有 ?b ?a
(相反的对)
如果 ?a
和 ?b
是 URI,那么此模式可能会有所帮助:
select *
where {
?a a ?s.
?b a ?s.
filter (str(?a) > str(?b))
}
当您已经将整个图加载到内存中时,为什么 运行 SPARQL 查询变慢?您可以以任何您想要的方式循环三元组并比较相等性等。
http://rdflib.readthedocs.org/en/latest/intro_to_graphs.html#basic-triple-matching
以下 python 代码是较大部分的一部分(其他一切正常):
import rdflib
g1 = rdflib.Graph()
g1.parse("existing_graph.nt", format="nt")
q = "select ?ent_a ?ent_b where { ?ent_a <http://www.example.org/rel> ?c . " \
"?ent_b <http://www.example.org/rel> ?c. }"
res = g1.query(q)
我希望我的结果只包含 ent_a 不同于 ent_b[=18 的情况=] 找不到相关文档。
仅表示两个事物不同的最简单方法是使用 !=
符号。
select distinct *
where {
?a a ?s.
?b a ?s.
filter (?a!=?b)
}
然而,这个查询很奇怪,因为只写:
select distinct *
where {
?a ?p ?s.
}
您可以提取 每个 与 ?s
有 ?p
关系的不同 ?a
。因此,根据您的使用,您已经生成了结果集。
如果您需要深入挖掘,根据您的评论:
I have an ontology where objects of type "teams" have a "locatedIn" relationship with their "hometown", and I wish to find all of the possible local derbies.
您需要通过添加与第一个 tripe 相关的另一个 tripe 来添加更多限制。例如,在 dbpedia 中,以下查询将为您提供所有球队及其场地:
select distinct *
where{
?o a dbpedia-owl:SportsTeam.
?o dbpedia-owl:ground ?ground.
}
你会得到每一个不同的 ?a ?b
对 FILTER !=
,还有 ?b ?a
(相反的对)
如果 ?a
和 ?b
是 URI,那么此模式可能会有所帮助:
select *
where {
?a a ?s.
?b a ?s.
filter (str(?a) > str(?b))
}
当您已经将整个图加载到内存中时,为什么 运行 SPARQL 查询变慢?您可以以任何您想要的方式循环三元组并比较相等性等。 http://rdflib.readthedocs.org/en/latest/intro_to_graphs.html#basic-triple-matching