Skip to content

Commit

Permalink
Merge pull request #52 from yngwi/master
Browse files Browse the repository at this point in the history
Ignore CIDOC CRM classes / properties in type and hierarchy repositories
  • Loading branch information
yngwi authored Oct 30, 2021
2 parents 83cdf3d + 77512a7 commit 14fbdc4
Show file tree
Hide file tree
Showing 10 changed files with 56 additions and 21 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
</parent>
<groupId>eu.nampi</groupId>
<artifactId>backend</artifactId>
<version>0.5.0</version>
<version>0.5.1</version>
<name>nampi-backend</name>
<description>The NAMPI backend</description>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ public class ConfigProperties {

int defaultLimit;

String crmPrefix;

String keycloakRdfIdAttribute;

List<String> otherOwlUrls;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -34,6 +35,10 @@ public class HydraBuilderFactory {
@Autowired
TypeRepository typeRepository;

@Value("${nampi.crm-prefix}")
private String crmPrefix;


/**
* Hydra Collection Builders
*/
Expand All @@ -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,
Expand All @@ -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) {
Expand All @@ -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);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
18 changes: 15 additions & 3 deletions src/main/java/eu/nampi/backend/repository/HierarchyRepository.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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");
Expand Down Expand Up @@ -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)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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*)\"");
Expand All @@ -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);
Expand Down
17 changes: 13 additions & 4 deletions src/main/java/eu/nampi/backend/service/FusekiService.java
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,9 @@ public class FusekiService implements JenaService {
@Value("${nampi.other-owl-urls}")
private List<String> otherOwlUrls;

@Value("${nampi.crm-prefix}")
private String crmPrefix;

public FusekiService(RDFConnectionRemoteBuilder dataBuilder,
RDFConnectionRemoteBuilder infCacheBuilder) {
this.dataBuilder = dataBuilder;
Expand Down Expand Up @@ -109,10 +112,16 @@ public void initInfCache() {
@Override
public void select(SelectBuilder selectBuilder, Consumer<QuerySolution> 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);
}
Expand Down
1 change: 1 addition & 0 deletions src/main/resources/application.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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}
Expand Down

0 comments on commit 14fbdc4

Please sign in to comment.