我正在使用TopBraid Composer免费版来编写本体和SPIN规则 . 我正在使用从TopBraid Composer免费版保存的RDF文件将我的本体加载到Sesame OpenRDF Workbench中 .
我有一个SPIN规则的应用程序(更确切地说,SPIN构造函数),它应该适用于数百个规则中的哪一个是动态的 . 我想找到一种方法来为SPIN规则添加"active"或"inactive"的概念 . 我愿意为 WHERE
子句中的每个规则添加一个检查,以便只有"active"规则 . 为了说明,假设我创建了SPIN的两个子属性:构造函数,将它们称为 myPrefix:activeConstructor
和 myPrefix:inactiveConstuctor
.
现在我想在构造函数的WHERE子句中添加三个形式:
?thisConstructorURI a myPrefix:activeConstructor .
这种方法取决于定义 ?thisConstuctorURI
. SPIN将 ?this
设置为与规则关联的类的当前实例 . 是否有类似于规则的URI的内容 .
我也相信目前,规则存在于空白节点 . 例如,我的sxxicc:Pub7Proposal类的构造函数具有以下三个构造函数的三元组,如Sesame / OpenRDF Workbench中所示:
SUBJECT PREDICATE OBJECT
sxxicc:Pub7Proposal spin:constructor _:node1anlqmpiox14591
sxxicc:Pub7Proposal spin:constructor _:node1anlqmpiox14638
sxxicc:Pub7Proposal spin:constructor _:node1anlqmpiox14710
sxxicc:Pub7Proposal spin:constructor _:node1anlqmpiox14787
sxxicc:Pub7Proposal spin:constructor _:node1anlqmpiox14841
sxxicc:Pub7Proposal spin:constructor _:node1anlqmpiox14927
sxxicc:Pub7Proposal spin:constructor _:node1anlqmpiox15002
sxxicc:Pub7Proposal spin:constructor _:node1anlqmpiox15088
sxxicc:Pub7Proposal spin:constructor _:node1anlqmpiox15114
sxxicc:Pub7Proposal spin:constructor _:node1anlqmpiox15195
sxxicc:Pub7Proposal spin:constructor _:node1anlqmpiox15257
sxxicc:Pub7Proposal spin:constructor _:node1anlqmpiox15336
sxxicc:Pub7Proposal spin:constructor _:node1anlqmpiox15377
我真正需要的(我认为)是
-
规则能够引用自己(我的
?thisConstructorURI
想法) -
能够在我写这些规则时命名规则(例如
sxxicci:Pub7ProposalSecurityClassificationConsistencyCheck
)
这一切都是为了让我可以逐个激活/停用规则(或通过任意命名组中的简单扩展) . 关于如何做到这一点的任何想法?
满足以上1.类似于 spin:violationSource
已经支持可以包含在_1540972中的约束 . 但是,我故意使用构造函数而不是约束,主要是因为我不想阻止类的实例化,即使它有违规 .
我担心答案是当前的SPIN标准和实现不支持这一点,并且它需要改变支持实现以扩展标准来执行此操作 .
1 回答
我已经确认了一种激活/停用我的构造函数的尴尬方法 . 请注意,我使用以下子属性结构:
我创建以下conststructor为
sxxicc:sxxiPub7ComplianceCheckRule
:此查询激活的最相关行是:
默认情况下,此规则不能生成其错误消息,因为它具有超级属性但不具有活动子属性 . 我通过声明
sxxicc:Pub7Proposal
并将dataItem511
设置为"Sight Seeing"(不是有效的主要功能标识符)来确认这一点 . 此构造函数未生成其错误消息 .然后,我从OpenRDF Workbench“Modify / SPARQL Update”运行以下SPARQL Update查询,将此构造函数更改为“active”:
我断言另一个相同的
sxxicc:Pub7Proposal
(不同的IRI),这个规则确实抱怨"Sight Seeing"不是有效的主要功能标识符,正如预期的那样 .请注意,相同形式的查询但使用
DELETE
子句替换上述INSERT
子句(相同的三元组)可能会使构造函数动态失效 . 更确切地说,它将防止再次生成错误消息 .这是完成动态激活和停用构造函数的低效方法 . 我正在做很多工作去解决锚定构造函数的空白节点 . 我正在使用规则的注释来确保唯一性,并且我使用自己的子属性来约束规则搜索自身的范围 . 我希望有一种更好的方法来动态激活/停用构造函数规则,而无需完全加载/卸载它们 . 如果规则引擎本身理解“活动”的概念将是非常好的,这样“非活动”规则不会不必要地运行才发现它们是不活动的 .