virtuoso-opensource icon indicating copy to clipboard operation
virtuoso-opensource copied to clipboard

Binding an IRI consisting of special characters can cause a syntax error

Open slater2022 opened this issue 3 years ago • 0 comments

String queryStr = " select ?p ?o  where {  ?s ?p ?o.  }";
try (VirtuosoRepositoryConnection connection = (VirtuosoRepositoryConnection) new VirtuosoRepository("jdbc:virtuoso://localhost:1111", "dba", "dba").getConnection()) {
    TupleQuery tupleQuery = connection.prepareTupleQuery(queryStr);
    tupleQuery.setBinding("s", connection.getValueFactory().createIRI("http://dbpedia.org/resource/北京"));
    TupleQueryResult evaluate = tupleQuery.evaluate();
    while (evaluate.hasNext()) {
        BindingSet bindingSet = evaluate.next();
        System.out.println(bindingSet.getValue("p"));
    }
}

In VirtuosoRepositoryConnection.append(IRI uri, StringBuilder sb, boolean inTriplePattern), escapeString changes queryStr to “ select ?p ?o where { <http://dbpedia.org/resource/\u5317\u4EAC> ?p ?o. }” causing syntax error

$ ./virtuoso-t -?
Virtuoso Open Source Edition (Column Store) (multi threaded)
Version 7.2.7.3234-pthreads as of May 18 2022 (67261301a)
Compiled for Linux (x86_64-generic_glibc25-linux-gnu)
Copyright (C) 1998-2022 OpenLink Software
$ java -jar ./lib/virt_rdf4j.jar
OpenLink Virtuoso(TM) Provider for RDF4J(TM) Version 3.7.6 [Build 1.15]
$ java -jar ./lib/virtjdbc4_2.jar
OpenLink Virtuoso(TM) Driver with SSL support for JDBC(TM) Version 4.2 [Build 3.122]

slater2022 avatar Sep 14 '22 03:09 slater2022