[DL] How does one handle multiple parents while still controlling disjointness?
Uli Sattler
sattler at cs.man.ac.uk
Thu Oct 15 11:24:21 CEST 2009
On 9 Oct 2009, at 19:58, William Fitzgerald wrote:
> Dear Experts,
>
> A modelling question based on your experience.
>
> What is normal practice when, for the most part you desire that two
> sibling classes and their associated subclasses be disjoint except
> for one or two subclasses that have both sibling classes as parents,
> in which case they are not disjoint!
>
> Consider two parent classes ClassA and ClassB.
> ClassA:
> ClassA1 subClassOf ClassA
> ClassA2 subClassOf ClassA
> ClassA3 subClassOf ClassA
> ClassAB subClassOf ClassA
>
> All subclasses of ClassA are disjoint
>
> ClassB:
> ClassB1 subclass of ClassB
> ClassB2 subclass of ClassB
> ClassAB subClassOf ClassB
>
> All subclasses of ClassB are disjoint
>
> There is a common class called ClassAB common to both ClassA and
> ClassB.
>
> Modelling Question:
> Because of the poly-hierarchy, ClassA and ClassB cannot be disjoint.
> No issue here.
>
> However, how does one prevent the possibility of instances of, for
> example, classA1 becoming instances of ClassB1 or ClassB in general?
>
> If the poly-hierarchy did not exist, then this is easily done by
> making ClassA and ClassB disjoint.
>
> What do DL knowledge engineers do in this case?
>
> Do you:
> 1) ignore/abstract away from the possibility of instances of one
> class being members of another? Thereby sticking to the above class
> hierarchy.
>
> 2) Manually assert cross-class disjointness.
In OWL 2, you could simply add one axiom
DisjointClasses(A1 A2 A3 B1 B2)
I agree that this becomes a bit cumbersome because it needs changing
when, say, you add a class B3. On the other hand, how should the
system know which subclasses are disjoint and which aren't...
> That is, along with stating that all subclasses of ClassA are
> disjoint, one now has to also say that ClassA1 isDisjointTo ClassB1
> or perhaps even ClassB (might be a shorter route) and so forth. My
> guess is that, its not feasible if there are hundreds of classes!
>
> 3) Define a new class on the same hierarchy level (sibling class) as
> ClassA and ClassB called ClassCommonAB. Then set ClassAB as a
> subclass of ClassCommonAB only and remove ClassAB from ClassA and
> ClassB.
>
> That is:
> ClassA:
> ClassA1 subClassOf ClassA
> ClassA2 subClassOf ClassA
>
> All subclasses of ClassA are disjoint
>
> ClassB:
> ClassB1 subclass of ClassB
> ClassB2 subclass of ClassB
>
> ClassCommonAB:
> ClassAB
>
> ClassA, ClassB and ClassCommonAB are all disjoint.
>
> While this approach now allows for totally disjointness, that is,
> members of ClassA1 are not also members of ClassA2 nor ClassB nor
> ClassAB. Perfect!
>
> However, this approach also has its downside in that ClassAB has now
> no meaningful connection to ClassA or ClassB!
Alternatively, you could introduce two intermediate subclasses Ax and
Bx that sit between Ai and A, Bi and B as follows:
Bx SubClassOf B
Ax SubClassOf A
DisjointUnion(Bx B1 B2 B3)
DisjointUnion(Ax A1 A2 A3)
DisjointClasses(Ax Bx)
and leave
AB SubClassOf A
AB SubClassOf B
as it was before...
Cheers, Uli
>
> kind regards,
> Will.
>
> ---
> ** You received this mail via the description logic mailing list;
> for more **
> ** information, visit the description logic homepage at http://dl.kr.org/
> . **
More information about the dl
mailing list