Skip to content

Commit fc8a382

Browse files
author
James Leigh
authored
Merge pull request #895 from jamesrdf/issues/#77-normalize-constants
Fix #77: Normalize typed literals in SPARQL parser
2 parents d2e45b7 + 0bd0106 commit fc8a382

2 files changed

Lines changed: 27 additions & 2 deletions

File tree

core/queryparser/sparql/src/main/java/org/eclipse/rdf4j/query/parser/sparql/TupleExprBuilder.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import org.eclipse.rdf4j.model.Literal;
2222
import org.eclipse.rdf4j.model.Value;
2323
import org.eclipse.rdf4j.model.ValueFactory;
24+
import org.eclipse.rdf4j.model.datatypes.XMLDatatypeUtil;
2425
import org.eclipse.rdf4j.model.impl.BooleanLiteral;
2526
import org.eclipse.rdf4j.model.vocabulary.FN;
2627
import org.eclipse.rdf4j.model.vocabulary.RDF;
@@ -2765,7 +2766,8 @@ public ValueConstant visit(ASTRDFLiteral node, Object data)
27652766
// invalid URI
27662767
throw new VisitorException(e.getMessage());
27672768
}
2768-
literal = valueFactory.createLiteral(label, datatype);
2769+
String normalized = XMLDatatypeUtil.normalize(label, datatype);
2770+
literal = valueFactory.createLiteral(normalized, datatype);
27692771
}
27702772
else if (lang != null) {
27712773
literal = valueFactory.createLiteral(label, lang);
@@ -2781,7 +2783,9 @@ else if (lang != null) {
27812783
public ValueConstant visit(ASTNumericLiteral node, Object data)
27822784
throws VisitorException
27832785
{
2784-
Literal literal = valueFactory.createLiteral(node.getValue(), node.getDatatype());
2786+
IRI datatype = node.getDatatype();
2787+
String label = XMLDatatypeUtil.normalize(node.getValue(), datatype);
2788+
Literal literal = valueFactory.createLiteral(label, datatype);
27852789
return new ValueConstant(literal);
27862790
}
27872791

core/queryparser/sparql/src/test/java/org/eclipse/rdf4j/query/parser/sparql/SPARQLParserTest.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929
import org.eclipse.rdf4j.query.algebra.StatementPattern;
3030
import org.eclipse.rdf4j.query.algebra.TupleExpr;
3131
import org.eclipse.rdf4j.query.algebra.UpdateExpr;
32+
import org.eclipse.rdf4j.query.algebra.ValueConstant;
33+
import org.eclipse.rdf4j.query.algebra.helpers.AbstractQueryModelVisitor;
3234
import org.eclipse.rdf4j.query.parser.ParsedBooleanQuery;
3335
import org.eclipse.rdf4j.query.parser.ParsedGraphQuery;
3436
import org.eclipse.rdf4j.query.parser.ParsedQuery;
@@ -301,4 +303,23 @@ public void testSES1927UnequalLiteralValueConstants2()
301303
assertNotEquals(leftArg.getObjectVar().getName(), rightArg.getObjectVar().getName());
302304
}
303305

306+
@Test
307+
public void testAdditiveExpression()
308+
throws Exception
309+
{
310+
String ask = "ASK { ?this <urn:test:score> ?score FILTER (!(?score+5 != 0)) }";
311+
312+
ParsedQuery q = parser.parseQuery(ask, null);
313+
q.getTupleExpr().visit(new AbstractQueryModelVisitor<Exception>() {
314+
315+
public void meet(ValueConstant node)
316+
throws Exception
317+
{
318+
String label = node.getValue().stringValue();
319+
assertFalse(label, label.startsWith("+"));
320+
}
321+
});
322+
323+
}
324+
304325
}

0 commit comments

Comments
 (0)