Hallo zusammen, stelle euch hier mal ein paar Lösungen zu den OWL Aufgaben aus Blatt 3 ein.
Übung 4
a) Modellieren Sie die folgenden Sätze in OWL DL indem Sie Ausschnitte aus entsprechenden
OWL-Dokumenten in RDF/XML oder Turtle-Syntax angeben:
Die Klasse Gemüse ist eine Unterklasse von PizzaBelag.
Gemüse ⊑ PizzaBelag
ex:Gemüse rdfs:subClassOf ex:Pizza .
<owl:Class rdf:ID="Gemüse">
<rdfs:subClassOf rdf:resource="Pizza" />
</owl:Class>
Die Klasse PizzaBelag hat keine gemeinsamen Elemente mit der Klasse Pizza.
PizzaBelag ⊓ Pizza ≡ ⊥
ex:PizzaBelag owl:disjointWith ex:Pizza .
<owl:Class rdf:ID="PizzaBelag">
<owl:disjointWith rdf:resource="Pizza" />
</owl:Class>
Das Individuum Aubergine ist ein Element der Klasse Gemüse.
Gemüse( Aubergine )
Aubergine a Gemüse .
<Gemüse rdf:ID="Aubergine" />
Die abstrakte Rolle hatBelag besteht ausschließlich zwischen Elementen der Klasse Pizza
und der Klasse PizzaBelag.
∃hatBelag.⊤ ⊑ Pizza
⊤ ⊑ ∀hatBelag.PizzaBelag
hatBelag a owl:ObjectProperty;
rdfs:domain Pizza;
rdfs:range PizzaBelag.
<owl:ObjectProperty rdf:ID="hatBelag">
<rdfs:domain rdf:resource="Pizza" />
<rdfs:range rdf:resource="PizzaBelag" />
</owl:ObjectProperty>
Pizzen haben immer mindestens zwei Beläge.
Pizza ⊑ ≥2 hatBelag
Pizza a owl:Class;
rdfs:subClassOf _:bNode1.
_:bNode1 a owl:Restriction;
owl:onProperty hatBelag;
owl:minCardinality "2"^^xsd:nonNegativeInteger.
ODER einfacher:
Pizza a owl:Class;
rdfs:subClassOf [ a owl:Restriction;
owl:onProperty hatBelag;
owl:minCardinality "2"^^xsd:nonNegativeInteger ] .
<owl:Class rdf:ID="Pizza">
<rdfs:subClassOf>
<owl:Restriction>
<owl:onProperty rdf:resource="hatBelag" />
<owl:minCardinality rdf:datatype="&xsd;nonNegativeInteger">
2
</owl:minCardinality>
</owl:Restriction>
</rdfs:subClassOf>
</owl:Class>
Jede Pizza der Klasse PizzaMargarita hat Tomate als Belag.
PizzaMargarita ⊑ ∃hatBelag.Tomate
PizzaMargarita a owl:Class
rdfs:subClassOf [ a owl:Restriction;
owl:onProperty hatBelag;
owl:someValuesFrom Tomate ] .
<owl:Class rdf:ID="PizzaMargarita">
<rdfs:subClassOf>
<owl:Restriction>
<owl:onProperty rdf:resource="hatBelag">
<owl:someValuesFrom rdf:resource="Tomate">
</owl:Restriction>
</rdfs:subClassOf>
</owl:Class>
Die Klasse Vegetarische Pizza besteht aus den Elementen, die sowohl in der Klasse
PizzaOhneFleisch als auch in der Klasse PizzaOhneFisch sind.
VegetarianPizza ⊑ PizzaOhneFleisch ⊓ PizzaOhneFisch
VegetarianPizza a owl:Class
owl:intersectionOf ( PizzaOhneFleisch
PizzaOhneFisch ).
<owl:Class rdf:ID="VegetarianPizza">
<owl:intersectionOf rdf:parseType="Collection">
<owl:Class rdf:about="#PizzaOhneFleisch" />
<owl:Class rdf:about="#PizzaOhneFisch" />
</owl:intersectionOf>
</owl:Class>
Keine Pizza der Klasse PizzaMargarita hat Belag aus der Klasse Fleisch.
PizzaMargarita ⊑ ¬(∃hatBelag.Fleisch)
PizzaMargarita a owl:Class;
rdfs:subClassOf [ a owl:Class
owl:complementOf [ a owl:Restriction;
owl:onProperty hatBelag;
owl:someValuesFrom Fleisch ] . ] .
<owl:Class rdf:ID=PizzaMargarita>
<owl:complementOf>
<owl:Restriction>
<owl:onProperty rdf:resource="hatBelag" />
<owl:someValuesFrom rdf:resource="Fleisch" />
</owl:Restriction>
</owl:complementOf>
</owl:Class>
b) Entscheiden Sie, ob die folgenden Aussagen im Zusammenhang mit der Pizza-Ontologie aus a) sinnvoll wären:
- Die Rolle hatZutat ist transitiv.
Ist sinnvoll. Damit wird die Zutat einer Zutat auch eine Zutat der Pizza usw.
- Die Rolle hatBelag ist funktional.
Nicht sinnvoll. Sonst hätte jede Pizza nur genau einen einzigen Belag.
- Die Rolle hatBelag ist invers funktional.
Ist sinnvoll. Ein ganz konkreter Belag (etwa genau diese eine Scheibe Salami ) darf damit jeweils nur auf einer Pizza auftreten.
Übung 5
a) Es soll das Konzept vegetarische Pizza definiert werden. Welche der folgenden Definitionen ist dafür angemessen? Geben Sie dazu jeweils eine natürlichsprachliche Beschreibung der logischen Formeln an.
(a) VegetarischePizza ≡ Pizza ⊓ ¬∃hatZutat.(Fleisch ⊓ Fisch)
Eine VegetarischePizza ist das gleiche wie eine Pizza, die keine Zutat enthält, die Fisch und gleichzeitig Fleisch ist
(b) VegetarischePizza ≡ Pizza ⊓ ∀hatBelag.(¬Fleisch ⊔ ¬Fisch)
Eine VegetarischePizza ist das gleiche wie eine Pizza, bei der alle Beläge entweder nicht Fleisch oder nicht Fisch sind.
(c) VegetarischePizza ≡ Pizza ⊓ ¬∃ hatBelag.Fleisch ⊓ ¬∃ hatBelag.Fisch
Eine VegetarischePizza ist das gleiche wie eine Pizza, die keinen Fleischbelag und keinen Fischbelag hat.
(d) VegetarischePizza ≡ Pizza ⊓ ∃ hatBelag.¬Fleisch ⊓ ∃ hatBelag.¬Fisch
Eine VegetarischePizza ist das gleiche wie eine Pizza, die einen Belag hat, der nicht Fleisch ist und einen Belag hat, der nicht Fisch ist.
(e) VegetarischePizza ≡ Pizza ⊓ ∀hatZutat.(¬Fleisch ⊓ ¬Fisch)
Eine VegetarischePizza ist das gleiche wie eine Pizza, bei der bei jeder Zutat gilt, dass diese weder Fleisch noch Fisch ist.
– Nur die Definitionen (c) und (e) passen.
b) Gegeben sei folgende Ontologie in DL-Syntax:
hatBelag ⊑ hatZutat ∃hatBelag.⊤ ⊑ Pizza ⊤ ⊑ ∀hatBelag.PizzaBelag
Gemüse ⊓ Käse ⊑ ⊥ Käse ⊓ Fleisch ⊑ ⊥
Gemüse ⊓ Fleisch ⊑ ⊥ Käse ⊓ Fisch ⊑ ⊥
Gemüse ⊓ Fisch ⊑ ⊥ Fleisch ⊓ Fisch ⊑ ⊥
Betrachten Sie nun zusätzlich die folgenden Klassendefinitionen:
KäsePizza ≡ Pizza ⊓ ∃hatBelag.Käse
PizzaSpinat ≡ ∃hatBelag.Spinat ⊓ ∃hatBelag.Käse ⊓
∀hatBelag.(Spinat ⊔ Käse)
PizzaCarnivorus ≡ Pizza ⊓ ∀hatBelag.(Fleisch ⊓ Fisch)
LeerePizza ≡ Pizza ⊓ ¬∃hatBelag.⊤
(1) Welche der oben aufgeführten Klassen von Pizzas würde durch einen DL-Reasoner als
Unterklasse von VegetarischePizza (gemäß einer korrekten Definition aus a ) erkannt?
Begründen Sie jeweils Ihre Entscheidung.
- KäsePizza → NEIN, da nicht ausschließlich Käse als Belag
- PizzaSpinat → NEIN, da die Ontologie nicht aussagt, dass Spinat ein Gemüse ist. Damit könnte Spinat z.B. auch ein Fleisch oder Fisch sein.
- PizzaCarnivorus → JA, Fleisch und Fisch haben keine gemeinsamen Elemente
- LeerePizza → JA, da sie keinen Belag hat und somit natürlich auch keinen Fleisch/Fischhaltigen
(2) Die Klassifikation unter (1) zeigt, dass einige der Pizzaklassen nicht das gewünschte
Konzept modellieren. Wie könnte man ihre Definition korrigieren?
- KäsePizza → Man könnte noch anfügen „⊓ ∀hatBelag.Käse“ damit wäre nur Käse auf dieser Pizza zugelassen
- PizzaSpinat → Erweiterung Ontologie um „Spinat ⊑ Gemüse“
- PizzaCarnivorus → Pizza ⊓ ∀hatBelag.(Fleisch ⊓ Fisch) ⊓ ∃hatBelag.⊤
(3) Wie würde sich das unter (1) ermittelte Ergebnis verändern, wenn man bei der Definition
von VegetarischePizza anstelle von ≡ nur ⊑ verwenden würde?
Verändertes Axiom:
VegetarischePizza ⊑ Pizza ⊓ ∀hatZutat.(¬Fleisch ⊓ ¬Fisch)
Es gilt weiterhin (mit obigen Korrekturen):
KäsePizza ⊑ Pizza ⊓ ∀hatZutat.(¬Fleisch ⊓ ¬Fisch)
...
aber daraus folgt nicht
KäsePizza ⊑ VegetarischePizza
denn dazu würde man das folgende Axiom benötigen:
Pizza ⊓ ∀hatZutat.(¬Fleisch ⊓ ¬Fisch) ⊑ VegetarischePizza
Es würde also keine Klasse mehr als Unterklasse von VegetarischePizza klassifiziert werden.
Übung 6
Gegeben seien die Individuennamen bonny und clyde, die Klassennamen Ehrlich, Klug, Verbrechen und Mensch sowie die Rollennamen verübt, verheiratetMit, und verdächtigt.
Welche der folgenden Aussagen können in OWL 1 DL gemacht werden, welche in OWL 2 DL und
welche überhaupt nicht? Geben Sie gegebenenfalls die entsprechenden Axiome an.
1. Jeder, der ehrlich ist und ein Verbrechen verübt hat, zeigt sich selbst an.
Ehrlich ⊓∃verübt.Verbrechen ⊑∃zeigtAn.Self
Self ist in OWL 1 noch nicht vorhanden
2. Wer klug und ehrlich ist, verübt kein Verbrechen.
Klug ⊓ Ehrlich ⊑ ¬∃verübt.Verbrechen
Kann mit OWL 1 modelliert werden
3. Bonnie zeigt Clyde nicht an.
¬zeigtAn( bonny, clyde )
Negation von Rollen in OWL 1 noch nicht vorhanden
4. Niemand zeigt einen Menschen an, mit dem gemeinsam er ein Verbrechen verübt hat.
zeigtAn.(∃verübt.(Verbrechen ⊓ ∃verübt¯)) ⊑ ⊥
Das geht wohl so nicht. Wir kommen nicht mehr an denjenigen heran, mit dem das Verbrechen verübt wurde.
5. Clyde hat mindestens 10 Verbrechen verübt.
≥10(verübt.Verbrechen)(clyde)
Wegen qualifizierten Kardinalitäten in OWL 1 nicht möglich
6. Bonnie und Clyde haben mindestens ein Verbrechen gemeinsam verübt.
(∃verübt.(Verbrechen ⊓ ∃verübt¯.{clyde}))(bonnie)
Kann in OWL DL ausgedrückt werden
7. Wer gemeinsam mit seinem Ehepartner ein Verbrechen verübt hat, der ist nicht ehrlich.
¬Ehrlich ⊑ ∃verübt.(Verbrechen ⊓ ∃verübt¯.{∃verheiratetMit.?} )
Hmm, scheint so nicht zu funktionieren – Wie könnte man den Ehepartner ausdrücken – Self geht hier nicht denn das würde nur ausdrücken, dass jemand mit sich selbst verheiratet ist.
8. Jeder, der einen Verdächtigen kennt, ist selbst verdächtig.
verdächtig ° kennt¯ ⊑ verdächtig
Rollenverknüpfung gab es in OWL 1 noch nicht