Skip to content

Commit c81ae7d

Browse files
committed
Tweak rdf lookup (metafacture-core#415)
- update README - integrate lookup_rdf() into lookup() - rename target_language to select_language (complements b49445d) - remove comments in integrations test.fix for these are accounted to
1 parent 9251ca3 commit c81ae7d

File tree

8 files changed

+72
-55
lines changed

8 files changed

+72
-55
lines changed

README.md

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,6 @@ The separator (`sep_char`) will vary depending on the source file, e.g.:
190190
| CSV | `,` or `;` |
191191
| TSV | `\t` |
192192

193-
<<<<<<< HEAD
194193
Options:
195194

196195
- `allow_empty_values`: Sets whether to allow empty values in the filemap or to ignore these entries. (Default: `false`)
@@ -209,7 +208,7 @@ The targeted RDF property can optional be bound by an RDF language tag.
209208

210209
```perl
211210
put_rdfmap("<rdfResource>", "<rdfMapName>", target: "<rdfProperty>")
212-
put_rdfmap("<rdfResource>", "<rdfMapName>", target: "<rdfProperty>, target_language: "<rdfLanguageTag>"")
211+
put_rdfmap("<rdfResource>", "<rdfMapName>", target: "<rdfProperty>, select: "<rdfLanguageTag>"")
213212
```
214213

215214
##### `put_map`
@@ -232,7 +231,7 @@ The targeted RDF property can optionally be bound by an RDF language tag.
232231

233232
```perl
234233
put_rdfmap("<rdfResource>", "<rdfMapName>", target: "<rdfProperty>")
235-
put_rdfmap("<rdfResource>", "<rdfMapName>", target: "<rdfProperty>", target_language: "<rdfLanguageTag>")
234+
put_rdfmap("<rdfResource>", "<rdfMapName>", target: "<rdfProperty>", select_language: "<rdfLanguageTag>")
236235
```
237236

238237
##### `put_var`
@@ -576,7 +575,7 @@ join_field("<sourceField>", "<separator>")
576575

577576
##### `lookup`
578577

579-
Looks up matching values in a map and replaces the field value with this match. [External files](#put_filemap) as well as [internal maps](#put_map) can be used.
578+
Looks up matching values in a map and replaces the field value with this match. [External files](#put_filemap), [internal maps](#put_map) as well as [rdf resources](#put_rdfmap) can be used.
580579

581580
Parameters:
582581

@@ -627,19 +626,19 @@ lookup("path.to.field", "map-name", __default: "NA")
627626

628627
# with printing unknown values to a file
629628
lookup("path.to.field", "map-name", print_unknown: "true", destination: "unknown.txt")
630-
```
631-
632-
##### `lookup_rdf`
633629

634-
Looks up matching values in an RDF resource and replaces the field value with a match defined by a targeted RDF property. External files or HTTP(S) resources as well as internal RDF maps can be used.
630+
# rdf: Looks up matching values in an RDF resource and replaces the field value with a match defined by a targeted RDF property. External files or HTTP(S) resources as well as internal RDF maps can be used.
635631
The targeted RDF property can optionally be bound by an RDF language tag.
636632

637-
```perl
638-
lookup_rdf("<sourceField>", "<rdfFile>", target: "<rdfProperty>")
639-
lookup_rdf("<sourceField>", "<rdfHttpUri>", target: "<rdfProperty>")
640-
lookup_rdf("<sourceField>", "<rdfMapName>", target: "<rdfProperty>")
641-
lookup_rdf("<sourceField>", "<rdfMapName>", target: "<rdfProperty>", target_language: "<rdfLanguageTag>")
642-
lookup_rdf("<sourceField>", "<rdfMapName>", target: "<rdfProperty>", __default: "NA")
633+
## rdf map (explicit)
634+
put_rdfmap("path/to/file", "rdf-map", "target:<rdfProperty>")
635+
lookup("path.to.field", "rdf-map")
636+
637+
## rdf with mandatory "target" (implicit)
638+
lookup("path.to.field", "path/to/file|URL", target: "<rdfProperty>")
639+
640+
## rdf with mandatory "target" and "select_language" (implicit)
641+
lookup("path.to.field", "path/to/file|URL", target: "<rdfProperty>", select_language: "<rdfLanguageTag>")
643642
```
644643

645644
##### `prepend`

metafix/src/main/java/org/metafacture/metafix/FixMethod.java

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ public void apply(final Metafix metafix, final Record record, final List<String>
9797
put_rdfmap {
9898
@Override
9999
public void apply(final Metafix metafix, final Record record, final List<String> params, final Map<String, String> options) {
100-
final String rdfMapName = params.size() == 1 ? params.get(0) : params.get(1) + options.get(RdfMap.TARGET) + options.getOrDefault(RdfMap.TARGET_LANGUAGE, "");
100+
final String rdfMapName = params.size() == 1 ? params.get(0) + options.get(RdfMap.TARGET) + options.getOrDefault(RdfMap.TARGET_LANGUAGE, "") : params.get(1);
101101
final String replaceTargets = options.get(RdfMap.TARGET) + options.getOrDefault(RdfMap.TARGET_LANGUAGE, "");
102102
final String resourceName = Optional.ofNullable(params.get(0))
103103
.map(str -> str.replaceAll(replaceTargets + "$", ""))
@@ -501,15 +501,10 @@ public void apply(final Metafix metafix, final Record record, final List<String>
501501
map = options;
502502
}
503503
else {
504-
final String mapName = params.get(1);
504+
String mapName = params.get(1);
505505

506506
if (!metafix.getMapNames().contains(mapName)) {
507-
if (mapName.contains(".") || mapName.contains(File.separator)) {
508-
put_filemap.apply(metafix, record, Arrays.asList(mapName), options);
509-
}
510-
else {
511-
// Probably an unknown internal map? Log a warning?
512-
}
507+
mapName = putMapAndGetMapName(metafix, record, params, options, mapName);
513508
}
514509

515510
map = metafix.getMap(mapName);
@@ -541,11 +536,22 @@ public void apply(final Metafix metafix, final Record record, final List<String>
541536
consumer.accept(null);
542537
}
543538
}
544-
},
545-
lookup_rdf {
546-
@Override
547-
public void apply(final Metafix metafix, final Record record, final List<String> params, final Map<String, String> options) {
548-
lookup(metafix, record, params, options, put_rdfmap);
539+
540+
private String putMapAndGetMapName(final Metafix metafix, final Record record, final List<String> params, final Map<String, String> options, final String mapName) {
541+
String newMapName = mapName;
542+
if (options.containsKey(RdfMap.TARGET)) {
543+
put_rdfmap.apply(metafix, record, Arrays.asList(params.get(1)), options);
544+
newMapName = params.get(1) + options.get(RdfMap.TARGET) + options.getOrDefault(RdfMap.TARGET_LANGUAGE, "");
545+
}
546+
else {
547+
if (mapName.contains(".") || mapName.contains(File.separator)) {
548+
put_filemap.apply(metafix, record, Arrays.asList(mapName), options);
549+
}
550+
else {
551+
// Probably an unknown internal map? Log a warning?
552+
}
553+
}
554+
return newMapName;
549555
}
550556
},
551557
prepend {

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

Lines changed: 35 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
*/
3636
@ExtendWith(MockitoExtension.class)
3737
public class MetafixLookupTest {
38-
3938
private static final String CSV_MAP = "src/test/resources/org/metafacture/metafix/maps/test.csv";
4039
private static final String RDF_MAP = "src/test/resources/org/metafacture/metafix/maps/test.ttl";
4140

@@ -964,7 +963,7 @@ public void shouldPrintUnknownToFileWithoutAppend() throws IOException {
964963
public void shouldLookupInSeparateExternalRdfFileMapWithName() {
965964
assertRdfMap(
966965
"put_rdfmap('" + RDF_MAP + "', 'testMapSkosNotation', target: 'skos:notation')",
967-
"lookup_rdf('notation', 'testMapSkosNotation', target: 'skos:notation')"
966+
"lookup('notation', 'testMapSkosNotation', target: 'skos:notation')"
968967
);
969968
}
970969

@@ -973,21 +972,21 @@ public void shouldLookupInSeparateExternalRdfFileMapWithDifferentTargets() {
973972
assertRdfMapWithDifferentTargets(
974973
"put_rdfmap('" + RDF_MAP + "', 'testRdfMapSkosNotation', target: 'skos:notation')",
975974
"put_rdfmap('" + RDF_MAP + "', 'testRdfMapCreated', target: 'created', __default: '__default')",
976-
"lookup_rdf('notation', 'testRdfMapSkosNotation', target: 'skos:notation')",
977-
"lookup_rdf('created', 'testRdfMapCreated', target: 'created')");
975+
"lookup('notation', 'testRdfMapSkosNotation', target: 'skos:notation')",
976+
"lookup('created', 'testRdfMapCreated', target: 'created')");
978977
}
979978

980979
@Test
981980
public void shouldLookupInExternalRdfWithDifferentTargets() {
982981
assertRdfMapWithDifferentTargets(
983-
"lookup_rdf('notation', '" + RDF_MAP + "', target: 'skos:notation')",
984-
"lookup_rdf('created', '" + RDF_MAP + "', target: 'created', __default: '__default')");
982+
"lookup('notation', '" + RDF_MAP + "', target: 'skos:notation')",
983+
"lookup('created', '" + RDF_MAP + "', target: 'created', __default: '__default')");
985984
}
986985

987986
@Test
988987
public void shouldLookupInExternalRdfUseDefinedDefaultValueIfNotFound() {
989988
MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList(
990-
"lookup_rdf('created', '" + RDF_MAP + "', target: 'created', __default: '0000-01-01')"
989+
"lookup('created', '" + RDF_MAP + "', target: 'created', __default: '0000-01-01')"
991990
),
992991
i -> {
993992
i.startRecord("1");
@@ -1005,7 +1004,7 @@ public void shouldLookupInExternalRdfUseDefinedDefaultValueIfNotFound() {
10051004
@Test
10061005
public void shouldLookupInExternalRdfUseDefaultValueIfNotFound() {
10071006
MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList(
1008-
"lookup_rdf('created', '" + RDF_MAP + "', target: 'created', __default: '__default')"
1007+
"lookup('created', '" + RDF_MAP + "', target: 'created', __default: '__default')"
10091008
),
10101009
i -> {
10111010
i.startRecord("1");
@@ -1023,14 +1022,33 @@ public void shouldLookupInExternalRdfUseDefaultValueIfNotFound() {
10231022
@Test
10241023
public void shouldLookupInExternalRdfMapGetObjectOfSubjectWithTargetedPredicate() {
10251024
assertRdfMap(
1026-
"lookup_rdf('notation', '" + RDF_MAP + "', target: 'skos:notation')"
1025+
"lookup('notation', '" + RDF_MAP + "', target: 'skos:notation')"
1026+
);
1027+
}
1028+
1029+
@Test
1030+
public void shouldExplicitLookupRdfUrlWithRedirection() {
1031+
MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList(
1032+
"put_rdfmap('" + RDF_URL + "', 'testMapSkosNotation', target: 'skos:prefLabel')",
1033+
"lookup('prefLabel', 'testMapSkosNotation' , target: 'skos:prefLabel')"
1034+
),
1035+
i -> {
1036+
i.startRecord("1");
1037+
i.literal("prefLabel", "http://purl.org/lobid/rpb#n882022");
1038+
i.endRecord();
1039+
},
1040+
o -> {
1041+
o.get().startRecord("1");
1042+
o.get().literal("prefLabel", "Presserecht");
1043+
o.get().endRecord();
1044+
}
10271045
);
10281046
}
10291047

10301048
@Test
10311049
public void shouldLookupRdfUrlWithRedirection() {
10321050
MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList(
1033-
"lookup_rdf('prefLabel', '" + RDF_URL + "', target: 'skos:prefLabel')"
1051+
"lookup('prefLabel', '" + RDF_URL + "', target: 'skos:prefLabel')"
10341052
),
10351053
i -> {
10361054
i.startRecord("1");
@@ -1049,7 +1067,7 @@ public void shouldLookupRdfUrlWithRedirection() {
10491067
public void shouldLookupInExternalRdfMapGetObjectOfSubjectWithTargetedPredicateOfSpecificLanguage() {
10501068
MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList(
10511069
"set_array('prefLabel', 'https://w3id.org/kim/hochschulfaechersystematik/n4')",
1052-
"lookup_rdf('prefLabel.*', '" + RDF_MAP + "', target: 'skos:prefLabel', select_language: 'de')"
1070+
"lookup('prefLabel.*', '" + RDF_MAP + "', target: 'skos:prefLabel', select_language: 'de')"
10531071
),
10541072
i -> {
10551073
i.startRecord("1");
@@ -1067,7 +1085,7 @@ public void shouldLookupInExternalRdfMapGetObjectOfSubjectWithTargetedPredicateO
10671085
public void shouldLookupInExternalRdfMapGetSubjectWithTargetedPredicateOfSpecificLanguage() {
10681086
MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList(
10691087
"set_array('id', 'Mathematics, Natural Sciences')",
1070-
"lookup_rdf('id.*', '" + RDF_MAP + "', target: 'skos:prefLabel', select_language: 'en')"
1088+
"lookup('id.*', '" + RDF_MAP + "', target: 'skos:prefLabel', select_language: 'en')"
10711089
),
10721090
i -> {
10731091
i.startRecord("1");
@@ -1086,7 +1104,7 @@ public void shouldLookupInExternalRdfMapGetSubjectWithTargetedPredicateOfSpecifi
10861104
@Test // Scenario lookupRdfPropertyToProperty
10871105
public void shouldLookupInExternalRdfMapGetPropertyOfSpecificLanguageWithTargetedPredicate() {
10881106
MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList(
1089-
"lookup_rdf('a', '" + HCRT_RDF_MAP + "', target: 'skos:prefLabel', select_language: 'en')"
1107+
"lookup('a', '" + HCRT_RDF_MAP + "', target: 'skos:prefLabel', select_language: 'en')"
10901108
),
10911109
i -> {
10921110
i.startRecord("1");
@@ -1104,7 +1122,7 @@ public void shouldLookupInExternalRdfMapGetPropertyOfSpecificLanguageWithTargete
11041122
@Test // Scenario lookupRdfPropertyToSubject
11051123
public void shouldLookupInExternalRdfMapGetSubjectOfPropertyWithTargetedPredicate() {
11061124
MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList(
1107-
"lookup_rdf('a', '" + HCRT_RDF_MAP + "', target: 'skos:prefLabel')"
1125+
"lookup('a', '" + HCRT_RDF_MAP + "', target: 'skos:prefLabel')"
11081126
),
11091127
i -> {
11101128
i.startRecord("1");
@@ -1122,7 +1140,7 @@ public void shouldLookupInExternalRdfMapGetSubjectOfPropertyWithTargetedPredicat
11221140
@Test
11231141
public void lookupRdfDefinedPropertyToSubjectNonDefault() {
11241142
MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList(
1125-
"lookup_rdf('a', '" + HCRT_RDF_MAP + "', target: 'skos:prefLabel', select_language: 'de')"
1143+
"lookup('a', '" + HCRT_RDF_MAP + "', target: 'skos:prefLabel', select_language: 'de')"
11261144
),
11271145
i -> {
11281146
i.startRecord("1");
@@ -1160,7 +1178,7 @@ public void shouldLookupInExternalRdfMapGetObjectWithTargetedPredicateOfSpecific
11601178
@Test
11611179
public void shouldLookupRdfDefinedPropertyToSubject() {
11621180
MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList(
1163-
"lookup_rdf('a', '" + HCRT_RDF_MAP + "', target: 'skos:prefLabel', select_language: 'de', select: 'subject')"
1181+
"lookup('a', '" + HCRT_RDF_MAP + "', target: 'skos:prefLabel', select_language: 'de', select: 'subject')"
11641182
),
11651183
i -> {
11661184
i.startRecord("1");
@@ -1204,7 +1222,7 @@ public void shouldLookupRdfDefinedPropertyToSubject() {
12041222
private void shouldLookupInExternalRdfMapGetObjectWithTargetedPredicateOfSpecificLanguage(final String target) {
12051223
MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList(
12061224
"set_array('prefLabel', 'Mathematics, Natural Sciences')",
1207-
"lookup_rdf('prefLabel.*', '" + RDF_MAP + "', target: '" + target + "', select_language: 'de')"
1225+
"lookup('prefLabel.*', '" + RDF_MAP + "', target: '" + target + "', select_language: 'de')"
12081226
),
12091227
i -> {
12101228
i.startRecord("1");
Original file line numberDiff line numberDiff line change
@@ -1,4 +1 @@
1-
lookup_rdf("a", "../../../../../maps/hcrt.ttl", target: "http://www.w3.org/2004/02/skos/core#prefLabel", select_language: "en")
2-
# Cant define specific lookup-match fields, would expect something like this:
3-
# 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", select_language: "en")
4-
1+
lookup("a", "../../../../../maps/hcrt.ttl", target: "http://www.w3.org/2004/02/skos/core#prefLabel", select_language: "en")
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
lookup_rdf("a", "../../../../../maps/hcrt.ttl", target: "skos:prefLabel")
1+
lookup("a", "../../../../../maps/hcrt.ttl", target: "skos:prefLabel")
Original file line numberDiff line numberDiff line change
@@ -1,4 +1 @@
1-
lookup_rdf('a', '../../../../../maps/hcrt.ttl', target: 'http://www.w3.org/2004/02/skos/core#prefLabel', select_language: 'de', select: 'subject')
2-
# Cant define specific lookup-match fields, would expect something like this:
3-
# lookup_rdf("a", "./hcrt.ttl", match="http://www.w3.org/2004/02/skos/core#prefLabel", match_language: "de")
4-
1+
lookup('a', '../../../../../maps/hcrt.ttl', target: 'http://www.w3.org/2004/02/skos/core#prefLabel', select_language: 'de', select: 'subject')
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
lookup_rdf("a", "../../../../../maps/hcrt.ttl", target: "http://www.w3.org/2004/02/skos/core#prefLabel", select_language: 'en')
1+
lookup("a", "../../../../../maps/hcrt.ttl", target: "http://www.w3.org/2004/02/skos/core#prefLabel", select_language: 'en')
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
# Lookup replaces with default value by default. Should be an option.
2-
lookup_rdf("a", "../../../../../maps/hcrt.ttl", target: "http://www.w3.org/2004/02/skos/core#prefLabel", select_language: "de")
2+
lookup("a", "../../../../../maps/hcrt.ttl", target: "http://www.w3.org/2004/02/skos/core#prefLabel", select_language: "de")

0 commit comments

Comments
 (0)