/** Wrap an existing DatasetGraph */ public static Dataset wrap(DatasetGraph datasetGraph) { return new DatasetImpl(datasetGraph) ; }
/** * Wrap a {@link DatasetGraph} to make a dataset * * @param dataset DatasetGraph * @return Dataset */ public static Dataset wrap(DatasetGraph dataset) { Objects.requireNonNull(dataset, "Can't wrap a null DatasetGraph reference") ; return DatasetImpl.wrap(dataset); }
@Override public Model getNamedModel(String uri) { checkGraphName(uri) ; Node n = NodeFactory.createURI(uri) ; return graph2model(dsg.getGraph(n)) ; }
@Override public ReadWrite transactionMode() { checkTransactional(); return transactional.transactionMode(); }
@Override public Dataset removeNamedModel(String uri) { checkGraphName(uri) ; Node n = NodeFactory.createURI(uri) ; dsg.removeGraph(n) ; return this; }
private void checkTransactional() { if ( ! supportsTransactions() ) throw new UnsupportedOperationException("Transactions not supported") ; }
@Override public void commit() { checkTransactional(); transactional.commit(); }
@Override public boolean containsNamedModel(String uri) { // Does not touch the cache. checkGraphName(uri) ; Node n = NodeFactory.createURI(uri) ; return dsg.containsGraph(n) ; }
public static FluentUpdateExecutionFactory from(DatasetGraph datasetGraph, Context context) { Dataset dataset = DatasetImpl.wrap(datasetGraph); FluentUpdateExecutionFactory result = from(dataset, context); return result; }
/** * Create a dataset, starting with the model argument as the default graph of the * dataset. Named graphs can be added. * <p> * Use {@link #wrap(Model)} to put dataset functionality around a single * model when named graphs will not be added. * * @param model The model for the default graph * @return a dataset with the given model as the default graph */ public static Dataset create(Model model) { Objects.requireNonNull(model, "Default model must be provided") ; return new DatasetImpl(model); }
@Override public void abort() { checkTransactional(); transactional.abort(); }
@Override public Dataset addNamedModel(String uri, Model model) { checkGraphName(uri) ; Node n = NodeFactory.createURI(uri) ; dsg.addGraph(n, model.getGraph()) ; return this; }
public static FluentQueryExecutionFactory<?> from(DatasetGraph datasetGraph, Context context) { Dataset dataset = DatasetImpl.wrap(datasetGraph); return from(dataset, context); }
/** * @param dataset Dataset to clone structure from. * @return a dataset: clone the dataset structure of named graphs, and share the graphs themselves. * @deprecated This operation may be removed. */ @Deprecated public static Dataset create(Dataset dataset) { Objects.requireNonNull(dataset, "Clone dataset is null") ; return new DatasetImpl(dataset); }
@Override public void begin(ReadWrite mode) { checkTransactional(); transactional.begin(mode); }
@Override public Dataset replaceNamedModel(String uri, Model model) { // Assumes single writer. checkGraphName(uri) ; Node n = NodeFactory.createURI(uri) ; dsg.removeGraph(n) ; dsg.addGraph(n, model.getGraph() ) ; return this; }
@Override public QueryIterator exec(Binding binding, PropFuncArg argSubject, Node predicate, PropFuncArg argObject, ExecutionContext execCxt) { argSubject = Substitute.substitute(argSubject, binding); argObject = Substitute.substitute(argObject, binding); if(!argObject.getArg().isVariable()) { throw new ExprEvalException("Right hand side of tosh:targetContains must be a variable"); } Node targetNode = argSubject.getArgList().get(0); Node shapesGraphNode = argSubject.getArgList().get(1); Model currentModel = ModelFactory.createModelForGraph(execCxt.getActiveGraph()); Dataset dataset = new DatasetWithDifferentDefaultModel(currentModel, DatasetImpl.wrap(execCxt.getDataset())); Model model = dataset.getNamedModel(shapesGraphNode.getURI()); Resource target = (Resource) model.asRDFNode(targetNode); Set<Node> focusNodes = new HashSet<Node>(); SHACLUtil.addNodesInTarget(target, dataset, focusNodes); return new QueryIterExtendByVar(binding, (Var) argObject.getArg(), focusNodes.iterator(), execCxt); } }
/** * Specifies a Dataset that shall be used for query execution. * Returns a new DatasetImpl by default but may be overloaded in subclasses. * For example, TopBraid delegates this to the currently open Graphs. * @param defaultModel the default Model of the Dataset * @return the Dataset */ public Dataset getDataset(Model defaultModel) { if(defaultModel != null) { return new DatasetImpl(defaultModel); } else { return new DatasetImpl(JenaUtil.createMemoryModel()); } }
@Override public boolean promote(Promote txnType) { checkTransactional(); return transactional.promote(txnType); }
@Override public QueryIterator exec(Binding binding, PropFuncArg argSubject, Node predicate, PropFuncArg argObject, ExecutionContext execCxt) { argSubject = Substitute.substitute(argSubject, binding); argObject = Substitute.substitute(argObject, binding); if(!argObject.getArg().isVariable()) { throw new ExprEvalException("Right hand side of tosh:targetContains must be a variable"); } Node targetNode = argSubject.getArgList().get(0); Node shapesGraphNode = argSubject.getArgList().get(1); Model currentModel = ModelFactory.createModelForGraph(execCxt.getActiveGraph()); Dataset dataset = new DatasetWithDifferentDefaultModel(currentModel, DatasetImpl.wrap(execCxt.getDataset())); Model model = dataset.getNamedModel(shapesGraphNode.getURI()); Resource target = (Resource) model.asRDFNode(targetNode); Set<Node> focusNodes = new HashSet<Node>(); SHACLUtil.addNodesInTarget(target, dataset, focusNodes); return new QueryIterExtendByVar(binding, (Var) argObject.getArg(), focusNodes.iterator(), execCxt); } }