- From: Holger Knublauch <holger@topquadrant.com>
- Date: Fri, 20 Mar 2015 13:20:09 +1000
- To: public-data-shapes-wg@w3.org
Hi Richard,
thanks for sharing this, which is relevant for
https://www.w3.org/2014/data-shapes/wiki/Requirements#Human-readable_Violation_Messages
which currently has some objections. I notice that you are (also) using
a string template mechanism with placeholders such as {varName}. I
believe we could/should use something similar for the values of
sh:message. This may address some concerns by Jose, because it would
allow the constraints/templates to only produce the human-readable
messages on demand, from an abstract validation data structure (sh:root,
sh:path etc). SHACL templates already have a simple outline for such a
mechanism, inherited from SPIN:
http://w3c.github.io/data-shapes/shacl/#template-labelTemplate
In many examples that I have seen though, simple value replacements are
not sufficient, and messages need to be assembled more dynamically. So I
think there remains value in having the fallback to produce sh:message
strings as part of the WHERE clause.
Question: do you have any specific grammar for the string substitution
templates, and do you see a realistic way to also support conditional
insertions, e.g. "Count must be > {?minCount}. Count must be <
{?maxCount}" so that the min and max sections only appear if a template
has a value for ?min/maxCount?
Holger
On 3/19/2015 23:36, Richard Cyganiak wrote:
> Here’s some input that might be relevant to the discussion about human-readable validation reports.
>
> This is part of a validator for R2RML documents, implemented in Java. R2RML documents are often authored by hand in Turtle. Therefore, to be helpful, a validator must provide concrete, detailed and specific error messages. I think that most of what this particular validator does, should be doable in SHACL.
>
> The following file contains all the error messages that the validator can generate:
>
> https://github.com/d2rq/d2rq/blob/develop/src/org/d2rq/validation/Message.java
>
> Some of these are “high-level” stuff, where one could imagine the error message being hardcoded in the SHACL processor, for example:
>
> DUPLICATE_VALUE(Level.Error,
> "Duplicate value for {property}",
> "The resource {resource} has multiple values for {property} ({objects}); only one is allowed.”),
>
> But most are specific to R2RML, and the human-readable error message would have to be supplied in the SHACL document for R2RML, for example:
>
> INVALID_COLUMN_NAME(Level.Error, "Malformed column name {string}",
> "Malformed column name {string} in property {property} of {resource}: {details}.”),
>
> ONLY_ALLOWED_IF_TERM_TYPE_LITERAL(Level.Error,
> "{property} not allowed for this term type”,
> "The property {property} is only allowed on term maps that generate literals, but the rr:termType of {resource} is not rr:Literal.”),
>
> POSSIBLE_UNSAFE_SEPARATOR_IN_IRI_TEMPLATE(Level.Warning,
> "Possible unsafe separator in IRI template”,
> "Column references in the {property} of {resource} ({object}) are separated by a possibly unsafe delimiter. It is recommended that IRI sub-delim characters are used to delimit column references in IRI templates."),
>
> For reference, each validation message has the following fields:
>
> Level level;
> String messageTitle;
> String messageTemplate;
> Resource subject;
> List<Property> predicates;
> List<RDFNode> objects;
> String detailCode;
> String details;
>
> Best,
> Richard
Received on Friday, 20 March 2015 03:21:19 UTC