这个SPARQL查询的这些部分是什么意思?
关于以下SPARQL查询,我有三个问题:这个SPARQL查询的这些部分是什么意思?,sparql,Sparql,关于以下SPARQL查询,我有三个问题: 前缀basekb: 前缀rdf: 前缀rdfs: 选择?p2?o,其中{ basekb:m.06y3r?p1?cvt。 ?cvt?p2?o。 ?cvt basekb:freebase.type_hints.mediator true。 } 我的问题是关于查询的以下部分: basekb:m.06y3r?p1?cvt:将basekb:m.06y3r的所有属性和对象分别分配给?p1和?cvt ?cvt?p2?o:将?cvt的所有属性分配给?o ?cvt ba
前缀basekb:
前缀rdf:
前缀rdfs:
选择?p2?o,其中{
basekb:m.06y3r?p1?cvt。
?cvt?p2?o。
?cvt basekb:freebase.type_hints.mediator true。
}
我的问题是关于查询的以下部分:
basekb:m.06y3r?p1?cvt
:将basekb:m.06y3r
的所有属性和对象分别分配给?p1
和?cvt
?cvt?p2?o
:将?cvt
的所有属性分配给?o
?cvt basekb:freebase.type\u hints.mediator true:
检查谓词是否等于1小更新 假设我想知道
basekb:m.06y3r
的雇佣历史。还假设我知道数据库中具有freebase.type\u hints.mediator true的对象集
select ?cvt ?p2 ?o
where {
basekb:m.06y3r basekb:people.person.employment_history ?cvt.
?cvt ?p2 ?o
}
此查询将输出以下三元组子集:
:m.04j3rn8 :type :business.employment_tenure
:m.04j3rn0 :type :business.employment_tenure
:m.04j3rng :type :business.employment_tenure
m.04j3rn8的类型是business.employment\u-lexture
,它实际上是一个mediator
,因此它有freebase.type\u-hints.mediator-true
。我可以检查数据库中具有freebase.type\u hints.mediator true
的对象**set中是否包含business.employment\u-lexture
伪码 根据本商业协议,就业权具有以下属性: 是的任职期限
select ?cvt ?p2 ?o
where {
basekb:m.06y3r basekb:people.person.employment_history ?cvt.
?cvt ?p2 ?o
}
它有以下类型http://www.w3.org/2000/01/rdf-schema#Class
。Sheesh freebase很奇怪
解决方案 我可以写这个查询,但不知道为什么这么慢。它给出了正确的结果。我能够提取复合值类型
PREFIX basekb:<http://rdf.basekb.com/ns/>
PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#>
select distinct ?history ?p3 ?o3 where {
basekb:m.06y3r basekb:people.person.employment_history ?history .
?history ?property ?value;
?p3 ?o3.
?value rdfs:label ?label.
?s ?p2 ?label;
basekb:freebase.type_hints.mediator true .
}
前缀basekb:
前缀rdf:
前缀rdfs:
选择不同的?历史记录?p3?o3,其中{
basekb:m.06y3r basekb:people.person.employment_history?历史。
?历史?财产?价值;
?p3?o3。
?值rdfs:标签?标签。
?s?p2?标签;
basekb:freebase.type_hints.mediator true。
}
此查询不会产生任何结果。完全正确,但不起作用。我需要?值的ID来检查它是否是CVT
PREFIX basekb:<http://rdf.basekb.com/ns/>
PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#>
PREFIX key:<http://rdf.basekb.com/key/>
select distinct ?history ?p3 ?o3 where {
basekb:m.06y3r basekb:people.person.employment_history ?history .
?history ?property ?value;
?p3 ?o3.
?value basekb:freebase.type_hints.mediator true .
FILTER(basekb:m.06y3r != ?o3)
}
前缀basekb:
前缀rdf:
前缀rdfs:
前缀键:
选择不同的?历史记录?p3?o3,其中{
basekb:m.06y3r basekb:people.person.employment_history?历史。
?历史?财产?价值;
?p3?o3。
?value basekb:freebase.type_hints.mediator true。
过滤器(基本KB:m.06y3r!=?o3)
}
1和2是正确的,但3有点不正确。模式
?cvt basekb:freebase.type_hints.mediator true.
当?cvt的值具有属性basekb:freebase.type_hints.mediator的值且该值为true时匹配。RDF具有数据类型的文字值,布尔值与数字不同。在RDF中,数字1与布尔值true不同,并且查询中没有像某些编程语言中那样的自动转换。模式?x?y 1
将匹配对象为1的三元组,模式?x?y true
将匹配对象为真的三元组
根据对您的问题的更新,听起来您希望查询如下:
选择历史记录属性值,其中{
basekb:m.06y3r basekb:people.person.employment_history?历史。
?历史?财产?价值。
历史?p?o。
o:类型?类型。
?输入freebase.type_hints.mediator true。
}
这将选择每个历史及其所有值,以便历史具有某个值,该值的类型为中介
您可以使用一些属性路径将其缩短一点(|!)是一个通配符属性,a/b/c表示序列路径,^p表示反向的p。您可以这样结束:
选择历史记录属性值,其中{
?历史^basekb:people.person.employment_history basekb:m.06y3r;
?财产?价值;
(|!)/:type/freebase.type_hints.mediator true。
}
我可以详细说明一下这个问题吗?可以吗?还是你想详细说明答案?您当然可以要求澄清…只有当?cvt的freebase.type_hints.mediator属性等于1时,结果才会显示在屏幕上。否则没有“等于1”,而是“等于真”。1和true不是一回事。1是一个数字,有很多数字。真是真值,其中只有两个(真和假)。我更新了问题。抱歉,这两周来一直困扰着我?s和?p2在这个查询中有什么意义?是否要检查?值的类型提示中介符是否为true?是@JoshuaTaylor,我知道。但问题是基于此。我无法获取其属性freebase.type_hints.mediatorù,该属性位于其他实体中。我必须使用标签获取它的ID,然后最后我检查basekb:freebase.type_hints.mediator true是否正确如果你一直在更改问题,那么就不值得任何人花时间回答它,因为编辑后基于一个版本的响应不再有意义。无论如何,你评论中的链接只有一个属性/值。然后该值有一个中介值,但请注意它是“中介1(xsd:integer)”。正如我在回答中强调的,数字与布尔值不是一回事。如果搜索“mediator true”,则不会得到“mediator 1”。