2016-06-24 3 views
0

Используя вкладку «Протеж» и SWRL, у меня есть онтология, упомянутая ниже. Он состоит из класса Test и класса Shadow, где Test имеет три особей t1, t2, t3. Я пытался определить правило SWRL, что создает особь Shadow класса для каждого существующего индивида Test, правилоswrlx: makeOWLThing создает только одного человека

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

ВОПРОСЫ:

  1. только один индивидуум Shadow, названный fred создается вместо трех (соответствует 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 с протеже 5, и эти правила могут быть записаны на вкладке SWRL. –

0

В комментариях вы связаны с an article описания семантики этого расширения:

Одним из первых встроенных модулей я внедрено обеспечивших возможность создания новых лиц, контролируемым образом. В [2] есть подробное объяснение, но в основном встроенный вызов swrlx: makeOWLThing создает нового человека и связывает его с его первым несвязанным аргументом; для каждого уникального шаблона остальных аргументов создается новый индивид.

Теперь давайте взглянем на правиле, как написано в вопросе:

Test^swrlx (х?): (? Новый, х) - (? Новая) makeOWLThing> Тень

Если атомы обрабатываются слева направо, то? X должно быть связано при появлении makeOWLThing, но это не так. Это означает, что вы должны получить новых лиц, связанных с переменной? 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 Variable (: x)) BuiltInAtom ( Variable (: new) Variable (: x))) Head (ClassAtom (: Shadow Variable (: new)))) 'Однако были переключены две аксиомы SWRL в исходном правила SWRL. И тот же результат, я все равно получаю один 'fred' indidvidual! –