show class names in list views corresponding to preferred languages
This commit is contained in:
parent
8c8985bdc2
commit
f518e78760
2 changed files with 44 additions and 9 deletions
|
@ -868,6 +868,28 @@ public class JenaBaseDao extends JenaBaseDaoCon {
|
||||||
return label;
|
return label;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Searches for literal in preferred language.
|
||||||
|
* @param labels
|
||||||
|
* the literals to search; must not be null
|
||||||
|
* @return the literal in preferred language if its containing in given list;
|
||||||
|
* otherwise the first entry will returned; returns null if an empty list was given
|
||||||
|
*/
|
||||||
|
protected Literal tryLiteralForPreferredLanguages(List<Literal> labels) {
|
||||||
|
|
||||||
|
// search for literal of preferred language
|
||||||
|
for (Literal literal : labels) {
|
||||||
|
for (String lang : PREFERRED_LANGUAGES) {
|
||||||
|
if (lang.equals(literal.getLanguage())) {
|
||||||
|
return literal;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// return first literal as last resort
|
||||||
|
return 0 == labels.size() ? null : labels.get(0);
|
||||||
|
}
|
||||||
|
|
||||||
private Literal tryPropertyForPreferredLanguages( OntResource r, Property p, boolean alsoTryNoLang ) {
|
private Literal tryPropertyForPreferredLanguages( OntResource r, Property p, boolean alsoTryNoLang ) {
|
||||||
Literal label = null;
|
Literal label = null;
|
||||||
List<RDFNode> labels = r.listPropertyValues(p).toList();
|
List<RDFNode> labels = r.listPropertyValues(p).toList();
|
||||||
|
|
|
@ -7,7 +7,9 @@ import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Map.Entry;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
@ -17,6 +19,7 @@ import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
|
||||||
import org.apache.jena.ontology.OntModel;
|
import org.apache.jena.ontology.OntModel;
|
||||||
|
import org.apache.jena.ontology.OntResource;
|
||||||
import org.apache.jena.query.Dataset;
|
import org.apache.jena.query.Dataset;
|
||||||
import org.apache.jena.query.Query;
|
import org.apache.jena.query.Query;
|
||||||
import org.apache.jena.query.QueryExecution;
|
import org.apache.jena.query.QueryExecution;
|
||||||
|
@ -26,6 +29,7 @@ import org.apache.jena.query.QuerySolution;
|
||||||
import org.apache.jena.query.QuerySolutionMap;
|
import org.apache.jena.query.QuerySolutionMap;
|
||||||
import org.apache.jena.query.ResultSet;
|
import org.apache.jena.query.ResultSet;
|
||||||
import org.apache.jena.query.Syntax;
|
import org.apache.jena.query.Syntax;
|
||||||
|
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.ModelFactory;
|
import org.apache.jena.rdf.model.ModelFactory;
|
||||||
import org.apache.jena.rdf.model.Property;
|
import org.apache.jena.rdf.model.Property;
|
||||||
|
@ -503,7 +507,8 @@ public class ObjectPropertyStatementDaoJena extends JenaBaseDao implements Objec
|
||||||
return Collections.emptyMap();
|
return Collections.emptyMap();
|
||||||
}
|
}
|
||||||
|
|
||||||
Map<String, String> types = new LinkedHashMap<String, String>();
|
Map<String, String> result = new LinkedHashMap<String, String>();
|
||||||
|
Map<String, List<Literal>> types = new LinkedHashMap<String, List<Literal>>();
|
||||||
DatasetWrapper w = dwf.getDatasetWrapper();
|
DatasetWrapper w = dwf.getDatasetWrapper();
|
||||||
Dataset dataset = w.getDataset();
|
Dataset dataset = w.getDataset();
|
||||||
dataset.getLock().enterCriticalSection(Lock.READ);
|
dataset.getLock().enterCriticalSection(Lock.READ);
|
||||||
|
@ -521,16 +526,24 @@ public class ObjectPropertyStatementDaoJena extends JenaBaseDao implements Objec
|
||||||
}
|
}
|
||||||
|
|
||||||
RDFNode labelNode = soln.get("label");
|
RDFNode labelNode = soln.get("label");
|
||||||
String label = null;
|
if (StringUtils.isNotBlank(type) && labelNode.isLiteral()) {
|
||||||
if (labelNode.isLiteral()) {
|
|
||||||
label = labelNode.asLiteral().getLexicalForm();
|
List<Literal> langLabels = types.get(type);
|
||||||
}
|
if (null == langLabels) {
|
||||||
|
types.put(type, langLabels = new ArrayList<Literal>());
|
||||||
if (StringUtils.isNotBlank(type) && StringUtils.isNotBlank(label)) {
|
}
|
||||||
types.put(type, label);
|
langLabels.add(labelNode.asLiteral());
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return types;
|
|
||||||
|
// choose labels corresponding to preferred languages
|
||||||
|
Set<Entry<String, List<Literal>>> typeEntries = types.entrySet();
|
||||||
|
for (Entry<String, List<Literal>> current : typeEntries) {
|
||||||
|
result.put(current.getKey(), tryLiteralForPreferredLanguages(current.getValue()).getLexicalForm());
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("Error getting most specific types for subject " + subjectUri);
|
log.error("Error getting most specific types for subject " + subjectUri);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue