似乎我没有查看SPARQL DESCRIBE查询。我需要检索匹配条件的资源的完整图表。在我尝试过的一个SPARQL端点上(NorwegianRådataNå,http://data.bibsys.no/data/query_authority.html)这个工作正常:
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
DESCRIBE ?person WHERE {
?person rdf:type foaf:Person .
FILTER EXISTS { ?person owl:sameAs ?sameAs }
}
LIMIT 100
我得到的结果是具有猫头鹰的人力资源:sameAs triple。
在其他SPARQL端点上,Onki Light(http://sparql.onki.fi/sparql.tpl)和DBPedia(http://dbpedia.org/sparql)类似的查询
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
DESCRIBE ?x WHERE {
?x rdf:type skos:Concept .
FILTER EXISTS { ?x skos:prefLabel ?prefLabel }
}
LIMIT 100
返回许多资源,这些资源既没有rdf:Type = skos:Concept也没有skos:prefLabel,所以我显然没有正确地进行查询。应该如何陈述这种查询以产生我需要的结果?
答案 0 :(得分:11)
没有skos:prefLabel
或skos:Concept
的“收到资源”可能与符合您要求的资源相关。
SPARQL DESCRIBE查询实际上并不返回与查询的图形模式匹配的资源,而是返回“描述”这些资源的RDF图。由sparql服务决定选择包含哪些三元组来描述资源。 (见下面的标准)
W3C Proposed Recommendation on SPARQL 1.1说:
DESCRIBE表单返回包含有关资源的RDF数据的单个结果RDF图。 [...] 说明由查询服务确定。
因此,您意外收到的资源可能描述您实际需要的资源。调查您的问题:检查您实际应该收到的与您想要的关系的三元组资源。一个好方法是从LIMIT 1
开始查看DESCRIBE查询的效果。
也许您需要SELECT查询?它只返回图形模式匹配的资源。
答案 1 :(得分:2)
正如@Thomas所说,DESCRIBE
在标准中略有说明,因此你会得到不一致的结果。但是,使用CONSTRUCT
,您可以返回许多引擎将为DESCRIBE
返回的内容,即SPO和OPS,并在服务中保持一致。这是一个执行此操作的查询:
CONSTRUCT {
?person ?p ?o .
?s ?p1 ?person .
}
WHERE {
?person rdf:type foaf:Person .
FILTER EXISTS { ?person owl:sameAs ?sameAs } .
?person ?p ?o .
?s ?p1 ?person .
}
这将为您提供一个RDF图,它“描述”绑定到?person
的资源,即?person
的所有属性以及其值(对象)为?person的所有属性。
答案 2 :(得分:1)
SELECT或CONSTRUCT在手头的情况下不是可行的选项,因为我不知道数据的实际结构
为什么这么说?我想你要么只想获得资源:
select ?x WHERE {
?x rdf:type skos:Concept .
FILTER EXISTS { ?x skos:prefLabel ?prefLabel }
}
LIMIT 100
或他们所有传出的三元组:
select ?x ?p ?y WHERE {
?x rdf:type skos:Concept.
FILTER EXISTS { ?x skos:prefLabel ?prefLabel }
?x ?p ?y
}
LIMIT 100