I have an ontology in Protege.
When I add an object property like X worksFor Y
, and then load the rdf to graphdb, it generates 3 triples with subject = blank node
, property = owl:someValuesFrom, owl:onProperty, owl:rdfType
, and then it adds a triple that states X rdf:subClassOf Y
.
Is this correct?
What is the logic behind this?
Here is an example of what I'm doing:
This is the ontology in Protege. I made a small version that addresses this specific issue. I save it as rdf and then load it in GraphDb
And here is what I get in GraphDb after loading the rdf from the ontology.
I hope this helps to better understand the question.
The query output that you obtain is perfectly meaningful.
By stating that personaCliente
(subject) is a SubClass Of
(predicate) worksFor some empresaCliente
(object), you're saying that if p
is a client person then it must work for some client company.
Note that the object is not a simple super-class, but a complex class expressed by a property restriction.
In other words, you're stating that every client person p
works for some blank node _
, such that _
is a client company. If you know description logics, read this as persona ⊑ ∃worksFor.empresaCliente
.
Now, by querying ?s ?p ?o
, you're searching for all the possible triples of your ontology.
Let's focus on the following subset of results:
row s p o
1 _:node31 owl:someValuesFrom :empresaCliente
2 _:node31 owl:onProperty :worksFor
3 _:node31 rdf:type owl:Restriction
9 :personaCliente rdfs:subClassOf _:node31
This bunch of triples means the same as above: every personaCliente
is a subClassOf
a certain blank node [9], such that this blank node is a subclassOf
owl:Restriction
(which is a particular OWL class) [3]. This restriction involves property worksFor
[2] and states that its range, in this particular case, must be empresaCliente
[1].
Further reading: