Copyright © 2004 W3C® (MIT, ERCIM, Keio), All Rights Reserved. W3C liability, trademark, document use and software licensing rules apply.
There are many "qualities", "features", or "modifiers" used to describe other concepts, e.g. size, severity, texture, rank, for which in any one ontology there is a specified collection of 'values'. This document describes two methods to represent such collections of values: as partitions of classes or as enumerations of individuals. It does not disscuss the use of datatypes to represent lists of values.
This section describes the status of this document at the time of its publication. Other documents may supersede this document. A list of current W3C publications and the latest revision of this technical report can be found in the W3C technical reports index at http://www.w3.org/TR/.
This document will be a part of a larger document that will provide an introduction and overview of all ontology design patterns produced by the Semantic Web Best Practices and Deployment Working Group.
This document is a W3C Working Draft and is expected to change. The SWBPD WG does not expect this document to become a Recommendation. Rather, after further development, review and refinement, it will be published and maintained as a WG Note.
This document is the First Public Working Draft. We encourage public comments. Please send comments to public-swbp-wg@w3.org
Open issues, todo items:Publication as a draft does not imply endorsement by the W3C Membership. This is a draft document and may be updated, replaced or made obsolete by other documents at any time. It is inappropriate to cite this document as other than work in progress.
There are many "qualities", "feature", or "modifiers" used to describe other concepts, e.g. size, severity, texture, rank, for which in any one ontology there are a specified collection of 'values'. In some circumstances we also want to be able to represent modified values - e.g. "very severe" and "mildly severe" or otherwise further subdivide values. In other circumstances it is useful to be able to have two different collections of values covering the same quality, for example to have different collections of color values all partitioning the same "colour space" or to break up "health status" into four rather than three levels.
There are at least three different ways to represent such specified collections of values:
We want to describe persons as having qualities such as having body type that is slender, medium, or obese and as having health status that is good health, medium health, or poor health. It should not be possible to have more than one value for any of the qualities, e.g. it should be inconsistent (unsatisfiable) to be both slender and obese or in good health and poor health. We will use the quality "Health" in the examples. The others follow analogously.
Ellipses represent classes. Squares represent instances. Closed
undecorated arrows (pointing upwards if possible) represent
rdfs:subclassOf;
Open undecorated arrows indicate
rdf:type
; arrows decorated with a blob on the origin
indicate
restrictions if between classes or facts if between individuals.
Restrictions
are existential unless otherwise marked. Dotted arrows indicate that
they are
potentially inferrable by a reasoner from the other information. Upward
facing square union symbols if spanning a set of rdfs:subclassOf
links indicate owl:UnionOf;
if spanning a set of
rdf:type
links indicate owl:oneOf
. All
classes are
mutually disjoint and all individuals mutually different unless shown
as
overlapping or otherwise annotated.
In this approach we consider the quality as a class representing a
continuous space that is partitioned by the values in the collection of
values. To say that "John is in good health" is to say that his health
is
inside the Good_health_values
partition of the
Health_value
quality. Theoretically, there is an
individual
health value, Johns_health
, but all we know about it is
that it
lies someplace in the Good_health_value
partition. The
cass
Healthy_Person
is the class of all those persons who have
a
health in the Good_health_value
partition. [See note 1]
Figure 1: A class-instance diagram of the use of partitioning classes for collections of values
Some may find an alternative diagrammatic format adapted from Venn diagrams as shown in Figure 2 makes the intention clearer as it shows the partioning more explicitly.
Figure 2: An adapted Venn diagram showing the use of partitioning classes to represent lists of values.
{{The collection of values}}
:Health_Value
a owl:Class ;
owl:equivalentClass
[ a owl:Class ;
{{The next line makes the partition exhaustive}} owl:unionOf (:Poor_health_value :Medium_health_value :Good_health_value ] .
:Good_health_value
a owl:Class ;
rdfs:subClassOf :Health_Value ;
{{The disjoint axioms make the subclasses partitioning}} owl:disjointWith :Poor_health_value , :Medium_health_value . :Medium_health_value a owl:Class ; rdfs:subClassOf :Health_Value ; owl:disjointWith :Poor_health_value , :Good_health_value :Poor_health_value a owl:Class ; rdfs:subClassOf :Health_Value ; owl:disjointWith :Good_health_value , :Medium_health_value .
{{The functional property}
:has_health_status
{{The property must be functional}} a owl:ObjectProperty , owl:FunctionalProperty ; rdfs:domain :Person ; rdfs:range :Health_Value
{{The class Person, its subclass Healthy_person, and an individual person, John}}
:Person
a owl:Class.:John
a :Person ;
:has_health_status :johns_health .
:johns_health
a :Good_health_value .
:Healthy_person
a owl:Class ;
owl:equivalentClass
[ a owl:Class ;
owl:intersectionOf (:Person [ a owl:Restriction ;
owl:onProperty :has_health_status ;
owl:someValuesFrom :Good_health_value
])
] .
{{The same as variant 1 except that for the individual Jim, is represented as}}
:Jim
a :Person ;
[a owl:Restriction;
owl:onProperty :has_health_status ;
owl:someValuesFrom :Good_health_value].
Good_health_value
might be split into Moderately_good_health_value
and Robust_good_health_value
,
simply by subdividing the Good_health_value
partition.good_health
"
as the symbol in the database. The fact that, strictly speaking, the
semantics require the symbol to be interpreted in each case as a
different anonymous instance of the class Good_health
_value
will, in this case, be irrelevant to most applications and invisible to
most users.[N3] [RDF/XML abbrev] [Abstract syntax] [Protege-OWL]
In this approach, the class Health_Value
is considered
as the
enumeration of the individuals good_health
,
medium_health,
and poor_health
. Values are
sets of
individuals. To say that "John is is in good health", is to say that
"John
has the value good_health for health" This assumes that a value is just
an
unique symbol, and a value set is just a a set of such symbols.
Normally, the
values will all need to be asserted to be different from each other. (
In
OWL, any two individuals might represent the same thing unless there is
an
axiom to say, explicitly, that they are different. In other words, OWL
does
not make the "Unique Name Assumption".) If we did not include the
differentFrom
axiom in the example, then it would be
possible to
have a person who was, for example, both in good health and poor health
simultaneously.
The approach is shown diagrammatically in Figure 3.
Figure 3: A class-instance diagram of the use of enumerated instances to represent lists of values
{{The value set}}
:Health_value
a owl:Class ;
owl:equivalentClass
[ a owl:Class ;
{{Define as one of three individuals}} owl:oneOf (:medium_health :good_health :poor_health) ] . :good_health a :Health_value ; {{The next line make values different. Otherwise might be inferred the same}} owl:differentFrom :poor_health , :medium_health . :medium_health a :Health_value ; owl:differentFrom :poor_health , :good_health . :poor_health a :Health_value ; owl:differentFrom :good_health , :medium_health . :has_health_status a owl:ObjectProperty , owl:FunctionalProperty ; rdfs:range :Health_value . {{John - a health person}} :John a :Person ; :has_health_status :good_health . {{The class of Healthy Persons}} :Healthy_person a owl:Class ; owl:equivalentClass [ a owl:Class ; owl:intersectionOf (:Person [ a owl:Restriction ; owl:hasValue :good_health ; owl:onProperty :has_health_status ]) ] .
Health_Value
is defined as equivalent to enumeration of one list of distinct values,
it cannot also be equivalent to a different list of distinct values. To
do so would cause the reasoner to indicate a contradiction. (i.e that Health_Value
was "unsatisfiable".)[Note1]. In this document we have
carefully
distinguished between the class partitioning the value type as used in
Pattern_1, e.g. Good_health_value
, and an individual
value in a
value type as used in Pattern_2, e.g. good_health
. In any
given
ontology we would normally advise against mixing the two patterns. If
an
ontology uses Pattern_1 consistently, then we might drop the
_value
suffix. However, we strongly suggest maintaining
consistent naming and case conventions throughout any one ontology.
The code in these examples should be viewable with any owl tools. The following is for information only and with thanks to those involved in developing the tools. There is no endorsement intended or implied for the specific tools. These examples have been produced using the Protege OWl plugin and CO-ODE additional wizards and OwlViz available from http://protege.stanford.edu and following plugins/backends/owl. Some files may require the CO-ODE plugins linked to that page or at http://www.co-ode.org. Classification involving individuals cannot all be shown in this form and has been tested using OilEd available from http://oiled.man.ac.uk. In all cases the Racer classifier has been used, available from http://www.sts.tu-harburg.de/~r.f.moeller/racer/.
Rector, A., Modularisation of Domain Ontologies Implemented in Description Logics and related formalisms including OWL. in Knowledge Capture 2003, (Sanibel Island, FL, 2003), ACM, 121-128. pdf here