diff --git a/pom.xml b/pom.xml
index feec11a..3c7c338 100644
--- a/pom.xml
+++ b/pom.xml
@@ -9,7 +9,7 @@
eu.nampi
backend
- 0.5.0
+ 0.5.1
nampi-backend
The NAMPI backend
diff --git a/src/main/java/eu/nampi/backend/configuration/ConfigProperties.java b/src/main/java/eu/nampi/backend/configuration/ConfigProperties.java
index f5a79f5..f536ddd 100644
--- a/src/main/java/eu/nampi/backend/configuration/ConfigProperties.java
+++ b/src/main/java/eu/nampi/backend/configuration/ConfigProperties.java
@@ -20,6 +20,8 @@ public class ConfigProperties {
int defaultLimit;
+ String crmPrefix;
+
String keycloakRdfIdAttribute;
List otherOwlUrls;
diff --git a/src/main/java/eu/nampi/backend/queryBuilder/AbstractHydraQueryBuilder.java b/src/main/java/eu/nampi/backend/queryBuilder/AbstractHydraQueryBuilder.java
index 7be4699..11e4284 100644
--- a/src/main/java/eu/nampi/backend/queryBuilder/AbstractHydraQueryBuilder.java
+++ b/src/main/java/eu/nampi/backend/queryBuilder/AbstractHydraQueryBuilder.java
@@ -30,13 +30,14 @@ public abstract class AbstractHydraQueryBuilder extends AbstractHydraBuilder {
public WhereBuilder coreData = new WhereBuilder();
protected AbstractHydraQueryBuilder(JenaService jenaService, Serializer serializer,
- String baseUri, Resource mainType) {
+ String baseUri, Resource mainType, String crmPrefix) {
super(jenaService, baseUri);
this.mainType = mainType;
this.ef = coreData.getExprFactory();
this.serializer = serializer;
coreData.addWhere(VAR_MAIN, RDF.type, mainType);
model
+ .setNsPrefix("crm", crmPrefix)
.setNsPrefix("api", Api.getURI())
.setNsPrefix("core", Core.getURI())
.setNsPrefix("hydra", Hydra.getURI())
diff --git a/src/main/java/eu/nampi/backend/queryBuilder/HydraBuilderFactory.java b/src/main/java/eu/nampi/backend/queryBuilder/HydraBuilderFactory.java
index 9177ebc..ebab925 100644
--- a/src/main/java/eu/nampi/backend/queryBuilder/HydraBuilderFactory.java
+++ b/src/main/java/eu/nampi/backend/queryBuilder/HydraBuilderFactory.java
@@ -8,6 +8,7 @@
import org.apache.jena.rdf.model.Resource;
import org.apache.jena.riot.Lang;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import eu.nampi.backend.model.QueryParameters;
import eu.nampi.backend.repository.HierarchyRepository;
@@ -34,6 +35,10 @@ public class HydraBuilderFactory {
@Autowired
TypeRepository typeRepository;
+ @Value("${nampi.crm-prefix}")
+ private String crmPrefix;
+
+
/**
* Hydra Collection Builders
*/
@@ -42,7 +47,7 @@ public HydraCollectionBuilder collectionBuilder(String endpointName, Resource ma
Resource orderByVar, QueryParameters params, boolean includeTextFilter,
boolean includeTypeAndText) {
return new HydraCollectionBuilder(jenaService, serializer, urlBuilder.endpointUri(endpointName),
- mainType, orderByVar, params, includeTextFilter, includeTypeAndText);
+ mainType, orderByVar, params, includeTextFilter, includeTypeAndText, crmPrefix);
}
public HydraCollectionBuilder collectionBuilder(String endpointName, Resource mainType,
@@ -62,7 +67,7 @@ public HydraCollectionBuilder collectionBuilder(String endpointName, Resource ma
public HydraSingleBuilder singleBuilder(String endpointName, UUID id, Resource mainType,
boolean filterBasic) {
return new HydraSingleBuilder(jenaService, serializer, urlBuilder.endpointUri(endpointName, id),
- mainType, filterBasic);
+ mainType, filterBasic, crmPrefix);
}
public HydraSingleBuilder singleBuilder(String endpointName, UUID id, Resource mainType) {
@@ -72,11 +77,11 @@ public HydraSingleBuilder singleBuilder(String endpointName, UUID id, Resource m
public HydraSingleBuilder singleBuilder(String endpointName, Resource mainType,
boolean filterBasic) {
return new HydraSingleBuilder(jenaService, serializer, urlBuilder.endpointUri(endpointName),
- mainType, filterBasic);
+ mainType, filterBasic, crmPrefix);
}
public HydraSingleBuilder singleBuilder(Resource mainType, String iri, boolean filterBasic) {
- return new HydraSingleBuilder(jenaService, serializer, iri, mainType, filterBasic);
+ return new HydraSingleBuilder(jenaService, serializer, iri, mainType, filterBasic, crmPrefix);
}
/**
diff --git a/src/main/java/eu/nampi/backend/queryBuilder/HydraCollectionBuilder.java b/src/main/java/eu/nampi/backend/queryBuilder/HydraCollectionBuilder.java
index 08dff09..cf6832c 100644
--- a/src/main/java/eu/nampi/backend/queryBuilder/HydraCollectionBuilder.java
+++ b/src/main/java/eu/nampi/backend/queryBuilder/HydraCollectionBuilder.java
@@ -28,10 +28,9 @@ public class HydraCollectionBuilder extends AbstractHydraQueryBuilder {
public WhereBuilder extendedData = new WhereBuilder();
public HydraCollectionBuilder(JenaService jenaService, Serializer serializer, String baseUri,
- Resource mainType,
- Resource orderByVar, QueryParameters params, boolean includeTextFilter,
- boolean includeTypeAndText) {
- super(jenaService, serializer, baseUri, mainType);
+ Resource mainType, Resource orderByVar, QueryParameters params, boolean includeTextFilter,
+ boolean includeTypeAndText, String crmPrefix) {
+ super(jenaService, serializer, baseUri, mainType, crmPrefix);
this.mapper = new ParameterMapper(baseUri, root, model);
this.orderByVar = orderByVar;
this.params = params;
diff --git a/src/main/java/eu/nampi/backend/queryBuilder/HydraSingleBuilder.java b/src/main/java/eu/nampi/backend/queryBuilder/HydraSingleBuilder.java
index a9c9b72..b15026b 100644
--- a/src/main/java/eu/nampi/backend/queryBuilder/HydraSingleBuilder.java
+++ b/src/main/java/eu/nampi/backend/queryBuilder/HydraSingleBuilder.java
@@ -15,9 +15,8 @@
public class HydraSingleBuilder extends AbstractHydraQueryBuilder {
public HydraSingleBuilder(JenaService jenaService, Serializer serializer, String baseUri,
- Resource mainType,
- boolean filterBasic) {
- super(jenaService, serializer, baseUri, mainType);
+ Resource mainType, boolean filterBasic, String crmPrefix) {
+ super(jenaService, serializer, baseUri, mainType, crmPrefix);
coreData
.addFilter(ef.sameTerm(VAR_MAIN, root))
.addWhere(VAR_MAIN, RDF.type, VAR_TYPE);
diff --git a/src/main/java/eu/nampi/backend/repository/HierarchyRepository.java b/src/main/java/eu/nampi/backend/repository/HierarchyRepository.java
index 1ce32d8..7c2d042 100644
--- a/src/main/java/eu/nampi/backend/repository/HierarchyRepository.java
+++ b/src/main/java/eu/nampi/backend/repository/HierarchyRepository.java
@@ -21,6 +21,7 @@
import org.apache.jena.vocabulary.RDF;
import org.apache.jena.vocabulary.RDFS;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Repository;
@@ -43,6 +44,9 @@ public class HierarchyRepository {
@Autowired
UrlBuilder urlBuilder;
+ @Value("${nampi.crm-prefix}")
+ String crmPrefix;
+
private static final Node VAR_CHILD = NodeFactory.createVariable("child");
private static final Node VAR_CHILD_LABEL = NodeFactory.createVariable("childLabel");
private static final Node VAR_CHILD_COMMENT = NodeFactory.createVariable("childComment");
@@ -76,37 +80,45 @@ private String findAncestors(Lang lang, String iri) {
Expr childNotRdf = ef.not(ef.strstarts(ef.str(VAR_CHILD), RDF.getURI()));
Expr childNotRdfs = ef.not(ef.strstarts(ef.str(VAR_CHILD), RDFS.getURI()));
Expr childNotOwl = ef.not(ef.strstarts(ef.str(VAR_CHILD), OWL.getURI()));
+ Expr childNotCrm = ef.not(ef.strstarts(ef.str(VAR_CHILD), crmPrefix));
Expr parentNotRdf = ef.not(ef.strstarts(ef.str(VAR_PARENT), RDF.getURI()));
Expr parentNotRdfs = ef.not(ef.strstarts(ef.str(VAR_PARENT), RDFS.getURI()));
Expr parentNotOwl = ef.not(ef.strstarts(ef.str(VAR_PARENT), OWL.getURI()));
+ Expr parentNotCrm = ef.not(ef.strstarts(ef.str(VAR_PARENT), crmPrefix));
builder.coreData
.addOptional(new WhereBuilder()
.addWhere(VAR_MAIN, RDFS.subClassOf, VAR_CHILD)
.addFilter(childNotRdf)
.addFilter(childNotRdfs)
.addFilter(childNotOwl)
+ .addFilter(childNotCrm)
.addWhere(VAR_CHILD, RDFS.subClassOf, VAR_PARENT)
.addFilter(parentNotRdf)
.addFilter(parentNotRdfs)
- .addFilter(parentNotOwl))
+ .addFilter(parentNotOwl)
+ .addFilter(parentNotCrm))
.addOptional(new WhereBuilder()
.addWhere(VAR_MAIN, RDFS.subPropertyOf, VAR_CHILD)
.addFilter(childNotRdf)
.addFilter(childNotRdfs)
.addFilter(childNotOwl)
+ .addFilter(childNotCrm)
.addWhere(VAR_CHILD, RDFS.subPropertyOf, VAR_PARENT)
.addFilter(parentNotRdf)
.addFilter(parentNotRdfs)
- .addFilter(parentNotOwl))
+ .addFilter(parentNotOwl)
+ .addFilter(parentNotCrm))
.addOptional(new WhereBuilder()
.addWhere(VAR_MAIN, RDF.type, VAR_CHILD)
.addFilter(childNotRdf)
.addFilter(childNotRdfs)
.addFilter(childNotOwl)
+ .addFilter(childNotCrm)
.addWhere(VAR_CHILD, RDFS.subClassOf, VAR_PARENT)
.addFilter(parentNotRdf)
.addFilter(parentNotRdfs)
- .addFilter(parentNotOwl))
+ .addFilter(parentNotOwl)
+ .addFilter(parentNotCrm))
.addOptional(VAR_CHILD, RDFS.label, VAR_CHILD_LABEL)
.addOptional(VAR_CHILD, RDFS.comment, VAR_CHILD_COMMENT)
.addOptional(VAR_PARENT, RDFS.label, VAR_PARENT_LABEL)
diff --git a/src/main/java/eu/nampi/backend/repository/TypeRepository.java b/src/main/java/eu/nampi/backend/repository/TypeRepository.java
index 61a2790..c2b0ae7 100644
--- a/src/main/java/eu/nampi/backend/repository/TypeRepository.java
+++ b/src/main/java/eu/nampi/backend/repository/TypeRepository.java
@@ -16,6 +16,7 @@
import org.apache.jena.vocabulary.RDF;
import org.apache.jena.vocabulary.RDFS;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Repository;
@@ -40,6 +41,9 @@ public class TypeRepository {
@Autowired
JenaService jenaService;
+ @Value("${nampi.crm-prefix}")
+ String crmPrefix;
+
private static final String ENDPOINT_NAME = "types";
Pattern totalItemsRegex = Pattern.compile("\"totalItems\":\"(\\d*)\"");
@@ -64,7 +68,10 @@ public String findAll(QueryParameters params, Lang lang) {
// Try to get results as class
HydraCollectionBuilder classesBuilder = hydraBuilderFactory.collectionBuilder(ENDPOINT_NAME,
RDFS.Resource, Api.typeOrderByVar, params, false, false);
- classesBuilder.coreData.addWhere(VAR_MAIN, RDFS.subClassOf, params.getType().orElseThrow());
+ var ef = classesBuilder.ef;
+ classesBuilder.coreData
+ .addWhere(VAR_MAIN, RDFS.subClassOf, params.getType().orElseThrow())
+ .addFilter(ef.not(ef.strstarts(ef.str(VAR_MAIN), crmPrefix)));
classesBuilder.build(ROW_MAPPER);
StmtIterator iterator =
classesBuilder.model.listStatements(classesBuilder.root, Hydra.totalItems, (RDFNode) null);
diff --git a/src/main/java/eu/nampi/backend/service/FusekiService.java b/src/main/java/eu/nampi/backend/service/FusekiService.java
index b2e6b58..7d36609 100644
--- a/src/main/java/eu/nampi/backend/service/FusekiService.java
+++ b/src/main/java/eu/nampi/backend/service/FusekiService.java
@@ -50,6 +50,9 @@ public class FusekiService implements JenaService {
@Value("${nampi.other-owl-urls}")
private List otherOwlUrls;
+ @Value("${nampi.crm-prefix}")
+ private String crmPrefix;
+
public FusekiService(RDFConnectionRemoteBuilder dataBuilder,
RDFConnectionRemoteBuilder infCacheBuilder) {
this.dataBuilder = dataBuilder;
@@ -109,10 +112,16 @@ public void initInfCache() {
@Override
public void select(SelectBuilder selectBuilder, Consumer rowAction) {
try (RDFConnectionFuseki conn = (RDFConnectionFuseki) infCacheBuilder.build()) {
- String query = selectBuilder.addPrefix("api", Api.getURI()).addPrefix("core", Core.getURI())
- .addPrefix("hydra", Hydra.getURI()).addPrefix("rdf", RDF.getURI())
- .addPrefix("rdfs", RDFS.getURI())
- .addPrefix("schema", SchemaOrg.getURI()).addPrefix("xsd", XSD.getURI()).buildString();
+ String query = selectBuilder
+ .addPrefix("api", Api.getURI())
+ .addPrefix("core", Core.getURI())
+ .addPrefix("hydra", Hydra.getURI())
+ .addPrefix("rdf", RDF.getURI())
+ .addPrefix("rdfs", RDFS.getURI())
+ .addPrefix("schema", SchemaOrg.getURI())
+ .addPrefix("xsd", XSD.getURI())
+ .addPrefix("crm", crmPrefix)
+ .buildString();
log.debug(query);
conn.querySelect(query, rowAction);
}
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 2e8122b..4cc6d04 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -22,6 +22,7 @@ nampi:
default-limit: ${DEFAULT_LIMIT:20}
keycloak-rdf-id-attribute: ${KEYCLOAK-RDF-ID-ATTRIBUTE:rdf-id}
other-owl-urls: ${OTHER_OWL_URLS:}
+ crm-prefix: http://erlangen-crm.org/211015/
server:
port: ${APPLICATION_PORT:8080}