加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 资源网站 > 资源 > 正文

rdf – 在SPARQL模式中选择多个值作为对象

发布时间:2020-12-14 18:55:19 所属栏目:资源 来源:网络整理
导读:在SPARQL中,我们可以做这样的事情 select * where { ?s (_:prop1 | _:prop2) "some_val" . ... #use ?s in other patterns ?s ?o ?p .} 对于模式的对象部分可以做同样的事情吗?如果这是不可能的,有什么办法呢? 例如: select * where { ?s _:prop ("v1" |
在SPARQL中,我们可以做这样的事情
select * where {
    ?s   (_:prop1 | _:prop2)  "some_val" .
    ...
    #use ?s in other patterns
    ?s    ?o    ?p .
}

对于模式的对象部分可以做同样的事情吗?如果这是不可能的,有什么办法呢?

例如:

select * where {
    ?s   _:prop ("v1" | "v2") .
    ...
    #use ?s in other patterns
    ?s    ?o    ?p .
}

解决方法

有几种方法可以做到这一点.最简单和纯粹的SPARQL 1.0方法是使用UNION,例如
SELECT * WHERE
{
  { ?s _:prop "v1" } UNION { ?s _:prop "v2" }

  # Use ?s in other patterns
}

这可能是最简单的方法,但如果您需要多个约束,这可能会很快变得难以捉摸.

第二种方法是在FILTER子句中使用IN函数,这需要一个SPARQL 1.1实现.

SELECT * WHERE
{
  ?s _:prop ?value .
  FILTER(?value IN ("v1","v2"))

  # Use ?s in other patterns
}

这里的问题是,如果您有很多备选方案或大量可能匹配的数据,那么使用IN可以执行得很差?

第三种方法是使用VALUES子句,它再次需要一个SPARQL 1.1实现:

SELECT * WHERE
{
  VALUES (?value) { ( "v1" ) ( "v2 " ) }
  ?s _:prop ?value .

  # Use ?s in other patterns
}

这可能是最好的选择,因为它可以更好地扩展到许多替代方案(取决于您的SPARQL实现),也许是最好的阅读和写作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读