【问题标题】:Jena Custom Rules using Built-insJena 使用内置的自定义规则
【发布时间】:2013-05-24 14:32:25
【问题描述】:

我目前正在与 Jena 搞混,试图创建规则以添加到我的通用推理器中。我创建了以下简单规则:

[rule1: (?x ?rdf:type ?y),(?y rdfs:subClassOf ?z)-> (?x rdfs:type ?z)]

这可以正常工作,并且可以正确触发,给我所期望的一切。完成此操作后,我想为?x 分配一个时间戳,以便知道何时得出结论,我想使用Now 内置函数,如下所示。

[rule1: (?x ?rdf:type ?y),(?y rdfs:subClassOf ?z),now(?x)-> (?x rdfs:type ?z)]

不幸的是,这不起作用,它也不会抛出错误,它似乎没有将任何时间值绑定到?x,而且它似乎阻止了规则像第一种情况一样被正确触发。我正在使用的本体如下。有什么想法吗?

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
         xmlns:owl="http://www.w3.org/2002/07/owl#">
  <owl:Class rdf:about="livingthing"></owl:Class>
  <owl:Class rdf:about="Human">
    <rdfs:subClassOf rdf:resource="livingthing"/>
  </owl:Class>
  <rdf:Description rdf:about="john">
    <rdf:type rdf:resource="Human"/>
  </rdf:Description>
</rdf:RDF>

【问题讨论】:

    标签: jena jena-rules


    【解决方案1】:

    根据javadocNow 将“将第一个参数绑定到当前语言环境和时区中的当前日期时间。”我没有尝试使用Now,但我希望“当前语言环境和时区中的当前日期时间”是某种 RDF 文字(可能是日期或日期时间)?文字不能成为 RDF 中三元组的主题。对于规则

    [rule1: (?x ?rdf:type ?y),(?y rdfs:subClassOf ?z),now(?x) -> (?x rdfs:type ?z)]
    

    为了在图中匹配,变量?x 将绑定到日期文字,例如"2013-05-24"(但正如我所提到的,我不知道Now 会产生什么)但不可能(?x rdf:type ?y) 的任何匹配项,因为这些将具有 "2013-05-24" rdf:type ?y 的形式,并且不能有该形式的三元组。这意味着该规则无法触发。

    如果你想给某事添加一个时间戳,你可能想要一个n-ary relation,这样你实际上代表(或代表,除了?x rdf:type ?z)一个关系inferredSubclassRule(?super,? sub,?time ),在 RDF 中可以用一个空白节点来表示,比如:

    [] a :inferredSubclassRule ;
       :hasSuperClass ?super ;
       :hasSubClass ?sub ;
       :hasTimestamp ?time .
    

    【讨论】:

    • 谢谢,有道理。 n 元关系似乎是我正在寻找的。​​span>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-28
    • 1970-01-01
    • 1970-01-01
    • 2017-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多