5

In my ontology I have individuals "pic Joan" which is an instance of concept "mountain" and "port Cerbère" which is an instance of concept "village". I have the relation "dominates" going from "pic Joan" to "port Cerbère" (in the sense that the mountain is perceived as being close and above the village, and hence "dominates it").

But in fact, I need to represent the information "pic Joan dominates port Cerbère at a distance of 1.5 miles NW".

So, logically, I would need to attach to the relation "dominates" the data properties "distance=1.5M", "direction=NW".

But, AFAIK, OWL does not provide properties for relations. I know that I can define range and domain for relations, but this is not about range and domain, the same relation will have different property values when taken between different instances.

How would you represent this information in OWL?

(Auxiliary question: is there some other ontology formalism where I can define properties for relations? And if yes, are there tools like Protégé to manage ontologies in that formalism?)

Joshua Taylor
  • 84,998
  • 9
  • 154
  • 353
yannis
  • 819
  • 1
  • 9
  • 26

2 Answers2

1

The most common pattern for this use case is to introduce a new class, say RelativePosition:

RelativePosition a Class.
relationType a DataProperty.
relationType domain RelativePosition.
// relationType values not specified here: might be "dominant","overlooking"...
// depending on your needs, this might need more structure.
firstFeature a ObjectProperty.
firstFeature domain RelativePosition.
secondFeature a ObjectProperty.
secondFeature domain RelativePosition.
// both properties can appear multiple times for one instance of RelativePosition
// to group sets of entities which share a relative position

More properties can be added to introduce distance, or other characteristics.

Edit: copied link from Joshua's comment below: for n-ary relations, see here

Ignazio
  • 10,504
  • 1
  • 14
  • 25
  • Thanks for your answer. Indeed, doing so it works, but isn't this horribly complicated? because your approach means that every class must have a dataproperty to say whether it is a concept or a relation. And if I want to do an operation as simple as "find all relations starting from A", this means "find all B -> A, from a B such as the mentioned dataproperty has value `relation'" which is rather tedious. If there is no simpler way of doing it in OWL, is there some other formalism in which it would be easier, and having tools like Protégé? – yannis Mar 02 '14 at 18:24
  • 4
    @yannis What you're doing here is essentially trying to represent an n-ary relation. The W3C has some suggestions on how to do this: [Defining N-ary Relations on the Semantic Web](http://www.w3.org/TR/swbp-n-aryRelations/). Generally, you either need to reify triples (kind of inconvenient, since the actual triples you care about aren't “really” in the data anymore) or create an individual representing the relationship that you can attach the extra data to. You don't necessarily need to declare specific properties with domains and ranges for each additional type of data. – Joshua Taylor Mar 02 '14 at 22:02
  • Great, thanks for that link, it's exactly what I needed! (Use Case 1: additional attributes describing a relation) – yannis Mar 03 '14 at 11:20
0

is there some other ontology formalism where I can define properties for relations?

Have you looked into Topic Maps?