2016-05-07 9 views
2

Je veux concevoir une propriété d'objet qui est toujours liée uniquement entre le même niveau de classes. Par exemple,OWL Object Propriété domaine/gamme restrictions aux mêmes classes de niveau

enter image description here

Je veux limiter la propriété isCounterPartOf être un arc des nœuds frères qui appartiennent à la même classe supérieure, tels que

house isCounterPartOf cars 
bad isCounterPartOf good 
slow isCounterPartOf fast 

et la propriété ne doit pas créer un lien entre les classes de niveaux différents (ceux ayant des ancêtres), comme

cars isCounterPartOf bad 
cars isCounterPartOf object 
cars isCounterPartOf Entity 

Est-il possible de le faire avec la définition sur une propriété?

Répondre

3

En supposant que votre objectif est lorsque :isCounterPartOf relie deux individus, et un est membre de par ex. :Bad, puis l'autre doit être classé comme :Good, vous n'avez pas besoin de définir le domaine et la plage de :isCounterPartOf, juste que c'est owl:SymmetricProperty. Vous avez seulement besoin de définir vos classes, :Bad pour être équivalent à :isCounterPartOf some :Good et :Good pour être équivalent à :isCounterPartOf some :Bad, et pour toutes les "paires" de classes respectivement.

Ensuite, si:

:A :isCounterPartOf :B

:C :isCounterPartOf :B

:A a :Slow

:C a :Bad

alors :B seront classés comme :Fast et :Good.

Précision (basé sur les commentaires)

Dans l'exemple ci-dessus, 1. :isCouterPartOf est une propriété d'objet symetric:

:isCounterPartOf rdf:type owl:ObjectProperty , 
          owl:SymmetricProperty . 
  1. :Good , :Bad, :Slow et :Fast sont des classes OWL, pour lesquelles: (aucune idée pourquoi le formatage du code ne travail)

    : Mauvais rdf: type owl: Classe; owl: equivalentClass [rdf: type hibou: Restriction; owl: onPropriété: isCounterPartOf; hibou: someValuesFrom: Good ].

    : rapide rdf: type owl: Classe; owl: equivalentClass [rdf: type hibou: Restriction; hibou: onPropriété: isCounterPartOf; owl: someValuesFrom: Lent ].

    : Bon rdf: tapez owl: Class; owl: equivalentClass [rdf: type hibou: Restriction; hibou: onPropriété: isCounterPartOf; owl: someValuesFrom: Bad ].

    : lente rdf: hibou Type: classe; owl: equivalentClass [rdf: type hibou: Restriction; hibou: onPropriété: isCounterPartOf; owl: someValuesFrom: Rapide ].

  2. :A, :B et :C sont des particuliers, pour lesquels il est affirmé que: (encore une fois, aucune idée pourquoi la mise en forme de code ne fonctionne pas)

    : A rdf: hibou Type: NamedIndividual , : Lent;

    : isCounterPartOf: B.

    : B rdf: type owl: NomméIndividuel, Chouette: Chose.

    : C rdf: hibou Type: NamedIndividual, : Bad;
    : isCounterPartOf: B.

Sur la base de ces affirmations, lorsque vous exécutez le raisonneur, vous aurez la situation suivante:

:A rdf:type owl:NamedIndividual , 
      :Bad , #inferred 
      :Slow ; 

    :isCounterPartOf :B . 

:B rdf:type owl:NamedIndividual , 
      :Fast , #inferred 
      :Good , #inferred 
      owl:Thing ; 

    :isCounterPartOf :A , #inferred 
        :C . #inferred 

:C rdf:type owl:NamedIndividual , 
      :Bad , 
      :Slow ; #inferred 

    :isCounterPartOf :B . 
+0

Désolé, je suis un débutant dans la syntaxe de hibou. Je ne comprends pas ce que signifie ': A a: Slow'. Est-ce la syntaxe de Manchester? Y a-t-il des références auxquelles je pourrais me référer? –

+0

Il s'agit d'une notation Turtle, où 'a' signifie' rdf: type' et quand ':' est utilisé sans préfixe, c'est la façon habituelle de dire que la ressource est définie dans l'espace de noms de l'ontologie courante. Ainsi, dans le contexte fourni par votre question, ': A a: Slow' voulait dire" L'individu A, défini dans cette base de connaissances, est un membre de la classe Slow, défini dans cette base de connaissances ". Merci pour votre commentaire, je vais mettre à jour la réponse pour clarifier cela. –

+0

Merci beaucoup. Je suis impatient de voir votre mise à jour. Je ne pense pas avoir vraiment compris votre réponse. B est-il un individu ou une classe? –