virtuoso-opensource
virtuoso-opensource copied to clipboard
Binding an IRI consisting of special characters can cause a syntax error
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]