Re: Can Shapes always be Classes?

On 11/21/2014 17:54, Dimitris Kontokostas wrote:
> Hi Holger, I am trying to understand the SPIN discovery mechanism a 
> little better, sorry if you already answered this earlier but couldn't 
> find the answer.
> I can imagine how it works in simple cases but where would you store 
> the following two constraints:
> 1) a Person should never be a Place (owl disjoint classes)

Assuming you want to use the triple

     ex:Person owl:disjointWith ex:Place

for that, then this constraint could be attached to owl:Class:

ASK WHERE {
     ?this owl:disjointWith ?other .
     ?instance a ?this .
     ?instance a ?other .
}

Since you are basically defining a meta-language (here: 
owl:disjointWith), I guess it makes sense to attach the constraint to 
the metaclass too.

Alternatively, you could also attach it to rdfs:Resource.

> 2) whenever a resource has property x or/and property y then it should 
> have property z

This depends on how you want to model this. We have a SPIN template in 
production that ensures that if an instance has a value for ?property 
then it must also have a value for ?otherProperty. This can be attached 
to the class where those properties occur, e.g. as

ex:Person
     spin:constraint [
         a spl:ExistencePropertyPairConstraint ;
         arg:property ex:firstName ;
         arg:otherProperty ex:lastName
     ]

and the body of that template is

CONSTRUCT {
     _:b0 a spin:ConstraintViolation .
     _:b0 spin:violationRoot ?this .
     _:b0 spin:violationPath ?property .
     _:b0 rdfs:label ?message .
}
WHERE {
     FILTER EXISTS {
         ?this ?otherProperty ?someValue .
     } .
     FILTER NOT EXISTS {
         ?this ?property ?object .
     } .
     BIND (CONCAT("Property must have a value because ", ?otherProperty, 
" has") AS ?message) .
}


>
> I assume it should be rdfs:Resource, owl:Thing or rdf:Property, right?
> Is it up to the user to decide this and what happens if he chooses to 
> attach it in one of the mentioned class / property?

Yes it's up to the user.

> Does this work for all subclasses of the general classes? i.e. can he 
> attach a constraint to owl:ObjectProperty?

Yes.

HTH
Holger

Received on Friday, 21 November 2014 08:53:32 UTC