Re: using classes to control constraints

On Wed, Feb 11, 2015 at 9:22 PM, Holger Knublauch <holger@topquadrant.com>
wrote:

>  On 2/12/2015 14:54, Michel Dumontier wrote:
>
> Hi,
>   i would like to have shapes to be compatible with OWL entailment.
>
>
> The general topic of how shapes interact with entailment is still
> officially undecided. I believe many people here assume that is that users
> can activate entailment on their graph and the language itself doesn't need
> to care about that.
>
>   For instance, if I place a superclass in a constraint, i would like to
> validate positive where i have a subclass in the data.  But I see that as a
> choice that should be specified with the shape, as I could imagine that you
> might also want to validate with only the specified class.
>
>
> Could you clarify whether this is about the engine (which constraints
> checks to perform) or about the constraint check itself (e.g. to also
> accept subclasses of a class for valueType/range of a property). Above you
> sound like you want to former, and LDOM handles this like SPIN did - when
> you attach a constraint to a class then it also applies to its subclasses.
> When you have an instance of a subclass then it will walk up the
> superclasses to make sure that all constraints pass. I wouldn't know how to
> make this a choice - this should IMHO always happen. In SPARQL-based
> constraint checks, you can fine tune the behavior, e.g. by either selecting
> rdfs:subClassOf or rdfs:subClassOf*.
>
> Examples would help.
>
>
the FOAF vocabulary defines foaf:Person, foaf:Group, and foaf:Organization
as subclasses of an foaf:Agent. Let's say that my data contains foaf
descriptions of people and the organizations that they work for. I want to
check that all foaf:Agent (and instances of subclasses) in my graph are
annotated with a non-empty rdfs:label. This requires reasoning about the
rdfs:subClassOf relation in order to retrieve people and organizations and
check for the existence of the annotation.

To illustrate the second case, where we specifically want to check for an
annotation value, which would not hold true if present as a more specific
type in a vocabulary. Say I first annotate people and organizations with
their spatial location in terms of the zip code that they are in, but i
want to distribute my data with the location restricted to a single county
(this is important for data privacy /de-identification in health care
data). I use some geo-lookup table to relate zip code to city, and city to
county (presumably through some attribute that identifies it as such), and
generate RDF accordingly. I then create a shape to check that all
foaf:Agents have exactly one location, and that the location is restricted
to county level. I do this, because there's always the chance that the
geodata i used is wrong or that the patient data has an incorrect zip code
that doesn't map to anything.

m.



> Thanks
> Holger
>
>

Received on Thursday, 12 February 2015 17:23:57 UTC