为什么我的sparql查询没有结果?

박광하*_*박광하 1 uri sparql

我为分组结果做了sparql查询,并通过SPARQL端点http://glam.iptime.org/sparql执行了查询.

但是,我没有得到任何结果,也没有错误消息.

查询如下.

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX cfo: <http://lod.culture.go.kr/ontology/>
PREFIX dc: <http://purl.org/dc/elements/1.1/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>

SELECT ?age ?typeName (count(?s) as ?cnt)
WHERE {
{
select * where {  
?s rdf:type cfo:CulturalObject.
?s rdfs:label ?label.
?s cfo:temporal ?time.
?time cfo:begin ?begin.    

BIND (STRDT(replace(?begin, 'BC', '-'), xsd:float) as ?year).
BIND(IF(?year > 1897, "modern", IF(?year > 1392, "chosun", IF(?year > 918, "goryeo", IF(?year > 700, "north_south", IF(?year > -58, "three_states", "ancient"))))) as ?age).

?s dc:type ?type.
?type  rdfs:label  ?typeName.
 } 
} 
 FILTER(BOUND(?age)).
}
GROUP BY ?age ?typeName
LIMIT 100
Run Code Online (Sandbox Code Playgroud)

我的sparql查询有问题吗?它有什么问题?

我认为sparql查询声明顺序为false.还有其他意见吗?

sco*_*ger 6

我想告诉你如何处理问题,而不是为你做工作并用你的查询命中端点.基本上是迂腐地构建查询.从单一三重模式开始.执行查询 - 这LIMIT是你的朋友.然后添加下一个三重模式.随时试验结果.

所以第一个查询就是:

SELECT *
WHERE {
   ?s a cfo:CulturalObject.
} LIMIT 100
Run Code Online (Sandbox Code Playgroud)

执行它,检查它是否得到结果.下一个查询是:

SELECT *
WHERE {
   ?s a cfo:CulturalObject.
   ?s rdfs:label ?label.
} LIMIT 100
Run Code Online (Sandbox Code Playgroud)

让我们说这失败了 - 你没有结果.所以也许他们会用skos:prefLabel.SPARQL是一种非常有探索性的语言,因此您可以尝试以下方法:

SELECT *
WHERE {
   ?s a cfo:CulturalObject.
   ?s ?p ?o
} LIMIT 100
Run Code Online (Sandbox Code Playgroud)

检查数据的值?p?o查看数据的实际结构.增加LIMIT看多一点.使用结果构建下一个三重模式.

最后,它只是探索数据,与OWL或类似的查询语言不同,您几乎不需要知道数据来执行成功的查询.实际上,您知道,除非数据存储为空,否则以下查询将始终产生结果:

SELECT ?s ?p ?o
WHERE {
   ?s ?p ?o .
} LIMIT 1000
Run Code Online (Sandbox Code Playgroud)

如评论中所述,除非子选择是计算聚合,否则子选择几乎总是错误的.这是我看到很多的SPARQL反模式,我只能假设有些例子使用了不正确的子选择.只是需要注意的事情.