Hi, I came across a situation where I want to carry over a blank node ID in a QuerySolutionMap to QueryExecution, to match exact blank node resources rather than have them as variables.
I found an old thread by Holger on this topic: https://mail-archives.apache.org/mod_mbox/jena-users/201308.mbox/browser The suggestion was to use <_:LABEL> URI scheme for blank nodes. https://jena.apache.org/documentation/query/extension.html#blank-node-labels Based on that, I tried this logic: if (instance.isURIResource()) qsm.add(SPIN.THIS_VAR_NAME, instance); if (instance.isAnon()) qsm.add(SPIN.THIS_VAR_NAME, model.createResource("_:" + instance.getId())); However I'm not getting the results I expect. So I decided to make an isolated test: @Test public void bnodeQueryTest() { Model model = ModelFactory.createDefaultModel(); Resource bnode = model.createResource().addProperty(FOAF.name, "whateverest"); AnonId id = bnode.getId(); Query query = QueryFactory.create("SELECT * { ?s ?p ?o }"); QuerySolutionMap qsm = new QuerySolutionMap(); qsm.add("s", model.createResource("_:" + id)); try (QueryExecution qex = QueryExecutionFactory.create(query, model, qsm)) { ResultSet resultSet = qex.execSelect(); assertTrue(resultSet.hasNext()); assertEquals(id, resultSet.next().get("s").asResource().getId()); } } The test fails on assertTrue() because SELECT returns no results. Is the test flawed? Am I misunderstanding the use of this URI scheme? If not, what's the purpose if it cannot match blank nodes in data? Martynas
