这个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

关于以下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 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”。