1
votes

I,

I need some precision about properties inheritance between ontologies.

I would like to create an ontology which will use, as often as possible, properties defined in standard ontologies (for example : foaf, vcard, bio etc...). I just do not want to recreate properties of a class if it already exist in another (or many another) smartly defined ontology.

Let's give an example.

I have to describe a Person. "Person" in my ontology has some standard properties that are already described in foaf. But, in my case, it also has some properties specific to my business (let's say I work in the "Customer relationship" domain), and some properties specific to my organization.

I have identified some solutions to do this :

  • Use "multiple" inheritance via owl:SubClassOf, even if the semantic is the same (SubClassOf suggests that the semantic is close but not exactly the same "Subclass relations provide necessary conditions for belonging to a class". But my Person class has the same semantics as foaf:Person, I just want to know more about it).

  • Use owl:SameAs : does this property let a class inherits the properties of another class ?

  • Use rdf:type (example : myontology:Person has for rdf:type owl:class, foaf:Person, anotherontology:Person) ...

Is there another solution to do this properly ?

Thank you by advance !

2

2 Answers

0
votes

I'll try to give you an maybe partial answer. First, and definitely important to know, the FOAF ontology is pure RDF and not OWL.

The FOAF ontology does not contain rdfs:subClassOf axioms for the class foaf:Person except (in Manchester OWL Syntax)

Class: Person
     SubClassOf: Agent, SpatialThing

If your person class is a subclass of foaf:Person, the only thing you will get via inference is that your class is also a subclass of foaf:Agent and foaf:SpatialThing.

The list of properties that you see in the documentation are just properties whose domain is foaf:Person. E.g. for foaf:surname the FOAF ontology contains the axiom

foaf:surname rdfs:domain foaf:Person

That is not the same as a subClass axiom saying that every person has a surname which is a string value (in weird RDF triple notation) :

foaf:surname rdfs:subClassOf _:x .
_:x rdf:type owl:Restriction .
_:x owl:onProperty foaf:surname .
_:x owl:someValuesFrom xsd:string .

Instead, the domain is just syntactic sugar for saying that "everything that has a surname is a person".

owl:sameAs is used to express that two individuals denote the same real world entity, thus, it's not used for classes. In RDFS, you could simply use rdfs:subClassOf in both directions, OWL has a shortcut for that, called owl:equivalentClass

rdf:type is used to assert an individual to a class.

0
votes

Unless I completely misunderstand your case, you don't need to do anything "difficult" for this. Simply use the standard FOAF Person class, and add additional properties as you see fit. For example, you can define your own custom property like so:

ex:myCustomerRelationProperty a owl:ObjectProperty ;
                              rdfs:domain foaf:Person .

and then have a person's data like this:

ex:person0001 a foaf:Person ;
              foaf:surname "Doe";
              foaf:firstName "John"; 
              .... // etc other FOAF properties
              ex:myCustomerRelationProperty ex:someValue .

Done. No inheritance, or sameAs mapping, or anything else necessary.