blob: fa693a1d8956cb3f573d9ea8373f32a46f2e2c3a [file] [log] [blame]
/**
* 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.riot;
import java.io.ByteArrayOutputStream;
import java.io.InputStream ;
import java.io.OutputStream ;
import java.util.Objects;
import org.apache.jena.atlas.lib.StrUtils;
import org.apache.jena.query.ResultSet ;
import org.apache.jena.query.ResultSetFactory ;
import org.apache.jena.query.ResultSetFormatter ;
import org.apache.jena.riot.resultset.ResultSetReaderRegistry;
import org.apache.jena.riot.resultset.rw.ResultsReader;
import org.apache.jena.riot.resultset.rw.ResultsWriter;
import org.apache.jena.sparql.resultset.ResultSetException;
import org.apache.jena.sparql.resultset.SPARQLResult;
import org.apache.jena.sparql.util.Context ;
import org.apache.jena.sys.JenaSystem;
/**
* Reading and writing of Result Sets.
* {@link ResultSetFormatter} provides output to text.
* @see ResultSetFactory
* @see ResultSetFormatter
*/
public class ResultSetMgr {
static { JenaSystem.init(); }
/**
* Read from a {@code URL} (including filenames) and produce a {@link ResultSet}.
* Note that returned result set may stream and so the input stream be read
* while the ResultSet is used.
* <p>
* See {@link ResultSetFactory#copyResults(ResultSet)}
* for a ResultSet that is detached from the {@code InputStream}.
*
* @param urlOrFilename
* @return ResultSet
*/
public static ResultSet read(String urlOrFilename) {
ResultSet rs = readAny(urlOrFilename).getResultSet();
if ( rs == null )
throw new ResultSetException("Not a result set");
return rs;
}
/**
* Read from a {@code URL} (including filenames) and produce a {@link ResultSet};
* the stream is expect to use syntax {@code lang}. Note that returned
* result set may stream and so the input stream be read while the ResultSet is used.
* See {@link ResultSetFactory#copyResults(ResultSet)}
* for a ResultSet that is detached from the {@code InputStream}.
*
* @param urlOrFilename
* @param lang
* @return ResultSet
*/
public static ResultSet read(String urlOrFilename, Lang lang) {
ResultSet rs = readAny(urlOrFilename, lang).getResultSet();
if ( rs == null )
throw new ResultSetException("Not a result set");
return rs;
}
/**
* Read from a {@code URL} (including filenames) and produce a {@link ResultSet}.
* Note that returned result set may stream and so the input stream be read
* while the ResultSet is used.
* <p>
* See {@link ResultSetFactory#copyResults(ResultSet)}
* for a ResultSet that is detached from the {@code InputStream}.
*
* @param input
* @return ResultSet
*/
public static ResultSet read(InputStream input) {
ResultSet rs = readAny(input).getResultSet();
if ( rs == null )
throw new ResultSetException("Not a result set");
return rs;
}
/**
* Read from an {@code InputStream} and produce a {@link ResultSet};
* the stream is expect to use syntax {@code lang}. Note that returned
* result set may stream and so the input stream be read while the ResultSet is used.
* See {@link ResultSetFactory#copyResults(ResultSet)}
* for a ResultSet that is detached from the {@code InputStream}.
*
* @param input
* @param lang
* @return ResultSet
*/
public static ResultSet read(InputStream input, Lang lang) {
ResultSet rs = readAny(input, lang).getResultSet();
if ( rs == null )
throw new ResultSetException("Not a result set");
return rs;
}
private static void checkLang(Lang lang) {
Objects.requireNonNull(lang);
if ( ! ResultSetReaderRegistry.isRegistered(lang) ) {
throw new ResultSetException("Not a result set syntax: "+lang);
}
}
/** Read a boolean result from the URI
*
* @param urlOrFilename
* @return boolean
*/
public static boolean readBoolean(String urlOrFilename) {
Boolean b = readAny(urlOrFilename).getBooleanResult();
return b;
}
/** Read a boolean result from the URI;
* the input is expect to use syntax {@code lang}
*
* @param urlOrFilename
* @param lang
* @return boolean
*/
public static boolean readBoolean(String urlOrFilename, Lang lang) {
Boolean b = readAny(urlOrFilename, lang).getBooleanResult();
return b;
}
/** Read a boolean result from the URI
*
* @param input
* @return boolean
*/
public static boolean readBoolean(InputStream input) {
Boolean b = readAny(input).getBooleanResult();
return b;
}
/** Read a boolean result from the URI;
* the input is expect to use syntax {@code lang}
*
* @param input
* @param lang
* @return boolean
*/
public static boolean readBoolean(InputStream input, Lang lang) {
Boolean b = readAny(input, lang).getBooleanResult();
return b;
}
private static SPARQLResult readAny(String url) {
return ResultsReader.create().build().readAny(url);
}
private static SPARQLResult readAny(String url, Lang lang) {
checkLang(lang);
return ResultsReader.create()
.lang(lang)
.build()
.readAny(url);
}
private static SPARQLResult readAny(InputStream input) {
return ResultsReader.create().build().readAny(input);
}
private static SPARQLResult readAny(InputStream input, Lang lang) {
checkLang(lang);
return ResultsReader.create()
.lang(lang)
.build()
.readAny(input);
}
// -------------------------------
/** Read ResultSet.
* @param uri URI to read from (includes file: and a plain file name).
* @param hintLang Hint for the syntax
* @param context Content object to control reading process.
*/
public static ResultSet parse(String uri, Lang hintLang, Context context) {
ResultSet rs = ResultsReader.create().lang(hintLang).context(context).read(uri);
if ( rs == null )
throw new ResultSetException("Not a result set");
return rs;
}
// -------------------------------
/** Write a SPARQL result set to the output stream in the specified language/syntax.
* @param output
* @param resultSet
* @param lang
*/
public static void write(OutputStream output, ResultSet resultSet, Lang lang) {
Objects.requireNonNull(lang);
ResultsWriter.create()
.lang(lang)
.write(output, resultSet);
}
/** Write a SPARQL boolean result to the output stream in the specified language/syntax.
* @param output
* @param result
* @param lang
*/
public static void write(OutputStream output, boolean result, Lang lang) {
Objects.requireNonNull(lang);
ResultsWriter.create()
.lang(lang)
.build()
.write(output, result);
}
/** Generate a string in the specified language/syntax for a SPARQL result set.
* @param resultSet
* @param lang
*/
public static String asString(ResultSet resultSet, Lang lang) {
Objects.requireNonNull(lang);
ByteArrayOutputStream output = new ByteArrayOutputStream(1000);
ResultsWriter.create()
.lang(lang)
.write(output, resultSet);
return StrUtils.fromUTF8bytes(output.toByteArray());
}
/** Generate a string in the specified language/syntax for a SPARQL boolean result.
* @param result
* @param lang
*/
public static String asString(boolean result, Lang lang) {
Objects.requireNonNull(lang);
ByteArrayOutputStream output = new ByteArrayOutputStream(1000);
ResultsWriter.create()
.lang(lang)
.build()
.write(output, result);
return StrUtils.fromUTF8bytes(output.toByteArray());
}
}