I18n regression fix (#289)

* fix: get back language filtering for sparql construct query

* feat: LanguageFilteringRDFService sparqlConstructQuery tests added
This commit is contained in:
Georgy Litvinov 2022-05-20 14:29:59 +02:00 committed by GitHub
parent 0d704f3eb8
commit c41853440f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 70 additions and 8 deletions

View file

@ -22,6 +22,7 @@ import org.apache.jena.query.ResultSetFormatter;
import org.apache.jena.rdf.model.Literal; import org.apache.jena.rdf.model.Literal;
import org.apache.jena.rdf.model.Model; import org.apache.jena.rdf.model.Model;
import org.apache.jena.rdf.model.ModelChangedListener; import org.apache.jena.rdf.model.ModelChangedListener;
import org.apache.jena.rdf.model.ModelFactory;
import org.apache.jena.rdf.model.RDFNode; import org.apache.jena.rdf.model.RDFNode;
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
@ -77,7 +78,15 @@ public class LanguageFilteringRDFService implements RDFService {
@Override @Override
public void sparqlConstructQuery(String query, Model model) public void sparqlConstructQuery(String query, Model model)
throws RDFServiceException { throws RDFServiceException {
if (model.isEmpty()) {
s.sparqlConstructQuery(query, model); s.sparqlConstructQuery(query, model);
filterModel.filterModel(model, langs);
} else {
Model constructedModel = ModelFactory.createDefaultModel();
s.sparqlConstructQuery(query, constructedModel);
filterModel.filterModel(constructedModel, langs);
model.add(constructedModel);
}
} }
@Override @Override

View file

@ -4,11 +4,12 @@ package edu.cornell.mannlib.vitro.webapp.rdfservice.filter;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import java.io.InputStreamReader;
import java.io.Reader;
import java.lang.reflect.Constructor; import java.lang.reflect.Constructor;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator; import java.util.Comparator;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
@ -21,9 +22,15 @@ import org.junit.Test;
import stubs.org.apache.jena.rdf.model.LiteralStub; import stubs.org.apache.jena.rdf.model.LiteralStub;
import org.apache.jena.ontology.OntModel;
import org.apache.jena.ontology.OntModelSpec;
import org.apache.jena.rdf.model.Literal; import org.apache.jena.rdf.model.Literal;
import org.apache.jena.rdf.model.ModelFactory;
import edu.cornell.mannlib.vitro.testing.AbstractTestClass; import edu.cornell.mannlib.vitro.testing.AbstractTestClass;
import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFService;
import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFServiceException;
import edu.cornell.mannlib.vitro.webapp.rdfservice.impl.jena.model.RDFServiceModel;
/** /**
* This is the matching order we expect to see: * This is the matching order we expect to see:
@ -36,12 +43,15 @@ import edu.cornell.mannlib.vitro.testing.AbstractTestClass;
* </pre> * </pre>
*/ */
public class LanguageFilteringRDFServiceTest extends AbstractTestClass { public class LanguageFilteringRDFServiceTest extends AbstractTestClass {
private static final Log log = LogFactory private static final Log log = LogFactory
.getLog(LanguageFilteringRDFServiceTest.class); .getLog(LanguageFilteringRDFServiceTest.class);
private static final String COLLATOR_CLASSNAME = "edu.cornell.mannlib.vitro.webapp.rdfservice.filter.LanguageFilteringRDFService$RowIndexedLiteralSortByLang"; private static final String COLLATOR_CLASSNAME = "edu.cornell.mannlib.vitro.webapp.rdfservice.filter.LanguageFilteringRDFService$RowIndexedLiteralSortByLang";
private static final String RIL_CLASSNAME = "edu.cornell.mannlib.vitro.webapp.rdfservice.filter.LanguageFilteringRDFService$RowIndexedLiteral"; private static final String RIL_CLASSNAME = "edu.cornell.mannlib.vitro.webapp.rdfservice.filter.LanguageFilteringRDFService$RowIndexedLiteral";
private static final String TEST_CONSTRUCT_QUERY = "CONSTRUCT { ?s ?o ?p . } WHERE { ?s ?o ?p . }";
private LanguageFilteringRDFService filteringRDFService; private LanguageFilteringRDFService filteringRDFService;
private List<Object> listOfRowIndexedLiterals; private List<Object> listOfRowIndexedLiterals;
private int literalIndex; private int literalIndex;
@ -158,6 +168,39 @@ public class LanguageFilteringRDFServiceTest extends AbstractTestClass {
testBothWays(); testBothWays();
} }
@Test
public void sparqlConstructQueryTestGetPreferredExistingLang() throws RDFServiceException {
preferredLanguages = list("en-US", "de-DE");
OntModel model;
createLanguageFilter("LangFilteringTestModelEn_De_NoTag.n3");
model = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
filteringRDFService.sparqlConstructQuery(TEST_CONSTRUCT_QUERY, model);
assertEquals(model.size(),1);
assertEquals(model.listStatements().next().getObject().toString(), "US label@en-US");
}
@Test
public void sparqlConstructQueryTestGetSecodAvailPreferredLang() throws RDFServiceException {
preferredLanguages = list("en-US", "de-DE");
OntModel model;
createLanguageFilter("LangFilteringTestModelDe_NoTag.n3");
model = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
filteringRDFService.sparqlConstructQuery(TEST_CONSTRUCT_QUERY, model);
assertEquals(model.size(),1);
assertEquals(model.listStatements().next().getObject().toString(), "DE label@de-DE");
}
@Test
public void sparqlConstructQueryTestGetNoTagAsLangsNotAvailable() throws RDFServiceException {
preferredLanguages = list("en-US", "de-DE");
OntModel model;
createLanguageFilter("LangFilteringTestModelNoTag.n3");
model = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
filteringRDFService.sparqlConstructQuery(TEST_CONSTRUCT_QUERY, model);
assertEquals(model.size(),1);
assertEquals(model.listStatements().next().getObject().toString(), "no tag label");
}
// ---------------------------------------------------------------------- // ----------------------------------------------------------------------
// Helper methods // Helper methods
// ---------------------------------------------------------------------- // ----------------------------------------------------------------------
@ -167,7 +210,7 @@ public class LanguageFilteringRDFServiceTest extends AbstractTestClass {
* sort again. * sort again.
*/ */
private void testBothWays() { private void testBothWays() {
createLanguageFilter(); createLanguageFilter(null);
buildListOfLiterals(); buildListOfLiterals();
sortListOfLiterals(); sortListOfLiterals();
@ -184,7 +227,7 @@ public class LanguageFilteringRDFServiceTest extends AbstractTestClass {
* thrown, and no languages are "lost in translation". * thrown, and no languages are "lost in translation".
*/ */
private void testArbitraryOrder() { private void testArbitraryOrder() {
createLanguageFilter(); createLanguageFilter(null);
buildListOfLiterals(); buildListOfLiterals();
sortListOfLiterals(); sortListOfLiterals();
@ -193,16 +236,20 @@ public class LanguageFilteringRDFServiceTest extends AbstractTestClass {
buildReversedListOfLiterals(); buildReversedListOfLiterals();
sortListOfLiterals(); sortListOfLiterals();
assertLanguages("sort reversed literals"); assertLanguages("sort reversed literals");
} }
private List<String> list(String... strings) { private List<String> list(String... strings) {
return new ArrayList<String>(Arrays.asList(strings)); return new ArrayList<String>(Arrays.asList(strings));
} }
private void createLanguageFilter() { private void createLanguageFilter(String fileName) {
filteringRDFService = new LanguageFilteringRDFService(null, OntModel model = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
preferredLanguages); if (fileName != null) {
Reader reader = new InputStreamReader(this.getClass().getResourceAsStream(fileName));
model.read(reader, "http://test.edu/", "N3");
}
RDFService rdfService = new RDFServiceModel(model);
filteringRDFService = new LanguageFilteringRDFService(rdfService, preferredLanguages);
} }
private void buildListOfLiterals() { private void buildListOfLiterals() {

View file

@ -0,0 +1,2 @@
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
<http://test.edu/u> rdfs:label "DE label"@de-DE, "no tag label" .

View file

@ -0,0 +1,2 @@
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
<http://test.edu/u> rdfs:label "US label"@en-US , "DE label"@de-DE, "no tag label" .

View file

@ -0,0 +1,2 @@
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
<http://test.edu/u> rdfs:label "no tag label" .