2016-05-14 4 views
2

J'ai quelques individus A, B, C, D, E, et deux propriétés P1, P2.Exclure les individus qui sont liés par des propriétés inverses spécifiques

A P1 B 
C P1 D 
E P2 C 

Je veux construire une classe qui capture seulement une mais pas C. Je me suis donc une classe comme,

  1. myClass EquivalentTo: (P1 une owl: Thing) et (P1 seulement owl: chose)
  2. myClass EquivalentTo: (P1 une owl: Thing) et (P2 pas inverse une owl: Thing)

mais toutes ces tentatives ont échoué. Comment puis-je différencier les individus A et C?

Répondre

1

myClass EquivalentTo: (P1 une owl: Thing) et (P1 seulement owl: Thing)

échoue parce que l'expression de la classe est vraiment équivalent à P1 quelque chose. Puisque chaque individu est une instance de Thing, le côté droit de l'intersection n'ajoute vraiment rien.

myClass EquivalentTo: (P1 une owl: Thing) et (P2 pas inverse une owl: Thing)

Ceci est en fait correct pour la description que vous avez donné. Vous voulez des individus qui ont une certaine valeur pour P1 (bon), et qui sont pas la valeur P2 d'un autre individu. C'est la façon de décrire cela.

Je pense que la question que vous éprouvez est que si tout votre ensemble de données ne contiennent des triplets de la forme

        x P2 A

il n'y a rien dans l'ontologie qui dit qu'une telle chose est impossible. Donc, vous ne pouvez pas être sûr que A a effectivement le type (pas inverse P2 quelque chose). Ce phénomène est connu sous le nom d'hypothèse du monde ouvert (OWA). Si vous recherchez cela, vous trouverez d'autres questions sur Stack Overflow à propos d'OWA dans OWL.Voir, par exemple:

Dans ce cas, si vous voulez dire que A est pas la valeur P2 d'une autre personne, vous auriez probablement avoir à le faire manuellement, en ajoutant un type de a comme:

        inverse P2 ne owl: Nothing

Une fois que vous faites cela, vous obtiendrez les résultats que vous voulez:

the extra axiom

protege screenshot