/* * Copyright Aduna (http://www.aduna-software.com/) (c) 2007. * * Licensed under the Aduna BSD-style license. */ package org.openrdf.query.parser.sparql; import java.util.List; import org.openrdf.model.URI; import org.openrdf.model.impl.URIImpl; import org.openrdf.query.Dataset; import org.openrdf.query.MalformedQueryException; import org.openrdf.query.impl.DatasetImpl; import org.openrdf.query.parser.sparql.ast.ASTDatasetClause; import org.openrdf.query.parser.sparql.ast.ASTIRI; import org.openrdf.query.parser.sparql.ast.ASTQueryContainer; /** * Extracts a SPARQL {@link #Dataset} from an ASTQueryContainer, if one is * contained. * * @author Simon Schenk * @author Arjohn Kampman */ public class DatasetDeclProcessor { /** * Extracts a SPARQL {@link #Dataset} from an ASTQueryContainer, if one is * contained. Returns null otherwise. * * @param qc * The query model to resolve relative URIs in. * @throws MalformedQueryException * If DatasetClause does not contain a valid URI. */ public static Dataset process(ASTQueryContainer qc) throws MalformedQueryException { DatasetImpl dataset = null; List<ASTDatasetClause> datasetClauses = qc.getQuery().getDatasetClauseList(); if (!datasetClauses.isEmpty()) { dataset = new DatasetImpl(); for (ASTDatasetClause dc : datasetClauses) { ASTIRI astIri = dc.jjtGetChild(ASTIRI.class); try { URI uri = new URIImpl(astIri.getValue()); if (dc.isNamed()) { dataset.addNamedGraph(uri); } else { dataset.addDefaultGraph(uri); } } catch (IllegalArgumentException e) { throw new MalformedQueryException(e.getMessage(), e); } } } return dataset; } }