2010-12-21 13 views
0

Ich bin neugierig auf SubClassOf und EquivalentClass in einer Klasse Beschreibung mischen, und wie ein Reasoner würde sich verhalten.Mischen von EquivalentClass und SubClass in OWL

Wenn ich sowohl eine EquivalentClass- als auch eine SubClassOf-Assertion für dieselbe Klasse besitze, müssen sowohl die EquivalentClass- als auch die SubClassOf-Bedingungen erfüllt sein, damit eine Person in diese Klasse klassifiziert wird oder nur die EquivalentClass?

Oder ist das eine schlechte Praxis?

Zum Beispiel (Erklärungen weggelassen):

ObjectPropertyRange(:format :Bar) 
ObjectPropertyRange(:format owl:Thing) 
EquivalentClass(:Foo ObjectSomeValuesFrom(:format :Bar)) 
SubClassOf(:Foo :Sna) 

ich unten, dass im Fall sicherstellen will, :x als :Foo eingestuft, weil sowohl die equivalentClass und subClassOf Behauptungen erfüllt sind:

ClassAssertion(:x :Sna) 
ObjectPropertyAssertion(:format :x :someBar) 

Aber :y ist nicht, weil das SubClassOf nicht erfüllt ist:

Danke,

Jonathan

Antwort

2

verstehe ich nicht ganz Ihre Frage, aber ich werde versuchen, einige Dinge zu klären. Zunächst einmal scheinen die folgenden Axiome für Ihre Frage irrelevant (und der zweite ist ohnehin überflüssig, weil owl:Thing irgendeine Eigenschaft Bereich ist):

ObjectPropertyRange(:format :Bar) 
ObjectPropertyRange(:format owl:Thing) 

Die andere Sache ist, dass das EquivalentClasses -axioms kann als syntaktischen Zucker zu sehen für SubClassOf -axiome, z

EquivalentClasses(C1 C2) 

ist logisch äquivalent zu

SubClassOf(C1 C2) 
SubClassOf(C2 C1) 

So können Sie Ihre EquivalentClasses als umschreiben:

SubClassOf(ObjectSomeValuesFrom(:format :Bar) :Foo) 
SubClassOf(:Foo ObjectSomeValuesFrom(:format :Bar)) 

Dies würde Verständnis vielleicht vereinfachen, was Folgerungen Ihre Ontologie macht.

Nun, wenn Sie sagen:

ClassAssertion(:x :Sna) 
ObjectPropertyAssertion(:format :x :someBar) 

Ich gehe davon aus, dass Sie sagen wollen:

ClassAssertion(:x :Sna) 
ClassAssertion(:someBar :Bar) 
ObjectPropertyAssertion(:format :x :someBar) 

Dies hat zur Folge, dass :x sowohl :Foo und :Sna, was sicherlich möglich ist, weil :Foo ist eine Unterklasse von :Sna.

Wenn Sie sagen,

ClassAssertion(:y :NotASna) 
ObjectPropertyAssertion(:format :y :someOtherBar) 

Ich gehe davon aus, dass Sie nach:

ClassAssertion(:y :NotASna) 
ClassAssertion(:someOtherBar :Bar) 
DisjointClasses(:NotASna :Sna) 
ObjectPropertyAssertion(:format :y :someOtherBar) 

Dies ist eine logische Inkonsistenz, da :y zur Folge ist ein :Foo zu sein (die eine Unterklasse von :Sna ist), aber zur gleichen Zeit :y wird behauptet, in einer Klasse zu sein, die von :Sna disjunkt ist.

Beachten Sie auch, dass wir nicht das Wissen genutzt haben, dass

SubClassOf(:Foo ObjectSomeValuesFrom(:format :Bar)) 

, die aus dem EquivalentClasses -axiom gefolgt.