- From: Holger Knublauch <holger@topquadrant.com>
- Date: Mon, 25 May 2015 10:00:02 +1000
- To: "public-data-shapes-wg@w3.org" <public-data-shapes-wg@w3.org>
On 5/23/2015 4:34, Arthur Ryman wrote:
> Holger,
>
> On Thu, May 21, 2015 at 7:20 PM, Holger Knublauch
> <holger@topquadrant.com> wrote:
>> I have updated the draft* to make a specific simple suggestion on how to
>> resolve this issue.
>>
>> 1) sh:valueType. This case was already handled.
> I think we need to let user decide is they want the rdfs:subClassOf*
> expression added to the property path. That is why I suggested we have
> two properties sh:valueType and sh:valueClass. Your current behaviour
> corresponds to what I called sh:valueClass. For the case of matching
> against just rdf:type, we have the escape hatch of treating rdf:type
> as just another property, and constraining it's allowed value to be
> just the desired type. However, we'd need a way to do that for what
> you call validateNode.
Can you back this up with requirements, i.e. do you have a use case in
which a constraint applies to a specific class, but not its subclasses?
I believe constraints should only ever narrow down the constraints
related to superclasses. The work-around would be to insert a
pre-condition into the constraint attached at the superclass, to make
sure that the scope of this constraint only includes direct instances of
the class and not its subclasses. This is already doable, although I
don't think this case is frequent enough to suggest its own keyword in
the core language.
>
>> 3) Per-query entailment. I have added a section 12.4
>> Arthur, I have seen you suggested sh:assumes for the same job, but I believe
>> this is SPARQL-specificEntailment applies to RDF, not just SPARQL.
> It is true that SPARQL 1.1 defined a set of IRIs to define entailment
> regimes, but they make sense for any constraint language, including
> JS. The entailment regime determines what triples the constraint sees.
Consider you want to test the same example constraint as in [1], so that
engines can either use SPARQL or JavaScript:
ex:EntailmentExampleShape
a sh:Shape ;
sh:constraint [
sh:message "Labels must be in English" ;
sh:sparqlEntailment <http://www.w3.org/ns/entailment/RDFS> ;
sh:sparql """
SELECT ?this
WHERE {
?this rdfs:label ?label .
FILTER (lang(?label) != "en")
}""" ;
shjs:jsonld """
(JavaScript code that finds all sub-properties of
rdfs:label
and checks that all values of those are in english)
""" ;
] .
This demonstrates that each language may have its own way of dealing
with entailments. Each executable snippet (sh:sparql or shjs:jsonld) can
do whatever it likes, and even if sh:sparql relied on triple-level RDFS
entailment, JavaScript does not need to rely on that, and can walk
through sub-properties manually. If JavaScript code indeed relied on
entailments, then this should IMHO be specified using something like
shjs:jsonldEntailment.
I hope this clarifies it.
Thanks,
Holger
[1] http://w3c.github.io/data-shapes/shacl/#sparql-entailment
Received on Monday, 25 May 2015 00:02:01 UTC