SEMICeu / DCAT-AP

This is the issue tracker for the maintenance of DCAT-AP
https://joinup.ec.europa.eu/solution/dcat-application-profile-data-portals-europe
78 stars 24 forks source link

dcat-ap-SHACL.ttl uses <https://purl.eu/ns/shacl#message> instead of shacl:message for validation messages #355

Open pmaria opened 9 months ago

pmaria commented 9 months ago

dcat-ap-SHACL.ttl uses <https://purl.eu/ns/shacl#message> instead of shacl:message for validation messages:

https://github.com/SEMICeu/DCAT-AP/blob/b9b20d1d25e6d827754e93af918344a46dc41a1b/releases/3.0.0/shacl/dcat-ap-SHACL.ttl#L73

Is this intended? https://purl.eu/ns/shacl#message is not dereferenceable.

bertvannuffelen commented 9 months ago

@pmaria This is due a limitation of SHACL specification, to enable multilingual messages in combination with the engine message.

SHACL specifies that shacl:message overwrites the message generated by the engine.

Thus for the constraint

https://semiceu.github.io//DCAT-AP/releases/3.0.0#AgentShape/236f0210baaf149903750c43bbe7012c21debb2a> 
   rdfs:seeAlso "https://semiceu.github.io//DCAT-AP/releases/3.0.0#Agent.type";
  shacl:description "A type of the agent that makes the Catalogue or Dataset available."@en;
  shacl:maxCount 1;
  shacl:name "type"@en;
  shacl:path dc:type.

and the data

<https://test.com/id/agent/1221> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Agent> .
<https://test.com/id/agent/1221> <http://xmlns.com/foaf/0.1/name> "agent 1"@en .
<https://test.com/id/agent/1221> <http://purl.org/dc/terms/type> "type ORG A".
<https://test.com/id/agent/1221> <http://purl.org/dc/terms/type> "type ORG B" . 

The SHACL engine will result a precise message that indicates there are 2 values, instead of 1. " Property may only have 1 value, but found 2" .

If you perform the replacement shacl:message, the message will be: "Maximally 1 values allowed for type".

This happens even if you add a shacl:message in another language that is not provided by the engine. The overwrite will happen.

As the engine message is more detailed and better pinpointing the error, but we also want to support multilingual messages we added an extra property.

You can try it with the ITB testbed which uses the reference SHACL library as it backbone.

Testbed Instance: https://www.itb.ec.europa.eu/shacl/any/upload.

pmaria commented 9 months ago

@bertvannuffelen thanks for the quick and clarifying response.

This might be an interesting issue to raise on https://github.com/w3c/shacl/issues for the possible new SHACL 1.2 WG.