Rdf SPARQL Construct子句以包含谓词文本
我正在尝试使用SPARQL构造从dbpedia中剥离一组数据-我只对一组艺术家感兴趣,我希望芝麻尽可能小以提高速度 我想我能做的是使用CONSTRUCT获取给定艺术家的每个谓词。我可以让第一个CONSTRUCT子句工作以确保我得到“Person”类型,但这只会让我得到满足该子句的三元组-我希望他们的姓名、标签、出生地等。我下面的查询试图在第二个CONSTRUCT子句中捕获莫奈的名字?如果我没弄错的话,这会给我三倍的Rdf SPARQL Construct子句以包含谓词文本,rdf,sparql,sesame,Rdf,Sparql,Sesame,我正在尝试使用SPARQL构造从dbpedia中剥离一组数据-我只对一组艺术家感兴趣,我希望芝麻尽可能小以提高速度 我想我能做的是使用CONSTRUCT获取给定艺术家的每个谓词。我可以让第一个CONSTRUCT子句工作以确保我得到“Person”类型,但这只会让我得到满足该子句的三元组-我希望他们的姓名、标签、出生地等。我下面的查询试图在第二个CONSTRUCT子句中捕获莫奈的名字?如果我没弄错的话,这会给我三倍的 <http://dbpedia.org/resource/Claude_M
<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
“克劳德·莫奈”@en
如何让我的查询使用莫奈名字的对象作为变量,以便在插入空引号时使用?这是问题
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
前缀purl:
前缀foaf:
构造{
这是一个人。
?s foaf:名称“”
}何处{
s foaf:姓“莫奈”@en。
?s purl:描述“画家”@en
}限制100
非常感谢您的帮助
迈克我们到了,就是这里。有一次,我计算了构造之间的变量绑定以及它实际上是直接的 每个WHERE语句都从repo中选择这些值,并且在引用相同变量的构造中需要一个匹配的模板语句。值刚刚被替换。我想很明显 请注意,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
}
前缀purl:
前缀foaf:
前缀dbont:
前缀w3:
构造
{
这是一个人。
s foaf:姓名。
s foaf:姓b。
s foaf:givename?c。
?s w3:标签?d。
s purl:描述e。
?s dbont:出生地?f。
死亡之地。
?s dbont:出生日期?h。
?s dbont:死亡日期?i
}
在哪里{
s foaf:姓名。
s foaf:姓b。
s foaf:givename?c。
?s w3:标签?d。
s purl:描述e。
?s dbont:出生地?f。
死亡之地。
?s dbont:出生日期?h。
死亡日期。
?s purl:描述“画家”@en
}
我们到了,就是这里。有一次,我计算了构造之间的变量绑定以及它实际上是直接的
每个WHERE语句都从repo中选择这些值,并且在引用相同变量的构造中需要一个匹配的模板语句。值刚刚被替换。我想很明显
请注意,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
}
前缀purl:
前缀foaf:
前缀dbont:
前缀w3:
构造
{
这是一个人。
s foaf:姓名。
s foaf:姓b。
s foaf:givename?c。
?s w3:标签?d。
s purl:描述e。
?s dbont:出生地?f。
死亡之地。
?s dbont:出生日期?h。
?s dbont:死亡日期?i
}
在哪里{
s foaf:姓名。
s foaf:姓b。
s foaf:givename?c。
?s w3:标签?d。
s purl:描述e。
?s dbont:出生地?f。
死亡之地。
?s dbont:出生日期?h。
死亡日期。
?s purl:描述“画家”@en
}
作为替代/简写,您还可以使用描述查询,例如:
DESCRIBE <http://dbpedia.org/resource/Claude_Monet>
将为所有具有匹配的purl:description
的?x
提供一个子图
当然,这使您对提取的确切三元组的控制更少,但从正面来看,它更短,如果特定资源不存在某些三元组模式,也不需要进行调整(例如,如果由于任何原因,某个特定的油漆工没有死亡日期
或foaf:lasname
或WHERE子句中的任何其他属性,则构造查询将不匹配)
一个小警告:descripe查询结果的精确内容取决于实现。例如,一些TripleStore可能选择只返回传出属性。但是Sesame(我相信还有DBPedia端点)返回已知的。作为替代/简写,您还可以使用描述查询,例如:
DESCRIBE <http://dbpedia.org/resource/Claude_Monet>
将为所有具有匹配的purl:description
的?x
提供一个子图
当然,这使您对提取的确切三元组的控制更少,但从正面来看,它更短,如果特定资源不存在某些三元组模式,也不需要进行调整(例如,如果由于任何原因,某个特定的油漆工没有死亡日期
或foaf:lasname
或WHERE子句中的任何其他属性,则构造查询将不匹配)
一个小警告:descripe查询结果的精确内容取决于实现。例如,一些TripleStore可能选择只返回传出属性。但是Sesame(我相信还有DBPedia端点)返回已知的。我知道您已经返回了,但我确实想指出,当构造
查询返回的三元组与where
部分匹配的三元组完全相同,并且where
部分不包含任何太奇特的内容时,您可以使用特殊的速记构造t其中
:
为该案例提供了构造查询表单的简短表单
其中,模板和模式相同,模式为
只是一个基本的图形模式(没有过滤器s,也没有复杂的图形模式
中所需的关键字WHERE
缩写形式
使用结构,其中
,以及使用已定义的结构(这是常规的,例如,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 .
}
我知道您已经知道了,但是我想指出的是,当构造
查询返回的三元组与t匹配的三元组完全相同时