14

似乎我不了解 SPARQL DESCRIBE 查询。我需要检索与条件匹配的资源的完整图表。在我尝试过的一个 SPARQL 端点上(Norwegian Rådata Nå,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

我得到了具有owl:sameAs三元组的 Person 资源的结果。

在其他 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也没有 a的资源skos:prefLabel,所以我显然没有正确地进行查询。应该如何陈述这种查询以产生我需要的结果?

4

3 回答 3

11

收到的资源”没有skos:prefLabelskos:Concept可能与满足您要求的资源有关

SPARQL DESCRIBE 查询实际上并不返回与查询的图形模式匹配的资源,而是一个“描述”这些资源的 RDF 图。由 sparql 服务选择包含哪些三元组来描述资源。(见下面的标准)

W3C 关于 SPARQL 1.1的建议建议说:

DESCRIBE 表单返回单个结果 RDF 图,其中包含有关资源的 RDF 数据。[...]描述由查询服务确定。

因此,您意外收到的资源可能描述了您真正想要的资源。调查您的问题:检查您应该实际收到的三元组与您想要的资源的关系。一个好的方法是先LIMIT 1查看 DESCRIBE 查询的效果。

也许您需要一个 SELECT 查询?它仅返回与图形模式匹配的资源。

于 2013-03-04T08:48:54.383 回答
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 的所有属性。

于 2016-04-25T14:11:58.830 回答
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
于 2015-01-08T10:18:35.480 回答