Designing an ontology where I need to capture microstrategy documents and what kind of information it contains. for e.g. below are three mstr documents.
1. Finance summary (has finance inforamtion)
2. Country finance summary (has finance & country info)
3. Invest to grow country finance summary (has finance, country, invest to grow country info)
Along with that I have defined information classes like below.
1. Finance
2. Country
3. InvestToGrowCountry (subclass of country)
There is a predicate/property called hasInformation which joins documents with information classes. My question is - should i create mstr documents as subclasses of documents and define hasInformation predicate to it or create individuals/instances of documents ?
Please note each document will also have property like name, projectName, url, parameters. Should this property be defined as datatype property of individuals or classes?
Appreciate your help...Thanks.
In OWL classes represent sets. So you can have a class :MicrostrategyManual
with members, which are URIs representing concrete files or paper copies, which can be classified as a :MicrostrategyManual
.
Regarding:
There is a predicate/property called hasInformation which joins documents with information classes.
the only (except when going with option 3 below) property that can link individual with a class is rdf:type
and the one between classes is rdfs:subClassOf
. When you want to relate a certain property to an OWL class in some way, you hav etwo options: either use the class for domain and range (rarely a good practice), or when you include the property in the class description (necessary conditions for classification, using rdfs:subClassOf
), or definition (necessary and sufficient conditions for classification, using owl:equivalentClass
).
Depending on what you objective is, you can design your ontology in a different way. Here are two options:
skos:Concept
where you can group them in a skos:Collection
that would serve as a "code list". Then you can relate your individuals 2 and 3 in the following way::InvestToGrowCountry skos:broader :Country
Regarding document properties, if you have some classes of documents for which there should have the same meta-data as the individual documents, then these should be defined as annotation properties. It would be better to re-use as much as possible those from core vocabularies/ontologies. For example, for name it would be good to use rdfs:label
or have your :documentName
as sub-property of rdfs:label
. And then you can use datatype properties to further describe your documents. However, in some cases, when you want to further describe this characteristics (e.g. when you want to manage their life-cicle), it could consider using object properties, instead of annotation and datatype properties.
There is also a middle way, applying the OWL2 punning feature, but as I have no experience with it, I don't know what are the risks.
Rename your classes as :CountryDocument
etc, and classify your documents (directly or through inference over other properties), so the problem with :hasInformation
is dissolved as it won't be needed, not for this purpose anyway.