Skip to content

Commit 14fbdc4

Browse files
authored
Merge pull request #52 from yngwi/master
Ignore CIDOC CRM classes / properties in type and hierarchy repositories
2 parents 83cdf3d + 77512a7 commit 14fbdc4

File tree

10 files changed

+56
-21
lines changed

10 files changed

+56
-21
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
</parent>
1010
<groupId>eu.nampi</groupId>
1111
<artifactId>backend</artifactId>
12-
<version>0.5.0</version>
12+
<version>0.5.1</version>
1313
<name>nampi-backend</name>
1414
<description>The NAMPI backend</description>
1515

src/main/java/eu/nampi/backend/configuration/ConfigProperties.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ public class ConfigProperties {
2020

2121
int defaultLimit;
2222

23+
String crmPrefix;
24+
2325
String keycloakRdfIdAttribute;
2426

2527
List<String> otherOwlUrls;

src/main/java/eu/nampi/backend/queryBuilder/AbstractHydraQueryBuilder.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,14 @@ public abstract class AbstractHydraQueryBuilder extends AbstractHydraBuilder {
3030
public WhereBuilder coreData = new WhereBuilder();
3131

3232
protected AbstractHydraQueryBuilder(JenaService jenaService, Serializer serializer,
33-
String baseUri, Resource mainType) {
33+
String baseUri, Resource mainType, String crmPrefix) {
3434
super(jenaService, baseUri);
3535
this.mainType = mainType;
3636
this.ef = coreData.getExprFactory();
3737
this.serializer = serializer;
3838
coreData.addWhere(VAR_MAIN, RDF.type, mainType);
3939
model
40+
.setNsPrefix("crm", crmPrefix)
4041
.setNsPrefix("api", Api.getURI())
4142
.setNsPrefix("core", Core.getURI())
4243
.setNsPrefix("hydra", Hydra.getURI())

src/main/java/eu/nampi/backend/queryBuilder/HydraBuilderFactory.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import org.apache.jena.rdf.model.Resource;
99
import org.apache.jena.riot.Lang;
1010
import org.springframework.beans.factory.annotation.Autowired;
11+
import org.springframework.beans.factory.annotation.Value;
1112
import org.springframework.stereotype.Component;
1213
import eu.nampi.backend.model.QueryParameters;
1314
import eu.nampi.backend.repository.HierarchyRepository;
@@ -34,6 +35,10 @@ public class HydraBuilderFactory {
3435
@Autowired
3536
TypeRepository typeRepository;
3637

38+
@Value("${nampi.crm-prefix}")
39+
private String crmPrefix;
40+
41+
3742
/**
3843
* Hydra Collection Builders
3944
*/
@@ -42,7 +47,7 @@ public HydraCollectionBuilder collectionBuilder(String endpointName, Resource ma
4247
Resource orderByVar, QueryParameters params, boolean includeTextFilter,
4348
boolean includeTypeAndText) {
4449
return new HydraCollectionBuilder(jenaService, serializer, urlBuilder.endpointUri(endpointName),
45-
mainType, orderByVar, params, includeTextFilter, includeTypeAndText);
50+
mainType, orderByVar, params, includeTextFilter, includeTypeAndText, crmPrefix);
4651
}
4752

4853
public HydraCollectionBuilder collectionBuilder(String endpointName, Resource mainType,
@@ -62,7 +67,7 @@ public HydraCollectionBuilder collectionBuilder(String endpointName, Resource ma
6267
public HydraSingleBuilder singleBuilder(String endpointName, UUID id, Resource mainType,
6368
boolean filterBasic) {
6469
return new HydraSingleBuilder(jenaService, serializer, urlBuilder.endpointUri(endpointName, id),
65-
mainType, filterBasic);
70+
mainType, filterBasic, crmPrefix);
6671
}
6772

6873
public HydraSingleBuilder singleBuilder(String endpointName, UUID id, Resource mainType) {
@@ -72,11 +77,11 @@ public HydraSingleBuilder singleBuilder(String endpointName, UUID id, Resource m
7277
public HydraSingleBuilder singleBuilder(String endpointName, Resource mainType,
7378
boolean filterBasic) {
7479
return new HydraSingleBuilder(jenaService, serializer, urlBuilder.endpointUri(endpointName),
75-
mainType, filterBasic);
80+
mainType, filterBasic, crmPrefix);
7681
}
7782

7883
public HydraSingleBuilder singleBuilder(Resource mainType, String iri, boolean filterBasic) {
79-
return new HydraSingleBuilder(jenaService, serializer, iri, mainType, filterBasic);
84+
return new HydraSingleBuilder(jenaService, serializer, iri, mainType, filterBasic, crmPrefix);
8085
}
8186

8287
/**

src/main/java/eu/nampi/backend/queryBuilder/HydraCollectionBuilder.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,9 @@ public class HydraCollectionBuilder extends AbstractHydraQueryBuilder {
2828
public WhereBuilder extendedData = new WhereBuilder();
2929

3030
public HydraCollectionBuilder(JenaService jenaService, Serializer serializer, String baseUri,
31-
Resource mainType,
32-
Resource orderByVar, QueryParameters params, boolean includeTextFilter,
33-
boolean includeTypeAndText) {
34-
super(jenaService, serializer, baseUri, mainType);
31+
Resource mainType, Resource orderByVar, QueryParameters params, boolean includeTextFilter,
32+
boolean includeTypeAndText, String crmPrefix) {
33+
super(jenaService, serializer, baseUri, mainType, crmPrefix);
3534
this.mapper = new ParameterMapper(baseUri, root, model);
3635
this.orderByVar = orderByVar;
3736
this.params = params;

src/main/java/eu/nampi/backend/queryBuilder/HydraSingleBuilder.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,8 @@
1515
public class HydraSingleBuilder extends AbstractHydraQueryBuilder {
1616

1717
public HydraSingleBuilder(JenaService jenaService, Serializer serializer, String baseUri,
18-
Resource mainType,
19-
boolean filterBasic) {
20-
super(jenaService, serializer, baseUri, mainType);
18+
Resource mainType, boolean filterBasic, String crmPrefix) {
19+
super(jenaService, serializer, baseUri, mainType, crmPrefix);
2120
coreData
2221
.addFilter(ef.sameTerm(VAR_MAIN, root))
2322
.addWhere(VAR_MAIN, RDF.type, VAR_TYPE);

src/main/java/eu/nampi/backend/repository/HierarchyRepository.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import org.apache.jena.vocabulary.RDF;
2222
import org.apache.jena.vocabulary.RDFS;
2323
import org.springframework.beans.factory.annotation.Autowired;
24+
import org.springframework.beans.factory.annotation.Value;
2425
import org.springframework.cache.annotation.CacheConfig;
2526
import org.springframework.cache.annotation.Cacheable;
2627
import org.springframework.stereotype.Repository;
@@ -43,6 +44,9 @@ public class HierarchyRepository {
4344
@Autowired
4445
UrlBuilder urlBuilder;
4546

47+
@Value("${nampi.crm-prefix}")
48+
String crmPrefix;
49+
4650
private static final Node VAR_CHILD = NodeFactory.createVariable("child");
4751
private static final Node VAR_CHILD_LABEL = NodeFactory.createVariable("childLabel");
4852
private static final Node VAR_CHILD_COMMENT = NodeFactory.createVariable("childComment");
@@ -76,37 +80,45 @@ private String findAncestors(Lang lang, String iri) {
7680
Expr childNotRdf = ef.not(ef.strstarts(ef.str(VAR_CHILD), RDF.getURI()));
7781
Expr childNotRdfs = ef.not(ef.strstarts(ef.str(VAR_CHILD), RDFS.getURI()));
7882
Expr childNotOwl = ef.not(ef.strstarts(ef.str(VAR_CHILD), OWL.getURI()));
83+
Expr childNotCrm = ef.not(ef.strstarts(ef.str(VAR_CHILD), crmPrefix));
7984
Expr parentNotRdf = ef.not(ef.strstarts(ef.str(VAR_PARENT), RDF.getURI()));
8085
Expr parentNotRdfs = ef.not(ef.strstarts(ef.str(VAR_PARENT), RDFS.getURI()));
8186
Expr parentNotOwl = ef.not(ef.strstarts(ef.str(VAR_PARENT), OWL.getURI()));
87+
Expr parentNotCrm = ef.not(ef.strstarts(ef.str(VAR_PARENT), crmPrefix));
8288
builder.coreData
8389
.addOptional(new WhereBuilder()
8490
.addWhere(VAR_MAIN, RDFS.subClassOf, VAR_CHILD)
8591
.addFilter(childNotRdf)
8692
.addFilter(childNotRdfs)
8793
.addFilter(childNotOwl)
94+
.addFilter(childNotCrm)
8895
.addWhere(VAR_CHILD, RDFS.subClassOf, VAR_PARENT)
8996
.addFilter(parentNotRdf)
9097
.addFilter(parentNotRdfs)
91-
.addFilter(parentNotOwl))
98+
.addFilter(parentNotOwl)
99+
.addFilter(parentNotCrm))
92100
.addOptional(new WhereBuilder()
93101
.addWhere(VAR_MAIN, RDFS.subPropertyOf, VAR_CHILD)
94102
.addFilter(childNotRdf)
95103
.addFilter(childNotRdfs)
96104
.addFilter(childNotOwl)
105+
.addFilter(childNotCrm)
97106
.addWhere(VAR_CHILD, RDFS.subPropertyOf, VAR_PARENT)
98107
.addFilter(parentNotRdf)
99108
.addFilter(parentNotRdfs)
100-
.addFilter(parentNotOwl))
109+
.addFilter(parentNotOwl)
110+
.addFilter(parentNotCrm))
101111
.addOptional(new WhereBuilder()
102112
.addWhere(VAR_MAIN, RDF.type, VAR_CHILD)
103113
.addFilter(childNotRdf)
104114
.addFilter(childNotRdfs)
105115
.addFilter(childNotOwl)
116+
.addFilter(childNotCrm)
106117
.addWhere(VAR_CHILD, RDFS.subClassOf, VAR_PARENT)
107118
.addFilter(parentNotRdf)
108119
.addFilter(parentNotRdfs)
109-
.addFilter(parentNotOwl))
120+
.addFilter(parentNotOwl)
121+
.addFilter(parentNotCrm))
110122
.addOptional(VAR_CHILD, RDFS.label, VAR_CHILD_LABEL)
111123
.addOptional(VAR_CHILD, RDFS.comment, VAR_CHILD_COMMENT)
112124
.addOptional(VAR_PARENT, RDFS.label, VAR_PARENT_LABEL)

src/main/java/eu/nampi/backend/repository/TypeRepository.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import org.apache.jena.vocabulary.RDF;
1717
import org.apache.jena.vocabulary.RDFS;
1818
import org.springframework.beans.factory.annotation.Autowired;
19+
import org.springframework.beans.factory.annotation.Value;
1920
import org.springframework.cache.annotation.CacheConfig;
2021
import org.springframework.cache.annotation.Cacheable;
2122
import org.springframework.stereotype.Repository;
@@ -40,6 +41,9 @@ public class TypeRepository {
4041
@Autowired
4142
JenaService jenaService;
4243

44+
@Value("${nampi.crm-prefix}")
45+
String crmPrefix;
46+
4347
private static final String ENDPOINT_NAME = "types";
4448

4549
Pattern totalItemsRegex = Pattern.compile("\"totalItems\":\"(\\d*)\"");
@@ -64,7 +68,10 @@ public String findAll(QueryParameters params, Lang lang) {
6468
// Try to get results as class
6569
HydraCollectionBuilder classesBuilder = hydraBuilderFactory.collectionBuilder(ENDPOINT_NAME,
6670
RDFS.Resource, Api.typeOrderByVar, params, false, false);
67-
classesBuilder.coreData.addWhere(VAR_MAIN, RDFS.subClassOf, params.getType().orElseThrow());
71+
var ef = classesBuilder.ef;
72+
classesBuilder.coreData
73+
.addWhere(VAR_MAIN, RDFS.subClassOf, params.getType().orElseThrow())
74+
.addFilter(ef.not(ef.strstarts(ef.str(VAR_MAIN), crmPrefix)));
6875
classesBuilder.build(ROW_MAPPER);
6976
StmtIterator iterator =
7077
classesBuilder.model.listStatements(classesBuilder.root, Hydra.totalItems, (RDFNode) null);

src/main/java/eu/nampi/backend/service/FusekiService.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,9 @@ public class FusekiService implements JenaService {
5050
@Value("${nampi.other-owl-urls}")
5151
private List<String> otherOwlUrls;
5252

53+
@Value("${nampi.crm-prefix}")
54+
private String crmPrefix;
55+
5356
public FusekiService(RDFConnectionRemoteBuilder dataBuilder,
5457
RDFConnectionRemoteBuilder infCacheBuilder) {
5558
this.dataBuilder = dataBuilder;
@@ -109,10 +112,16 @@ public void initInfCache() {
109112
@Override
110113
public void select(SelectBuilder selectBuilder, Consumer<QuerySolution> rowAction) {
111114
try (RDFConnectionFuseki conn = (RDFConnectionFuseki) infCacheBuilder.build()) {
112-
String query = selectBuilder.addPrefix("api", Api.getURI()).addPrefix("core", Core.getURI())
113-
.addPrefix("hydra", Hydra.getURI()).addPrefix("rdf", RDF.getURI())
114-
.addPrefix("rdfs", RDFS.getURI())
115-
.addPrefix("schema", SchemaOrg.getURI()).addPrefix("xsd", XSD.getURI()).buildString();
115+
String query = selectBuilder
116+
.addPrefix("api", Api.getURI())
117+
.addPrefix("core", Core.getURI())
118+
.addPrefix("hydra", Hydra.getURI())
119+
.addPrefix("rdf", RDF.getURI())
120+
.addPrefix("rdfs", RDFS.getURI())
121+
.addPrefix("schema", SchemaOrg.getURI())
122+
.addPrefix("xsd", XSD.getURI())
123+
.addPrefix("crm", crmPrefix)
124+
.buildString();
116125
log.debug(query);
117126
conn.querySelect(query, rowAction);
118127
}

src/main/resources/application.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ nampi:
2222
default-limit: ${DEFAULT_LIMIT:20}
2323
keycloak-rdf-id-attribute: ${KEYCLOAK-RDF-ID-ATTRIBUTE:rdf-id}
2424
other-owl-urls: ${OTHER_OWL_URLS:}
25+
crm-prefix: http://erlangen-crm.org/211015/
2526

2627
server:
2728
port: ${APPLICATION_PORT:8080}

0 commit comments

Comments
 (0)