From 89d58c173c27a0b6d8ba8b79e4d9567610121d2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kalle=20W=C3=A5hlin?= Date: Wed, 26 Feb 2025 13:47:30 +0100 Subject: [PATCH] (search2): Ignore abstract terms in disambiguation --- .../groovy/whelk/search2/Disambiguate.java | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/whelk-core/src/main/groovy/whelk/search2/Disambiguate.java b/whelk-core/src/main/groovy/whelk/search2/Disambiguate.java index 96d53428e0..ddd3495026 100644 --- a/whelk-core/src/main/groovy/whelk/search2/Disambiguate.java +++ b/whelk-core/src/main/groovy/whelk/search2/Disambiguate.java @@ -71,6 +71,9 @@ private void setAliasMappings(Whelk whelk) { var vocab = jsonLd.vocabIndex; vocab.forEach((termKey, termDefinition) -> { + if (isAbstract(termDefinition)) { + return; + } if (isSystemVocabTerm(termDefinition, jsonLd)) { if (isClass(termDefinition, jsonLd)) { addAllMappings(termKey, classAliasMappings, ambiguousClassAliases, whelk); @@ -174,7 +177,7 @@ private void addEquivTermMappings(String termKey, Map aliasMappi }); } - private static boolean isSystemVocabTerm(Map termDefinition, JsonLd jsonLd) { + private static boolean isSystemVocabTerm(Map termDefinition, JsonLd jsonLd) { return get(termDefinition, List.of(IS_DEFINED_BY, ID_KEY), "") .equals(jsonLd.context.get(VOCAB_KEY)); } @@ -183,11 +186,11 @@ private static boolean isMarc(String termKey) { return termKey.startsWith("marc:"); } - private static boolean isClass(Map termDefinition, JsonLd jsonLd) { + private static boolean isClass(Map termDefinition, JsonLd jsonLd) { return getTypes(termDefinition).stream().anyMatch(type -> jsonLd.isSubClassOf((String) type, "Class")); } - private static boolean isEnum(Map termDefinition, JsonLd jsonLd) { + private static boolean isEnum(Map termDefinition, JsonLd jsonLd) { return getTypes(termDefinition).stream() .map(String.class::cast) .flatMap(type -> Stream.concat(jsonLd.getSuperClasses(type).stream(), Stream.of(type))) @@ -197,18 +200,22 @@ private static boolean isEnum(Map termDefinition, JsonLd jsonLd) { .anyMatch(jsonLd::isVocabTerm); } - private static boolean isProperty(Map termDefinition) { + private static boolean isProperty(Map termDefinition) { return isObjectProperty(termDefinition) || isDatatypeProperty(termDefinition); } - public static boolean isObjectProperty(Map termDefinition) { + public static boolean isObjectProperty(Map termDefinition) { return getTypes(termDefinition).stream().anyMatch(OBJECT_PROPERTY::equals); } - private static boolean isDatatypeProperty(Map termDefinition) { + private static boolean isDatatypeProperty(Map termDefinition) { return getTypes(termDefinition).stream().anyMatch(DATATYPE_PROPERTY::equals); } + private static boolean isAbstract(Map termDefinition) { + return (boolean) termDefinition.getOrDefault("abstract", false); + } + private static List getTypes(Map termDefinition) { return asList(termDefinition.get(JsonLd.TYPE_KEY)); }