| Introduction |
This page is meant to give a brief and informal introduction into description logics (DL) and to explain how DL can be used . Please excuse me if you are a DL expert...
The main idea of DL is to describe the world in terms of "properties" or "constraints" that specific "individuals" have to satisfy. The following basic entities were introduced:
?- peter :: human and male. yes |
Furthermore we can recognize the "double kolon" operator ::, that has the object peter on its left side, and that has some properties human and male on the right side. In effect in our DL sytax the double kolon operator introduces a new object and assigns it the properties on the right side of the operator.
As a result the DL system internally creates a new entry for the object and somehow stores the properties of the object. One can compare this for example with a database system, where the user can add entries into database table and can retreive these entries using some kind of query language. Correspondingly it is possible to query the propertiy of our DL database using the specific DL query operators as shown in figure 2.
?- peter ?: human. yes ?- peter ?: male. yes ?- peter ?: female. no |
Actually we forgot to define the terms human, male and female for our example. These terms can either be seen as properties (the property of being a human or being male) or as classes of objects (the class of all objects that are human or male). In fact it doesn't matter which interpretation we adopt here because they are equivalent.
human :< ctop. male :< ctop. female :< ctop. woman := human and female. man := human and male. |
So let's now consider example figure 3 where these terms are defined: First we see two new operators :< and := which are called "primitive"- and "defined" concept introduction operator respectively. We will explain the difference later in this chapter. Both operators take a concept name on their left side, the description of the concept on the right side and introduce the new concept to the interal database.
The second new element is the predefined concept ctop. This concept refers to the top of the concept hierarchy (therefore its name) and is used as the root of all concepts in the DL system. Figure 2 shows a graphical representation of this little hierarchy ,that also includes the bottom element cbot.
These two elements together with some formal properties of concepts and objects that will not be discussed in this chapter are responsible for the fact that the concpept hierarchy can be seen as an algebra?. This property is of great importance to the overall system design, because it provides some kind of formal rigidity that helps to understand the behaviour of the system and that also prooved to be helpful for an efficient implementation.
So what is the difference between primitive and defined concepts? To explaint this subtle difference let's get back to the definition of a concept as a class of objects. To say it formally, the difference is that objects can belong to defined concept by means of their properties, while they can never belong to a primitive class without explicitely beeing to to.
In our very first example we saw that that peter is both a human and male. So does he belong to the class man? The answer is yes, because the class of all men is defined by having the two properties of being human and being male and it is a defined concept. Thus the query in figure 4 is successful. If the class man would have been defined as a primitive concept, the answer would have been no.
?- peter ?< man. yes |
?- peter :: has_sister : mary. yes |
Let's consider example figure 5. The new kolon operator :< together with its two arguments on the left and right side syntactily just behaves like a concept name such as male. It introduces a relationship between the object peter and his sister mary using the role (relationship) has_sister. The entire construct is read like "peter has a sister called mary" and is formally captured in first order logic by a two-place predicate such as has_sister(peter,mary). Graphically we can despict the peter - mary relationship by a line (edge) between the two objects such as in figure 6.
?- peter ?: has_sister : mary. yes ?- peter ?: some(has_sister). yes ?- peter ?: some(has_sister,human). no |
So what are the conclusions that we can draw from the fact peter has a sister? Certainly we can ask whether peter has a sister called mary as despicted in figure 6 and certainly the system will reply positively. However in practice we often don't know the name of a role-filler or we are not interested in the particular role filler but in some of its properties. For this reason the some(Role) and some(Role,Concept) construct were introduced, that exactly satisfy these needs. some(Role) is true, if there is some filler at all, while some(Role,Concept) is true if there exists a filler that is of type Concept.
But why doesn't succeed the third query in example figure 6? The reason for this is that we do not know anything about mary except for the fact that she is the sister of peter. But how can we conclude that sister- and brothership is only defined between humans?
has_relative :< rtop and
range(human) and domain(human).
has_parent :< has_relative.
has_sibling :< has_relative.
has_sister :< has_sibling and range(female).
has_brother :< has_sibling and range(male).
|
Figure 7 introduces the definition of a role-hierarchy concerning relationships between humans. We can identify the top of the role hierarchy rtop, and two new constructs named range(Concept) and domain(Concept). Range restricts the filler of a role the Concept, and domain restricts the object from which the role starts. With this role hierarchy, the third query in example figure 6 would have been positive, because the has_relative role already restricts the range of has_sister to human.
father :< ctop. man and some(has_child) => father. |