Sparql中的属性路径

Sparql中的属性路径,sparql,rdf,Sparql,Rdf,我正在使用属性路径向Dbpedia端点提出Sparql查询: select (COUNT(distinct ?s2) AS ?count) WHERE{ ?s2 skos:broader{0,2} dbc:Countries_in_Europe } select (COUNT(distinct ?s2) AS ?count) (COUNT(distinct ?s1) AS ?count1) WHERE{ ?s2 skos:broader dbc:Countries_in_Europe. ?s

我正在使用属性路径向Dbpedia端点提出Sparql查询:

select (COUNT(distinct ?s2) AS ?count) WHERE{
?s2 skos:broader{0,2} dbc:Countries_in_Europe
}
select (COUNT(distinct ?s2) AS ?count) (COUNT(distinct ?s1) AS ?count1)  WHERE{
?s2 skos:broader dbc:Countries_in_Europe.
?s1 skos:broader ?s2.
}
我想在没有属性路径的情况下提出相同的查询:

select (COUNT(distinct ?s2) AS ?count) WHERE{
?s2 skos:broader{0,2} dbc:Countries_in_Europe
}
select (COUNT(distinct ?s2) AS ?count) (COUNT(distinct ?s1) AS ?count1)  WHERE{
?s2 skos:broader dbc:Countries_in_Europe.
?s1 skos:broader ?s2.
}
我有两个问题:

  • 第二次查询是否可能得到?s1+?s2
  • 对于第二个查询,我希望计数数+1(dbc:Countries\u in\u Europe)的总和应该与第一个查询相同。但事实并非如此。怎么了
  • 提前谢谢

  • 您使用的是非标准SPARQL,即限制深度并不能使其成为最终版本,请参阅

  • 我猜第一个查询应该返回给定查询的子类别,深度为2,对吗?您的第二个查询没有执行相同的操作。必须使用每个距离的并集,即一个用于直接子类别,另一个用于其他级别

  • 选择(计数(不同的)作为计数),其中{
    {
    s skos:更广泛的dbc:欧洲国家
    }联合{
    s1 skos:更广泛的dbc:欧洲国家。
    ?s skos:范围更广?s1
    }  
    }
    
    注意,在您的第一个查询中,您使用了
    {0,2}
    ,这意味着由于
    0
    距离,类别
    dbc:Countries\u in\u european
    本身也是结果的一部分。如果需要,应该将
    +1
    添加到第二个查询的结果中

    更新 根据@JohuaTaylor下面的评论,更简洁的语法应该是

    选择(计数(不同的)作为计数),其中{
    ?s skos:范围更广/skos:范围更广?dbc:欧洲国家
    }
    
  • 您使用的是非标准SPARQL,即限制深度并不能使其成为最终版本,请参阅

  • 我猜第一个查询应该返回给定查询的子类别,深度为2,对吗?您的第二个查询没有执行相同的操作。必须使用每个距离的并集,即一个用于直接子类别,另一个用于其他级别

  • 选择(计数(不同的)作为计数),其中{
    {
    s skos:更广泛的dbc:欧洲国家
    }联合{
    s1 skos:更广泛的dbc:欧洲国家。
    ?s skos:范围更广?s1
    }  
    }
    
    注意,在您的第一个查询中,您使用了
    {0,2}
    ,这意味着由于
    0
    距离,类别
    dbc:Countries\u in\u european
    本身也是结果的一部分。如果需要,应该将
    +1
    添加到第二个查询的结果中

    更新 根据@JohuaTaylor下面的评论,更简洁的语法应该是

    选择(计数(不同的)作为计数),其中{
    ?s skos:范围更广/skos:范围更广?dbc:欧洲国家
    }
    
    1。您使用的是非标准SPARQL,即限制深度并没有使其达到最终版本,请参见。我猜第一个查询应该返回给定查询的子类别,深度为2,对吗?您的第二个查询没有执行相同的操作。必须使用每个距离的并集,即一个用于直接子类别,另一个用于其他级别。1。您使用的是非标准SPARQL,即限制深度并没有使其达到最终版本,请参见。我猜第一个查询应该返回给定查询的子类别,深度为2,对吗?您的第二个查询没有执行相同的操作。您必须使用每个距离的并集,即一个用于直接子类别,另一个用于其他级别。
    路径操作符在这里会有所帮助。例如,路径
    broader/broader?
    相当于
    skos:broader{1,2}
    @JoshuaTaylor是的,的确如此。我想到的问题更多的是,为什么他/她希望查询没有属性路径。事实上,我想在没有属性路径的情况下进行查询,以了解差异。非常感谢您的评论和回复。
    路径操作符将在这里提供帮助。例如,路径
    broader/broader?
    相当于
    skos:broader{1,2}
    @JoshuaTaylor是的,的确如此。我想到的问题更多的是,为什么他/她希望查询没有属性路径。事实上,我想在没有属性路径的情况下进行查询,以了解差异。非常感谢您的评论和回复。