Search code examples
rdfontologyrdfs

Doubts in development of a basic ontology using RDF/S: ontology reuse and "instance vs. inheritance"


I am trying to develop a simple "ontology" using RDF and RDF Schema.

For now, I have written the following classes and properties:

<rdfs:Class rdf:about="#Model">...</rdfs:Class>
<rdfs:Class rdf:about="#System">...</rdfs:Class>
<rdfs:Class rdf:about="#Concept">...</rdfs:Class>
<rdfs:Property rdf:about="#represents">
    <rdfs:domain rdf:resource="#Model" />
    <rdfs:range rdf:resource="#System" />
</rdfs:Property>
<rdfs:Property rdf:about="#includes">
    <rdfs:domain rdf:resource="#Model" />
    <rdfs:range rdf:resource="#Concept" />
</rdfs:Property>

The idea is that I'd like to define a "Model" (i.e., a Model instance) as a set of "Concept"s. Thus, such a "Model" instance would "represent" a "System": a "System" can then be described using the "Concept"s defined in that "Model" (I may create a class "SystemDescription" for the purpose).

Now, my doubts are the following:

  1. I'd like to define concepts as subclasses of "Concept", but the "includes" property need them to be instances in order to be put in relationship with a "Model" instance; in other words, my concepts would have both rdf:type and rdfs:subClassOf set to "Concept" -- Is that a good approach? (It seems to me that the problem requires my concepts to be both instances and classes)

  2. Suppose I'd like to reuse the SKOS (Simple Knowledge Organization System) ontology: is it ok to define "Model" as a subclass of skos:ConceptScheme (or "Concept" as a subclass of skos:Concept)?

And, less specifically, do you have any advice about my approach considering such a modeling problem?


Solution

  • Your questions, in order:

    1) This is technically possible of course, but in my opinion, this is not a good approach. It will immediately make your ontology significantly more complex, both from a human-understanding perspective as well as from a logical perspective: it puts your ontology in a complexity class (OWL Full) that reasoning tools do not deal with.

    There is a mechanism in OWL 2 (notably the 'punning' mechanism) that provide a workaround for this problem in specific cases. However, it does add complexity, so I don't understand why you would want this. You have a class Concept, the whole point of it being a class is that it has individual concepts as its instances. Why do you want them to be (also) subclasses?

    2) Yes, that is absolutely fine.

    As for general advice: I think the approach as you currently have it looks fine. The KISS principle applies to ontology modeling just as much as it does to any design excercise. But a lot depends on the actual requirements you have - see my earlier remark about concepts becoming subclasses: if you have a good reason to want that, you may need an alternative approach, but without us knowing the reasons for the requirement it's not really possible to recommend an alternative.