Search Mailing List Archives
[protege-owl] mapping a non functional property to another class with OWL
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
> 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
> 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
> It seems that Protege doesn't support it, or maybe you have any
> ideas for
> 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:
PatientDocument -----------> Patient --------------> Treatment
and you want to give a name to the chain of properties
Alternately, you could model this as
PatientDocument +--------------> Patient
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
> sense. If I remove PatientDocuments from the range of hasTreatments
> domain of getTreatmentOfPatient wont be in PatientDocuments anymore.
> Thanks in advance,
> protege-owl mailing list
> protege-owl at lists.stanford.edu
> Instructions for unsubscribing: http://protege.stanford.edu/doc/
More information about the protege-owl