I made a simple ontology with Protege 4.3. It has three object properties (padre_de, hijo_de, hermano_de) and one annotation property named ‘tiene_sinonimo’. This is my ontology:
<?xml version="1.0"?>
<!DOCTYPE rdf:RDF [
<!ENTITY owl "http://www.w3.org/2002/07/owl#" >
<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#" >
<!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#" >
<!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#" >
<!ENTITY ontoPizza "http://www.semanticweb.org/silvana/ontologies/2015/7/ontoPizza#" >
]>
<rdf:RDF xmlns="http://www.w3.org/2002/07/owl#"
xml:base="http://www.w3.org/2002/07/owl"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:ontoPizza="http://www.semanticweb.org/silvana/ontologies/2015/7/ontoPizza#"
xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<Ontology rdf:about="http://www.semanticweb.org/silvana/ontologies/2015/7/ontoPizza"/>
<!--
///////////////////////////////////////////////////////////////////////////////////////
//
// Annotation properties
//
///////////////////////////////////////////////////////////////////////////////////////
-->
<!-- http://www.semanticweb.org/silvana/ontologies/2015/7/ontoPizza#tiene_sinonimo -->
<AnnotationProperty rdf:about="&ontoPizza;tiene_sinonimo"/>
<!--
///////////////////////////////////////////////////////////////////////////////////////
//
// Object Properties
//
///////////////////////////////////////////////////////////////////////////////////////
-->
<!-- http://www.semanticweb.org/silvana/ontologies/2015/7/ontoPizza#hermano_de -->
<ObjectProperty rdf:about="&ontoPizza;hermano_de">
<rdf:type rdf:resource="&owl;TransitiveProperty"/>
</ObjectProperty>
<!-- http://www.semanticweb.org/silvana/ontologies/2015/7/ontoPizza#hijo_de -->
<ObjectProperty rdf:about="&ontoPizza;hijo_de">
<rdf:type rdf:resource="&owl;TransitiveProperty"/>
<rdfs:subPropertyOf rdf:resource="&owl;topObjectProperty"/>
</ObjectProperty>
<!-- http://www.semanticweb.org/silvana/ontologies/2015/7/ontoPizza#padre_de -->
<ObjectProperty rdf:about="&ontoPizza;padre_de">
<rdf:type rdf:resource="&owl;TransitiveProperty"/>
<inverseOf rdf:resource="&ontoPizza;hijo_de"/>
</ObjectProperty>
<!--
///////////////////////////////////////////////////////////////////////////////////////
//
// Classes
//
///////////////////////////////////////////////////////////////////////////////////////
-->
<!-- http://www.semanticweb.org/silvana/ontologies/2015/7/ontoPizza#azul -->
<Class rdf:about="&ontoPizza;azul">
<rdfs:subClassOf rdf:resource="&ontoPizza;pizza_francesa"/>
<rdfs:subClassOf>
<Restriction>
<onProperty rdf:resource="&ontoPizza;hijo_de"/>
<someValuesFrom rdf:resource="&ontoPizza;pizza_francesa"/>
</Restriction>
</rdfs:subClassOf>
<rdfs:subClassOf>
<Restriction>
<onProperty rdf:resource="&ontoPizza;hermano_de"/>
<someValuesFrom rdf:resource="&ontoPizza;roja"/>
</Restriction>
</rdfs:subClassOf>
<rdfs:subClassOf>
<Restriction>
<onProperty rdf:resource="&ontoPizza;hermano_de"/>
<someValuesFrom rdf:resource="&ontoPizza;verde"/>
</Restriction>
</rdfs:subClassOf>
<ontoPizza:tiene_sinonimo xml:lang="es">sinonimo_de_azul</ontoPizza:tiene_sinonimo>
</Class>
<!-- http://www.semanticweb.org/silvana/ontologies/2015/7/ontoPizza#con_mayonesa -->
<Class rdf:about="&ontoPizza;con_mayonesa">
<rdfs:subClassOf rdf:resource="&ontoPizza;pizza_americana"/>
<rdfs:subClassOf>
<Restriction>
<onProperty rdf:resource="&ontoPizza;hermano_de"/>
<someValuesFrom rdf:resource="&ontoPizza;con_queso"/>
</Restriction>
</rdfs:subClassOf>
<rdfs:subClassOf>
<Restriction>
<onProperty rdf:resource="&ontoPizza;hermano_de"/>
<someValuesFrom rdf:resource="&ontoPizza;con_pimientos"/>
</Restriction>
</rdfs:subClassOf>
<rdfs:subClassOf>
<Restriction>
<onProperty rdf:resource="&ontoPizza;hijo_de"/>
<someValuesFrom rdf:resource="&ontoPizza;pizza_americana"/>
</Restriction>
</rdfs:subClassOf>
<ontoPizza:tiene_sinonimo xml:lang="es">sinonimo_de_con_mayonesa</ontoPizza:tiene_sinonimo>
</Class>
<!-- http://www.semanticweb.org/silvana/ontologies/2015/7/ontoPizza#con_pimientos -->
<Class rdf:about="&ontoPizza;con_pimientos">
<rdfs:subClassOf rdf:resource="&ontoPizza;pizza_americana"/>
<rdfs:subClassOf>
<Restriction>
<onProperty rdf:resource="&ontoPizza;hijo_de"/>
<someValuesFrom rdf:resource="&ontoPizza;pizza_americana"/>
</Restriction>
</rdfs:subClassOf>
<rdfs:subClassOf>
<Restriction>
<onProperty rdf:resource="&ontoPizza;hermano_de"/>
<someValuesFrom rdf:resource="&ontoPizza;con_mayonesa"/>
</Restriction>
</rdfs:subClassOf>
<rdfs:subClassOf>
<Restriction>
<onProperty rdf:resource="&ontoPizza;hermano_de"/>
<someValuesFrom rdf:resource="&ontoPizza;con_queso"/>
</Restriction>
</rdfs:subClassOf>
<ontoPizza:tiene_sinonimo xml:lang="es">sinonimo_de_con_pimientos</ontoPizza:tiene_sinonimo>
</Class>
<!-- http://www.semanticweb.org/silvana/ontologies/2015/7/ontoPizza#con_queso -->
<Class rdf:about="&ontoPizza;con_queso">
<rdfs:subClassOf rdf:resource="&ontoPizza;pizza_americana"/>
<rdfs:subClassOf>
<Restriction>
<onProperty rdf:resource="&ontoPizza;hermano_de"/>
<someValuesFrom rdf:resource="&ontoPizza;con_pimientos"/>
</Restriction>
</rdfs:subClassOf>
<rdfs:subClassOf>
<Restriction>
<onProperty rdf:resource="&ontoPizza;hijo_de"/>
<someValuesFrom rdf:resource="&ontoPizza;pizza_americana"/>
</Restriction>
</rdfs:subClassOf>
<rdfs:subClassOf>
<Restriction>
<onProperty rdf:resource="&ontoPizza;hermano_de"/>
<someValuesFrom rdf:resource="&ontoPizza;con_mayonesa"/>
</Restriction>
</rdfs:subClassOf>
<ontoPizza:tiene_sinonimo xml:lang="es">sinonimo_de_con_queso</ontoPizza:tiene_sinonimo>
</Class>
<!-- http://www.semanticweb.org/silvana/ontologies/2015/7/ontoPizza#pizza -->
<Class rdf:about="&ontoPizza;pizza">
<rdfs:subClassOf>
<Restriction>
<onProperty rdf:resource="&ontoPizza;padre_de"/>
<someValuesFrom rdf:resource="&ontoPizza;pizza_francesa"/>
</Restriction>
</rdfs:subClassOf>
<rdfs:subClassOf>
<Restriction>
<onProperty rdf:resource="&ontoPizza;padre_de"/>
<someValuesFrom rdf:resource="&ontoPizza;pizza_americana"/>
</Restriction>
</rdfs:subClassOf>
<ontoPizza:tiene_sinonimo xml:lang="es">sinonimo_de_pizza</ontoPizza:tiene_sinonimo>
</Class>
<!-- http://www.semanticweb.org/silvana/ontologies/2015/7/ontoPizza#pizza_americana -->
<Class rdf:about="&ontoPizza;pizza_americana">
<rdfs:subClassOf rdf:resource="&ontoPizza;pizza"/>
<rdfs:subClassOf>
<Restriction>
<onProperty rdf:resource="&ontoPizza;padre_de"/>
<someValuesFrom rdf:resource="&ontoPizza;con_mayonesa"/>
</Restriction>
</rdfs:subClassOf>
<rdfs:subClassOf>
<Restriction>
<onProperty rdf:resource="&ontoPizza;hijo_de"/>
<someValuesFrom rdf:resource="&ontoPizza;pizza"/>
</Restriction>
</rdfs:subClassOf>
<rdfs:subClassOf>
<Restriction>
<onProperty rdf:resource="&ontoPizza;padre_de"/>
<someValuesFrom rdf:resource="&ontoPizza;con_pimientos"/>
</Restriction>
</rdfs:subClassOf>
<rdfs:subClassOf>
<Restriction>
<onProperty rdf:resource="&ontoPizza;padre_de"/>
<someValuesFrom rdf:resource="&ontoPizza;con_queso"/>
</Restriction>
</rdfs:subClassOf>
<disjointWith rdf:resource="&ontoPizza;pizza_francesa"/>
<ontoPizza:tiene_sinonimo xml:lang="es">sinonimo_de_pizza_americana</ontoPizza:tiene_sinonimo>
</Class>
<!-- http://www.semanticweb.org/silvana/ontologies/2015/7/ontoPizza#pizza_francesa -->
<Class rdf:about="&ontoPizza;pizza_francesa">
<rdfs:subClassOf rdf:resource="&ontoPizza;pizza"/>
<rdfs:subClassOf>
<Restriction>
<onProperty rdf:resource="&ontoPizza;hijo_de"/>
<someValuesFrom rdf:resource="&ontoPizza;pizza"/>
</Restriction>
</rdfs:subClassOf>
<rdfs:subClassOf>
<Restriction>
<onProperty rdf:resource="&ontoPizza;padre_de"/>
<someValuesFrom rdf:resource="&ontoPizza;verde"/>
</Restriction>
</rdfs:subClassOf>
<rdfs:subClassOf>
<Restriction>
<onProperty rdf:resource="&ontoPizza;padre_de"/>
<someValuesFrom rdf:resource="&ontoPizza;roja"/>
</Restriction>
</rdfs:subClassOf>
<rdfs:subClassOf>
<Restriction>
<onProperty rdf:resource="&ontoPizza;hermano_de"/>
<someValuesFrom rdf:resource="&ontoPizza;pizza_americana"/>
</Restriction>
</rdfs:subClassOf>
<rdfs:subClassOf>
<Restriction>
<onProperty rdf:resource="&ontoPizza;padre_de"/>
<someValuesFrom rdf:resource="&ontoPizza;azul"/>
</Restriction>
</rdfs:subClassOf>
<ontoPizza:tiene_sinonimo xml:lang="es">sinonimo_de_pizza_francesa</ontoPizza:tiene_sinonimo>
</Class>
<!-- http://www.semanticweb.org/silvana/ontologies/2015/7/ontoPizza#roja -->
<Class rdf:about="&ontoPizza;roja">
<rdfs:subClassOf rdf:resource="&ontoPizza;pizza_francesa"/>
<rdfs:subClassOf>
<Restriction>
<onProperty rdf:resource="&ontoPizza;hermano_de"/>
<someValuesFrom rdf:resource="&ontoPizza;azul"/>
</Restriction>
</rdfs:subClassOf>
<rdfs:subClassOf>
<Restriction>
<onProperty rdf:resource="&ontoPizza;hermano_de"/>
<someValuesFrom rdf:resource="&ontoPizza;verde"/>
</Restriction>
</rdfs:subClassOf>
<rdfs:subClassOf>
<Restriction>
<onProperty rdf:resource="&ontoPizza;hijo_de"/>
<someValuesFrom rdf:resource="&ontoPizza;pizza_francesa"/>
</Restriction>
</rdfs:subClassOf>
<ontoPizza:tiene_sinonimo xml:lang="es">sinonimo_de_roja</ontoPizza:tiene_sinonimo>
</Class>
<!-- http://www.semanticweb.org/silvana/ontologies/2015/7/ontoPizza#verde -->
<Class rdf:about="&ontoPizza;verde">
<rdfs:subClassOf rdf:resource="&ontoPizza;pizza_francesa"/>
<rdfs:subClassOf>
<Restriction>
<onProperty rdf:resource="&ontoPizza;hijo_de"/>
<someValuesFrom rdf:resource="&ontoPizza;pizza_francesa"/>
</Restriction>
</rdfs:subClassOf>
<rdfs:subClassOf>
<Restriction>
<onProperty rdf:resource="&ontoPizza;hermano_de"/>
<someValuesFrom rdf:resource="&ontoPizza;azul"/>
</Restriction>
</rdfs:subClassOf>
<rdfs:subClassOf>
<Restriction>
<onProperty rdf:resource="&ontoPizza;hermano_de"/>
<someValuesFrom rdf:resource="&ontoPizza;roja"/>
</Restriction>
</rdfs:subClassOf>
<ontoPizza:tiene_sinonimo xml:lang="es">sinonimo_de_verde</ontoPizza:tiene_sinonimo>
</Class>
<!--
///////////////////////////////////////////////////////////////////////////////////////
//
// Individuals
//
///////////////////////////////////////////////////////////////////////////////////////
-->
<!-- http://www.semanticweb.org/silvana/ontologies/2015/7/ontoPizza#azul_1 -->
<NamedIndividual rdf:about="&ontoPizza;azul_1">
<rdf:type rdf:resource="&ontoPizza;azul"/>
<rdf:type>
<Restriction>
<onProperty rdf:resource="&ontoPizza;hijo_de"/>
<someValuesFrom rdf:resource="&ontoPizza;azul"/>
</Restriction>
</rdf:type>
</NamedIndividual>
<!-- http://www.semanticweb.org/silvana/ontologies/2015/7/ontoPizza#azul_2 -->
<NamedIndividual rdf:about="&ontoPizza;azul_2">
<rdf:type rdf:resource="&ontoPizza;azul"/>
<rdf:type>
<Restriction>
<onProperty rdf:resource="&ontoPizza;hijo_de"/>
<someValuesFrom rdf:resource="&ontoPizza;azul"/>
</Restriction>
</rdf:type>
</NamedIndividual>
<!-- http://www.semanticweb.org/silvana/ontologies/2015/7/ontoPizza#con_mayonesa_1 -->
<NamedIndividual rdf:about="&ontoPizza;con_mayonesa_1">
<rdf:type rdf:resource="&ontoPizza;con_mayonesa"/>
<rdf:type>
<Restriction>
<onProperty rdf:resource="&ontoPizza;hijo_de"/>
<someValuesFrom rdf:resource="&ontoPizza;con_mayonesa"/>
</Restriction>
</rdf:type>
<ontoPizza:tiene_sinonimo xml:lang="es">sinonimo_de_con_mayonesa_1</ontoPizza:tiene_sinonimo>
</NamedIndividual>
<!-- http://www.semanticweb.org/silvana/ontologies/2015/7/ontoPizza#con_mayonesa_2 -->
<NamedIndividual rdf:about="&ontoPizza;con_mayonesa_2">
<rdf:type rdf:resource="&ontoPizza;con_mayonesa"/>
<rdf:type>
<Restriction>
<onProperty rdf:resource="&ontoPizza;hijo_de"/>
<someValuesFrom rdf:resource="&ontoPizza;con_mayonesa"/>
</Restriction>
</rdf:type>
<ontoPizza:tiene_sinonimo xml:lang="es">sinonimo_de_con_mayonesa_2</ontoPizza:tiene_sinonimo>
</NamedIndividual>
<!-- http://www.semanticweb.org/silvana/ontologies/2015/7/ontoPizza#con_pimientos_1 -->
<NamedIndividual rdf:about="&ontoPizza;con_pimientos_1">
<rdf:type rdf:resource="&ontoPizza;con_pimientos"/>
<rdf:type>
<Restriction>
<onProperty rdf:resource="&ontoPizza;hijo_de"/>
<someValuesFrom rdf:resource="&ontoPizza;con_pimientos"/>
</Restriction>
</rdf:type>
</NamedIndividual>
<!-- http://www.semanticweb.org/silvana/ontologies/2015/7/ontoPizza#con_pimientos_2 -->
<NamedIndividual rdf:about="&ontoPizza;con_pimientos_2">
<rdf:type rdf:resource="&ontoPizza;con_pimientos"/>
<rdf:type>
<Restriction>
<onProperty rdf:resource="&ontoPizza;hijo_de"/>
<someValuesFrom rdf:resource="&ontoPizza;con_pimientos"/>
</Restriction>
</rdf:type>
</NamedIndividual>
<!-- http://www.semanticweb.org/silvana/ontologies/2015/7/ontoPizza#con_queso_1 -->
<NamedIndividual rdf:about="&ontoPizza;con_queso_1">
<rdf:type rdf:resource="&ontoPizza;con_queso"/>
<rdf:type>
<Restriction>
<onProperty rdf:resource="&ontoPizza;hijo_de"/>
<someValuesFrom rdf:resource="&ontoPizza;con_queso"/>
</Restriction>
</rdf:type>
</NamedIndividual>
<!-- http://www.semanticweb.org/silvana/ontologies/2015/7/ontoPizza#con_queso_2 -->
<NamedIndividual rdf:about="&ontoPizza;con_queso_2">
<rdf:type rdf:resource="&ontoPizza;con_queso"/>
</NamedIndividual>
<!-- http://www.semanticweb.org/silvana/ontologies/2015/7/ontoPizza#roja_1 -->
<NamedIndividual rdf:about="&ontoPizza;roja_1">
<rdf:type rdf:resource="&ontoPizza;roja"/>
<rdf:type>
<Restriction>
<onProperty rdf:resource="&ontoPizza;hijo_de"/>
<someValuesFrom rdf:resource="&ontoPizza;roja"/>
</Restriction>
</rdf:type>
</NamedIndividual>
<!-- http://www.semanticweb.org/silvana/ontologies/2015/7/ontoPizza#roja_2 -->
<NamedIndividual rdf:about="&ontoPizza;roja_2">
<rdf:type rdf:resource="&ontoPizza;roja"/>
<rdf:type>
<Restriction>
<onProperty rdf:resource="&ontoPizza;hijo_de"/>
<someValuesFrom rdf:resource="&ontoPizza;roja"/>
</Restriction>
</rdf:type>
</NamedIndividual>
<!-- http://www.semanticweb.org/silvana/ontologies/2015/7/ontoPizza#verde_1 -->
<NamedIndividual rdf:about="&ontoPizza;verde_1">
<rdf:type rdf:resource="&ontoPizza;verde"/>
<rdf:type>
<Restriction>
<onProperty rdf:resource="&ontoPizza;hijo_de"/>
<someValuesFrom rdf:resource="&ontoPizza;verde"/>
</Restriction>
</rdf:type>
</NamedIndividual>
<!-- http://www.semanticweb.org/silvana/ontologies/2015/7/ontoPizza#verde_2 -->
<NamedIndividual rdf:about="&ontoPizza;verde_2">
<rdf:type rdf:resource="&ontoPizza;verde"/>
<rdf:type>
<Restriction>
<onProperty rdf:resource="&ontoPizza;hijo_de"/>
<someValuesFrom rdf:resource="&ontoPizza;verde"/>
</Restriction>
</rdf:type>
</NamedIndividual>
</rdf:RDF>
<!-- Generated by the OWL API (version 3.4.2) http://owlapi.sourceforge.net -->
I’m using the Protege SPARQL plugin to extract nodes related with an annotation property with the query:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX pi: <http://www.semanticweb.org/silvana/ontologies/2015/7/ontoPizza#>
select ?sinonimo
WHERE {
pi:pizza_americana pi:tiene_sinonimo ?sinonimo
}
Obtaining:
------------------------------------
| sinonimo |
====================================
| "sinonimo_de_pizza_americana"@es |
------------------------------------
But I don’t know how to extract nodes related with the object property padre_de. I was reading about in: How to query Classes with Object Property in Sparql and wrote the following query:
Select ?hijo
Where {pi:pizza pi:padre_de ?hijo }
If I run that query the result will be empty, but I need a result like:
-----------------------
| hijo |
=======================
| pizza_americana |
| pizza_francesa |
-----------------------
Or ‘hijo_de’ of pizza_americana:
-----------------------
| hijo |
=======================
| con_mayonesa |
| con_pimientos |
| con_queso |
-----------------------