Skip to content

Commit

Permalink
Pull request #84: KSAM-388 Bättre stöd för skördning av srdb
Browse files Browse the repository at this point in the history
Merge in KSAM/ksamsok from bugfix/KSAM-388-skorda-srdb-data to master

* commit 'bd7c3d19971900fa758332bdd24065cb64714802':
  KSAM-388 Bättre stöd för skördning av srdb
  • Loading branch information
stefanmalmesjo committed Sep 18, 2020
2 parents 26ab190 + bd7c3d1 commit 19f6557
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 28 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -625,7 +625,7 @@ protected void extractContextPlaceInformation(Resource cS, String[] contextTypes
extractSingleValue(model, cS, getURIRef(uri_rContinentName), ip);

ip.setCurrent(IX_COUNTRYNAME, contextTypes);
extractSingleValue(model, cS, getURIRef(uri_rCountryName), ip);
extractValue(model, cS, getURIRef(uri_rCountryName), ip);

ip.setCurrent(IX_COUNTYNAME, contextTypes);
extractSingleValue(model, cS, getURIRef(uri_rCountyName), ip);
Expand Down
60 changes: 34 additions & 26 deletions src/main/java/se/raa/ksamsok/lucene/RDFUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Map;
import java.util.StringJoiner;

public class RDFUtil {

Expand Down Expand Up @@ -49,19 +50,16 @@ static String extractValue(Model model, Resource subject, Property ref, Property
// läser ut ett värde ur subjektnoden eller subjektnodens objektnod om denna är en subjektnod
// och lägger till värdet mha indexprocessorn och ev specialhanterar relationer
static String extractValue(Model model, Resource subject, Property ref, Property refRef, IndexProcessor ip, List<String> relations) throws Exception {
final String sep = " ";
StringBuilder buf = new StringBuilder();
StringJoiner stringJoiner = new StringJoiner(" ");
String value;
Selector selector = new SimpleSelector(subject, ref, (RDFNode) null);
StmtIterator iter = model.listStatements(selector);
while (iter.hasNext()){
Statement s = iter.next();
if (s.getObject().isLiteral()){
if (buf.length() > 0) {
buf.append(sep);
}
if (s.getObject().isLiteral()) {

value = s.getObject().asLiteral().getString();
buf.append(value);
stringJoiner.add(value);
if (ip != null) {
ip.addToDoc(value);
// specialfall för att hantera relationer som nog egentligen felaktigt(?) är vanliga värden, de borde vara rdf-resurser och då URIReferences
Expand All @@ -73,50 +71,60 @@ static String extractValue(Model model, Resource subject, Property ref, Property
} else if (s.getObject().isURIResource()){
value = getReferenceValue(s.getObject().asResource(), ip, relations, ref);
if (value != null) {
if (buf.length() > 0) {
buf.append(sep);
}
buf.append(value);
stringJoiner.add(value);
}
if (ip != null) {
ip.addToDoc(value);
}
} else if (refRef != null && s.getObject().isResource()){
value = extractSingleValue(model, s.getObject().asResource(), refRef, ip);
value = extractValue(model, s.getObject().asResource(), refRef, ip);
if (value != null) {
if (buf.length() > 0) {
buf.append(sep);
}
buf.append(value);
stringJoiner.add(value);
}
}
}
return buf.length() > 0 ? StringUtils.trimToNull(buf.toString()) : null;
return stringJoiner.length() > 0 ? StringUtils.trimToNull(stringJoiner.toString()) : null;
}

// läser ut ett enkelt värde ur subjektoden där objektnoden måste vara en literal eller en uri-referens
// och lägger till det mha indexprocessorn
static String extractSingleValue(Model model, Resource subject, Property p, IndexProcessor ip) throws Exception {
String value = null;
// läser ut ett eller flera värden ur subjektoden där objektnoden måste vara en literal eller en uri-referens
// och lägger till det mha indexprocessorn. forceSingle kastar exception om mer än ett värde finns
private static String extractValue(Model model, Resource subject, Property p, IndexProcessor ip, boolean forceSingle) throws Exception {
StringJoiner stringJoiner = new StringJoiner(" ");
String value = null;
Selector selector = new SimpleSelector(subject, p, (RDFNode) null);
StmtIterator iter = model.listStatements(selector);
while (iter.hasNext()){
if (value != null) {
while (iter.hasNext()) {
if (forceSingle && value != null) {
throw new Exception("Fler värden än ett för s: " + subject + " p: " + p);
}
Statement s = iter.next();
if (s.getObject().isLiteral()){
if (s.getObject().isLiteral()) {
value = StringUtils.trimToNull(s.getObject().asLiteral().getString());
} else if (s.getObject().isURIResource()){
value = getReferenceValue(s.getObject().asResource(), ip, null, null);
}else {
} else {
throw new Exception("Måste vara literal/urireference o.class: " + s.getObject().getClass().getSimpleName() + " för s: " + subject + " p: " + p);
}
stringJoiner.add(value);
if (ip != null) {
ip.addToDoc(value);
}
}
return value;
return stringJoiner.length() > 0 ? StringUtils.trimToNull(stringJoiner.toString()) : null;
}

// läser ut ett enkelt värde ur subjektoden där objektnoden måste vara en literal eller en uri-referens
// och lägger till det mha indexprocessorn
static String extractSingleValue(Model model, Resource subject, Property p, IndexProcessor ip) throws Exception {
return extractValue(model, subject, p, ip, true);

}

// läser ut ett eller flera värden ur subjektoden där objektnoden måste vara en literal eller en uri-referens
// och lägger till det mha indexprocessorn
static String extractValue(Model model, Resource subject, Property p, IndexProcessor ip) throws Exception {
return extractValue(model, subject, p, ip, false);

}

// försöker översätta ett uri-värde till ett förinläst värde
Expand Down
9 changes: 9 additions & 0 deletions src/main/java/se/raa/ksamsok/lucene/SamsokContentHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -105,8 +105,16 @@ public SolrInputDocument createSolrDocument(HarvestService service,
throw new Exception("Hittade ingen protokollversion i rdf-grafen");
}


LinkedList<String> gmlGeometries = new LinkedList<>();
LinkedList<String> relations = new LinkedList<>();

// TODO: We need to handle protocols properly, but for now
// we just want to get rundatabasen's tests up and running,
// so we cheat a tad with version 1.2.0:
if ("1.2.0".equals(protocolVersion)) {
protocolVersion = "1.11";
}
SamsokProtocolHandler sph = getProtocolHandlerForVersion(protocolVersion, model, subject);

sph.setRequireMediaLicense(requireMediaLicense);
Expand Down Expand Up @@ -196,6 +204,7 @@ private SamsokProtocolHandler getProtocolHandlerForVersion(String protocolVersio
Model model, Resource subject) throws Exception {
Double protocol;
SamsokProtocolHandler handler;

try {
protocol = Double.parseDouble(protocolVersion);
} catch (Exception e) {
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/se/raa/ksamsok/lucene/TimeUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -223,7 +223,7 @@ else if (timeString.length()>4 && !timeString.startsWith("-")) {
logger.error("Fel i tidyTimeString: " + timeString + " : " + e.getMessage());
throw e;
}
return timeString;
return timeString.trim();
}

}

0 comments on commit 19f6557

Please sign in to comment.