Dave, When you stated "It is possible to use OWL syntax to express constraints but interpret it with closed world semantics. See upcoming W3C workshop on this topic."
I just want to be sure... Are you referring to the RDF Validation Workshop scheduled for this September in Cambridge? https://www.w3.org/2012/12/rdf-val/Overview.php -----Original Message----- From: Dave Reynolds [mailto:[email protected]] Sent: Tuesday, July 09, 2013 3:22 AM To: [email protected] Subject: Re: Validation On 09/07/13 05:12, Erdem Eser Ekinci wrote: > Hi all, > > I need some help to validate an ontology. The code is as follows. The > ontology is simple; there are tree concepts; Role, Goal, Task and one > object property hasGoal whose domain is Role and range is Goal. I've > tried to restrict Role concept on the hasGoal property with allvalues, > somevalues and mincardinality restrictions separately. But none of > them hampers the validity. Always validation true. > > What am I missing? That OWL with the standard open world semantics is fundamentally unsuited to validation :) It is possible to use OWL syntax to express constraints but interpret it with closed world semantics. See upcoming W3C workshop on this topic. But the current jena rule reasoners follow the official semantics. In your example then a cardinality restriction on Role just means that each Role instance can be deduced to have a hasGoal, and indeed the reasoner will invent an existential variable (blank node) to represent the missing value. Similarly a someValues restriction just means that the reasoner can deduce there is a hasGoal value and that it must be a Goal. An allValues restriction allows you to deduce that all your hasGoal values must be Goals but tells you nothing about missing goals. If you made the value of a hasGoal instance a Task, and if you declare Task and Goal to be disjoint then your allValues (or a simple range declaration) would allow you to detect a problem. Dave > > Thanks for your help... > > public class OWLRestrictionTest { > //uri defs > private static String URI_BASE = " > http://www.galaksiya.com/ontologies/galaxia.owl"; > private static String URI_INDV = " > http://www.galaksiya.com/ontologies/indv.owl"; > private static String URI_ROLE = "Role"; private static String > URI_GOAL = "Goal"; > private static String URI_TASK = "Task"; private static String > URI_HAS_GOAL = "hasGoal"; > > // concepts > private OntClass clssRole; > private OntClass clssGoal; > private OntClass clssTask; > private ObjectProperty prpHasGoal; > @Test > public void test() { > OntModel schema = > ModelFactory.createOntologyModel(OntModelSpec.OWL_DL_MEM_RULE_INF); > //create concepts > clssRole = schema.createClass(URI_BASE + "#" + URI_ROLE); clssGoal = > schema.createClass(URI_BASE + "#" + URI_GOAL); > clssTask = schema.createClass(URI_BASE + "#" + URI_TASK); //create > properties prpHasGoal = schema.createObjectProperty(URI_BASE + "#" + > URI_HAS_GOAL); > //create restrictions > //Restriction restriction = > schema.createSomeValuesFromRestriction(null, > prpHasGoal, clssGoal); > Restriction restriction = > schema.createAllValuesFromRestriction(null, prpHasGoal, clssGoal); > //Restriction restriction = > schema.createMinCardinalityRestriction(null, > prpHasGoal, 2); > clssRole.addSuperClass(restriction); > OntModel data = ModelFactory.createOntologyModel(); > //create individuals > Individual indvRole1 = data.createIndividual(URI_INDV+"#FetcherRole1", > clssRole); > Individual indvGoal1 = data.createIndividual(URI_INDV+"#FetchGoal1", > clssGoal); > Individual indvTask1 = data.createIndividual(URI_INDV+"#FetchTask1", > clssTask); > //indvRole1.addProperty(prpHasGoal, indvGoal1); > indvRole1.addProperty(prpHasGoal, indvTask1); > //validation > schema.write(System.out,"N3"); > ValidityReport validityReport = schema.validate(); if(validityReport > != null) > System.out.println("Model consistency: " + > validityReport.isValid()); else System.out.println("No consistency > report"); > Reasoner reasoner = ReasonerRegistry.getOWLReasoner(); > reasoner.bindSchema(schema); > InfModel infModel = ModelFactory.createInfModel(reasoner, data); > infModel.write(System.out,"N3"); > ValidityReport validityReport1 = infModel.validate(); > if(validityReport1 != null) > System.out.println("Model consistency: " + validityReport1.isValid()); > else > System.out.println("No consistency report"); } >
