CARVIEW |
Representing Specified Values in OWL: "value partitions" and "value sets"
W3C Working Draft 3 August 2004
- This version:
- https://www.w3.org/TR/2004/WD-swbp-specified-values-20040803
- Latest version:
- https://www.w3.org/TR/swbp-specified-values
- Previous versions:
- This is the first public Working Draft
- Editors:
- Alan Rector, University of Manchester
Copyright ©2004 W3C® (MIT, ERCIM, Keio), All Rights Reserved. W3C liability, trademark and document use rules apply.
Abstract
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.
Status of this Document
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 https://www.w3.org/TR/.
This document is intended to be a part of a future W3C Working Group Note that will provide an introduction and overview of all ontology design patterns produced by the Semantic Web Best Practices and Deployment Working Group, part of the W3C Semantic Web Activity.
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 a First Public Working Draft. We encourage public comments. Please send comments to public-swbp-wg@w3.org [archive] and start the subject line of the message with "comment:".
Open issues, todo items:- Patterns for of use of datatypes to represent lists of values
Publication as a Working Draft does not imply endorsement by the W3C Membership. This is a draft document and may be updated, replaced or obsoleted by other documents at any time. It is inappropriate to cite this document as other than work in progress.
General issue
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:
- As disjoint classes which exhaustively partition the parent class representing the quality;
- As individuals whose enumeration makes up the parent class representing the quality;
- As datatypes. Data types will more usually be used when there is a literal, numeric or derived data types rather than when there is an enumerated list of values. They will not be considered further in this paper although a supplement may be issued.
Use case examples
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.
Diagraming Conventions
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.
Representation patterns
Pattern 1: Values as subclasses partitioning a quality
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.
Representation for two variants of Pattern 1
Representation variant 1: Using a fact about the individual
{{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
])
] .
Representation using variant 2: Placing an existential restriction on the individual
{{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].
Considerations using Pattern 1:
- The result is in OWL-DL and classifies correctly using either FaCT or Racer - and almost certainly any other reasoner that handles any reasonable subset of OWL-DL.The semantics faithfully represent the partitioning of a continuous quality space into a collection of discrete value.
- The values can be further subpartitioned, e.g.
Good_health_value
might be split intoModerately_good_health_value
andRobust_good_health_value
, simply by subdividing theGood_health_value
partition. - There can be several alternative partitionings of the same quality space.
- If variant 2 is to be used as part of a database schema or similar,
then a convention for creating anonymous instances in the database is
required. (Logicians call such anonymous instances "skolem constants".)
In practice, this can usually be ignored. A common convention is to use
the class name or a string derived from it, e.g.
"
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 classGood_health
_value will, in this case, be irrelevant to most applications and invisible to most users. - The use of classes for values seems unintuitive to many people coming from the database and frame communities in which value sets are usually enumerated lists of symbols.
Code for this example
[N3] [RDF/XML abbrev] [Abstract syntax] [Protege-OWL]
Pattern 2: Values as individuals whose enumeration is equivalent to the quality
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
Representation for Pattern 2
{{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 ]) ] .
Considerations using Pattern 2:
- The representation is in OWL-DL, and DL reasoners should eventually be expected to make correct inferences with individuals used in this way. However, neither FaCT nor Racer (the two most widespread open source reasoners in use today) perform all the expected inferences reliably.
- There is no possibility of further subpartitioning of values. This is because OWL supports only equality or difference between individuals. It does not allow individuals to have partial overlaps. It is not possible, as it is for classes, to say that one individual is equivalent to the the union (disjunction) of two other individuals.
- There is no way to represent alternative partitionings of the same
quality space. Because individuals cannot overlap, if
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 thatHealth_Value
was "unsatisfiable".) - There is a straight forward match to the usage in databases and many frame systems without any assumptions or conventions about anonymous individuals.
- Many people find this the more intuitive approach.
OWL code for this example
[N3] [RDF/XML abbrev] [Abstract syntax] [Protege/OWL}Notes
[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.
Acknowledgements
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 https://protege.stanford.edu and following plugins/backends/owl. Some files may require the CO-ODE plugins linked to that page or at https://www.co-ode.org. Classification involving individuals cannot all be shown in this form and has been tested using OilEd available from https://oiled.man.ac.uk. In all cases the Racer classifier has been used, available from https://www.sts.tu-harburg.de/~r.f.moeller/racer/.
References
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