Quelqu'un peut m'expliquer avec un exemple la différence entre une règle SWRL et DL-Safe rules SWRL ? J'arrive pas à saisir au juste la différence entre les deux.
Quelqu'un peut m'expliquer avec un exemple la différence entre une règle SWRL et DL-Safe rules SWRL ? J'arrive pas à saisir au juste la différence entre les deux.
Supposons qu'on ait une ontologie qui indique (syntaxe Turtle) :
La première partie indique qu'un frère de Joe (:BrotherOfJoe) a nécessairement un frère qui est Joe. La seconde indique que Toto a un parent qui est un frère de Joe. On voudrait en conclure que Joe est l'oncle de Toto. On pourrait écrire la règle SWRL suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 :BrotherOfJoe a owl:Class; rdfs:subClassOf [ a owl:Restriction; owl:onProperty :hasBrother; owl:hasValue :joe ] . :toto a [ a owl:Restriction; owl:onProperty :hasParent; owl:someValuesFrom :BrotherOfJoe ] . :joe a :Person .
Si la règle est une règle SWRL normale, on obtient bien la conclusion voulu. Si en revanche on interprète cette règle comme une règle DL-safe, on ne peut l'appliquer que si l'on peut remplacer les variables ?x, ?y et ?z par une instance nommée. Or, l'ontologie ne dit pas quelle personne joue le rôle de ?y ici. En fait, une règle DL-safe fonctionne comme si on avait une classe supplémentaire :Nom dont les instances sont tous les individus nommés. La règle DL-safe est équivalent à une règle SWRL normale comme suit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part :hasParent(?x,?y), :hasBrother(?y,?z) -> :hasUncle(?x,?z)
Code : Sélectionner tout - Visualiser dans une fenêtre à part :hasParent(?x,?y), :hasBrother(?y,?z), :Nom(?x), :Nom(?y), :Nom(?z) -> :hasUncle(?x,?z)
7susd bl'ham owsql wuul pô!
sachant que Nom est un concept qui doit être rajouté à l'ontologie, si non ca va générer une erreur lors de l'interprétation de la règle, n'est ce pas ??
Autre question s'il vous plait, c'est quoi l'atout principal de l'utilisation des règles DL-Safe par rapport aux règles SWRL. Si c'est un choix, je peux utiliser dans ce cas les règles SWRL tout court..
Merci bien pour votre aide
selon ce que j'ai compris, la règle suivante est une règle Dl-safe vu qu'elle attribue des rôles aux différents individus :
pere(rami) ∧ enfant(marwa) ∧ soeur(jamila) ∧ est_pere_de(rami, marwa) ∧ est_soeur_de(jamila, rami) → est_tante_de(jamila, marwa)
sachant bien sure que pere, enfant et soeur ce sont des concepts défini au préalable.
Ca dépend. Si on veut s'assurer qu'on a bien des règles DL-safe, on peut utiliser un concept auxiliaire (comme Nom par exemple) qui devra contenir la totalité des instances nommées de la base de connaissance. Il faut que Nom ne soit relié à aucun autre concept ou terme.sachant que Nom est un concept qui doit être rajouté à l'ontologie, si non ca va générer une erreur lors de l'interprétation de la règle, n'est ce pas ??
Mais certains raisonneurs n'ont pas besoin de cela. Ils appliquent les règles uniquement aux instances nommées sans qu'on leur dise, comme s'il y avait implicitement ce concept Nom dans toutes les règles.
Les règles DL-safe, ajoutées aux ontologies OWL DL, forment une logique décidable, de complexité à peu près équivalente à OWL DL. Les règles SWRL en général sont indécidables.Autre question s'il vous plait, c'est quoi l'atout principal de l'utilisation des règles DL-Safe par rapport aux règles SWRL.
La règle donnée en exemple est DL-safe parce qu'elle ne contient pas de variable (à moins que rami, marwa et jamila soient des variables ?). En revanche, la règle :selon ce que j'ai compris, la règle suivante est une règle Dl-safe vu qu'elle attribue des rôles aux différents individus :
pere(rami) ∧ enfant(marwa) ∧ soeur(jamila) ∧ est_pere_de(rami, marwa) ∧ est_soeur_de(jamila, rami) → est_tante_de(jamila, marwa)
sachant bien sure que pere, enfant et soeur ce sont des concepts défini au préalable.
n'est pas DL-safe puisqu'on n'indique pas que les variables ?r, ?m et ?j doivent correspondre à des instances nommées.
Code : Sélectionner tout - Visualiser dans une fenêtre à part pere(?r), enfant(?m), soeur(?j), est_pere_de(?r, ?m), est_soeur_de(?j, ?r) -> est_tante_de(?j, ?m)
7susd bl'ham owsql wuul pô!
Merci beaucoup, mais c'est quoi au juste la différence entre des règles décidables et des règles indécidables ?
En réalité, ce ne sont pas les règles qui sont décidables ou non, c'est le langage qui permet de les écrire qui est indécidable.
On dit qu'un langage est décidable s'il est possible de faire un programme qui permet de trouver chaque déduction possible en un temps fini. Lorsque c'est indécidable, on ne peut pas trouver de programme qui fait ça. Il y a donc, quel que soit le raisonneur qu'on utilise, des cas où le raisonnement sera soit bloqué dans une procédure infiniment longue, soit où le raisonnement donne une conclusion fausse, ou encore la fin de la procédure sera déclenché arbitrairement en indiquant "je ne sais pas".
Pour les règles DL-safe, c'est logique que l'on puisse faire un programme qui termine toujours de façon correcte. Puisque l'on n'applique les règles qu'aux instances nommées, et qu'il ne peut y avoir qu'un nombre fini d'instances nommées dans la base de connaissance, on peut donc tester toutes les possibilités avec ces instances. Par exemple, si ma base ne contient que les instances "rami", "marwa" et "jamila", je peux vérifier si rami est le père de marwa, puis si rami est la soeur de marwa, puis si rami est l'enfant de marwa, et ainsi de suite. Je tomberai forcément à la fin sur une réponse correcte.
En revanche, si les règles ne sont pas "safe", il est possible qu'il existe des instances sans qu'elles soient explicitement mentionnées dans la base. C'est le cas que j'ai montré dans mon premier message, qui survient par exemple en OWL lorsqu'on a une restriction de type "someValuesFrom".
7susd bl'ham owsql wuul pô!
Merci, c'est trèèèèèèèèèèès gentil de ta part
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager