我目前正在捣乱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>
答案 0 :(得分:1)
根据javadoc,Now
将“将第一个arg绑定到当前区域设置和时区的当前日期时间。”我没有尝试使用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 .