2017-02-08 3 views
0

Nehmen wir an, wir haben die owl:Class Person und die owl:Class Fruit. Außerdem haben wir die owl:ObjectProperty loves (Domain: Person, Range: Fruit). Es gibt mehrere Instanzen beider Klassen.OWL: Ist es möglich, die Beziehungen zwischen einem Individuum und einer Reihe von Individuen vordefinieren?

Ist es möglich, in OWL auszudrücken, dass eine bestimmte Instanz der Klasse Person alle Früchte außer Äpfeln mag außer Apfel)?

Auf einer abstrakteren Ebene: Ist es möglich, Beziehungen zwischen einer Instanz und einer Reihe von Instanzen zu definieren (entweder auf Klassenebene oder für die Instanz selbst)?

+1

Sie können feststellen, [roli fication] (http://stackoverflow.com/questions/16989042/owl-2-rolification) hilfreich. –

Antwort

1

Die Lösung für Ihr Problem hängt davon ab, ob "Apfel" eine Instanz von "Frucht" oder "Apfel" eine Unterklasse von "Frucht" ist. Es wäre sinnvoller zu sagen, dass "Apfel" eine Klasse ist, weil es viele Beispiele für Äpfel gibt. Aber da Ignazio eine Lösung präsentierte, bei der "Apfel" eine Instanz ist, und dass seine Antwort akzeptiert wurde, werde ich mit der Annahme beginnen, dass "Apfel" eine Instanz ist. Dann können Sie erreichen, was Sie wollen mit:

:Fruit a owl:Class . 
:apple a :Fruit . 
:Person a owl:Class . 
:bob a :Person . 
:loves a owl:ObjectProperty . 
[ a owl:Class; 
    owl:intersectionOf (
    :Fruit 
    [ a owl:Class; owl:complementOf [a owl:Class; owl:oneOf (:apple)] ] 
) 
] rdfs:subClassOf [ 
    a owl:Restriction; 
    owl:onProperty [ owl:inverseOf :loves ]; 
    owl:hasValue :bob 
] . 

Dies sagt, dass alles, was ein :Fruit ist und nicht :apple notwendig durch :bob geliebt wird (:bob Annahme, daß die Kennung der Person, die keine Äpfel mag Hinweis. dass dies unterscheidet sich von Ignazio-Lösung, die nicht genau modellieren, was der OP will

Nun, wenn es eine Klasse von Äpfeln ist, dann wäre die Lösung.

:Fruit a owl:Class . 
:Apple rdfs:subClassOf :Fruit . 
:Person a owl:Class . 
:bob a :Person . 
:loves a owl:ObjectProperty . 
[ a owl:Class; 
    owl:intersectionOf (
    :Fruit 
    [ a owl:Class; owl:complementOf :Apple ] 
) 
] rdfs:subClassOf [ 
    a owl:Restriction; 
    owl:onProperty [ owl:inverseOf :loves ]; 
    owl:hasValue :bob 
] . 
+0

Meine ursprüngliche Absicht war, Apfel als eine Instanz von Fruit zu sehen. Aber ich kann sehen, dass es sinnvoll ist anzunehmen, dass es eine Klasse ist. Danke für die Erklärung beider Wege! – phil155

+0

Ich kämpfe, um zu tun, was Sie in Protégé vorgeschlagen haben (angenommen, dass Apfel eine Instanz von Fruit ist): Ich fügte dem Individuum den Typ hinzu: "liebt nur (Obst und nicht {Apfel})". Obwohl es mehrere Beispiele von Früchten gibt und sie alle unterschiedliche Individuen sind, leitet der Reasoner keine einzige Liebesbeziehung ab. Selbst der Typ: "liebt nur Frucht" ergibt keinen Rückschluss. Irgendwelche Ideen, was mir hier fehlt? Deine Hilfe wird hoch geschätzt! :) – phil155

+1

Wenn Sie Protégé 5 verwenden, wählen Sie die Klasse 'Fruit'. Im Bereich "Beschreibung" muss es eine "Allgemeine Klassenaxiome" geben. Klicken Sie auf das eingekreiste + und fügen Sie den folgenden Text in der neu geöffneten Box hinzu: 'Fruit and (not ({Apfel})) SubClassOf inverse (liebt) Wert bob'. Dann drücke OK. –

2

OneOf Einschränkungen werden für das verwendet, was Sie beschreiben. Um eine Instanz von einer Klasse auszuschließen (für den ersten Teil Ihrer Frage), können Sie die Obst-Klasse und die Negation von OneOf (Apple) schneiden und damit Ihren Apfel-Hasser mit einer Bereichszusicherung für Ihre Liebes-Eigenschaft ausweisen .

Verwandte Themen