0

自宅にユーザーがいないときにオフになっているすべてのアクチュエーターを抽出する方法。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]
.
.  
4

1 に答える 1

1

ルール

[rule1: noValue(:users :hasLocation :home) -> 
        (:actuators :hasLocation :home) 
        (:actuators :state "OFF"^^xsd:boolean)] 

期待どおりの動作をしませんし、タイプミスもあるかもしれません。あなたのオントロジー (将来的には、TTL シリアライゼーションや OWL/FSS など、実際にコピー アンド ペーストできるコードを提供してください) では、usersではなくuserというクラスがありますが、ルールではユーザーについて話します。 . しかし、それが修正されたとしても、変数を使用する必要がある場所で IRI を使用しているため、必要な結果は得られません。あなたのルールはそれを言っています

  • トリプル:users :hasLocation :homeグラフに表示されない場合、
  • 次に、トリプル:actuators :hasLocation :homeおよび:actuators :state "OFF"^^xsd:booleanをグラフに追加する必要があります。

次のようなルールが必要だと思います。

  • ? xがアクチュエータであり、ホームの場所があり、同じホームを場所として持つユーザーがいない場合、
  • 次に、アクチュエータの状態を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"]

^^xsd:booleanデータ型を"OFF"から削除したことに注意してください。"OFF"は boolean データ型の有効な字句形式ではないためです。代わりに「true」または「false」を使用できます。

于 2015-01-21T15:42:00.930 に答える