Skip to content

Commit

Permalink
I18n regression fix (#289)
Browse files Browse the repository at this point in the history
* fix: get back language filtering for sparql construct query

* feat: LanguageFilteringRDFService sparqlConstructQuery tests added
  • Loading branch information
litvinovg authored and chenejac committed Mar 20, 2023
1 parent 3469c5d commit 5d3e74f
Show file tree
Hide file tree
Showing 5 changed files with 70 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import org.apache.jena.rdf.model.Literal;
import org.apache.jena.rdf.model.Model;
import org.apache.jena.rdf.model.ModelChangedListener;
import org.apache.jena.rdf.model.ModelFactory;
import org.apache.jena.rdf.model.RDFNode;

import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
Expand Down Expand Up @@ -77,7 +78,15 @@ public InputStream sparqlConstructQuery(String query,
@Override
public void sparqlConstructQuery(String query, Model model)
throws RDFServiceException {
s.sparqlConstructQuery(query, model);
if (model.isEmpty()) {
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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,12 @@

import static org.junit.Assert.assertEquals;

import java.io.InputStreamReader;
import java.io.Reader;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
import java.util.List;
Expand All @@ -21,9 +22,15 @@

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.ModelFactory;

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:
Expand All @@ -36,12 +43,15 @@
* </pre>
*/
public class LanguageFilteringRDFServiceTest extends AbstractTestClass {

private static final Log log = LogFactory
.getLog(LanguageFilteringRDFServiceTest.class);

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 TEST_CONSTRUCT_QUERY = "CONSTRUCT { ?s ?o ?p . } WHERE { ?s ?o ?p . }";

private LanguageFilteringRDFService filteringRDFService;
private List<Object> listOfRowIndexedLiterals;
private int literalIndex;
Expand Down Expand Up @@ -158,6 +168,39 @@ public void omnibus() {
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
// ----------------------------------------------------------------------
Expand All @@ -167,7 +210,7 @@ public void omnibus() {
* sort again.
*/
private void testBothWays() {
createLanguageFilter();
createLanguageFilter(null);

buildListOfLiterals();
sortListOfLiterals();
Expand All @@ -184,7 +227,7 @@ private void testBothWays() {
* thrown, and no languages are "lost in translation".
*/
private void testArbitraryOrder() {
createLanguageFilter();
createLanguageFilter(null);

buildListOfLiterals();
sortListOfLiterals();
Expand All @@ -193,16 +236,20 @@ private void testArbitraryOrder() {
buildReversedListOfLiterals();
sortListOfLiterals();
assertLanguages("sort reversed literals");

}

private List<String> list(String... strings) {
return new ArrayList<String>(Arrays.asList(strings));
}

private void createLanguageFilter() {
filteringRDFService = new LanguageFilteringRDFService(null,
preferredLanguages);
private void createLanguageFilter(String fileName) {
OntModel model = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
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() {
Expand Down
Original file line number Diff line number Diff line change
@@ -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" .
Original file line number Diff line number Diff line change
@@ -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" .
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
<http://test.edu/u> rdfs:label "no tag label" .

0 comments on commit 5d3e74f

Please sign in to comment.