Utils.java
/*******************************************************************************
* Copyright (c) 2018 Eclipse RDF4J contributors.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Distribution License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: BSD-3-Clause
*******************************************************************************/
package org.eclipse.rdf4j.sail.shacl;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.UUID;
import org.eclipse.rdf4j.common.exception.RDF4JException;
import org.eclipse.rdf4j.common.transaction.IsolationLevels;
import org.eclipse.rdf4j.model.IRI;
import org.eclipse.rdf4j.model.Model;
import org.eclipse.rdf4j.model.Statement;
import org.eclipse.rdf4j.model.impl.SimpleValueFactory;
import org.eclipse.rdf4j.repository.RepositoryConnection;
import org.eclipse.rdf4j.repository.sail.SailRepository;
import org.eclipse.rdf4j.repository.sail.SailRepositoryConnection;
import org.eclipse.rdf4j.rio.RDFFormat;
import org.eclipse.rdf4j.rio.Rio;
import org.eclipse.rdf4j.rio.UnsupportedRDFormatException;
import org.eclipse.rdf4j.sail.NotifyingSail;
import org.eclipse.rdf4j.sail.Sail;
import org.eclipse.rdf4j.sail.SailConnection;
import org.eclipse.rdf4j.sail.memory.MemoryStore;
/**
* @author H��vard Ottestad
*/
public class Utils {
public static void loadShapeData(ShaclSail sail, String resourceName) throws IOException {
assert resourceName.endsWith(".trig") : "Not a RDF Trig file: " + resourceName;
sail.init();
sail.disableValidation();
Model shapes;
try (InputStream shapesData = getResourceAsStream(resourceName)) {
assert shapesData != null : "Could not find: " + resourceName;
shapes = Rio.parse(shapesData, "", RDFFormat.TRIG);
}
try (SailConnection conn = sail.getConnection()) {
conn.begin(IsolationLevels.NONE);
for (Statement st : shapes) {
conn.addStatement(st.getSubject(), st.getPredicate(), st.getObject(), st.getContext());
}
conn.commit();
}
sail.enableValidation();
}
public static void loadShapeData(SailRepository repo, String resourceName) throws IOException {
assert resourceName.endsWith(".trig") : "Not a RDF Trig file: " + resourceName;
try (InputStream shapesData = getResourceAsStream(resourceName)) {
assert shapesData != null : "Could not find: " + resourceName;
try (RepositoryConnection conn = repo.getConnection()) {
conn.begin(IsolationLevels.NONE, ShaclSail.TransactionSettings.ValidationApproach.Disabled);
conn.add(shapesData, "", RDFFormat.TRIG);
conn.commit();
}
}
}
public static void loadShapeData(SailRepository repo, Model shapes) {
try (RepositoryConnection conn = repo.getConnection()) {
conn.begin(IsolationLevels.NONE, ShaclSail.TransactionSettings.ValidationApproach.Disabled);
conn.add(shapes);
conn.commit();
}
}
private static InputStream getResourceAsStream(String resourceName) {
InputStream resourceAsStream = Utils.class.getClassLoader().getResourceAsStream(resourceName);
if (resourceAsStream != null) {
return new BufferedInputStream(resourceAsStream);
}
return null;
}
public static void loadShapeData(SailRepository repo, URL resourceName)
throws RDF4JException, UnsupportedRDFormatException, IOException {
assert resourceName.toString().endsWith(".trig") : "Not a RDF Trig file: " + resourceName;
try (RepositoryConnection conn = repo.getConnection()) {
conn.begin(IsolationLevels.NONE, ShaclSail.TransactionSettings.ValidationApproach.Disabled);
conn.add(resourceName, resourceName.toString(), RDFFormat.TRIG);
conn.commit();
}
}
public static SailRepository getInitializedShaclRepository(String shapeData) throws IOException {
SailRepository repo = new SailRepository(new ShaclSail(new MemoryStore()));
Utils.loadShapeData(repo, shapeData);
return repo;
}
public static ShaclSail getInitializedShaclSail(String shapeData) throws IOException {
ShaclSail sail = new ShaclSail(new MemoryStore());
Utils.loadShapeData(sail, shapeData);
return sail;
}
public static Sail getInitializedShaclSail(NotifyingSail baseSail, String shaclFileName) throws IOException {
ShaclSail sail = new ShaclSail(baseSail);
Utils.loadShapeData(sail, shaclFileName);
return sail;
}
public static SailRepository getSailRepository(URL resourceName, RDFFormat format) {
SailRepository sailRepository = new SailRepository(new MemoryStore());
try (SailRepositoryConnection connection = sailRepository.getConnection()) {
connection.add(resourceName, resourceName.toString(), format);
} catch (IOException | NullPointerException e) {
System.out.println("Error reading: " + resourceName);
throw new RuntimeException(e);
}
return sailRepository;
}
public static void loadInitialData(SailRepository repo, String resourceName) throws IOException {
try (InputStream initialData = getResourceAsStream(resourceName)) {
if (initialData == null) {
return;
}
try (RepositoryConnection conn = repo.getConnection()) {
conn.begin(IsolationLevels.NONE, ShaclSail.TransactionSettings.ValidationApproach.Disabled);
conn.add(initialData, "", RDFFormat.TRIG);
conn.commit();
}
}
}
public static void loadShapeData(SailRepository repo, URL resourceName, RDFFormat format, IRI shaclShapeGraph)
throws IOException {
try (RepositoryConnection conn = repo.getConnection()) {
conn.begin(IsolationLevels.NONE, ShaclSail.TransactionSettings.ValidationApproach.Disabled);
conn.add(resourceName, resourceName.toString(), format, shaclShapeGraph);
conn.commit();
}
}
static class Ex {
public final static String ns = "http://example.com/ns#";
public final static IRI Person = createIri("Person");
public final static IRI ssn = createIri("ssn");
public final static IRI name = createIri("name");
public static IRI createIri(String name) {
return SimpleValueFactory.getInstance().createIRI(ns + name);
}
public static IRI createIri() {
return SimpleValueFactory.getInstance().createIRI(ns + UUID.randomUUID());
}
}
}