Representing Specified Values in OWL: "value partitions" and "value sets"

W3C Working Draft 3 August 2004

This version:
Latest version:
Previous versions:
This is the first public Working Draft
Alan Rector, University of Manchester


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 http://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:

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:

  1. As disjoint classes which exhaustively partition the parent class representing the quality;
  2. As individuals whose enumeration makes up the parent class representing the quality;
  3. 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]

Diagram of value partitions

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.

Adapted Venn diagram of value partitions

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}}

a owl:Class ;
[ a owl:Class ;
{{The next line makes the partition exhaustive}} owl:unionOf (:Poor_health_value :Medium_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}

{{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}}

a owl:Class.:John
a :Person ;
:has_health_status :johns_health .
a :Good_health_value .

a owl:Class ;
[ 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}}

a :Person ;
[a owl:Restriction;
owl:onProperty :has_health_status ;
owl:someValuesFrom :Good_health_value].

Considerations using Pattern 1:

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.

Diagram use of set of individuals as a values list

Figure 3: A class-instance diagram of the use of enumerated instances to represent lists of values

Representation for Pattern 2

{{The value set}}

a owl:Class ;
[ 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:

OWL code for this example

[N3] [RDF/XML abbrev] [Abstract syntax] [Protege/OWL}


[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