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实现),也许是最好的阅读和写作. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |