You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用通用规则引擎内置函数listContains替换SPARQL中的VALUES取值

Jena listContains 内置函数使用说明

首先明确:listContains 是Jena推理引擎规则体系的专属内置函数,仅可用于自定义推理规则中,作用是校验指定值是否存在于给定的RDF列表中。

基础使用方式

你可以直接在规则中硬编码待校验的值列表,实现三元组对象匹配逻辑。比如你要校验?a delph:hasLemma ?l的?l是否属于["no", "neg"]列表,规则写法如下:

[checkNegativeLemma:
  # 匹配目标三元组
  (?a delph:hasLemma ?l)
  # 校验?l是否在指定列表中,第一个参数为值列表,第二个为待校验变量
  listContains(("no" "neg"), ?l)
  ->
  # 匹配成功后执行的逻辑,示例为给?a添加否定标签
  (?a delph:isNegativeLemma "true"^^xsd:boolean)
]

动态传入值列表

如果不想把列表硬编码在规则中,你可以先将值列表存储到RDF图中,再在规则中绑定列表变量使用:

  1. 先在RDF数据中定义列表:
delph:config delph:negativeLemmas ("no" "neg" "none") .
  1. 对应规则写法:
[checkNegativeLemma:
  delph:config delph:negativeLemmas ?lemmaList
  (?a delph:hasLemma ?l)
  listContains(?lemmaList, ?l)
  ->
  (?a delph:isNegativeLemma "true"^^xsd:boolean)
]

替代方案(标准SPARQL通用)

如果你只是在做SPARQL查询,不需要用到推理规则,不需要调用listContains,有两种更通用的实现方式:

  • 用VALUES子句(就是你示例中给出的写法):
SELECT ?a
WHERE {
    VALUES ?l {"no" "neg"}
    ?a delph:hasLemma ?l.
}
  • 用FILTER+IN函数:
SELECT ?a
WHERE {
    ?a delph:hasLemma ?l.
    FILTER(?l IN ("no", "neg"))
}

内容的提问来源于stack exchange,提问作者Alexandre Rademaker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 16:54:03