从SWRL规则创建Jena规则

时间:2014-02-21 07:02:13

标签: java api jena jena-rules

请如何创建耶拿规则。 有我的SWRL规则

    1-System(?x) ∧ hasNbAbsence(?x, ?y) ∧ swrlb:greaterThan(?y, 10) →  BadBehaviorOperators(?x)
2-System(?x) ∧ hasNbAbsence(?x, ?y) ∧ swrlb:lessThanOrEqual(?y, 10) →  GoodBehaviorOperators(?x)
3-System(?x) ∧ hasNbStations(?x, ?y) ∧ swrlb:greaterThan(?y, 50) ∧ hasTimeBetweenSuccTravel(?x, ?z) ∧  swrlb:lessThanOrEqual(?z, 15) →  HighAvailableSystem(?x)
4-System(?x) ∧ hasNbAccident(?x, ?y) ∧ swrlb:greaterThan(?y, 30) →  InsecureSystem(?x)
5-System(?x) ∧ hasNbStations(?x, ?y) ∧ swrlb:lessThanOrEqual(?y, 25) ∧ hasTimeBetweenSuccTravel(?x, ?z) ∧  swrlb:greaterThan(?z, 30) →  LowAvailableSystem(?x)
6-System(?x) ∧ hasNbStations(?x, ?y) ∧ swrlb:lessThanOrEqual(?y, 50) ∧ swrlb:greaterThan(?y, 25) ∧  hasTimeBetweenSuccTravel(?x, ?z) ∧ swrlb:greaterThan(?z, 15) ∧ swrlb:lessThanOrEqual(?z, 30) →  MiddleAvailableSystem(?x)
7-System(?x) ∧ hasDelayDuration(?x, ?y) ∧ swrlb:greaterThan(?y, 5) ∧ swrlb:lessThanOrEqual(?y, 10) ∧ hasNbDelays(?x, ?z) ∧  swrlb:greaterThan(?z, 10) ∧ swrlb:lessThanOrEqual(?z, 30) →  MiddleRespectTimeSystem(?x)
8-System(?x) ∧ hasNbAccident(?x, ?y) ∧ swrlb:greaterThanOrEqual(?y, 10) ∧ swrlb:lessThanOrEqual(?y, 30) →  MiddleSecureSystem(?x)
9-System(?x) ∧ hasNbDelays(?x, ?y) ∧ swrlb:lessThanOrEqual(?y, 5) ∧ hasDelayDuration(?x, ?z) ∧  swrlb:lessThanOrEqual(?z, 10) →  RespectTimeSystem(?x)
10-System(?x) ∧ hasNbAccident(?x, ?y) ∧ swrlb:lessThan(?y, 10) →  SecureSystem(?x)
11-System(?x) ∧ hasNbDelays(?x, ?y) ∧ swrlb:greaterThan(?y, 10) ∧ hasDelayDuration(?x, ?z) ∧ swrlb:greaterThan(?z, 30) →  UnrespectTimeSystem(?x)

感谢所有

2 个答案:

答案 0 :(得分:0)

我不知道(并且不认为有)此任务的API。但是你可以自己轻松地做到这一点。

U可以简单地使用tripple模式,其语法可以在http://jena.apache.org/documentation/inference/找到。

第一个例子应该转化为(我从未使用过SWRL):

[RuleExample: (?X rdf:type NS:System), (?X NS:hasNbAbsence ?Y), greaterThan(?Y, 10)
-> (?X rdf:type NS:BadBehaviorOperators)]

NS是你本体论的Uri。

有关完整的语法和解释,我会查看官方网站(上面的链接)。

答案 1 :(得分:0)

没有可以执行此类转换的代码(除非您自己编写),但实际上并不需要。您可以直接在本体中放置SWRL规则,而不必像使用Jena规则那样指定外部规则文件。所以你有两个选择:
1)在您的本体中将规则编码为SWRL规则。这可以通过protege完成,或者如果你有信心使用swrl xml语法自己做:)
参考:http://www.w3.org/Submission/SWRL/#5

2)在Jena中写出等效规则,即在带有Jena规则语法的文本文件中。这是一个有点棘手,因为耶拿规则节点(或者如果你愿意的话,原子)类似于rdf三元组,以这种格式指定复杂规则可能有点棘手。
参考:https://jena.apache.org/documentation/inference/#RULEsyntax