在自定义 GraphDB 规则集中使用算术函数
using arithmetic functions in custom GraphDB ruleset
我想将自定义规则添加到 OWL-2-RL 规则集 (builtin_owl2-rl.pie) 以建立 isOppositeDirectionOf
object 属性 在方向相反的向量之间。我认为它应该看起来像这样:
Id: oppositeDirectionVector_rule
v1 <rdf:type> <cad:Vector>
v1 <cad:x> v1x // example data property for v1x: "1.0"^^xsd:double
v1 <cad:y> v1y
v1 <cad:z> v1z
v2 <rdf:type> <cad:Vector>
v2 <cad:x> -v1x
v2 <cad:y> -v1y
v2 <cad:z> -v1z
-------------------------------
v1 <cad:isOppositeDirectionOf> v2
没有缺点,此规则确实可以创建 isSameVectorAs
对象属性。
有没有一种方法可以对规则中的数据属性使用基本算术函数?
您不能在规则中使用基本算术函数。由于性能原因,GraphDB 规则引擎使用内部数据库标识符,而不是实际的 RDF 值,即内部 ID 10001
而不是 "1"^^xsd:double
。因此,唯一支持的变量比较操作是两个内部标识符是否相等。
按照下面的评论进行编辑:GraphDB's Plugin API 是将您的代码与数据库集成的唯一机制。插件可以为每个带有 ?s <cad:x> ?o
谓词的语句实现一个新语句 ?s <cad:oppositeX> -?o
。不幸的是,它还应该处理删除。
我想将自定义规则添加到 OWL-2-RL 规则集 (builtin_owl2-rl.pie) 以建立 isOppositeDirectionOf
object 属性 在方向相反的向量之间。我认为它应该看起来像这样:
Id: oppositeDirectionVector_rule
v1 <rdf:type> <cad:Vector>
v1 <cad:x> v1x // example data property for v1x: "1.0"^^xsd:double
v1 <cad:y> v1y
v1 <cad:z> v1z
v2 <rdf:type> <cad:Vector>
v2 <cad:x> -v1x
v2 <cad:y> -v1y
v2 <cad:z> -v1z
-------------------------------
v1 <cad:isOppositeDirectionOf> v2
没有缺点,此规则确实可以创建 isSameVectorAs
对象属性。
有没有一种方法可以对规则中的数据属性使用基本算术函数?
您不能在规则中使用基本算术函数。由于性能原因,GraphDB 规则引擎使用内部数据库标识符,而不是实际的 RDF 值,即内部 ID 10001
而不是 "1"^^xsd:double
。因此,唯一支持的变量比较操作是两个内部标识符是否相等。
按照下面的评论进行编辑:GraphDB's Plugin API 是将您的代码与数据库集成的唯一机制。插件可以为每个带有 ?s <cad:x> ?o
谓词的语句实现一个新语句 ?s <cad:oppositeX> -?o
。不幸的是,它还应该处理删除。