我有一个表,里面有一些 RDF 语句,比如Quads(graph, subject, verb, object)
我发现自己在做如下查询:
select * from quads where verb = 'rdf:type' and object = 'smtg:Type'
select * from quads where verb = 'rdf:label' and object = 'bla bla'
我想以类似的形式表达这一点
select * from quads where type('smtg:Type')
select * from quads where label('bla bla')
虽然这似乎是一个“微不足道的”文本替换,但我不知道如何以及是否可以在 postgresql 中实现,尽管我有点认为这是不可能的。
据我所知,我可以使用函数对常量进行硬编码,并执行
select * from quads where rdftype() = verb and object = 'smtg:Type'
或者我可以使用函数作为from
参数
select * from typed('smtg:Type')
可悲的是,前者相当冗长,后者似乎不能修改为组合,例如我不能做一个假设
select * from quads where type('smtg:Type') and inGraph('mygraph')
有没有办法做我想做的事?这似乎是不可能的,但我想知道是否有办法。
编辑:一个 sqlfiddle 实例:http ://sqlfiddle.com/#!1/40b2c/3 。
更清楚地说,这似乎不可行的原因是宏函数将返回一个布尔值(它在where
子句中使用,就好像它 where a select $1=somevalue
)但使用它可以访问的“隐式”行参数一次多个字段,我在 pg 文档中没有看到这样的例子。