如何编写 Jena 规则来查询 class 并获取 属性 的个人
How to write Jena rule to query class and get individuals for a property
如何提取家中无人时所有关闭的执行器。我尝试编写 Jena 规则,但无法获得正确的输出。我已经添加了我想要的期望结果。需要帮助编写规则。
[rule1: noValue(:users :hasLocation :home) ->
(:actuators :hasLocation :home)
(:actuators :state "OFF"^^xsd:boolean)]
[rule2: noValue(:users :hasLocation :home) ->
(?x rdf:type :actuators)
(?x :hasLocation :home)
(?x :state "OFF"^^xsd:boolean)]
{ rulex: [noValue(:subject1 :hasPropertyP2 :Object1) ->
(:subject2 :hasProperty1 :Object2)
(:subject2 :hasPropertyP3 Object3)] }
Ontology:
class:user
Individual user_1 -> user
Individual user_2 -> user
.
.
class: actuators
subclass: ac -> actuators
subclass: light -> actuators
subclass: other -> actuators
Individual central_ac -> ac
Individual room_lighting -> light
Individual tv -> other
Individual refridgration -> other
Individual heater -> other
result for rule1 [:actuators :state "OFF"^^xsd:boolean]
result for rule2 [:4e62503a:14b01762f42:-7eea :state "OFF"^^xsd:boolean]
desired result:
[central_ac :state "OFF"^^xsd:boolean]
[room_lighting :state "OFF"^^xsd:boolean]
[tv :state "OFF"^^xsd:boolean]
.
.
规则
[rule1: noValue(:users :hasLocation :home) ->
(:actuators :hasLocation :home)
(:actuators :state "OFF"^^xsd:boolean)]
没有达到您的预期,而且很可能还有一些错别字。在你的 ontology 中(将来请提供我们可以实际复制和粘贴的代码,例如 TTL 序列化或 OWL/FSS),你有一个 class 称为 user,不是 users,但在您的规则中,您谈论的是 users。但即使纠正了这一点,您也不会得到想要的结果,因为您在需要使用变量的地方使用 IRI。你的规则说
- if 三元组 :users :hasLocation :home not 是否出现在图表中,
- 然后 三元组 :actuators :hasLocation :home 和 :actuators :state "OFF"^ ^xsd:boolean 应该添加到图中。
我认为您想要一条规则:
- if ?x是一个actuator并且有home的位置,并且没有home和location相同的用户,
- then执行器的状态应该设置为off.
那看起来更像是:
[(?actuator rdf:type :actuator)
(?actuator :hasLocation ?home)
noValue(?user,:hasLocation,?home)
->
(?actuator :state "OFF")]
这将开始在图表中显示结果,例如
[:central_ac :state "OFF"]
[:room_lighting :state "OFF"]
[:tv :state "OFF"]
请注意,我从 "OFF" 中删除了 ^^xsd:boolean 数据类型,因为 "OFF" 不是布尔数据类型的有效词法形式。您可以改用 "true" 或 "false"。
如何提取家中无人时所有关闭的执行器。我尝试编写 Jena 规则,但无法获得正确的输出。我已经添加了我想要的期望结果。需要帮助编写规则。
[rule1: noValue(:users :hasLocation :home) ->
(:actuators :hasLocation :home)
(:actuators :state "OFF"^^xsd:boolean)]
[rule2: noValue(:users :hasLocation :home) ->
(?x rdf:type :actuators)
(?x :hasLocation :home)
(?x :state "OFF"^^xsd:boolean)]
{ rulex: [noValue(:subject1 :hasPropertyP2 :Object1) ->
(:subject2 :hasProperty1 :Object2)
(:subject2 :hasPropertyP3 Object3)] }
Ontology:
class:user
Individual user_1 -> user
Individual user_2 -> user
.
.
class: actuators
subclass: ac -> actuators
subclass: light -> actuators
subclass: other -> actuators
Individual central_ac -> ac
Individual room_lighting -> light
Individual tv -> other
Individual refridgration -> other
Individual heater -> other
result for rule1 [:actuators :state "OFF"^^xsd:boolean]
result for rule2 [:4e62503a:14b01762f42:-7eea :state "OFF"^^xsd:boolean]
desired result:
[central_ac :state "OFF"^^xsd:boolean]
[room_lighting :state "OFF"^^xsd:boolean]
[tv :state "OFF"^^xsd:boolean]
.
.
规则
[rule1: noValue(:users :hasLocation :home) ->
(:actuators :hasLocation :home)
(:actuators :state "OFF"^^xsd:boolean)]
没有达到您的预期,而且很可能还有一些错别字。在你的 ontology 中(将来请提供我们可以实际复制和粘贴的代码,例如 TTL 序列化或 OWL/FSS),你有一个 class 称为 user,不是 users,但在您的规则中,您谈论的是 users。但即使纠正了这一点,您也不会得到想要的结果,因为您在需要使用变量的地方使用 IRI。你的规则说
- if 三元组 :users :hasLocation :home not 是否出现在图表中,
- 然后 三元组 :actuators :hasLocation :home 和 :actuators :state "OFF"^ ^xsd:boolean 应该添加到图中。
我认为您想要一条规则:
- if ?x是一个actuator并且有home的位置,并且没有home和location相同的用户,
- then执行器的状态应该设置为off.
那看起来更像是:
[(?actuator rdf:type :actuator)
(?actuator :hasLocation ?home)
noValue(?user,:hasLocation,?home)
->
(?actuator :state "OFF")]
这将开始在图表中显示结果,例如
[:central_ac :state "OFF"]
[:room_lighting :state "OFF"]
[:tv :state "OFF"]
请注意,我从 "OFF" 中删除了 ^^xsd:boolean 数据类型,因为 "OFF" 不是布尔数据类型的有效词法形式。您可以改用 "true" 或 "false"。