DbPedia return 上的 Sparql 查询没有重复对象
Sparql query on DbPedia return not repeated objects
我正在尝试在 DBPedia 上执行此 Sparql 查询,但它似乎忽略了 DISTINCT:
SELECT DISTINCT ?source ?title ?content ?topic
WHERE {
?source rdfs:label ?title ;
<http://dbpedia.org/ontology/abstract> ?content ;
foaf:isPrimaryTopicOf ?topic .
?title bif:contains "php" .
}
事实上,如果您尝试 运行 查询,结果是这样的:
我运行从 python 文件查询,此代码返回 json:
query_rdf = ""
query_rdf += '''
SELECT DISTINCT ?source ?title ?content ?topic
WHERE {
?source rdfs:label ?title ;
<http://dbpedia.org/ontology/abstract> ?content ;
foaf:isPrimaryTopicOf ?topic .
?title bif:contains "php" .
}
'''
__3store = "http://dbpedia.org/sparql"
sparql = SPARQLWrapper (__3store,returnFormat="json")
sparql.setQuery(query_rdf)
result = sparql.query().convert()
print json.dumps(result, separators=(',',':'))
DISTINCT 关键字表示每个行作为一个整体与其余行不同。在您显示的结果中,我看到了英文 (en)、西班牙文 (es) 和阿拉伯文 (ar) 的标签和摘要。如果你有这样的数据:
:a rdfs:label "..."@en, "..."@es ;
dbpedia-owl:abstract "..."@en, "..."@es ;
foaf:isPrimaryTopicOf :aa .
你运行一个查询
select distinct ?source ?label ?abstract ?topic where {
?source rdfs:label ?label ;
dbpedia-owl:abstract ?abstract ;
foaf:isPrimaryTopicOf ?topic
}
您将在结果中得到四行,因为有四种不同的组合:
1 source × 2 labels × 2 abstracts × 1 topic = 4 rows
如果您想将标签和摘要限制为单一语言(例如英语),那么您只需要过滤结果即可。例如:
select distinct ?source ?label ?abstract ?topic where {
?source rdfs:label ?label ;
dbpedia-owl:abstract ?abstract ;
foaf:isPrimaryTopicOf ?topic .
?label bif:contains "php" .
filter( langMatches(lang(?label),"en")
&& langMatches(lang(?abstract),"en") )
}
我正在尝试在 DBPedia 上执行此 Sparql 查询,但它似乎忽略了 DISTINCT:
SELECT DISTINCT ?source ?title ?content ?topic
WHERE {
?source rdfs:label ?title ;
<http://dbpedia.org/ontology/abstract> ?content ;
foaf:isPrimaryTopicOf ?topic .
?title bif:contains "php" .
}
事实上,如果您尝试 运行 查询,结果是这样的:
我运行从 python 文件查询,此代码返回 json:
query_rdf = ""
query_rdf += '''
SELECT DISTINCT ?source ?title ?content ?topic
WHERE {
?source rdfs:label ?title ;
<http://dbpedia.org/ontology/abstract> ?content ;
foaf:isPrimaryTopicOf ?topic .
?title bif:contains "php" .
}
'''
__3store = "http://dbpedia.org/sparql"
sparql = SPARQLWrapper (__3store,returnFormat="json")
sparql.setQuery(query_rdf)
result = sparql.query().convert()
print json.dumps(result, separators=(',',':'))
DISTINCT 关键字表示每个行作为一个整体与其余行不同。在您显示的结果中,我看到了英文 (en)、西班牙文 (es) 和阿拉伯文 (ar) 的标签和摘要。如果你有这样的数据:
:a rdfs:label "..."@en, "..."@es ;
dbpedia-owl:abstract "..."@en, "..."@es ;
foaf:isPrimaryTopicOf :aa .
你运行一个查询
select distinct ?source ?label ?abstract ?topic where {
?source rdfs:label ?label ;
dbpedia-owl:abstract ?abstract ;
foaf:isPrimaryTopicOf ?topic
}
您将在结果中得到四行,因为有四种不同的组合:
1 source × 2 labels × 2 abstracts × 1 topic = 4 rows
如果您想将标签和摘要限制为单一语言(例如英语),那么您只需要过滤结果即可。例如:
select distinct ?source ?label ?abstract ?topic where {
?source rdfs:label ?label ;
dbpedia-owl:abstract ?abstract ;
foaf:isPrimaryTopicOf ?topic .
?label bif:contains "php" .
filter( langMatches(lang(?label),"en")
&& langMatches(lang(?abstract),"en") )
}