Recommended Changes
Naming Conventions for MediatingThings, ThingsInRole & RelativeThings & connecting properties
There is a property called isProducedBy which is supposed to only be used with RelativeThings. For the record, the definition is currently: “The target or range of this property should be read as always being some kind of 'relative thing', that is a thing defined in some context. Generally this will be a 'party in role'. This property is not intended to be used to relate a thing to some independent thing which it is provided by, only to something in the role of being that which provides it.”
That means if one wants to say MichaelUschold provides a Document, you have to create a fictitious instance that means MichaelUscholdAsProvider. To avoid that, I need another property for isProvidedBy(provides) that connects directly to MichaelUschold. What should that be, and how can it be made obvious that it connects to the other version of the property?
There is another problem. isProvidedBy and isUsedBy use the exact same grammatical form for the name. Yet, one is for exclusive use with Relative things, and the other is not. It would be nice if there was a hint about this. Given that use with relative things should be the exception rather than the rule, we could have a convention to highlight that the propery is for use with only Relative Things. The same solution can apply to subclasses of ThingInRole.
Proposed Solution:
IDEALLY: have the non-ThingInRole name be the usual name that you expect, e.g. isProducedBy, and if you want one that is only to be used for ThingsInRole then append _R to the name. e.g. isProducedBy_R. This way you can see that the two properties are linked, one is defined as a property chain using the other. Subclasses of ThingInRole, like Asset and Bank should be renamed to Asset_R and Bank_R and Bank and Asset should be used to mean what every one will think they mean. In this world, there may be a handful of classes and properties that have an _R suffix, and most will not.
ALTERNATIVE: A less disruptive (and hopefully temporary) option that can be implemented immediately is to use the suffixes as needed when creating a version that is not there. For example, I created a property called isProducedBy_I for what I needed above. Now it is clearly linked to the other version. All the ThingInRole classes like Bank and Asset can have their IndependentParty versions called Bank_I & Asset_I. I needed to have a new Class called CreditRepository, but I sure don't want the _R version. For now, given the current naming convention, I will create a class called CreditRepository_I and not bother creating the _R version since I cannot imagine a time when it would be needed.
ReFactoring Suggestions
- Suggest move the hasName data property to the relations ontology. Many things that are not agents have names . Then there may be no need for relations ontology to be importing agents ontology. It seems a bit backwards.
- Suggest move identifies(isIdentifiedBy) properties to the relations ontology. Many things that are not agents have identifiers. Then the agents ontology can import the relations ontology, like most other ontologies do.
...