2016-06-24 5 views
0

Protege and SWRL 탭을 사용하면 아래에 언급 된 온톨로지가 있습니다. 클래스 Test과 클래스 Shadow으로 구성되며 Test에는 세 개의 개인 t1, t2, t3이 있습니다.swrlx : makeOWLThing은 하나의 개체 만 생성합니다.

  1. 하나의 개별 Shadow의라는 fred : 나는 Test의 기존의 각 개인을 위해 Shadow 클래스의 개인을 만드는 SWRL 규칙을 정의하려고했다 규칙은

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

    질문입니다 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

펠렛! 나는 Pellet을 protege 5와 함께 사용하고 있으며 그 규칙은 SWRL 탭에 쓰여질 수 있습니다. –

0

는, 그 확장의 의미를 설명 an article에 연결 : 내가 통제 된 방식으로 새로운 개인을 만들 수있는 기능을 제공 구현 된 최초의 내장 기능의

하나. [2]에서 자세한 설명이 있지만 기본적으로 swrlx라는 기본 제공 기능이 있습니다. makeOWLThing은 새 개인을 만들고 그 개인을 첫 번째 언 바운드 인수에 바인딩합니다. 나머지 인수의 고유 한 패턴마다 새 개인이 작성됩니다. 이제

질문에 기록 된대로의이 규칙을 살펴 보자 :

테스트^swrlx (X?) : (? 새, 배) - (? 신규) makeOWLThing> 그림자

원자가 왼쪽에서 오른쪽으로 처리되면 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가 언 바운드되어 새로운 개인을 한 명만 얻을 수 있습니다.

+0

원자의 순서를 바꾸어서 시도해 보았습니다.'Body (ClassAtom (: Test 변수 (: x)) BuiltInAtom ( Variable (: new) Variable (: x))) Head (ClassAtom (: Shadow Variable (: new))))' 그리고 같은 결과, 나는 여전히 하나의'fred' indidvidual을 얻습니다! –