我正在尝试使用SPARQL结构从dbpedia中剥离一组数据-我只对一组艺术家感兴趣,我希望Sesame在速度上尽可能小。
我认为我可以做的是使用CONSTRUCT来获取给定艺术家的每个谓词。我可以让第一个构造子句工作,以确保我得到类型"Person",但这只给了我满足那个子句的三个子句-我想要他们的名字,标签,birthPlaces等。我下面的查询是试图在第二个构造子句中捕获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真的很感谢你的帮助
麦克
发布于 2013-10-28 05:21:39
我们到了,就是这里。一旦我弄清楚了结构和它的实际位置之间的变量绑定是很简单的。
每个WHERE语句从代码库中选择这些值,并且在引用相同变量的构造中需要一个匹配的模板语句。该值刚刚被替换。我想很明显吧。
注意,self -必须停止像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
}发布于 2013-10-28 11:55:43
作为替代/速记,您还可以使用DESCRIBE查询,例如:
DESCRIBE <http://dbpedia.org/resource/Claude_Monet>将为您提供一个子图,其中包含<http://dbpedia.org/resource/Claude_Monet>的所有传入和传出属性,或者:
DESCRIBE ?x WHERE { ?x purl:description "Painter"@en }将为所有具有匹配purl:description的?x提供一个子图。
当然,这给了你更少的对提取的精确三元组的控制,但好处是它更短,并且如果特定资源不存在特定的三元组模式,也不需要进行调整(例如,如果由于任何原因,特定的绘制程序在WHERE子句中没有deathDate或foaf:surname或任何其他属性,则构造查询将不匹配)。
一个小小的警告: DESCRIBE查询结果的精确内容依赖于实现。例如,一些三元组可能选择只返回传出属性。但是Sesame (我相信DBPedia端点也是如此)返回所谓的Symmetric Concise Bounded Description。
发布于 2013-10-29 02:10:04
我看到您已经answered you own question了,但是我确实想指出,当construct查询返回的三元组与where部件匹配的三元组完全相同,并且where部件不包含任何太花哨的东西时,您可以使用特殊的简写construct where
16.2.4 CONSTRUCT WHERE
对于模板和模式相同并且模式只是基本图形模式的情况,提供了构造查询表单的简短形式(在简短形式中不允许FILTER和复杂的图形模式)。缩写形式中的关键字WHERE是必需的。
使用construct where,以及使用DBpedia SPARQL endpoint已经定义的相同namespaces (这是常规的,例如,rdfs而不是w3,以及dc而不是purl),您的查询将变成:
construct where {
    ?s foaf:name ?a ;
       foaf:surname ?b ;
       foaf:givenName ?c ;
       rdfs:label ?d ;
       dc:description ?e, "Painter"@en ;
       dbpedia-owl:birthPlace ?f ;
       dbpedia-owl:deathPlace ?g ;
       dbpedia-owl:birthDate ?h ;
       dbpedia-owl:deathDate ?i .
}SPARQL results
https://stackoverflow.com/questions/19613074
复制相似问题