You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2022/08/15 09:52:02 UTC
[jena] branch main updated: JENA-2345: Better report message for DatatypeConstraint
This is an automated email from the ASF dual-hosted git repository.
andy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/jena.git
The following commit(s) were added to refs/heads/main by this push:
new d74b7b1464 JENA-2345: Better report message for DatatypeConstraint
new 36de811f7b Merge pull request #1479 from afs/jena2345-sh-datatype
d74b7b1464 is described below
commit d74b7b1464075d9a095e7b136fbec86829e03e62
Author: Andy Seaborne <an...@apache.org>
AuthorDate: Sun Aug 14 11:46:11 2022 +0100
JENA-2345: Better report message for DatatypeConstraint
---
.../engine/constraint/DatatypeConstraint.java | 22 ++++++++++++++++------
.../main/java/org/apache/jena/shacl/lib/ShLib.java | 7 +++++++
2 files changed, 23 insertions(+), 6 deletions(-)
diff --git a/jena-shacl/src/main/java/org/apache/jena/shacl/engine/constraint/DatatypeConstraint.java b/jena-shacl/src/main/java/org/apache/jena/shacl/engine/constraint/DatatypeConstraint.java
index 3f0be7f9e4..ecd364e703 100644
--- a/jena-shacl/src/main/java/org/apache/jena/shacl/engine/constraint/DatatypeConstraint.java
+++ b/jena-shacl/src/main/java/org/apache/jena/shacl/engine/constraint/DatatypeConstraint.java
@@ -83,15 +83,25 @@ public class DatatypeConstraint extends ConstraintTerm {
}
if ( ! n.isLiteral() )
return new ReportItem(toString()+" : Not a literal", n);
- String dtStr = vCxt.getShapesGraph().getPrefixMapping().qnameFor(dtURI);
+ try {
+ String dtStrExpected = formatDatatype(vCxt, rdfDatatype);
+ String dtStrActual = formatDatatype(vCxt, n.getLiteralDatatype());
+ String errMsg = String.format("%s: Expected %s : Actual %s : Node %s", toString(), dtStrExpected, dtStrActual, displayStr(n));
+ return new ReportItem(errMsg, n);
+ } catch (RuntimeException ex) {
+ String errMsg = toString() + "Got node: "+ n;
+ return new ReportItem(errMsg, n);
- if ( dtStr == null ) {
- Node dt = NodeFactory.createURI(n.getLiteralDatatypeURI());
- dtStr = ShLib.displayStr(dt);
}
+ }
- String errMsg = toString()+" : Got datatype "+dtStr+" : Node "+displayStr(n);
- return new ReportItem(errMsg, n);
+ private static String formatDatatype(ValidationContext vCxt, RDFDatatype dt) {
+ // Format including the data prefixes.
+ String dtStr = vCxt.getShapesGraph().getPrefixMapping().qnameFor(dt.getURI());
+ if ( dtStr == null )
+ // No prefix in the data.
+ dtStr = ShLib.displayStr(dt);
+ return dtStr;
}
@Override
diff --git a/jena-shacl/src/main/java/org/apache/jena/shacl/lib/ShLib.java b/jena-shacl/src/main/java/org/apache/jena/shacl/lib/ShLib.java
index b4e2226275..127d711a3d 100644
--- a/jena-shacl/src/main/java/org/apache/jena/shacl/lib/ShLib.java
+++ b/jena-shacl/src/main/java/org/apache/jena/shacl/lib/ShLib.java
@@ -25,8 +25,10 @@ import java.util.*;
import org.apache.jena.atlas.io.IndentedLineBuffer;
import org.apache.jena.atlas.io.IndentedWriter;
import org.apache.jena.atlas.lib.StrUtils;
+import org.apache.jena.datatypes.RDFDatatype;
import org.apache.jena.graph.Graph;
import org.apache.jena.graph.Node;
+import org.apache.jena.graph.NodeFactory;
import org.apache.jena.query.*;
import org.apache.jena.rdf.model.RDFNode;
import org.apache.jena.rdf.model.Resource;
@@ -202,6 +204,11 @@ public class ShLib {
return displayStr(n, nodeFmtAbbrev);
}
+ public static String displayStr(RDFDatatype dt) {
+ Node n = NodeFactory.createURI(dt.getURI());
+ return displayStr(n, nodeFmtAbbrev);
+ }
+
public static String displayStr(Node n, NodeFormatter nodeFmt) {
IndentedLineBuffer sw = new IndentedLineBuffer() ;
nodeFmt.format(sw, n);