Search Mailing List Archives

Limit search to: Subject & Body Subject Author
Sort by: Reverse Sort
Limit to: All This Week Last Week This Month Last Month
Select Date Range     through    

[protege-owl] mapping a non functional property to another class with OWL

Thomas Russ tar at ISI.EDU
Tue Nov 13 11:25:43 PST 2007

On Nov 10, 2007, at 4:25 AM, Alexander Schinko wrote:

> Dear all,
> I have a modelling problem which I currently cannot solve with  
> Protégé.
> Maybe you have some suggestions for me.
> I have a class B who's properties point to multiple individuals of  
> class A.
> So far no problem, but I would like map this selection directly to  
> another
> class C. As you want it would be like a inverse property between B  
> and C but
> with having the same class A and all the instances selected in B in  
> the
> range.
> It seems that Protege doesn't support it, or maybe you have any  
> ideas for
> workaround?
> Here is an example:
> class Treatments -> lists a list of available Treatments
> class Patient hasTreatments  -> points to some multiple instances  
> of class Treatments
> class PatientDocuments getTreatmentOfPatient -> maps/inherit all  
> the instances defined in hasTreatments property.

Well, getTreatmentOfPatient sounds a lot more like a method name than  
a property name, in that it seems you want to return particular  
values rather than have a declaration.  If you are thinking of it  
that way, then perhaps one of the query solutions that Thusitha  
Mabotuwana suggested would work.

As far as a properties-only view of this, you can't really represent  
what you want using OWL 1.0.  You would instead need to use the  
ability to define role chains (property chains) that is present in  
OWL 1.1.  That is because it seems that the structure you are  
representing is perhaps one of the following:

                     describes            hasTreatment
   PatientDocument  -----------> Patient --------------> Treatment

and you want to give a name to the chain of properties  

Alternately, you could model this as

   PatientDocument +--------------> Patient
                   | listsTreatment
                   +--------------> Treatment

and then have a chain going from Patient to Treatment via a chain of  
the inverse of describes and listsTreatment.

Either of these solutions have the advantage that, by being defined  
in terms of the actual relationships (rather than via rules that copy  
values), you don't have to worry about keeping them up-to-date, since  
the inference based on the definitions will do that for you.

If you aren't ready to move to OWL 1.1 yet, then you could choose one  
of these structures as your base and then implement the remaining  
value extraction via a query that builds the role chain for you.  I  
would hesitate to use SWRL rules to actually make the assertions,  
unless you were sure that you wouldn't be making any changes.  In  
other words, that the addition of treatments would be monotonic  
during the operation of your application.

> If I create an inverse property between hasTreatments and
> getTreatmentOfPatient in Protege I can't define both having the  
> same range.
> I can try to add a second class to the range of hasTreatments but  
> then I
> will have the class PatientDocuments also in it, which doesn't make  
> any
> sense. If I remove PatientDocuments from the range of hasTreatments  
> the
> domain of getTreatmentOfPatient wont be in PatientDocuments anymore.
> Thanks in advance,
> Alexander
> _______________________________________________
> protege-owl mailing list
> protege-owl at
> Instructions for unsubscribing: 
> faq.html#01a.03

More information about the protege-owl mailing list