1

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

[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>
4

1 回答 1

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 关系,以便您实际上表示(或表示,除此之外?x rdf:type ?z)一个关系inferredSubclassRule(?super,?sub,?time),它可以在 RDF 中由一个空白节点表示,例如:

[] a :inferredSubclassRule ;
   :hasSuperClass ?super ;
   :hasSubClass ?sub ;
   :hasTimestamp ?time .
于 2013-05-24T15:01:19.477 回答