注1:以下所有代碼塊均可直接在https://dbpedia.org/sparql中運行,
注2:SPARQL對大小寫不敏感,
前綴匯總:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
查詢DBpedia中Class數量,
SELECT COUNT(DISTINCT ?class_name) AS ?total_num
WHERE {
?class_name rdf:type owl:Class
}
查詢所有存在的Class,
SELECT *
WHERE {
?class_name rdf:type owl:Class
}
查詢所有存在物體的Class類別,
SELECT (COUNT(DISTINCT ?Class_name) AS ?Class_num)
WHERE {
?Class_name rdf:type owl:Class.
?entity_name rdf:type ?Class_name.
}
查詢所有存在物體的主類(rdf:type為owl:Thing),
SELECT ?main_class (COUNT(DISTINCT ?entity_name) AS ?entity_num)
WHERE{
?main_class rdf:type owl:Class.
?main_class rdfs:subClassOf owl:Thing.
?entity_name rdf:type ?main_class.
}
GROUP BY ?main_class
ORDER BY desc (?entity_num)
查詢每個Class及其物體數量并按照物體數量降序排序(此查詢回傳的Class類別不包括不含有物體的Class類別),
SELECT ?Class_name (COUNT(?entity_name) AS ?entity_num)
WHERE {
?Class_name rdf:type owl:Class.
?entity_name rdf:type ?Class_name.
}
GROUP BY ?Class_name
ORDER BY desc (?entity_num)
查詢Work類中的物體數量,
SELECT *
WHERE {
?entity_name rdf:type dbo:Work.
}
或(其余前綴均可按照類似方式使用,)
SELECT COUNT(DISTINCT ?entity_name)
WHERE {
?entity_name rdf:type <http://dbpedia.org/ontology/Work>.
}
查詢Work類中具備英文摘要的物體數量,
SELECT COUNT(DISTINCT ?entity_name)
WHERE {
?entity_name rdf:type <http://dbpedia.org/ontology/Work>.
?entity_name dbo:abstract ?abstract.
FILTER(LANGMATCHES(LANG(?abstract), "en"))
}
查詢Work類中不具備英文摘要的物體數量(注意語言匹配中用"en"或"EN"均可),
SELECT COUNT(DISTINCT ?entity_name)
WHERE {
?entity_name rdf:type <http://dbpedia.org/ontology/Work>.
OPTIONAL{
?entity_name dbo:abstract ?abstract.
FILTER(LANGMATCHES(LANG(?abstract), "en"))
}
FILTER(!bound(?abstract))
}
查詢每個Class中具有英文摘要的物體數量(此查詢所需時間較長,建議將SPARQL嵌入代碼,每次查詢僅對一個Class執行),
SELECT ?Class_name (COUNT(DISTINCT ?entity_name) AS ?entity_num_with_en_abstract)
WHERE {
?Class_name rdf:type owl:Class.
?entity_name rdf:type ?Class_name.
?entity_name dbo:abstract ?abstract.
FILTER(LANGMATCHES(LANG(?abstract), "en"))
}
GROUP BY ?Class_name
ORDER BY desc (?entity_num_with_en_abstract)
綜合應用實體
from SPARQLWrapper import SPARQLWrapper, JSON
import json
sparql = SPARQLWrapper("http://dbpedia.org/sparql")
sparql.setQuery("""
SELECT ?main_class (COUNT(DISTINCT ?entity_name) AS ?entity_num)
WHERE{
?main_class rdf:type owl:Class.
?main_class rdfs:subClassOf owl:Thing.
?entity_name rdf:type ?main_class.
}
GROUP BY ?main_class
ORDER BY desc (?entity_num)
""")
sparql.setReturnFormat(JSON)
sparql.setTimeout(9223372036)
results = sparql.query().convert()
class_dict = {}
for result in results["results"]["bindings"]:
if 'http://dbpedia.org/ontology/' in result['main_class']['value']:
class_dict[result['main_class']['value']] = -1
f = open('/home/njucs/Desktop/class_dict_keys.txt', 'w')
for item in class_dict.keys():
print(item.ljust(50))
print(item.ljust(50), file = f)
f.close()
f = open('/home/njucs/Desktop/class_dict.txt', 'w')
seq = 0
for key in class_dict.keys():
sparql = SPARQLWrapper("http://dbpedia.org/sparql")
sparql.setQuery("""
SELECT (COUNT(DISTINCT ?entity_name) AS ?num)
WHERE {
?entity_name rdf:type <""" + '{0}'.format(key) + """>.
?entity_name dbo:abstract ?abstract.
FILTER(LANGMATCHES(LANG(?abstract), "en"))
}
""")
sparql.setReturnFormat(JSON)
sparql.setTimeout(9223372036)
results = sparql.query().convert()
class_dict[key] = int(results["results"]["bindings"][0]["num"]["value"])
seq += 1
print(seq, "\t", key.ljust(50), class_dict[key])
print(key, class_dict[key], file=f)
f.close()
json_str = json.dumps(class_dict)
f = open('/home/njucs/Desktop/class_dict.json', 'w')
f.write(json_str)
f.close()
keys = list(class_dict.keys())
values = list(class_dict.values())
ordered_list = list(zip(keys, values))
ordered_list = sorted(ordered_list, key = (lambda x:x[1]), reverse = True)
json_str = json.dumps(ordered_list)
f = open('/home/njucs/Desktop/ordered_list.json', 'w')
f.write(json_str)
f.close()
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/260311.html
標籤:其他
上一篇:MyBatis學習總結(四):MyBatis動態sql之<select>、<insert>、<update>、<delete>標簽
下一篇:Mysql學習記錄(2)
