- From: Holger Knublauch <holger@topquadrant.com>
- Date: Sat, 04 Apr 2015 14:21:59 +1000
- To: "public-data-shapes-wg@w3.org" <public-data-shapes-wg@w3.org>
On 4/3/15 8:12 PM, Richard Cyganiak wrote: > In a punning design, I think the main difference would be that the triple { rdfs:Class rdfs:subClassOf sh:Shape } would be absent. > > To make specialisation work, the cleanest version would appeal to RDFS inference to get additional rdf:type triples, and thus any constraints that happen to be attached to these types would go into effect as well. (I’m not saying that this would necessarily be my preferred solution, because it sucks for implementers. It’s just the simplest to specify.) We need to be careful here. This is not just a topic that matters to the specification, but also to end users. Whether inferencing is present/mandatory would change how people write the WHERE clauses of constraints. For example when they query the rdf:type of an instance they would iterate over all superclasses of the directly asserted type too. Is this desirable? Also, is it even realistic to assume that all implementation have RDFS inferencing activated? Do these implementations handle incremental updates/edits well enough? Don't we exclude too much of the real-world market by making RDFS inferencing mandatory? What about all those light-weight implementations, even client-side data models - do they have RDFS engines available? Does the notion of entailment appeal to people coming into SHACL from some mainstream OO technology? I am not sure about all this. My current preference would be to have switches where each constraint or maybe graph can point to one of the SPARQL entailment profiles (which already have proper URIs [1]). This would allow them to activate not just RDFS but also OWL and rule-based entailments such as SPIN or (dare I say it) RIF, while at the same time not making either mandatory. I believe the engine can written in such a way that it does the bit of inheritance treatment (for shape specialization) correctly no matter of whether entailment is activated on triple-level or not. > In both your draft design and a punning design, the difference between sh:valueType and sh:valueShape is very subtle and difficult to explain. Shape authors that decide to attach constraints directly to classes would likely be confused which of those to use. To me the difference looks pretty clear (but it may only be me). The value of sh:valueType is a class, while sh:valueShape is a shape (which, depending on the design, may also be a class although this is unlikely). We would explain that sh:valueType is similar to rdfs:range, while sh:valueShape is for nested additional tests that need to be true for the values in addition to being instance of the specified sh:valueType. To me, sh:valueShape is mostly syntactic sugar so that people can express more things in the high-level language, than relying on SPARQL. Holger [1] http://www.w3.org/TR/sparql11-entailment/#RDFSEntRegime
Received on Saturday, 4 April 2015 04:22:31 UTC