我想知道如何使用别名(“也称为”)查询维基数据。
现在我正在尝试
SELECT ?item
WHERE
{
?item rdfs:aliases ?alias.
FILTER(CONTAINS(?alias, "Angela Kasner"@en))
}
LIMIT 5
Run Code Online (Sandbox Code Playgroud)
如果我替换rdfs:aliases为,这只是一个有效的查询rdfs:labels。
我正在尝试这个,因为 Help: Aliases 说别名可以像标签一样搜索,但我找不到任何其他资源,也找不到示例。
我试图在Python(v3.3)中使用SPARQLWrapper查询DBpedia.这是我的查询:
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?slot WHERE {
<http://dbpedia.org/resource/Week> <http://www.w3.org/2002/07/owl#sameAs> ?slot
}
Run Code Online (Sandbox Code Playgroud)
它会导致SPARQLWrapper包出错:
ValueError:无效\转义:第118行第74列(字符11126)
码:
query = "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> SELECT ?slot WHERE{{ {subject} {predicate} {object} }} "
query = query.format(subject=subject, predicate=predicate, object= objectfield)
self.sparql.setQuery(query)
self.sparql.setReturnFormat(JSON)
results = self.sparql.query().convert() # Error thrown at this line
Run Code Online (Sandbox Code Playgroud)
错误:
Traceback (most recent call last):
File "getUriLiteralAgainstPredicate.py", line 84, in <module>
sys.exit(main())
File "getUriLiteralAgainstPredicate.py", line 61, in main
entity,predicateURI,result = p.getObject(dataAtURI,predicates, each["entity"])
File "getUriLiteralAgainstPredicate.py", line 30, in getObject
result = self.run_sparql("<"+subjectURI+">","<"+predicateURI+">","?slot")
File "getUriLiteralAgainstPredicate.py", line …Run Code Online (Sandbox Code Playgroud) 我正在使用 SPARQLWrapper 将 SPARQL 查询发送到 Wikidata。目前我正在尝试查找实体的所有属性。例如。使用一个简单的元组,例如:wd:Q11663 ?a ?b. 这本身就有效,但我正在尝试为返回的属性和实体找到人类可读的标签。
尽管SERVICE wikibase:label可以使用 Wikidata 的 GUI 界面工作,但这不适用于 SPARQLWrapper - 它坚持为变量及其“标签”返回相同的值。
查询属性rdfs:label适用于实体 (?b),但此方法不适用于属性 (?a)。
看起来该属性正在作为完整的 URI 返回,例如http://www.wikidata.org/prop/direct/P1536. 使用 GUI 我可以成功查询wd:P1536 ?a ?b.. 如果我将它作为第二个查询发送 - 但不是在第一个查询中,这适用于 SPARQLWrapper。
这是我的代码:
from SPARQLWrapper import SPARQLWrapper, JSON
sparql = SPARQLWrapper("http://query.wikidata.org/sparql")
sparql.setQuery("""
SELECT ?a ?aLabel ?propLabel ?b ?bLabel
WHERE
{
wd:Q11663 ?a ?b.
# Doesn't work with SPARQLWrapper
#SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
#?prop wikibase:directClaim ?p
# but …Run Code Online (Sandbox Code Playgroud) 我正在遍历users大约 1000 个条目的列表,如下所示:
def wikidata_user_lookup(id_str):
q = f'''
SELECT ?item ?itemLabel ?kind ?kindLabel
WHERE
{{
?item p:P2002 ?twitter .
?item wdt:P31 ?kind .
?twitter pq:P6552 "{id_str}" .
SERVICE wikibase:label {{ bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }}
}}
'''
sparql.setQuery(q)
sparql.setReturnFormat(JSON)
results = sparql.query().convert()
results_df = pd.io.json.json_normalize(results['results']['bindings'])
return results_df
for user in users:
res = wikidata_user_lookup(user)
Run Code Online (Sandbox Code Playgroud)
所以我提交了大约 1000 个查询,一个接一个。据我所知,我没有并行运行多个查询,所以不应该允许这样做吗?我得到HTTPError: HTTP Error 429: Too Many Requests. 处理这种情况的正确方法是什么?
我正在尝试基于属性列表构建一个sparql查询,但是我得到一个错误,说明查询结果不好.问题是我不知道该怎么做才能修复它.
这是功能:
def create_query(dbpedia_uri, props):
#props are something like this ('dbpedia-owl', 'birthdate')
filters = ''
for prop in QUERIES_DICT[ename]:
filters += ' OPTIONAL { ?x %s:%s ?%s. } \n' % (corresp_dict[prop[0]], prop[1], prop[1])
query = u"""
SELECT * WHERE {
. <%s>.
?x dbpedia-owl:abstract ?abstract.
%s
FILTER (LANG(?abstract) = 'en')
}
""" % (dbpedia_uri, filters)
return query
Run Code Online (Sandbox Code Playgroud)
这是我得到的查询:
u"\n SELECT * WHERE { <http://dbpedia.org/resource/Tim_Cook>\n ?x dbpedia-owl:abstract ?abstract.\n OPTIONAL { ?x dbpedia-owl:birthDate ?birthDate. }\n OPTIONAL { ?x dbpedia-owl:birthPlace ?birthPlace. }\n OPTIONAL …Run Code Online (Sandbox Code Playgroud) 我需要提取位于给定类别(例如,历史)的不同嵌套子类别中的文章(例如,摘要、缩略图)的信息。我怎样才能使用 SPARQL 查询做到这一点?或者使用几个 SPARQL 子查询在 python 上执行此操作的最佳方法是什么?