I'd like to query all data properties of a specific individual.
In my ontology I have defined trees of data properties.
My target individual is in my owl defined as following:
<owl:NamedIndividual rdf:about="http://www.owl.de/ontology/i40component-01#I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest">
<rdf:type rdf:resource="http://www.owl.de/ontology/i40component-01#Manifest"/>
<decription rdf:datatype="http://www.w3.org/2001/XMLSchema#string">An example work cell.</decription>
<ele rdf:datatype="http://www.w3.org/2001/XMLSchema#string">35.0</ele>
<lat rdf:datatype="http://www.w3.org/2001/XMLSchema#string">52.518611</lat>
<lon rdf:datatype="http://www.w3.org/2001/XMLSchema#string">13.376111</lon>
<name rdf:datatype="http://www.w3.org/2001/XMLSchema#string">I40 Work Cell 1</name>
<production_date rdf:datatype="http://www.w3.org/2001/XMLSchema#string">2012-12-31T23:57:00</production_date>
<uuid rdf:datatype="http://www.w3.org/2001/XMLSchema#string">e41bdfaa-7163-46ed-8cb3-350fa226bbaf</uuid>
</owl:NamedIndividual>
In Protege it looks like:
The goal/aim is to query all defined data properties shown in Protege or in the OWL snippet. The expected result for this query should be:
----------------------------------------------------------------------------------------------------------------------------------------------------------
| I40Component | dataProperty | datatypeValue |
==========================================================================================================================================================
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:uuid | "e41bdfaa-7163-46ed-8cb3-350fa226bbaf" |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:production_date | "2012-12-31T23:57:00" |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:name | "I40 Work Cell 1" |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:lon | "13.376111" |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:lat | "52.518611" |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:ele | "35.0" |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:decription | "An example work cell." |
----------------------------------------------------------------------------------------------------------------------------------------------------------
My current test method looks like the following. It builds and execute a SPARQL query.
@Test
public void showDataPropertiesOfWholeManifest() {
SelectBuilder sb = new SelectBuilder() //Building a Query template
.addPrefix("i40comp", owl.getI40NameSpace() + "#")
.addPrefix("rdfs", "http://www.w3.org/2000/01/rdf-schema#")
.addPrefix("xsd", "http://www.w3.org/2001/XMLSchema#")
.addPrefix("owl", "http://www.w3.org/2002/07/owl#")
.addPrefix("rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#");
//Define Variables
sb.addVar("?I40Component");
sb.addVar("?dataProperty");
sb.addVar("?datatypeValue");
//Find Individuals for Type "Manifest"
sb.addWhere("?I40Component", "rdf:type", URI.generateSparqlURI(I40VOC.Classes.AssetAdministrationShell.Manifest));
//Find Individual with UUID "e41bdfaa-7163-46ed-8cb3-350fa226bbaf"
sb.addWhere("?I40Component", "i40comp:uuid", "e41bdfaa-7163-46ed-8cb3-350fa226bbaf"); //Filter I40Component
//Get all properties of this individual
sb.addWhere("?dataProperty", "?", "owl:DatatypeProperty");
// Results preparation
sb.addWhere("?I40Component", "?dataProperty", "?datatypeValue");
//Filters blanks and literals
try {
sb.addFilter("!isBlank(?datatypeValue)");
sb.addFilter("isLiteral(?datatypeValue)");
} catch (ParseException e) {
e.printStackTrace();
}
//Build query and print result
Query q = sb.build();
executeSPARQLqueryAndPrintResult(q);
}
Or again as Query String:
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX i40comp: <http://www.owl.de/ontology/i40component-01#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT ?I40Component ?dataProperty ?datatypeValue
WHERE
{ ?I40Component
rdf:type i40comp:Manifest ;
i40comp:uuid "e41bdfaa-7163-46ed-8cb3-350fa226bbaf" .
?dataProperty
? owl:DatatypeProperty .
?I40Component
?dataProperty ?datatypeValue
FILTER ( ! isBlank(?datatypeValue) )
FILTER isLiteral(?datatypeValue)
}
Unfortunately the result is not the result I need. See following result:
----------------------------------------------------------------------------------------------------------------------------------------------------------
| I40Component | dataProperty | datatypeValue |
==========================================================================================================================================================
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:uuid | "e41bdfaa-7163-46ed-8cb3-350fa226bbaf" |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:production_date | "2012-12-31T23:57:00" |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:name | "I40 Work Cell 1" |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:lon | "13.376111" |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:lat | "52.518611" |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:ele | "35.0" |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:decription | "An example work cell." |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:aas | "52.518611" |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:manifest | "52.518611" |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:aas | "An example work cell." |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:aas | "I40 Work Cell 1" |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:aas | "2012-12-31T23:57:00" |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:aas | "35.0" |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:manifest | "35.0" |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:aas | "e41bdfaa-7163-46ed-8cb3-350fa226bbaf" |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:aas | "13.376111" |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:manifest | "13.376111" |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:manifest | "e41bdfaa-7163-46ed-8cb3-350fa226bbaf" |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:manifest | "2012-12-31T23:57:00" |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:manifest | "An example work cell." |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:manifest | "I40 Work Cell 1" |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:wpt_gps_location | "52.518611" |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:wpt_gps_location | "35.0" |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:wpt_gps_location | "13.376111" |
----------------------------------------------------------------------------------------------------------------------------------------------------------
Somehow the SPARQL query goes to the "upper level data properties" and select them also as result and prints the value of the real sub-property. Like:
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:wpt_gps_location | "52.518611" |
Which should be normally:
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:lat | "52.518611" |
Maybe one of you can explain me why this happens and can also support me with the improvement of the query to get the aimed result.
The needed hint came from AKSW:
what is wrong with query result? I mean, it's obviously due to inference. So my guess - and you didn't show the type of model you used - you're using an inference model. Am I right? Do you know what inference aka reasoning is? I you only want the asserted data the simplest case is to use a default model and load the data into this one – AKSW
The problem was the use of an inference model (inference aka reasoning) in Jena:
OntModel mONT = ModelFactory.createOntologyModel();
Such models deliver also interfering data.
To get only asserted data as aimed in my scenario, the easiest way is it to use simply a default model instead of an Ontology model (Model
instead of OntModel
):
Model mONT = ModelFactory.createDefaultModel()
Through this change I only get asserted data and the aimed result:
---------------------------------------------------------------------------------------------------------------------------------------------------------
| I40Component | dataProperty | datatypeValue |
=========================================================================================================================================================
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:lon | "13.376111" |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:ele | "35.0" |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:decription | "An example work cell." |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:name | "I40 Work Cell 1" |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:production_date | "2012-12-31T23:57:00" |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:uuid | "e41bdfaa-7163-46ed-8cb3-350fa226bbaf" |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:lat | "52.518611" |
---------------------------------------------------------------------------------------------------------------------------------------------------------
Thank you AKSW!