Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
- Application title and subtitle in config and settings
- Possibility to configure ping endpoints in config file
- SHACL preview for metadata schemas
- SHACL validation using [SHACL-SHACL](https://www.w3.org/ns/shacl-shacl)
- (Index) Cleanup of harvested records before next harvesting

### Fixed
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,9 @@ public void validate(Model shacl, Model data, String baseUri) {
}
throw new ValidationException("Validation failed (unsupported exception)");
}
finally {
sailRepository.shutDown();
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -22,18 +22,23 @@
*/
package nl.dtls.fairdatapoint.service.schema;

import com.google.common.base.Charsets;
import com.google.common.io.Resources;
import nl.dtls.fairdatapoint.api.dto.schema.MetadataSchemaChangeDTO;
import nl.dtls.fairdatapoint.api.dto.schema.MetadataSchemaVersionDTO;
import nl.dtls.fairdatapoint.database.mongo.repository.MetadataSchemaDraftRepository;
import nl.dtls.fairdatapoint.database.mongo.repository.MetadataSchemaRepository;
import nl.dtls.fairdatapoint.database.mongo.repository.ResourceDefinitionRepository;
import nl.dtls.fairdatapoint.entity.exception.ValidationException;
import nl.dtls.fairdatapoint.entity.resource.ResourceDefinition;
import nl.dtls.fairdatapoint.entity.schema.MetadataSchema;
import nl.dtls.fairdatapoint.service.rdf.ShaclValidator;
import nl.dtls.fairdatapoint.util.RdfIOUtil;
import org.eclipse.rdf4j.model.Model;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.io.IOException;
import java.net.URL;
import java.util.List;
import java.util.Optional;
import java.util.Set;
Expand All @@ -44,22 +49,32 @@
@Component
public class MetadataSchemaValidator {

@Autowired
private MetadataSchemaDraftRepository metadataSchemaDraftRepository;
private static final String SHACL_SHACL_FILENAME = "shacl-shacl.ttl";

private static final Model SHACL_SHACL_DEF = loadShaclShaclDefinition();

@Autowired
private MetadataSchemaRepository metadataSchemaRepository;

@Autowired
private ResourceDefinitionRepository resourceDefinitionRepository;

@Autowired
private ShaclValidator shaclValidator;

@Autowired
private String persistentUrl;

private void validateShacl(String shaclDefinition) {
final Model data;
try {
RdfIOUtil.read(shaclDefinition, "");
data = RdfIOUtil.read(shaclDefinition, "");
}
catch (ValidationException exception) {
throw new ValidationException("Unable to read SHACL definition");
}

shaclValidator.validate(SHACL_SHACL_DEF, data, persistentUrl);
}

public void validateNotUsed(String uuid) {
Expand Down Expand Up @@ -137,4 +152,20 @@ public void validateAllExist(List<String> schemasUuids) {
throw new ValidationException(format("Metadata schemas not found: %s", missing));
}
}

private static Model loadShaclShaclDefinition() {
try {
final URL fileURL = MetadataSchemaValidator.class.getResource(SHACL_SHACL_FILENAME);
return RdfIOUtil.read(
Resources.toString(fileURL, Charsets.UTF_8),
"http://www.w3.org/ns/shacl-shacl#"
);
}
catch (IOException exception) {
throw new RuntimeException(
format("Cannot load SHACL-SHACL definition: %s",
exception.getMessage())
);
}
}
}
Loading