[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