【问题标题】:How to define advanced custom rule in GraphDb ruleset如何在 GraphDb 规则集中定义高级自定义规则
【发布时间】:2021-09-28 12:58:44
【问题描述】:

让我们从头开始。 有一些人存储在图形数据库中,带有诸如birthDate、name等谓词。 我目前正在尝试编写自定义规则,为年龄超过例如年龄的人添加一些新事实。 50 年。 所以要实现这两个步骤:计算年龄和过滤年龄。

SPARQL 查询可能如下所示:

PREFIX  rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX drl:  <http://...>
SELECT DISTINCT ?person ?age
WHERE { 
  ?person rdf:type drl:Person.
  ?person drl:Person.birthDate/drl:value ?birthDate;       
  BIND(year(now()) - year(?birthDate) as ?age)
  FILTER (?age > 50)
} 

但是如何编写这样的规则呢? 根据https://graphdb.ontotext.com/documentation/standard/reasoning.html#entailment-rules

规则定义的语法如下:

Id: <rule_name>
    <premises> <optional_constraints>
    -------------------------------
    <consequences> <optional_constraints>

那么可以在&lt;premises&gt;&lt;optional_constraints&gt; 中使用BIND 和FILTER 关键字吗? 我想答案是:不是:(

也许有另一种方法来制定这样的规则?

似乎 SPARQL SPIN 函数和魔术谓词不是 GraphDB 的选项?

【问题讨论】:

    标签: rule-engine inference graphdb reasoning


    【解决方案1】:

    当您说“这为 50 岁以上的人添加了一些新事实”。我将其解释为

    1. 您想要构造新的三元组并将它们添加到三元组中
    2. 您想使用与您显示的查询类似的查询来检测新的三元组

    假设您希望为任何 60 岁以上的人添加“退休养老金账户”的概念(我会说像您一样 50 岁,但我已经 57 岁,还没有准备好退休,所以我将其设为 60 岁 ;-)。

    如果您有匹配的 Person 数据,您可以使用 SPARQL 构造三元组:

    PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
    PREFIX drl: <http://example.org/drl/>
    PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
    
    CONSTRUCT
    {   
        ?person drl:beneficiaryOf ?acct .
    
        ?acct a drl:RetirementAccount ;
            drl:hasId ?acctId ;
            drl:hasBalance ?balance .
            
    }
    WHERE {
    
      ?person rdf:type drl:Person ;
          drl:birthDate/drl:value ?birthDate;       
      BIND(year(now()) - year(?birthDate) as ?age)
      FILTER (?age > 50)
      
    BIND(IRI(CONCAT(STR(drl:),"_Account_",STRUUID())) AS ?acct)
    BIND(IRI(CONCAT(STR(drl:),"_AccountID_",STRUUID())) AS ?acctId)
    BIND(STRDT("10.0",xsd:double) AS ?balance)
    } 
    

    这是你想做的事情吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 2017-09-21
      • 2022-11-16
      • 1970-01-01
      相关资源
      最近更新 更多