Reputation: 81
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.
Upvotes: 2
Views: 307
Reputation: 81
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!
Upvotes: 1