Skip to content

Commit b166fd2

Browse files
committed
Enable further use cases
Implementation against further tests from #415 (comment). - adapt some falsely Fix - reuse test file "hcrt.ttl" - one test tagged as "todo" because it needs introduction of new parameter - reformat hcrt.ttl
1 parent 9dd9762 commit b166fd2

File tree

19 files changed

+283
-722
lines changed

19 files changed

+283
-722
lines changed

metafix/src/main/java/org/metafacture/metafix/maps/RdfMap.java

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,14 @@
2222

2323
import org.apache.jena.rdf.model.Model;
2424
import org.apache.jena.rdf.model.Property;
25+
import org.apache.jena.rdf.model.RDFNode;
2526
import org.apache.jena.rdf.model.ResIterator;
2627
import org.apache.jena.rdf.model.Resource;
2728
import org.apache.jena.rdf.model.ResourceFactory;
2829
import org.apache.jena.rdf.model.Statement;
2930
import org.apache.jena.rdf.model.StmtIterator;
3031
import org.apache.jena.riot.RDFDataMgr;
3132
import org.apache.jena.shared.PropertyNotFoundException;
32-
import org.slf4j.Logger;
33-
import org.slf4j.LoggerFactory;
3433

3534
import java.io.IOException;
3635
import java.net.HttpURLConnection;
@@ -61,20 +60,19 @@ public final class RdfMap extends AbstractReadOnlyMap<String, String> {
6160
private static final int MAX_REDIRECTIONS = 10;
6261
private static final int MIN_HTTP_STATUS_CODE = 299;
6362
private static final int MAX_HTTP_STATUS_CODE = 400;
64-
private static final Logger LOG = LoggerFactory.getLogger(RdfMap.class);
6563
private Model model;
6664
private boolean isUninitialized = true;
6765
private final ArrayList<String> filenames = new ArrayList<>();
6866
private final Map<String, String> map = new HashMap<>();
69-
private String targetLanguage = "";
67+
private String targetLanguage;
7068
private String target;
7169

7270
/**
7371
* Creates an instance of {@link RdfMap}.
7472
*/
7573
public RdfMap() {
7674
targetLanguage = "";
77-
setDefault(Maps.DEFAULT_MAP_KEY);
75+
setDefault(null);
7876

7977
}
8078

@@ -170,12 +168,9 @@ public String get(final Object key) {
170168
//second try to get SUBJECT using PROPERTY and LITERAL
171169
ret = getSubjectUsingPropertyAndLiteral(key, targetProperty);
172170
//third try: get LITERAL of PREDICATE A using PREDICATE B
173-
if (ret.equals(Maps.DEFAULT_MAP_KEY)) {
171+
if (ret == null) {
174172
ret = getLiteralOfPredicateUsingOtherPredicate(key, targetProperty);
175173
}
176-
else {
177-
LOG.info("Could not lookup:'" + key + (targetLanguage.isEmpty() ? "@" + targetLanguage : "") + " for " + target + "'. Going with default value.");
178-
}
179174
}
180175
map.put(key.toString(), ret);
181176
}
@@ -189,13 +184,17 @@ private String getLiteralOfPredicateUsingOtherPredicate(final Object key, final
189184
iter = model.listSubjectsWithProperty(targetProperty);
190185
while (iter.hasNext()) {
191186
resource = iter.nextResource();
192-
if (resource.getProperty(targetProperty).getString().equals(key.toString())) {
193-
Statement stmt;
194-
final StmtIterator iterProp = resource.listProperties(targetProperty);
195-
while (iterProp.hasNext()) {
196-
stmt = iterProp.nextStatement();
197-
if (stmt.getLanguage().equals(targetLanguage) && !stmt.getString().equals(key)) {
198-
ret = stmt.getString();
187+
Statement stmt;
188+
StmtIterator iterProp = resource.listProperties(targetProperty);
189+
while (iterProp.hasNext()) {
190+
stmt = iterProp.nextStatement();
191+
if (stmt.getObject().asLiteral().getString().equals(key.toString())) {
192+
iterProp = resource.listProperties(targetProperty);
193+
while (iterProp.hasNext()) {
194+
stmt = iterProp.nextStatement();
195+
if (stmt.getLanguage().equals(targetLanguage) && !stmt.getString().equals(key)) {
196+
ret = stmt.getString();
197+
}
199198
}
200199
}
201200
}
@@ -209,14 +208,20 @@ private String getSubjectUsingPropertyAndLiteral(final Object key, final Propert
209208
final ResIterator iter = model.listSubjectsWithProperty(targetProperty);
210209
while (iter.hasNext()) {
211210
resource = iter.nextResource();
212-
if (resource.getProperty(targetProperty).getString().equals(key.toString())) {
211+
final StmtIterator stmtIterator = resource.listProperties(targetProperty);
212+
while (stmtIterator.hasNext()) {
213+
final RDFNode node = stmtIterator.next().getObject();
213214
if (!this.targetLanguage.isEmpty()) {
214-
if (resource.getProperty(targetProperty).getLanguage().equals(targetLanguage)) {
215+
if (node.asLiteral().toString().equals(key.toString() + "@" + targetLanguage)) {
215216
ret = resource.getURI();
217+
break;
216218
}
217219
}
218220
else {
219-
ret = resource.getURI();
221+
if (node.asLiteral().getString().equals(key.toString())) {
222+
ret = resource.getURI();
223+
break;
224+
}
220225
}
221226
}
222227
}
@@ -279,7 +284,7 @@ public void setDefault(final String defaultValue) {
279284
/**
280285
* Gets a redirected URL, if any redirection takes place. Adapted predated code from org.apache.jena.rdfxml.xmlinput.JenaReader.
281286
*
282-
* @Deprecated Using newer jena version (needs java 11) this method would be obsolete.
287+
* Note: Using newer jena version (needs java 11) this method would be obsolete.
283288
* @param url the URL to resolve
284289
* @return the (redirected) URL
285290
* @throws IOException if any IO error occurs

metafix/src/test/java/org/metafacture/metafix/MetafixLookupTest.java

Lines changed: 69 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ public class MetafixLookupTest {
3838

3939
private static final String CSV_MAP = "src/test/resources/org/metafacture/metafix/maps/test.csv";
4040
private static final String RDF_MAP = "src/test/resources/org/metafacture/metafix/maps/test.ttl";
41+
42+
private static final String HCRT_RDF_MAP = "src/test/resources/org/metafacture/metafix/maps/hcrt.ttl";
4143
private static final String RDF_URL = "http://purl.org/lobid/rpb";
4244
private static final String TSV_MAP = "src/test/resources/org/metafacture/metafix/maps/test.tsv";
4345

@@ -970,7 +972,7 @@ public void shouldLookupInSeparateExternalRdfFileMapWithName() {
970972
public void shouldLookupInSeparateExternalRdfFileMapWithDifferentTargets() {
971973
assertRdfMapWithDifferentTargets(
972974
"put_rdfmap('" + RDF_MAP + "', 'testRdfMapSkosNotation', target: 'skos:notation')",
973-
"put_rdfmap('" + RDF_MAP + "', 'testRdfMapCreated', target: 'created')",
975+
"put_rdfmap('" + RDF_MAP + "', 'testRdfMapCreated', target: 'created', __default: '__default')",
974976
"lookup_rdf('notation', 'testRdfMapSkosNotation', target: 'skos:notation')",
975977
"lookup_rdf('created', 'testRdfMapCreated', target: 'created')");
976978
}
@@ -979,7 +981,7 @@ public void shouldLookupInSeparateExternalRdfFileMapWithDifferentTargets() {
979981
public void shouldLookupInExternalRdfWithDifferentTargets() {
980982
assertRdfMapWithDifferentTargets(
981983
"lookup_rdf('notation', '" + RDF_MAP + "', target: 'skos:notation')",
982-
"lookup_rdf('created', '" + RDF_MAP + "', target: 'created')");
984+
"lookup_rdf('created', '" + RDF_MAP + "', target: 'created', __default: '__default')");
983985
}
984986

985987
@Test
@@ -1003,7 +1005,7 @@ public void shouldLookupInExternalRdfUseDefinedDefaultValueIfNotFound() {
10031005
@Test
10041006
public void shouldLookupInExternalRdfUseDefaultValueIfNotFound() {
10051007
MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList(
1006-
"lookup_rdf('created', '" + RDF_MAP + "', target: 'created')"
1008+
"lookup_rdf('created', '" + RDF_MAP + "', target: 'created', __default: '__default')"
10071009
),
10081010
i -> {
10091011
i.startRecord("1");
@@ -1081,6 +1083,70 @@ public void shouldLookupInExternalRdfMapGetSubjectWithTargetedPredicateOfSpecifi
10811083
);
10821084
}
10831085

1086+
@Test // Scenario lookupRdfPropertyToProperty
1087+
public void shouldLookupInExternalRdfMapGetPropertyOfSpecificLanguageWithTargetedPredicate() {
1088+
MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList(
1089+
"lookup_rdf('a', '" + HCRT_RDF_MAP + "', target: 'skos:prefLabel', target_language: 'en')"
1090+
),
1091+
i -> {
1092+
i.startRecord("1");
1093+
i.literal("a", "Softwareanwendung");
1094+
i.endRecord();
1095+
},
1096+
o -> {
1097+
o.get().startRecord("1");
1098+
o.get().literal("a", "Software Application");
1099+
o.get().endRecord();
1100+
}
1101+
);
1102+
}
1103+
1104+
@Test // Scenario lookupRdfPropertyToSubject
1105+
public void shouldLookupInExternalRdfMapGetSubjectOfPropertyWithTargetedPredicate() {
1106+
MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList(
1107+
"lookup_rdf('a', '" + HCRT_RDF_MAP + "', target: 'skos:prefLabel')"
1108+
),
1109+
i -> {
1110+
i.startRecord("1");
1111+
i.literal("a", "Softwareanwendung");
1112+
i.endRecord();
1113+
},
1114+
o -> {
1115+
o.get().startRecord("1");
1116+
o.get().literal("a", "https://w3id.org/kim/hcrt/application");
1117+
o.get().endRecord();
1118+
}
1119+
);
1120+
}
1121+
1122+
@Test
1123+
public void lookupRdfDefinedPropertyToSubjectNonDefault() {
1124+
MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList(
1125+
"lookup_rdf('a', '" + HCRT_RDF_MAP + "', target: 'skos:prefLabel', target_language: 'de')"
1126+
),
1127+
i -> {
1128+
i.startRecord("1");
1129+
i.literal("name", "Jake");
1130+
i.literal("a", "Softwareanwendung");
1131+
i.endRecord();
1132+
i.startRecord("2");
1133+
i.literal("name", "Noone");
1134+
i.literal("a", "cat");
1135+
i.endRecord();
1136+
},
1137+
o -> {
1138+
o.get().startRecord("1");
1139+
o.get().literal("name", "Jake");
1140+
o.get().literal("a", "https://w3id.org/kim/hcrt/application");
1141+
o.get().endRecord();
1142+
o.get().startRecord("2");
1143+
o.get().literal("name", "Noone");
1144+
o.get().literal("a", "cat");
1145+
o.get().endRecord();
1146+
}
1147+
);
1148+
}
1149+
10841150
@Test // Scenario 3
10851151
public void shouldLookupInExternalRdfMapGetObjectWithTargetedPredicateOfSpecificLanguageUsingNamespace() {
10861152
shouldLookupInExternalRdfMapGetObjectWithTargetedPredicateOfSpecificLanguage("skos:prefLabel");

metafix/src/test/resources/org/metafacture/metafix/integration/lookup/fromJson/toJson/lookupRdfDefinedPropertyToProperty/expected.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
{
2-
"name": "Jake",
3-
"a": "https://w3id.org/kim/hcrt/application"
2+
"name" : "Jake",
3+
"a" : "https://w3id.org/kim/hcrt/application"
44
}
55
{
6-
"name": "Blacky",
7-
"a": "https://w3id.org/kim/hcrt/index"
6+
"name" : "Blacky",
7+
"a" : "https://w3id.org/kim/hcrt/index"
88
}
99
{
10-
"name": "Noone",
11-
"a": "cat"
10+
"name" : "Noone",
11+
"a" : "cat"
1212
}
1313
{
1414
"name" : "Noone_2",

metafix/src/test/resources/org/metafacture/metafix/integration/lookup/fromJson/toJson/lookupRdfDefinedPropertyToProperty/hcrt.ttl

Lines changed: 0 additions & 134 deletions
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
lookup_rdf("a", "./hcrt.ttl", target: "http://www.w3.org/2004/02/skos/core#prefLabel", target_language: "en")
1+
lookup_rdf("a", "../../../../../maps/hcrt.ttl", target: "http://www.w3.org/2004/02/skos/core#prefLabel", target_language: "de")
22
# Cant define specific lookup-match fields, would expect something like this:
33
# lookup_rdf("a", "./hcrt.ttl", match="http://www.w3.org/2004/02/skos/core#prefLabel", match_language: "de", target: "http://www.w3.org/2004/02/skos/core#prefLabel", target_language: "en")
44

Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
See isseu #415

0 commit comments

Comments
 (0)