2016-06-24 7 views
0

ProtegeとSWRLタブを使用して、私は以下に述べるオントロジーを持っています。クラスTestとクラスShadowで構成されています。Testには3個の個t1, t2, t3があります。私はルールがswrlx:makeOWLThingは1つの個体しか作成していません

Test(?x)^swrlx:makeOWLThing(?new, ?x) -> Shadow(?new) 

質問で、Testの既存の各個人のShadowクラスの個人を作成SWRLルールを定義しようとしていた:指定Shadow

  1. 唯一の個人、fred 3つではなく(t1, t2, t3に対応)作成されます。
  2. 結果の個人の名前付けを制御する方法は、常にfredとなりますか?

    Prefix(:=<http://www.semanticweb.org/hilal/ontologies/2016/5/untitled- ontology-58#>) 
    Prefix(owl:=<http://www.w3.org/2002/07/owl#>) 
    Prefix(rdf:=<http://www.w3.org/1999/02/22-rdf-syntax-ns#>) 
    Prefix(xml:=<http://www.w3.org/XML/1998/namespace>) 
    Prefix(xsd:=<http://www.w3.org/2001/XMLSchema#>) 
    Prefix(rdfs:=<http://www.w3.org/2000/01/rdf-schema#>)     
    Ontology(<http://www.semanticweb.org/hilal/ontologies/2016/5/untitled- ontology-58> 
    
    Declaration(Class(:Shadow)) 
    Declaration(Class(:Test)) 
    Declaration(NamedIndividual(:t1)) 
    Declaration(NamedIndividual(:t2)) 
    Declaration(NamedIndividual(:t3)) 
    Declaration(AnnotationProperty(<http://swrl.stanford.edu/ontologies/3.3/swrla.owl#isRuleEnabled>)) 
    
    
    
    ############################ 
    # Named Individuals 
    ############################ 
    
    # Individual: :t1 (:t1) 
    
    ClassAssertion(:Test :t1) 
    
    # Individual: :t2 (:t2) 
    
    ClassAssertion(:Test :t2) 
    
    # Individual: :t3 (:t3) 
    
    ClassAssertion(:Test :t3) 
    
    
    DLSafeRule(Annotation(<http://swrl.stanford.edu/ontologies/3.3/swrla.owl#isRuleEnabled> "true"^^xsd:boolean) Annotation(rdfs:comment ""^^xsd:string) Annotation(rdfs:label "S1"^^xsd:string) Body(BuiltInAtom(<http://swrl.stanford.edu/ontologies/built-ins/3.3/swrlx.owl#makeOWLThing> Variable(<new>) Variable(<x>)) ClassAtom(:Test Variable(<x>)))Head(ClassAtom(:Shadow Variable(<new>)))) 
    ) 
    

答えて

0

SWRLルールは、私の知る限りDL安全な条件を理解し、新しい個人を作成することはできません。コメントで

+0

既に、組み込み機能を使用しました。このリンクのswrlx:makeOWLThingを確認してください。http://wiki.ruleml.org/index.php/SWRL –

+0

これをサポートする推論器はどれですか? – Ignazio

+0

ペレット!私はprotege 5でPelletを使用しています。これらのルールはSWRLタブで記述することができます。 –

0

は、あなたはその拡張子の意味を説明an articleにリンクされている:私は制御された方法で、新たな個人を作成する機能を提供実装最初の組み込み関数の

一つ。 [2]に詳しい説明がありますが、基本的にswrlx:builtOWLThingというビルトインは新しい個体を作成し、それを最初の結合されていない引数にバインドします。残りの引数のユニークなパターンごとに新しい個体が作成されます。今

、質問に書かれた通りのあなたのルールを見てみましょう:

テスト^ swrlx:makeOWLThing - >シャドウ(X?)(新しい、X?)(新しいです?)

原子が左から右に処理される場合、makeOWLThingが発生したときに?xをバインドする必要がありますが、?newはそうではありません。これは、変数newにバインドされた新しい個人を取得する必要があることを意味し、?xの各値に対して、新しい値newを取得する必要があります。それはあなたが望むように聞こえるものです。しかし、あなたが投稿コードで、私はこれを参照してください。

DLSafeRule(
    Annotation(<http://swrl.stanford.edu/ontologies/3.3/swrla.owl#isRuleEnabled> "true"^^xsd:boolean) 
    Annotation(rdfs:comment ""^^xsd:string) 
    Annotation(rdfs:label "S1"^^xsd:string) 

    Body(
    BuiltInAtom(<http://swrl.stanford.edu/ontologies/built-ins/3.3/swrlx.owl#makeOWLThing> 
     Variable(<new>) 
     Variable(<x>)) 
    ClassAtom(:Test Variable(<x>))) 

    Head(
    ClassAtom(:Shadow Variable(<new>)))) 
) 

を私は確かではないんだけど、それは同様に左から右に処理されます場合は、makeOWLThing(新しい、X?)は最初表示されますの場合、新しい個人が作成されると?xはアンバインドされるため、新しい個人を1つだけ取得できます。

+0

私は原子の順序を入れ替えてみました: 'Body(ClassAtom(:Test変数(:x))BuiltInAtom(

関連する問題