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

使用SWRL时间内置函数比较DateTime值:equals规则异常求解

SWRL时间内置函数equals规则异常问题分析

问题背景

使用SWRL时间内置函数比较DateTime值,重点测试equals、before、after运算符。其中before和after功能符合预期,但equals规则出现异常,结果不符合预期。

RDF数据

@prefix : <http://example.org/test#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix ex: <http://example.org#> .

:elapse1    :hasTime   "2026-01-11T17:30:00"^^xsd:dateTime .
:elapse2    :hasTime   "2026-01-11T17:30:00"^^xsd:dateTime .
:elapse3    :hasTime   "2026-01-11T11:30:00"^^xsd:dateTime .

:BeforeEvent rdf:type owl:Class .
:AfterEvent rdf:type owl:Class .
:Equals rdf:type owl:Class . 

:hasTime a owl:DatatypeProperty ;
        rdfs:range xsd:dateTime .

SWRL规则

:hasTime (?e1,?t1) ^ :hasTime (?e2,?t2) ^ temporal:before(?t1,?t2)  -> :BeforeEvent(?e1)
:hasTime (?e1,?t1) ^ :hasTime (?e2,?t2) ^ temporal:after(?t1,?t2)  -> :AfterEvent(?e1)
:hasTime (?e1,?t1) ^ :hasTime (?e2,?t2) ^ temporal:equals(?t2,?t1)  -> :Equals(?e2)

运行结果

通过Protege 5.6.7的SWRLTab运行规则后,得到以下结果:

:elapse1 a :AfterEvent, :Equals .
:elapse2 a :AfterEvent, :Equals .
:elapse3 a :BeforeEvent, :Equals .                       

异常原因及解决方案

原因分析

问题出在equals规则的变量绑定逻辑上:SWRL规则默认允许变量?e1和?e2绑定到同一个实例。也就是说,每个事件都会和自身进行时间比较——比如elapse3的时间和自己的时间必然相等,因此规则会触发,将elapse3也归类到Equals类中,导致结果不符合预期。

解决方案

需要在equals规则中添加限制条件,确保?e1和?e2是不同的实例,使用swrlb:notEqual内置函数实现。修改后的规则如下:

:hasTime (?e1,?t1) ^ :hasTime (?e2,?t2) ^ temporal:equals(?t2,?t1) ^ swrlb:notEqual(?e1, ?e2)  -> :Equals(?e2)

修改后,只有elapse1和elapse2会满足条件(时间相等且为不同实例),被归类到Equals类,符合预期。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 17:12:37