/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.jena.sparql.util; import java.util.ArrayList ; import java.util.Arrays ; import java.util.Iterator ; import java.util.List ; import org.apache.jena.graph.Node ; import org.apache.jena.graph.NodeFactory ; import org.apache.jena.query.Dataset ; import org.apache.jena.query.DatasetFactory ; import org.apache.jena.rdf.model.Model ; import org.apache.jena.riot.RDFDataMgr ; import org.apache.jena.riot.system.IRIResolver ; import org.apache.jena.sparql.core.DatasetDescription ; import org.apache.jena.sparql.core.DatasetGraph ; import org.apache.jena.sparql.core.DatasetGraphFactory ; import org.apache.jena.sparql.graph.GraphFactory ; import org.apache.jena.system.Txn ; /** Internal Dataset factory + graph equivalents. */ public class DatasetUtils { /** Create a general purpose, in-memory dataset, and load data into the default graph and * also some named graphs. * @param uri Default graph * @param namedSourceList Named graphs * @return Dataset */ public static Dataset createDataset(String uri, List<String> namedSourceList) { return createDataset(uri, namedSourceList, null); } /** Create a general purpose, in-memory dataset, and load data into the default graph and * also some named graphs. * @param uri Default graph * @param namedSourceList Named graphs * @param baseURI * @return Dataset */ public static Dataset createDataset(String uri, List<String> namedSourceList, String baseURI) { List<String> uriList = Arrays.asList(uri); return createDataset(uriList, namedSourceList, baseURI); } /** Create a general purpose, in-memory dataset, and load some data * * @param uriList RDF for the default graph * @param namedSourceList Named graphs. * @return Dataset */ public static Dataset createDataset(List<String> uriList, List<String> namedSourceList) { return createDataset(uriList, namedSourceList, null); } /** Create a general purpose, in-memory dataset, and load data. * * @param datasetDesc * @return Dataset */ public static Dataset createDataset(DatasetDescription datasetDesc) { return createDataset(datasetDesc, null); } /** Create a general purpose, in-memory dataset, and load data. * * @param datasetDesc * @return Dataset */ public static Dataset createDataset(DatasetDescription datasetDesc, String baseURI) { return createDataset(datasetDesc.getDefaultGraphURIs(), datasetDesc.getNamedGraphURIs(), baseURI); } /** Create a general purpose, in-memory dataset, and load data. * @param uriList Default graph * @param namedSourceList Named graphs * @param baseURI * @return Dataset */ public static Dataset createDataset(List<String> uriList, List<String> namedSourceList, String baseURI) { Dataset ds = DatasetFactory.createGeneral(); return addInGraphs(ds, uriList, namedSourceList, baseURI); } /** Add graphs into an existing Dataset */ public static Dataset addInGraphs(Dataset ds, List<String> uriList, List<String> namedSourceList) { return addInGraphs(ds, uriList, namedSourceList, null) ; } /** Add graphs into a Dataset * * @param ds * @param uriList Default graph * @param namedSourceList Named graphs * @param baseURI * @return Dataset, as passed in. */ public static Dataset addInGraphs(Dataset ds, List<String> uriList, List<String> namedSourceList, String baseURI) { addInGraphs(ds.asDatasetGraph(), uriList, namedSourceList, baseURI) ; return ds ; } // ---- DatasetGraph level. /** Create a general purpose, in-memory dataset, and load data. * * @param datasetDesc * @return Dataset */ public static DatasetGraph createDatasetGraph(DatasetDescription datasetDesc) { return createDatasetGraph(datasetDesc.getDefaultGraphURIs(), datasetDesc.getNamedGraphURIs(), null) ; } /** Create a general purpose, in-memory dataset, and load data. * * @param datasetDesc * @param baseURI * @return Dataset */ public static DatasetGraph createDatasetGraph(DatasetDescription datasetDesc, String baseURI) { return createDatasetGraph(datasetDesc.getDefaultGraphURIs(), datasetDesc.getNamedGraphURIs(), baseURI) ; } public static DatasetGraph createDatasetGraph(String uri, List<String> namedSourceList, String baseURI) { List<String> uriList = new ArrayList<String>(); uriList.add(uri); return createDatasetGraph(uriList, namedSourceList, baseURI); } public static DatasetGraph createDatasetGraph(List<String> uriList, List<String> namedSourceList, String baseURI) { DatasetGraph dsg = DatasetGraphFactory.createGeneral(); addInGraphs(dsg, uriList, namedSourceList, baseURI); return dsg ; } /** Add graphs into a DatasetGraph * * @param dsg * @param uriList Default graph * @param namedSourceList Named graphs */ public static void addInGraphs(DatasetGraph dsg, List<String> uriList, List<String> namedSourceList) { addInGraphs(dsg, uriList, namedSourceList, null) ; } /** Add graphs into a DatasetGraph * * @param dsg * @param uriList Default graph * @param namedSourceList Named graphs * @param baseURI */ public static void addInGraphs(DatasetGraph dsg, List<String> uriList, List<String> namedSourceList, String baseURI) { if ( ! dsg.supportsTransactions() ) addInGraphsWorker(dsg, uriList, namedSourceList, baseURI) ; if ( dsg.isInTransaction() ) addInGraphsWorker(dsg, uriList, namedSourceList, baseURI); Txn.executeWrite(dsg, ()->addInGraphsWorker(dsg, uriList, namedSourceList, baseURI)) ; } private static void addInGraphsWorker(DatasetGraph dsg, List<String> uriList, List<String> namedSourceList, String baseURI) { // Merge into background graph if ( uriList != null ) { Model m = GraphFactory.makeDefaultModel(); for ( Iterator<String> iter = uriList.iterator() ; iter.hasNext() ; ) { String sourceURI = iter.next(); String absURI = null; if ( baseURI != null ) absURI = IRIResolver.resolveString(sourceURI, baseURI); else absURI = IRIResolver.resolveString(sourceURI); // FileManager.readGraph? RDFDataMgr.read(m, sourceURI, absURI, null); } dsg.setDefaultGraph(m.getGraph()); } else { dsg.setDefaultGraph(GraphFactory.createDefaultGraph()); } if ( namedSourceList != null ) { for ( Iterator<String> iter = namedSourceList.iterator() ; iter.hasNext() ; ) { String sourceURI = iter.next(); String absURI = null; if ( baseURI != null ) absURI = IRIResolver.resolveString(baseURI, sourceURI); else absURI = IRIResolver.resolveString(sourceURI); Model m = GraphFactory.makeDefaultModel(); RDFDataMgr.read(m, sourceURI, absURI, null); Node gn = NodeFactory.createURI(sourceURI); dsg.addGraph(gn, m.getGraph()); } } } }