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:
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)
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?
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.