SPARQL构造子句以包含谓词文字

时间:2013-10-26 23:35:01

标签: rdf sparql sesame

我正在尝试使用SPARQL CONSTRUCT从dbpedia中剥离一组数据 - 我只对一组艺术家感兴趣,我希望Sesame尽可能小的速度。

我认为我可以做的是使用CONSTRUCT来获取给定艺术家的每个谓词。我可以得到第一个CONSTRUCT子句,以确保我得到类型“人”,但这只给了我满足该条款的三元组 - 我想要他们的名字,标签,birthPlaces等。我在下面的查询是试图在第二个CONSTRUCT子句中捕获Monet的名字?如果我说对了,这会给我三倍的

<http://dbpedia.org/resource/Claude_Monet>  
<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>   
<http://xmlns.com/foaf/0.1/Person>

和像这样的三重奏

<http://dbpedia.org/resource/Claude_Monet>  
<http://xmlns.com/foaf/0.1/name>
"Claude Monet"@en

如何让我的查询使用Monet名称的对象作为变量来使用我要插入空引号的地方?这是查询

PREFIX purl: <http://purl.org/dc/elements/1.1/>
PREFIX foaf:    <http://xmlns.com/foaf/0.1/>
CONSTRUCT {
  ?s a foaf:Person .
  ?s foaf:name ""
} WHERE { 
  ?s foaf:surname "Monet"@en . 
  ?s purl:description "Painter"@en
} LIMIT 100

任何帮助真的很感激

麦克

3 个答案:

答案 0 :(得分:2)

我们就是这样,就是这样。一旦我想到CONSTRUCT和WHERE之间的变量绑定,它实际上是直截了当的。

每个WHERE语句都从repo中选择这些值,并且需要CONSTRUCT中引用相同变量的匹配模板语句。价值刚刚被取代。我想是显而易见的。

自我注意 - 必须停止像RDBMS一样思考。

PREFIX purl: <http://purl.org/dc/elements/1.1/>
PREFIX foaf:    <http://xmlns.com/foaf/0.1/>
PREFIX dbont:  <http://dbpedia.org/ontology/>
PREFIX w3: <http://www.w3.org/2000/01/rdf-schema#>

CONSTRUCT 
{
    ?s a foaf:Person .
    ?s foaf:name ?a .
    ?s foaf:surname ?b .
    ?s foaf:givenName ?c .
    ?s w3:label ?d .
    ?s purl:description ?e .
    ?s dbont:birthPlace ?f .
    ?s dbont:deathPlace ?g .
    ?s dbont:birthDate ?h .
    ?s dbont:deathDate ?i
}  
WHERE {
    ?s foaf:name ?a .
    ?s foaf:surname ?b .
    ?s foaf:givenName ?c .
    ?s w3:label ?d .
    ?s purl:description ?e .
    ?s dbont:birthPlace ?f .
    ?s dbont:deathPlace ?g .
    ?s dbont:birthDate ?h .
    ?s dbont:deathDate ?i .
    ?s purl:description "Painter"@en
}

答案 1 :(得分:1)

作为替代/速记,您还可以使用DESCRIBE查询,例如:

DESCRIBE <http://dbpedia.org/resource/Claude_Monet>

将为您提供一个子图,其中包含<http://dbpedia.org/resource/Claude_Monet>的所有传入和传出属性,或者:

DESCRIBE ?x WHERE { ?x purl:description "Painter"@en }

将为您提供匹配?x的所有purl:description的子图。

当然,这可以减少对提取的三元组的控制,但从好处来看,它更短,如果特定资源不存在某些三重模式,也不需要进行调整(例如,您的CONSTRUCT查询不会匹配如果由于任何原因,特定画家在WHERE子句中没有deathDatefoaf:surname或任何其他属性)。

一个小警告:DESCRIBE查询结果的确切内容取决于实现。例如,一些三重商店可能会选择仅返回传出属性。但是Sesame(我相信,DBPedia端点)也会返回所谓的Symmetric Concise Bounded Description

答案 2 :(得分:1)

我看到你已经answered you own question,但我想指出,当construct查询返回的三元组与{{1}匹配的三元组完全相同时部分,而where部分不包含任何过于花哨的内容,您可以使用特殊的简写where

  

16.2.4 CONSTRUCT WHERE

     

为案例提供了CONSTRUCT查询表单的简短表单   模板和模式相同,模式是   只是一个基本的图形模式(没有construct where s,没有复杂的图形模式   允许以简短形式)。中需要关键字WHERE   简短形式。

使用FILTER,并使用namespaces已定义的DBpedia SPARQL endpoint(传统的construct where而不是rdfs ,以及w3而非dc),您的查询将变为:

purl

SPARQL results