Search Mailing List Archives
[protege-owl] Restriction of instances in OWL?
kaljurand at gmail.com
Tue May 27 09:02:24 PDT 2008
On Mon, May 26, 2008 at 11:34 AM, Kaarel Kaljurand <kaljurand at gmail.com> wrote:
> On Fri, May 23, 2008 at 5:49 PM, Frank Puhlmann
> <Frank.Puhlmann at inubit.com> wrote:
>> I have a class structure with "Role", "Person", and "Department". Each role is assigned to at least one department via hasDepartment: Role -> Department. Each person is assigned to at least one role via hasRole: person -> Role.
>> Furthermore, I have several individuals for Person, Role, and Department.
>> Now I would like to define a Class "SmallDepartment" that contains all individuals of the class Department that have a maximum of three individuals of Person working in the Department.
>> Informally, something like this:
>> Class SmallDeparment
>> definedBy: each ?department with Number_of_individuals(?person) < 4
>> with ?person as the set of individuals working in ?department (via the hasRole/hasDepartment links)
>> Can this be expressed in OWL?
> Maybe the following axioms will do the job (expressed in Manchester
> OWL 2 Syntax, usable in Protege 4):
> (1) (has-role o has-department) SubPropertyOf work-for
> (2) small-department SubClassOf department and (inv(work-for) max 3 person)
Sorry, I realized that there are a few problems with (1) and (2).
First of all, they violate the
non-structural restrictions of OWL 2: you cannot place cardinality
restrictions on properties
such as `work-for' which were defined via a property chain. So,
reasoners will not work with
such axioms. You can deal with this problem partly by replacing (1)
with a SWRL-rule:
(1') has-role(X, Y) and has-department(Y, Z) -> work-for(X, Z)
Secondly, axiom (2) should have the arguments of SubClassOf reversed
(or you could also assert that the arguments are equivalent classes if
that is what you mean).
But as Thomas mentioned, making sure that the departments that you
want to have classified
as 'small-department' are actually classified as such by the reasoner
is going to be a lot of work.
For example, you would have to constrain the property `work-for'
directly and not "over the chain"
to get the max cardinality entailments.
More information about the protege-owl