Skip to content

Commit

Permalink
Merge pull request #68 from hbz/hbz-lobid-resources-132-removeUnneces…
Browse files Browse the repository at this point in the history
…saryaArraysAndObjects

Hbz lobid resources 132 remove unnecessarya arrays and objects
  • Loading branch information
dr0i authored Jan 4, 2017
2 parents 273970a + 1a5d3aa commit 66c35c3
Show file tree
Hide file tree
Showing 233 changed files with 10,086 additions and 6,643 deletions.
13 changes: 13 additions & 0 deletions src/main/java/de/hbz/lobid/helper/Etikett.java
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,19 @@ public Etikett(String subj) {
*/
public String container = null;

public static enum Container {
LIST("@list"), SET("@set"), STRING("@string");
private final String name;

Container(final String name) {
this.name = name;
}

public String getName() {
return name;
}
}

/**
* A weigth for ordering
*/
Expand Down
43 changes: 32 additions & 11 deletions src/main/java/de/hbz/lobid/helper/EtikettMaker.java
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/*Copyright (c) 2015 "hbz"
/*Copyright (c) 2015,2016 "hbz"
This file is part of lobid-rdf-to-json.
Expand Down Expand Up @@ -33,6 +33,7 @@ License, or (at your option) any later version.

/**
* @author Jan Schnasse
* @author Pascal Christoph (dr0i)
*
*/
public class EtikettMaker implements EtikettMakerInterface {
Expand Down Expand Up @@ -88,7 +89,13 @@ public Map<String, Object> getContext() {
}

/*
* (non-Javadoc)
* Trying to get a label as sidecar for URIs. First fallback: If an etikett is
* configured but "label" is missing the "name" will be taken. Second
* fallback: the domainname (and a possible path) will be extracted from the
* URI. This domainname is lookuped in the labels. Last fallback: If there is
* nothing found, the domainname itself will be the label.
*
* In the end there will be a label for every URI.
*
* @see de.hbz.lobid.helper.EtikettMakerInterface#getEtikett(java.lang.String)
*/
Expand All @@ -97,12 +104,31 @@ public Etikett getEtikett(String uri) {
Etikett e = pMap.get(uri);
if (e == null) {
e = new Etikett(uri);
e.name = getJsonName(uri);
try {
e.name = getJsonName(uri);
} catch (Exception ex) { // fallback domainname
logger.debug(
"no json name available. Please provide a labels.json file with proper 'name' entry. Using domainname as fallback.");
String[] uriparts = uri.split("/");
String domainname =
uriparts[0] + "/" + uriparts[1] + "/" + uriparts[2] + "/";
e = pMap
.get(uriparts.length > 3 ? domainname + uriparts[3] : domainname);
if (e == null) { // domainname may have a label
e = new Etikett(uri);
try {
e.name = getJsonName(uri);
} catch (Exception exc) {
e.label =
uriparts.length > 3 ? domainname + uriparts[3] : domainname;
}
}
}
}
if (e.label == null || e.label.isEmpty()) { // fallback
if (e.label == null || e.label.isEmpty()) { // fallback name
e.label = e.name;
}
logger.debug("Find etikett for " + uri + " : " + e.name);
logger.debug("Etikett for " + uri + " : " + e.label);
return e;
}

Expand Down Expand Up @@ -188,12 +214,7 @@ private static <T> T loadFile(InputStream labelIn, TypeBase type) {
* '#' or last index of '/'
*/
String getJsonName(String predicate) {
Etikett e = pMap.get(predicate);
if (e == null) {
throw new RuntimeException(predicate
+ ": no json name available. Please provide a labels.json file with proper 'name' entry.");
}
return e.name;
return pMap.get(predicate).name;
}

@Override
Expand Down
60 changes: 41 additions & 19 deletions src/main/java/de/hbz/lobid/helper/JsonConverter.java
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,8 @@ private void createObject(Map<String, Object> jsonResult, Statement s,
Etikett e) {
String key = e.name;
if (s.getObject() instanceof org.openrdf.model.Literal) {
addLiteralToJsonResult(jsonResult, key, s.getObject().stringValue());
addLiteralToJsonResult(jsonResult, key, s.getObject().stringValue(),
etikette.getEtikett(s.getPredicate().stringValue()));
} else {
if (s.getObject() instanceof org.openrdf.model.BNode) {
if (isList(s)) {
Expand All @@ -153,12 +154,14 @@ private void createObject(Map<String, Object> jsonResult, Statement s,
if (s.getPredicate().stringValue().equals(RDF_TYPE)) {
try {
addLiteralToJsonResult(jsonResult, key,
etikette.getEtikett(s.getObject().stringValue()).name);
etikette.getEtikett(s.getObject().stringValue()).name,
etikette.getEtikett(s.getPredicate().stringValue()));
} catch (Exception ex) {
logger.info("", ex);
}
} else {
addObjectToJsonResult(jsonResult, key, s.getObject().stringValue());
addObjectToJsonResult(jsonResult, key, s.getObject().stringValue(),
e);
}
}
}
Expand Down Expand Up @@ -211,9 +214,10 @@ private List<Object> traverseList(String uri, String property,
}

private void addObjectToJsonResult(Map<String, Object> jsonResult, String key,
String uri) {
String uri, Etikett e) {
if (jsonResult.containsKey(key)) {
if (jsonResult.get(key) instanceof ArrayList<?>) {
if (e.container != null
&& e.container.equals(Etikett.Container.LIST.getName())) {
@SuppressWarnings("unchecked")
ArrayList<Map<String, Object>> literals =
(ArrayList<Map<String, Object>>) jsonResult.get(key);
Expand All @@ -225,10 +229,22 @@ private void addObjectToJsonResult(Map<String, Object> jsonResult, String key,
literals.add(createObjectWithId(uri));
}
} else {
Set<Map<String, Object>> literals = new HashSet<>();
literals.add(createObjectWithId(uri));
jsonResult.put(key, literals);
if (e.container != null
&& e.container.equals(Etikett.Container.SET.getName())) {
Set<Map<String, Object>> literals = new HashSet<>();
literals.add(createObjectWithId(uri));
jsonResult.put(key, literals);
} else {
if (e.container != null
&& e.container.equals(Etikett.Container.LIST.getName())) {
ArrayList<Map<String, Object>> literals = new ArrayList<>();
literals.add(createObjectWithId(uri));
jsonResult.put(key, literals);
} else
jsonResult.put(key, createObjectWithId(uri));
}
}

}

private void addBlankNodeToJsonResult(Map<String, Object> jsonResult,
Expand Down Expand Up @@ -281,7 +297,9 @@ private Map<String, Object> createObjectWithoutId(String uri) {
private void createObject(String uri, Map<String, Object> newObject) {
for (Statement s : find(uri)) {
Etikett e = etikette.getEtikett(s.getPredicate().stringValue());
if (s.getObject() instanceof org.openrdf.model.Literal) {
if (labelKey.equals(e.name)) {
newObject.put(e.name, s.getObject().stringValue());
} else if (s.getObject() instanceof org.openrdf.model.Literal) {
if (newObject.containsKey(e.name)) {
Object existingValue = newObject.get(e.name);
if (existingValue instanceof String) {
Expand Down Expand Up @@ -327,16 +345,20 @@ private Set<Statement> find(String uri) {

private static void addLiteralToJsonResult(
final Map<String, Object> jsonResult, final String key,
final String value) {
if (jsonResult.containsKey(key)) {
@SuppressWarnings("unchecked")
Set<String> literals = (Set<String>) jsonResult.get(key);
literals.add(value);
} else {
Set<String> literals = new HashSet<>();
literals.add(value);
jsonResult.put(key, literals);
}
final String value, Etikett e) {
if (e.container != null
&& e.container.equals(Etikett.Container.SET.getName())) {
if (jsonResult.containsKey(key)) {
@SuppressWarnings("unchecked")
Set<String> literals = (Set<String>) jsonResult.get(key);
literals.add(value);
} else {
Set<String> literals = new HashSet<>();
literals.add(value);
jsonResult.put(key, literals);
}
} else
jsonResult.put(key, value);
}

private void collect(Graph g) {
Expand Down
Loading

0 comments on commit 66c35c3

Please sign in to comment.