This is an automated email from the ASF dual-hosted git repository. andy pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/jena.git
commit fcbe01502f5a5c760a3f0f4e6524ac9ca4d8f94f Author: Andy Seaborne <[email protected]> AuthorDate: Tue Nov 11 13:53:09 2025 +0000 GH-3581: Remove deprecated classes, methods and constants (jena-arq) --- .../src/main/java/org/apache/jena/query/ARQ.java | 36 +-- .../src/main/java/org/apache/jena/query/Query.java | 11 - .../org/apache/jena/query/ResultSetCloseable.java | 4 +- .../main/java/org/apache/jena/riot/RDFDataMgr.java | 19 +- .../main/java/org/apache/jena/riot/RDFParser.java | 28 +- .../org/apache/jena/riot/RDFParserBuilder.java | 64 ----- .../src/main/java/org/apache/jena/riot/RIOT.java | 7 - .../apache/jena/riot/lang/CollectorStreamBase.java | 85 ------ .../jena/riot/lang/CollectorStreamQuads.java | 51 ---- .../jena/riot/lang/CollectorStreamTriples.java | 52 ---- .../org/apache/jena/riot/lang/IteratorParsers.java | 31 +++ .../java/org/apache/jena/riot/lang/LangEngine.java | 6 - .../jena/riot/lang/extra/LangParserBase.java | 6 - .../process/normalize/StreamCanonicalLiterals.java | 2 +- .../jena/riot/rowset/rw/RowSetReaderJSON_V1.java | 310 --------------------- .../java/org/apache/jena/riot/system/Checker.java | 7 - .../org/apache/jena/riot/system/JenaTitanium.java | 187 ------------- .../org/apache/jena/riot/system/ParserProfile.java | 12 - .../java/org/apache/jena/riot/web/LangTag.java | 235 ---------------- .../java/org/apache/jena/sparql/ARQConstants.java | 4 + .../java/org/apache/jena/sparql/SystemARQ.java | 7 - .../jena/sparql/core/assembler/AssemblerUtils.java | 6 - .../jena/sparql/engine/ExecutionContext.java | 31 +-- .../sparql/engine/ResultSetCheckCondition.java | 120 -------- .../apache/jena/sparql/engine/join/JoinKey.java | 10 - .../engine/main/iterator/QueryIterService.java | 98 ------- .../jena/sparql/exec/http/QueryExecHTTP.java | 9 +- .../org/apache/jena/sparql/expr/RegexEngine.java | 28 +- .../jena/sparql/expr/nodevalue/XSDFuncOp.java | 43 +-- .../apache/jena/sparql/lang/SyntaxVarScope.java | 6 - .../jena/sparql/resultset/ResultSetCompare.java | 193 ------------- .../apache/jena/sparql/service/ServiceExec.java | 9 - .../jena/sparql/service/ServiceExecution.java | 35 --- .../sparql/service/ServiceExecutorFactory.java | 42 --- .../sparql/service/ServiceExecutorRegistry.java | 12 - .../apache/jena/sparql/syntax/ElementGroup.java | 7 - .../syntax/syntaxtransform/QueryTransformOps.java | 12 - .../apache/jena/sparql/util/NodeFactoryExtra.java | 34 --- .../java/org/apache/jena/sparql/util/Utils.java | 53 ---- .../org/apache/jena/sparql/util/XSDNumUtils.java | 21 +- .../org/apache/jena/update/UpdateStreaming.java | 26 -- .../main/java/org/apache/jena/web/FileSender.java | 85 ------ .../java/org/apache/jena/riot/TS_RiotGeneral.java | 2 +- ...iotReader.java => TestRiotParserIterators.java} | 39 +-- .../org/apache/jena/system/TestJenaTitanium.java | 75 ----- .../test/service/TestCustomServiceExecutor.java | 3 +- 46 files changed, 132 insertions(+), 2031 deletions(-) diff --git a/jena-arq/src/main/java/org/apache/jena/query/ARQ.java b/jena-arq/src/main/java/org/apache/jena/query/ARQ.java index f8134ffa6e..4571c86690 100644 --- a/jena-arq/src/main/java/org/apache/jena/query/ARQ.java +++ b/jena-arq/src/main/java/org/apache/jena/query/ARQ.java @@ -233,12 +233,6 @@ public class ARQ */ public static final Symbol useSAX = SystemARQ.allocSymbol("useSAX"); - /** - * @deprecated Ignored - */ - @Deprecated(forRemoval = true) - public static final boolean allowDuplicateSelectColumns = false; - /** * Determine which regular expression system to use. * The value of this context entry should be a string: @@ -250,18 +244,18 @@ public class ARQ */ public static final Symbol regexImpl = SystemARQ.allocSymbol("regexImpl"); - /** - * Symbol to name java.util.regex regular expression engine - * @deprecated Use string "javaRegex" - */ - @Deprecated(forRemoval = true) - public static final Symbol javaRegex = SystemARQ.allocSymbol("javaRegex"); - /** - * Symbol to name the Xerces-J regular expression engine - * @deprecated Use string "xercesRegex" - */ - @Deprecated(forRemoval = true) - public static final Symbol xercesRegex = SystemARQ.allocSymbol("xercesRegex"); +// /** +// * Symbol to name java.util.regex regular expression engine +// * @deprecated Use string "javaRegex" +// */ +// @Deprecated(forRemoval = true) +// public static final Symbol javaRegex = SystemARQ.allocSymbol("javaRegex"); +// /** +// * Symbol to name the Xerces-J regular expression engine +// * @deprecated Use string "xercesRegex" +// */ +// @Deprecated(forRemoval = true) +// public static final Symbol xercesRegex = SystemARQ.allocSymbol("xercesRegex"); /** * Use this Symbol to allow passing additional query parameters to a @@ -616,7 +610,7 @@ public class ARQ context.set(extensionValueTypes, false); context.set(constantBNodeLabels, false); context.set(generateToList, true); - context.set(regexImpl, xercesRegex); + context.set(regexImpl, ARQConstants.strXercesRegex); //context.set(filterPlacement, false); } @@ -643,7 +637,7 @@ public class ARQ context.set(extensionValueTypes, true); context.set(constantBNodeLabels, true); context.set(generateToList, false); - context.set(regexImpl, javaRegex); + context.set(regexImpl, ARQConstants.strJavaRegex); } // ---------------------------------- @@ -709,7 +703,7 @@ public class ARQ context.set(strictSPARQL, false); context.set(constantBNodeLabels, true); context.set(enablePropertyFunctions, true); - context.set(regexImpl, javaRegex); + context.set(regexImpl, ARQConstants.strJavaRegex); } public static Context getContext() { diff --git a/jena-arq/src/main/java/org/apache/jena/query/Query.java b/jena-arq/src/main/java/org/apache/jena/query/Query.java index 659f7a00ba..af40f01e54 100644 --- a/jena-arq/src/main/java/org/apache/jena/query/Query.java +++ b/jena-arq/src/main/java/org/apache/jena/query/Query.java @@ -388,17 +388,6 @@ public class Query extends Prologue implements Cloneable, Printable */ private boolean resultVarsSet = false; - /** - * Set the results variables if necessary, when the query has "*" ({@code SELECT *} - * or {@code DESCRIBE *}) and for a construct query. This operation is idempotent and can - * be called to ensure the results variables have been set. - * @deprecated Use {@link #ensureResultVars()} - */ - @Deprecated(forRemoval = true) - public void setResultVars() { - ensureResultVars(); - } - public void ensureResultVars() { if ( resultVarsSet ) return; diff --git a/jena-arq/src/main/java/org/apache/jena/query/ResultSetCloseable.java b/jena-arq/src/main/java/org/apache/jena/query/ResultSetCloseable.java index a63260a8c8..7bde3bdb47 100644 --- a/jena-arq/src/main/java/org/apache/jena/query/ResultSetCloseable.java +++ b/jena-arq/src/main/java/org/apache/jena/query/ResultSetCloseable.java @@ -37,9 +37,7 @@ public class ResultSetCloseable extends ResultSetOnClose implements AutoCloseabl return new ResultSetCloseable(queryExecution.execSelect(), queryExecution) ; } - /** @deprecated The constructor will become private. Use {@link #closeableResultSet}. */ - @Deprecated - public ResultSetCloseable(ResultSet rs, QueryExecution qexec) { + private ResultSetCloseable(ResultSet rs, QueryExecution qexec) { super(rs, ()->qexec.close()) ; } } diff --git a/jena-arq/src/main/java/org/apache/jena/riot/RDFDataMgr.java b/jena-arq/src/main/java/org/apache/jena/riot/RDFDataMgr.java index 8c5db43d5b..163263ed90 100644 --- a/jena-arq/src/main/java/org/apache/jena/riot/RDFDataMgr.java +++ b/jena-arq/src/main/java/org/apache/jena/riot/RDFDataMgr.java @@ -22,7 +22,6 @@ import java.io.*; import java.util.Iterator; import java.util.Objects; -import org.apache.jena.atlas.iterator.Iter; import org.apache.jena.atlas.web.ContentType; import org.apache.jena.atlas.web.TypedInputStream; import org.apache.jena.graph.Graph; @@ -32,8 +31,6 @@ import org.apache.jena.query.DatasetFactory; import org.apache.jena.rdf.model.Model; import org.apache.jena.rdf.model.ModelFactory; import org.apache.jena.riot.lang.IteratorParsers; -import org.apache.jena.riot.system.AsyncParser; -import org.apache.jena.riot.system.RiotLib; import org.apache.jena.riot.system.StreamRDF; import org.apache.jena.riot.system.StreamRDFLib; import org.apache.jena.riot.system.stream.StreamManager; @@ -822,15 +819,9 @@ public class RDFDataMgr * @param lang Language * @param baseIRI Base IRI * @return Iterator over the triples - * @deprecated Use {@link AsyncParser#asyncParseTriples} or for N-Triples, {@link IteratorParsers#createIteratorNTriples} */ - @Deprecated(forRemoval = true) public static Iterator<Triple> createIteratorTriples(InputStream input, Lang lang, String baseIRI) { - // Special case N-Triples, because the RIOT reader has a pull interface - if ( RDFLanguages.sameLang(RDFLanguages.NTRIPLES, lang) ) - return Iter.onCloseIO(IteratorParsers.createIteratorNTriples(input), input); - // Otherwise, we have to spin up a thread to deal with it - return AsyncParser.asyncParseTriples(input, lang, baseIRI); + return IteratorParsers.createIteratorTriples(input, lang, baseIRI); } /** @@ -841,14 +832,8 @@ public class RDFDataMgr * @param lang Language * @param baseIRI Base IRI * @return Iterator over the quads - * @deprecated Use {@link AsyncParser#asyncParseQuads} or for N-Triples, {@link IteratorParsers#createIteratorNQuads} */ - @Deprecated(forRemoval = true) public static Iterator<Quad> createIteratorQuads(InputStream input, Lang lang, String baseIRI) { - // Special case N-Quads, because the RIOT reader has a pull interface - if ( RDFLanguages.sameLang(RDFLanguages.NQUADS, lang) ) - return Iter.onCloseIO(IteratorParsers.createIteratorNQuads(input, RiotLib.dftProfile()), input); - // Otherwise, we have to spin up a thread to deal with it - return AsyncParser.asyncParseQuads(input, lang, baseIRI); + return IteratorParsers.createIteratorQuads(input, lang, baseIRI); } } diff --git a/jena-arq/src/main/java/org/apache/jena/riot/RDFParser.java b/jena-arq/src/main/java/org/apache/jena/riot/RDFParser.java index 278e9cb7fe..7c244e0f3c 100644 --- a/jena-arq/src/main/java/org/apache/jena/riot/RDFParser.java +++ b/jena-arq/src/main/java/org/apache/jena/riot/RDFParser.java @@ -155,20 +155,20 @@ public class RDFParser { return RDFParserBuilder.create().source(uriOrFile); } - /** - * Create an {@link RDFParserBuilder} and set content to be parsed to the - * string. The syntax must be set with {@code .lang(...)}. - * <p> - * Shortcut for {@code RDFParser.create.fromString(string)}. - * - * @param string - * @return RDFParserBuilder - * @deprecated Use {@link #fromString(String, Lang)} - */ - @Deprecated - public static RDFParserBuilder fromString(String string) { - return RDFParserBuilder.create().fromString(string); - } +// /** +// * Create an {@link RDFParserBuilder} and set content to be parsed to the +// * string. The syntax must be set with {@code .lang(...)}. +// * <p> +// * Shortcut for {@code RDFParser.create.fromString(string)}. +// * +// * @param string +// * @return RDFParserBuilder +// * @deprecated Use {@link #fromString(String, Lang)} +// */ +// @Deprecated +// public static RDFParserBuilder fromString(String string) { +// return RDFParserBuilder.create().fromString(string); +// } /** * Create an {@link RDFParserBuilder} and set content to be parsed diff --git a/jena-arq/src/main/java/org/apache/jena/riot/RDFParserBuilder.java b/jena-arq/src/main/java/org/apache/jena/riot/RDFParserBuilder.java index 634f8d760c..aebb15e1e7 100644 --- a/jena-arq/src/main/java/org/apache/jena/riot/RDFParserBuilder.java +++ b/jena-arq/src/main/java/org/apache/jena/riot/RDFParserBuilder.java @@ -352,76 +352,12 @@ public class RDFParserBuilder { * <p> * For consistent loading of data, it is recommended that data is cleaned and * canonicalized before loading so the conversion is done once. - * - * @see #langTagLowerCase - * @see #langTagCanonical */ public RDFParserBuilder canonicalValues(boolean flag) { this.canonicalValues = flag; return this; } - /** - * Convert language tags to lower case. - * <p> - * This is the suggested form in RDF 1.1 for comparsions. - * However, this is not the recommended canonical form in - * <a href="https://tools.ietf.org/html/rfc5646">RFC 5646</a>. - * <p> - * Providing all data is converted consistently, language tag equality - * is maintained for either lower case or RFC canonicalization styles. - * <p> - * This option can slow parsing down. - * - * @see #langTagCanonical - * @deprecated In Jena5, language tags are always converted to RFC 5646 case format. - */ - @Deprecated(forRemoval=true) - public RDFParserBuilder langTagLowerCase() { - return langTagForm(LangTagForm.LOWER_CASE); - } - - /** - * Language tags are case-normalized as defined by - * <a href="https://tools.ietf.org/html/rfc5646">RFC 5646</a>. - * Example: {@code en-GB}, not {@code en-gb}. - * <p> - * This does not affect the RDF 1.1 requirement that the - * value-space of language tags is lower-case. - * <p> - * Providing all data is converted consistently, lang tag equality is maintained for either - * lower case or RFC canonicalization. - * <p> - * This option can slow parsing down. - * </p> - * @see #langTagLowerCase - * @deprecated In Jena5, language tags are always converted to RFC 5646 case format. - */ - @Deprecated(forRemoval=true) - public RDFParserBuilder langTagCanonical() { - return langTagForm(LangTagForm.CANONICAL); - } - - /** - * The form of the language tags as given in the data is preserved. - * This is the default behaviour of parsing. - * @see #langTagLowerCase - * @see #langTagCanonical - * @deprecated In Jena5, language tags are always converted to RFC 5646 case format. - */ - @Deprecated(forRemoval=true) - public RDFParserBuilder langTagAsGiven() { - return langTagForm(LangTagForm.NONE); - } - - @Deprecated(forRemoval=true) - private RDFParserBuilder langTagForm(LangTagForm form) { - // Ignore! - // language tags are always converted to RFC 5646 case format. - //this.langTagForm = form; - return this; - } - /** Set whether to perform checking, * NTriples and NQuads default to no checking, other languages to checking. * <p> diff --git a/jena-arq/src/main/java/org/apache/jena/riot/RIOT.java b/jena-arq/src/main/java/org/apache/jena/riot/RIOT.java index df82426b2e..9c2aa85a25 100644 --- a/jena-arq/src/main/java/org/apache/jena/riot/RIOT.java +++ b/jena-arq/src/main/java/org/apache/jena/riot/RIOT.java @@ -149,11 +149,4 @@ public class RIOT { * Print literals with newlines in multiple line form, using triple quotes. */ public static final Symbol symTurtleMultilineLiterals = SystemARQ.allocSymbol(TURTLE_SYMBOL_BASE, "multiline_literals") ; - - /** - * Control of multiline literals. - * @deprecated Use {@link #symTurtleMultilineLiterals}. - */ - @Deprecated(forRemoval = true) - public static final Symbol multilineLiterals = symTurtleMultilineLiterals; } diff --git a/jena-arq/src/main/java/org/apache/jena/riot/lang/CollectorStreamBase.java b/jena-arq/src/main/java/org/apache/jena/riot/lang/CollectorStreamBase.java deleted file mode 100644 index 03b618c318..0000000000 --- a/jena-arq/src/main/java/org/apache/jena/riot/lang/CollectorStreamBase.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * 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.lang; - -import java.util.Collection; - -import org.apache.jena.graph.Triple ; -import org.apache.jena.riot.system.PrefixMap; -import org.apache.jena.riot.system.PrefixMapFactory; -import org.apache.jena.riot.system.StreamRDF; -import org.apache.jena.sparql.core.Quad ; - -/** - * Base class for StreamRDF implementations which store received {@code <T>} - * objects in a {@link java.util.Collection}. - * - * The resulting collection can be retrieved via the {@link #getCollected()} - * method. - * - * Implementations are suitable for single-threaded parsing, for use with small - * data or distributed computing frameworks (e.g. Hadoop) where the overhead - * of creating many threads is significant. - * - * @param <T> Type of the value stored in the collection - * @deprecated Use {@link CollectorStreamRDF} - */ -@Deprecated //(forRemoval = true) -- this confuses the compiler in the maven build. -public abstract class CollectorStreamBase<T> implements StreamRDF { - private final PrefixMap prefixes = PrefixMapFactory.create(); - private String baseIri; - - @Override - public void finish() {} - - @Override - public void triple(Triple triple) {} - - @Override - public void quad(Quad quad) {} - - @Override - public void start() {} - - @Override - public void base(String base) { - this.baseIri = base; - } - - @Override - public void prefix(String prefix, String iri) { - prefixes.add(prefix, iri); - } - - @Override - public void version(String version) {} - - public PrefixMap getPrefixes() { - return prefixes; - } - - public String getBaseIri() { - return baseIri; - } - - /** - * @return The collection received by this instance. - */ - public abstract Collection<T> getCollected(); -} diff --git a/jena-arq/src/main/java/org/apache/jena/riot/lang/CollectorStreamQuads.java b/jena-arq/src/main/java/org/apache/jena/riot/lang/CollectorStreamQuads.java deleted file mode 100644 index d6068739f3..0000000000 --- a/jena-arq/src/main/java/org/apache/jena/riot/lang/CollectorStreamQuads.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * 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.lang; - -import java.util.ArrayList; -import java.util.List; - -import org.apache.jena.riot.system.StreamRDF; -import org.apache.jena.sparql.core.Quad ; - -/** - * Collector stream for quads. - * - * @deprecated Use {@link CollectorStreamRDF} - */ -@Deprecated(forRemoval = true) -@SuppressWarnings("all") -public class CollectorStreamQuads extends CollectorStreamBase<Quad> implements StreamRDF { - private List<Quad> quads = new ArrayList<>(); - - @Override - public void start() { - quads.clear(); - } - - @Override - public void quad(Quad quad) { - quads.add(quad); - } - - @Override - public List<Quad> getCollected() { - return quads; - } -} diff --git a/jena-arq/src/main/java/org/apache/jena/riot/lang/CollectorStreamTriples.java b/jena-arq/src/main/java/org/apache/jena/riot/lang/CollectorStreamTriples.java deleted file mode 100644 index 6d8bd46ccd..0000000000 --- a/jena-arq/src/main/java/org/apache/jena/riot/lang/CollectorStreamTriples.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * 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.lang; - -import java.util.ArrayList; -import java.util.List; - -import org.apache.jena.graph.Triple ; -import org.apache.jena.riot.system.StreamRDF; - -/** - * Collector stream for triples. - * - * @deprecated Use {@link CollectorStreamRDF} - */ -@Deprecated(forRemoval = true) -@SuppressWarnings("all") - -public class CollectorStreamTriples extends CollectorStreamBase<Triple> implements StreamRDF { - private List<Triple> triples = new ArrayList<>(); - - @Override - public void start() { - triples.clear(); - } - - @Override - public void triple(Triple triple) { - triples.add(triple); - } - - @Override - public List<Triple> getCollected() { - return triples; - } -} diff --git a/jena-arq/src/main/java/org/apache/jena/riot/lang/IteratorParsers.java b/jena-arq/src/main/java/org/apache/jena/riot/lang/IteratorParsers.java index 21b461e5bf..12155e1b29 100644 --- a/jena-arq/src/main/java/org/apache/jena/riot/lang/IteratorParsers.java +++ b/jena-arq/src/main/java/org/apache/jena/riot/lang/IteratorParsers.java @@ -20,8 +20,13 @@ package org.apache.jena.riot.lang; import java.io.InputStream; import java.util.Iterator; +import java.util.Objects; import org.apache.jena.graph.Triple; +import org.apache.jena.riot.Lang; +import org.apache.jena.riot.RDFLanguages; +import org.apache.jena.riot.RiotException; +import org.apache.jena.riot.system.AsyncParser; import org.apache.jena.riot.system.ParserProfile; import org.apache.jena.riot.system.RiotLib; import org.apache.jena.riot.system.StreamRDF; @@ -34,6 +39,32 @@ import org.apache.jena.sparql.core.Quad; */ public class IteratorParsers { + /** + * Creates an iterator over parsing of quads. + * This function creates a thread unless the Lang is N-Triples. + */ + public static Iterator<Triple> createIteratorTriples(InputStream input, Lang lang, String baseURI) { + Objects.requireNonNull(lang); + if ( Lang.NTRIPLES.equals(lang) ) + return createIteratorNTriples(input); + if ( ! RDFLanguages.isTriples(lang) ) + throw new RiotException("Not a triples syntax: "+lang.getName()); + // For all other languages, we need to do the parsing asynchronously + return AsyncParser.asyncParseTriples(input, lang, baseURI); + } + + /** + * Create an iterator over parsing of triples. + * This function creates a thread unless the Lang is N-Quads. + */ + public static Iterator<Quad> createIteratorQuads(InputStream input, Lang lang, String baseURI) { + Objects.requireNonNull(lang); + if ( Lang.NQUADS.equals(lang) ) + return createIteratorNQuads(input); + // For all other languages, we need to do the parsing asynchronously + return AsyncParser.asyncParseQuads(input, lang, baseURI); + } + /** Create an iterator for parsing N-Triples. */ public static Iterator<Triple> createIteratorNTriples(InputStream input) { return createIteratorNTriples(input, RiotLib.dftProfile()); diff --git a/jena-arq/src/main/java/org/apache/jena/riot/lang/LangEngine.java b/jena-arq/src/main/java/org/apache/jena/riot/lang/LangEngine.java index f1c0a3e0cf..dd6a58a92c 100644 --- a/jena-arq/src/main/java/org/apache/jena/riot/lang/LangEngine.java +++ b/jena-arq/src/main/java/org/apache/jena/riot/lang/LangEngine.java @@ -153,12 +153,6 @@ public class LangEngine { raiseException(new RiotParseException(msg, line, col)); } - /** @deprecated use {@link #exception(String, long, long)}*/ - @Deprecated(forRemoval = true) - protected final void exceptionDirect(String msg, long line, long col) { - raiseException(new RiotParseException(msg, line, col)); - } - protected final void raiseException(RiotParseException ex) { if ( errorHandler != null ) errorHandler.fatal(ex.getOriginalMessage(), ex.getLine(), ex.getCol()); diff --git a/jena-arq/src/main/java/org/apache/jena/riot/lang/extra/LangParserBase.java b/jena-arq/src/main/java/org/apache/jena/riot/lang/extra/LangParserBase.java index d9aa0f914c..d1ad3b1127 100644 --- a/jena-arq/src/main/java/org/apache/jena/riot/lang/extra/LangParserBase.java +++ b/jena-arq/src/main/java/org/apache/jena/riot/lang/extra/LangParserBase.java @@ -101,12 +101,6 @@ public class LangParserBase { return createBNode(line, column); } - /** @deprecated Use {@link #checkRDFString}. */ - @Deprecated(forRemoval=true) - protected void checkString(String string, int line, int column) { - checkRDFString(string, line, column); - } - /** * Apply any checks for "RDF String" to a string that has already had escape processing applied. * An RDF String is a sequence of codepoints in the range U+0000 to U+10FFFF, excluding surrogates. diff --git a/jena-arq/src/main/java/org/apache/jena/riot/process/normalize/StreamCanonicalLiterals.java b/jena-arq/src/main/java/org/apache/jena/riot/process/normalize/StreamCanonicalLiterals.java index 5cac861b73..5841ba8517 100644 --- a/jena-arq/src/main/java/org/apache/jena/riot/process/normalize/StreamCanonicalLiterals.java +++ b/jena-arq/src/main/java/org/apache/jena/riot/process/normalize/StreamCanonicalLiterals.java @@ -28,7 +28,7 @@ import org.apache.jena.riot.system.StreamRDF; * So {@code "+01"^^xsd:integer} is converted to {@code "1"^^xsd:integer}. * Language tags are canonicalized for case as well. * - * See {@link RDFParserBuilder#canonicalValues(boolean)} and {@link RDFParserBuilder#langTagCanonical()}. + * See {@link RDFParserBuilder#canonicalValues(boolean)}. */ public class StreamCanonicalLiterals extends StreamRDFApplyObject { public StreamCanonicalLiterals(StreamRDF other) { diff --git a/jena-arq/src/main/java/org/apache/jena/riot/rowset/rw/RowSetReaderJSON_V1.java b/jena-arq/src/main/java/org/apache/jena/riot/rowset/rw/RowSetReaderJSON_V1.java deleted file mode 100644 index 3f4f4a2413..0000000000 --- a/jena-arq/src/main/java/org/apache/jena/riot/rowset/rw/RowSetReaderJSON_V1.java +++ /dev/null @@ -1,310 +0,0 @@ -/* - * 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.rowset.rw; - -import static org.apache.jena.riot.rowset.rw.JSONResultsKW.*; - -import java.io.InputStream; -import java.util.*; - -import org.apache.jena.atlas.json.JSON; -import org.apache.jena.atlas.json.JsonArray; -import org.apache.jena.atlas.json.JsonObject; -import org.apache.jena.atlas.json.JsonValue; -import org.apache.jena.atlas.logging.Log; -import org.apache.jena.datatypes.RDFDatatype; -import org.apache.jena.datatypes.TypeMapper; -import org.apache.jena.graph.Node; -import org.apache.jena.graph.NodeFactory; -import org.apache.jena.query.ARQ; -import org.apache.jena.riot.lang.LabelToNode; -import org.apache.jena.riot.resultset.ResultSetLang; -import org.apache.jena.riot.rowset.RowSetReader; -import org.apache.jena.riot.rowset.RowSetReaderFactory; -import org.apache.jena.riot.rowset.RowSetReaderRegistry; -import org.apache.jena.riot.system.SyntaxLabels; -import org.apache.jena.sparql.core.Var; -import org.apache.jena.sparql.engine.binding.Binding; -import org.apache.jena.sparql.engine.binding.BindingBuilder; -import org.apache.jena.sparql.exec.QueryExecResult; -import org.apache.jena.sparql.exec.RowSet; -import org.apache.jena.sparql.exec.RowSetStream; -import org.apache.jena.sparql.resultset.ResultSetException; -import org.apache.jena.sparql.util.Context; -import org.apache.jena.vocabulary.RDF; - -/** Read JSON format SPARQL Results. - * <p> - * <a href="https://www.w3.org/TR/sparql11-results-json/">SPARQL 1.1 Query Results JSON Format</a> - * <p> - * This was the ResultSet/RowSet reader for JSON up to and including Jena 4.4.0. - * Jena 4.5.0 introduced {@link RowSetReaderJSONStreaming}. - * <p> - * @deprecated To be removed. - */ -@Deprecated(since="5.0.0", forRemoval=true) -public class RowSetReaderJSON_V1 implements RowSetReader { - - public static void install() { - RowSetReaderRegistry.register(ResultSetLang.RS_JSON, factory); - } - - public static final RowSetReaderFactory factory = lang -> { - if (!Objects.equals(lang, ResultSetLang.RS_JSON ) ) - throw new ResultSetException("RowSet for JSON asked for a "+lang); - return new RowSetReaderJSON_V1(); - }; - - private RowSetReaderJSON_V1() {} - - @Override - public QueryExecResult readAny(InputStream in, Context context) { - return process(in, context); - } - - static private QueryExecResult process(InputStream in, Context context) { - if ( context == null ) - context = ARQ.getContext(); - RowSetJSON exec = new RowSetJSON(context); - exec.parse(in); - if ( exec.rows != null ) { - //RowSet rs = RowSetStream.create(exec.vars, exec.rows.iterator()); - RowSet rs = RowSetStream.create(exec.vars, exec.rows.iterator()); - return new QueryExecResult(rs); - } else - return new QueryExecResult(exec.booleanResult); - } - - /** - * Parse a result set - whether rows (SELECT) or a boolean results (ASK). - * This object is one-time use and exists to carry the results as they are built-up. - */ - private static class RowSetJSON { - final Context context; - Boolean booleanResult = null; // Valid if rows is null. - List<Binding> rows = null; - List<Var> vars = null; - final LabelToNode labelMap; - - RowSetJSON(Context context) { - this.context = context; - boolean inputGraphBNodeLabels = (context != null) && context.isTrue(ARQ.inputGraphBNodeLabels); - this.labelMap = inputGraphBNodeLabels - ? SyntaxLabels.createLabelToNodeAsGiven() - : SyntaxLabels.createLabelToNode(); - this.rows = null ; - } - - private void parse(InputStream in) { - JsonObject obj = JSON.parse(in); - - // Boolean? - if ( obj.hasKey(kBoolean) ) { - checkContains(obj, true, true, kHead, kBoolean); - booleanResult = obj.get(kBoolean).getAsBoolean().value(); - rows = null; - return; - } - - // ResultSet. - rows = new ArrayList<>(1000); - - checkContains(obj, true, true, kHead, kResults); - - // process head - if ( !obj.get(kHead).isObject() ) - throw new ResultSetException("Key 'head' must have a JSON object as value: found: " + obj.get(kHead)); - JsonObject head = obj.get(kHead).getAsObject(); - - // ---- Head - // -- Link - array. - if ( head.hasKey(kLink) ) { - List<String> links = new ArrayList<>(); - - if ( head.get(kLink).isString() ) { - Log.warn(this, "Link field is a string, should be an array of strings"); - links.add(head.get(kLink).getAsString().value()); - } else { - if ( !head.get(kLink).isArray() ) - throw new ResultSetException("Key 'link' must have be an array: found: " + obj.get(kLink)); - - for ( JsonValue v : head.get(kLink).getAsArray() ) { - if ( !v.isString() ) - throw new ResultSetException("Key 'link' must have be an array of strings: found: " + v); - links.add(v.getAsString().value()); - } - } - } - // -- Vars - vars = parseVars(head); - - // ---- Results - JsonObject results = obj.get(kResults).getAsObject(); - if ( !results.get(kBindings).isArray() ) - throw new ResultSetException("'bindings' must be an array"); - JsonArray array = results.get(kBindings).getAsArray(); - Iterator<JsonValue> iter = array.iterator(); - - BindingBuilder builder = Binding.builder(); - for ( ; iter.hasNext() ; ) { - builder.reset(); - JsonValue v = iter.next(); - if ( !v.isObject() ) - throw new ResultSetException("Entry in 'bindings' array must be an object {}"); - JsonObject x = v.getAsObject(); - Set<String> varNames = x.keys(); - for ( String vn : varNames ) { - // if ( ! vars.contains(vn) ) {} - JsonValue vt = x.get(vn); - if ( !vt.isObject() ) - throw new ResultSetException("Binding for variable '" + vn + "' is not a JSON object: " + vt); - Node n = parseOneTerm(vt.getAsObject(), labelMap); - builder.add(Var.alloc(vn), n); - } - rows.add(builder.build()); - } - } - - private static List<Var> parseVars(JsonObject obj) { - if ( !obj.get(kVars).isArray() ) - throw new ResultSetException("Key 'vars' must be a JSON array"); - JsonArray a = obj.get(kVars).getAsArray(); - Iterator<JsonValue> iter = a.iterator(); - List<Var> vars = new ArrayList<>(); - for ( ; iter.hasNext() ; ) { - JsonValue v = iter.next(); - if ( !v.isString() ) - throw new ResultSetException("Entries in vars array must be strings"); - Var var = Var.alloc(v.getAsString().value()); - vars.add(var); - } - return vars; - } - - private static Node parseOneTerm(JsonObject term, LabelToNode labelMap) { - checkContains(term, false, false, kType, kValue, kXmlLang, kDatatype); - - String type = stringOrNull(term, kType); - - if ( kTriple.equals(type) || kStatement.equals(type) ) { - JsonObject x = term.get(kValue).getAsObject(); - return parseTripleTerm(x, labelMap); - } - - String v = stringOrNull(term, kValue); - - if ( kUri.equals(type) ) { - checkContains(term, false, true, kType, kValue); - String uri = v; - Node n = NodeFactory.createURI(v); - return n; - } - - if ( kLiteral.equals(type) || kTypedLiteral.equals(type) ) { - String lang = stringOrNull(term, kXmlLang); - String dtStr = stringOrNull(term, kDatatype); - if ( lang != null ) { - // Strictly, xml:lang=... and datatype=rdf:langString is wrong - // (the datatype should be absent) - // The RDF specs recommend omitting the datatype. They did - // however come after the SPARQL 1.1 docs - // it's more of a "SHOULD" than a "MUST". - // datatype=xsd:string is also unnecessary. - if ( dtStr != null && !dtStr.equals(RDF.dtLangString.getURI()) ) { - // Must agree. - throw new ResultSetException("Both language and datatype defined, datatype is not rdf:langString:\n" + term); - } - } - RDFDatatype dt = TypeMapper.getInstance().getSafeTypeByName(dtStr); - return NodeFactory.createLiteral(v, lang, dt); - } - - if ( kBnode.equals(type) ) - return labelMap.get(null, v); - - throw new ResultSetException("Object key not recognized as valid for an RDF term: " + term); - } - - private static Node parseTripleTerm(JsonObject term, LabelToNode labelMap) { - if ( term.entrySet().size() != 3 ) - throw new ResultSetException("Wrong number of object keys for triple term: should be 3, got " + term.entrySet().size()); - checkContainsOneOf(term, kSubject, kSubjectAlt); - checkContainsOneOf(term, kObject, kObjectAlt); - checkContainsOneOf(term, kPredicate, kProperty, kPredicateAlt); - - JsonObject sTerm = get(term, kSubject, kSubjectAlt); - JsonObject pTerm = get(term, kPredicate, kProperty, kPredicateAlt); - JsonObject oTerm = get(term, kObject, kObjectAlt); - if ( sTerm == null || pTerm == null || oTerm == null ) - throw new ResultSetException("Bad triple term: " + term); - Node s = parseOneTerm(sTerm, labelMap); - Node p = parseOneTerm(pTerm, labelMap); - Node o = parseOneTerm(oTerm, labelMap); - return NodeFactory.createTripleTerm(s, p, o); - } - - // Get a object from an object - use the first name in the fields list - private static JsonObject get(JsonObject term, String...fields) { - for ( String f : fields ) { - JsonValue v = term.get(f); - if ( v != null ) - return v.getAsObject(); - } - return null; - } - - private static String stringOrNull(JsonObject obj, String key) { - JsonValue v = obj.get(key); - if ( v == null ) - return null; - if ( !v.isString() ) - throw new ResultSetException("Not a string: key: " + key); - return v.getAsString().value(); - } - - private static void checkContains(JsonObject term, boolean allowUndefinedKeys, boolean requireAllExpectedKeys, String...keys) { - List<String> expectedKeys = Arrays.asList(keys); - Set<String> declared = new HashSet<>(); - for ( String k : term.keys() ) { - if ( !expectedKeys.contains(k) && !allowUndefinedKeys ) - throw new ResultSetException("Expected only object keys " + Arrays.asList(keys) + " but encountered '" + k + "'"); - if ( expectedKeys.contains(k) ) - declared.add(k); - } - - if ( requireAllExpectedKeys && declared.size() < expectedKeys.size() ) - throw new ResultSetException("One or more of the required keys " + expectedKeys + " was not found"); - } - - private static void checkContainsOneOf(JsonObject term, String...keys) { - List<String> expectedKeys = Arrays.asList(keys); - String found = null; - for ( String k : term.keys() ) { - if ( found == null ) { - if ( expectedKeys.contains(k) ) - found = k; - } else { - if ( expectedKeys.contains(k) ) - throw new ResultSetException("More than one key out of " + expectedKeys); - } - } - } - - } -} diff --git a/jena-arq/src/main/java/org/apache/jena/riot/system/Checker.java b/jena-arq/src/main/java/org/apache/jena/riot/system/Checker.java index 848135dbb8..4c588b88c8 100644 --- a/jena-arq/src/main/java/org/apache/jena/riot/system/Checker.java +++ b/jena-arq/src/main/java/org/apache/jena/riot/system/Checker.java @@ -143,13 +143,6 @@ public class Checker { return checkLiteral(lexicalForm, lang, (TextDirection)null, null, errorHandler, line, col); } - /** @deprecated Use {@link #checkLiteral(String, String, String, RDFDatatype, ErrorHandler, long, long)} */ - @Deprecated(forRemoval = true) - public static boolean checkLiteral(String lexicalForm, String lang, RDFDatatype datatype, ErrorHandler errorHandler, long line, long col) { - return checkLiteral(lexicalForm, lang, (TextDirection)null, datatype, errorHandler, line, col); - } - - public static boolean checkLiteral(String lexicalForm, String lang, String direction, RDFDatatype datatype, ErrorHandler errorHandler, long line, long col) { TextDirection textDir = null; if ( direction != null ) { diff --git a/jena-arq/src/main/java/org/apache/jena/riot/system/JenaTitanium.java b/jena-arq/src/main/java/org/apache/jena/riot/system/JenaTitanium.java deleted file mode 100644 index ee0fa0b595..0000000000 --- a/jena-arq/src/main/java/org/apache/jena/riot/system/JenaTitanium.java +++ /dev/null @@ -1,187 +0,0 @@ -/* - * 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.system; - -import java.util.Optional; - -import com.apicatalog.rdf.*; -import com.apicatalog.rdf.spi.RdfProvider; - -import org.apache.jena.datatypes.RDFDatatype; -import org.apache.jena.graph.Node; -import org.apache.jena.graph.NodeFactory; -import org.apache.jena.graph.Triple; -import org.apache.jena.riot.out.NodeToLabel; -import org.apache.jena.shared.JenaException; -import org.apache.jena.sparql.core.DatasetGraph; -import org.apache.jena.sparql.core.DatasetGraphFactory; -import org.apache.jena.sparql.core.Quad; -import org.apache.jena.sparql.util.NodeUtils; - - -/** -/** Conversion to Titanium JSON-LD. - * @deprecated To be removed (not needed for Titanium 1.7.0, which introduces titanium-rdf-primitives) - */ -@Deprecated(forRemoval = true) -public class JenaTitanium { - - public static class JenaTitaniumException extends JenaException { - public JenaTitaniumException(String msg) { super(msg); } - } - - /** - * Translate a Jena {@link DatasetGraph} to a Titanium JSON-LD dataset - * @deprecated due to changes introduced in Titanium 1.7.0. - */ - @Deprecated(forRemoval = true) - public static RdfDataset convert(DatasetGraph dataset) { - RdfProvider provider = RdfProvider.provider(); - RdfDataset rdfDataset = provider.createDataset(); - NodeToLabel labelMapping = NodeToLabel.createScopeByDocument(); - dataset.find().forEachRemaining(quad->{ - RdfResource subject = resource(provider, labelMapping, quad.getSubject()); - RdfResource predicate = resource(provider, labelMapping, quad.getPredicate()); - RdfValue object = nodeToValue(provider, labelMapping, quad.getObject()); - - if ( quad.isTriple() || quad.isDefaultGraph() ) { - RdfTriple t = provider.createTriple(subject, predicate, object); - rdfDataset.add(t); - } - else { - RdfNQuad q = provider.createNQuad(subject, predicate, object, - resource(provider, labelMapping, quad.getGraph())); - rdfDataset.add(q); - } - }); - return rdfDataset; - } - - private static RdfResource resource(RdfProvider provider, NodeToLabel labelMapping, Node node) { - if ( node.isBlank() ) { - String s = labelMapping.get(null, node); - return provider.createBlankNode(s); - } - - if ( node.isURI() ) - return provider.createIRI(node.getURI()); - throw new JenaTitaniumException("Can not convert to an RdfResource : "+node); - } - - private static RdfValue nodeToValue(RdfProvider provider, NodeToLabel labelMapping, Node node) { - if ( node.isBlank() || node.isURI() ) - return resource(provider, labelMapping, node); - - if ( node.isLiteral()) { - String lex = node.getLiteralLexicalForm(); - if ( NodeUtils.hasLang(node) ) - return provider.createLangString(lex, node.getLiteralLanguage()); - return provider.createTypedString(lex, node.getLiteralDatatypeURI()); - } - throw new JenaTitaniumException("Can not be converted: "+node); - } - - /** - * Translate a Titanium JSON-LD dataset to a {@link DatasetGraph} - * @deprecated No longer used by the LangJSONLD_11 - */ - @Deprecated(forRemoval = true) - public static DatasetGraph convert(RdfDataset dataset, ParserProfile parserProfile) { - DatasetGraph dsg = DatasetGraphFactory.createTxnMem(); - StreamRDF dest = StreamRDFLib.dataset(dsg); - convert(dataset, parserProfile, dest); - return dsg; - } - - /** - * Translate a Titanium JSON-LD dataset to a {@link DatasetGraph} - * @deprecated No longer used by the LangJSONLD_11 - */ - @Deprecated(forRemoval = true) - public static DatasetGraph convert(RdfDataset dataset) { - DatasetGraph dsg = DatasetGraphFactory.createTxnMem(); - StreamRDF dest = StreamRDFLib.dataset(dsg); - convert(dataset, dest); - return dsg; - } - - /** - * Translate a Titanium JSON-LD dataset and output to a {@link StreamRDF} - * @deprecated No longer used by the LangJSONLD_11 - */ - @Deprecated(forRemoval = true) - public static void convert(RdfDataset dataset, StreamRDF output) { - convert(dataset, RiotLib.dftProfile(), output); - } - - /** - * Translate a Titanium JSON-LD dataset and output to a {@link StreamRDF} - * @deprecated No longer used by the LangJSONLD_11 - */ - @Deprecated(forRemoval = true) - public static void convert(RdfDataset dataset, ParserProfile parserProfile, StreamRDF output) { - for ( RdfNQuad rdfQuad : dataset.toList() ) { - Optional<RdfResource> gn = rdfQuad.getGraphName(); - RdfResource subj = rdfQuad.getSubject(); - RdfResource pred = rdfQuad.getPredicate(); - RdfValue obj= rdfQuad.getObject(); - - Node g = valueToNode(parserProfile, gn); - Node s = valueToNode(parserProfile, subj); - Node p = valueToNode(parserProfile, pred); - Node o = valueToNode(parserProfile, obj); - - if ( g == null ) - output.triple(Triple.create(s, p, o)); - else - output.quad(Quad.create(g, s, p, o)); - } - } - - // Line number information not available because it is not exposed - // outside of the JSON parser. - private static long line = -1L; - private static long col = -1L; - - private static Node valueToNode(ParserProfile parserProfile, Optional<RdfResource> value) { - if ( value.isEmpty() ) - return null; - return valueToNode(parserProfile, value.orElseThrow()); - } - - private static Node valueToNode(ParserProfile parserProfile, RdfValue value) { - if ( value.isBlankNode() ) - return parserProfile.createBlankNode(null, value.getValue(), line, col); - - if ( value.isIRI() ) - return parserProfile.createURI(value.getValue(), line, col); - - if ( value.isLiteral() ) { - RdfLiteral literal = (RdfLiteral)value; - String lex = literal.getValue(); - String dt = literal.getDatatype(); - RDFDatatype datatype = NodeFactory.getType(dt); - Optional<String> lang = literal.getLanguage(); - if ( lang.isPresent() ) - return parserProfile.createLangLiteral(lex, lang.orElseThrow(), line, col); - return parserProfile.createTypedLiteral(lex, datatype, line, col); - } - throw new JenaTitaniumException("Not recognized: "+value); - } -} diff --git a/jena-arq/src/main/java/org/apache/jena/riot/system/ParserProfile.java b/jena-arq/src/main/java/org/apache/jena/riot/system/ParserProfile.java index 34e9b14609..b52fa54555 100644 --- a/jena-arq/src/main/java/org/apache/jena/riot/system/ParserProfile.java +++ b/jena-arq/src/main/java/org/apache/jena/riot/system/ParserProfile.java @@ -77,21 +77,9 @@ public interface ParserProfile { /** Create a triple term (RDF-star) */ public Node createTripleTerm(Node subject, Node predicate, Node object, long line, long col); - /** @deprecated Use {@link #createTripleTerm} */ - @Deprecated - public default Node createTripleNode(Node subject, Node predicate, Node object, long line, long col) { - return createTripleTerm(subject, predicate, object, line, col); - } - /** Create a triple node (RDF-star) */ public Node createTripleTerm(Triple triple, long line, long col); - /** @deprecated Use {@link #createTripleTerm} */ - @Deprecated - public default Node createTripleNode(Triple triple, long line, long col) { - return createTripleTerm(triple, line, col); - } - /** Create a graph node. This is an N3-formula and not named graphs */ public Node createGraphNode(Graph graph, long line, long col); diff --git a/jena-arq/src/main/java/org/apache/jena/riot/web/LangTag.java b/jena-arq/src/main/java/org/apache/jena/riot/web/LangTag.java deleted file mode 100644 index f068faceea..0000000000 --- a/jena-arq/src/main/java/org/apache/jena/riot/web/LangTag.java +++ /dev/null @@ -1,235 +0,0 @@ -/* - * 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.web ; - -import java.util.Locale ; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import org.apache.jena.langtagx.LangTagX; - -/** - * Language tags: support for parsing and canonicalization of case. - * Grandfathered forms ("i-") are left untouched. Unsupported or syntactically - * illegal forms are handled in canonicalization by doing nothing. - * <ul> - * <li>Language tags syntax: <a href="http://www.ietf.org/rfc/rfc4646.txt">RFC 4646</a></li> - * <li>Matching Language tags: <a href="http://www.ietf.org/rfc/rfc4647.txt">RFC 4647</a></li> - * <li>Language tags syntax (BCP 47): <a href="http://www.ietf.org/rfc/rfc5646.txt">RFC 5646</a></li> - * </ul> - * @deprecated Use {@link LangTagX} - */ -@Deprecated(forRemoval = true) -public class LangTag { - // Valid language tag, not irregular, not grand-fathered. - /** Index of the language part */ - public static final int idxLanguage = 0 ; - /** Index of the script part */ - public static final int idxScript = 1 ; - /** Index of the region part */ - public static final int idxRegion = 2 ; - /** Index of the variant part */ - public static final int idxVariant = 3 ; - /** Index of all extensions */ - public static final int idxExtension = 4 ; - - private static final int partsLength = 5 ; - - private LangTag() {} - - // Defined by BCP 47 which is currently RFC5646 which obsoletes RFC4646. - - // Canonical forms: - /* - * RFC 4646 In this format, all non-initial two-letter subtags are - * uppercase, all non-initial four-letter subtags are titlecase, and all - * other subtags are lowercase. - */ - /* - * RFC 5646 An implementation can reproduce this format without accessing - * the registry as follows. All subtags, including extension and private use - * subtags, use lowercase letters with two exceptions: two-letter and - * four-letter subtags that neither appear at the start of the tag nor occur - * after singletons. Such two-letter subtags are all uppercase (as in the - * tags "en-CA-x-ca" or "sgn-BE-FR") and four- letter subtags are titlecase - * (as in the tag "az-Latn-x-latn"). - */ - - /* - * ABNF definition: <a href="http://www.ietf.org/rfc/rfc4234.txt">RFC 4234</a> - * - * Language-Tag = langtag / privateuse ; private use tag / grandfathered ; - * grandfathered registrations - * - * langtag = (language ["-" script] ["-" region]("-" variant)("-" extension) ["-" privateuse]) - * - * language = (2*3ALPHA [ extlang ]) ; shortest ISO 639 code / 4ALPHA ; - * reserved for future use / 5*8ALPHA ; registered language subtag - * - * extlang = *3("-" 3ALPHA) ; reserved for future use - * - * script = 4ALPHA ; ISO 15924 code - * - * region = 2ALPHA ; ISO 3166 code / 3DIGIT ; UN M.49 code - * - * variant = 5*8alphanum ; registered variants / (DIGIT 3alphanum) - * - * extension = singleton 1*("-" (2*8alphanum)) - * - * singleton = %x41-57 / %x59-5A / %x61-77 / %x79-7A / DIGIT ; "a"-"w" / - * "y"-"z" / "A"-"W" / "Y"-"Z" / "0"-"9" ; Single letters: x/X is reserved for private use - * - * privateuse = ("x"/"X") 1*("-" (1*8alphanum)) - * - * grandfathered = 1*3ALPHA 1*2("-" (2*8alphanum)) ; grandfathered registration - * ; Note: i is the only singleton - * ; that starts a grandfathered tag - * - * alphanum = (ALPHA / DIGIT) ; letters and numbers - */ - - private static final String languageRE_1 = "(?:[a-zA-Z]{2,3}(?:-[a-zA-Z]{3}){0,3})" ; - private static final String languageRE_2 = "[a-zA-Z]{4}" ; - private static final String languageRE_3 = "[a-zA-Z]{5,8}" ; - private static final String language = languageRE_1 + "|" + languageRE_2 + "|" + languageRE_3 ; - - private static final String script = "[a-zA-Z]{4}" ; - private static final String region = "[a-zA-Z]{2}|[0-9]{3}" ; - private static final String variant = "[a-zA-Z0-9]{5,8}" ; - private static final String extension1 = "(?:[a-zA-Z0-9]-[a-zA-Z0-9]{2,8})" ; - private static final String extension = extension1 + "(?:-" + extension1 + ")*" ; - - // private static final String singleton = null ; - // private static final String privateuse = null ; - // private static final String grandfathered = null ; - - private static final String langtag = String.format("^(%s)(?:-(%s))?(?:-(%s))?(?:-(%s))?(?:-(%s))?$", - language, script, region, variant, extension) ; - - // Private use forms "x-" - private static final String privateuseRE = "^[xX](-[a-zA-Z0-9]{1,8})*$" ; - // In general, this can look like a langtag but there are no registered - // forms that do so. - // This is for the "i-" forms only. - private static final String grandfatheredRE = "i(?:-[a-zA-Z0-9]{2,8}){1,2}" ; - - private static Pattern pattern = Pattern.compile(langtag) ; - private static Pattern patternPrivateuse = Pattern.compile(privateuseRE) ; - private static Pattern patternGrandfathered = Pattern.compile(grandfatheredRE) ; - - /** - * Validate - basic syntax check for a language tags: [a-zA-Z]+ ('-'[a-zA-Z0-9]+)* - * - * @deprecated Use {@link LangTagX#checkLanguageTag(String)} - */ - @Deprecated(forRemoval = true) - public static boolean check(String languageTag) { - return LangTagX.checkLanguageTag(languageTag); - } - - /** - * Parse a langtag string and return it's parts in canonical case. See - * constants for the array contents. Parts not present cause a null in - * the return array. - * - * @return The language tag parts, or null if the input string does not parse as a lang tag. - * @deprecated Use {@link org.apache.jena.langtag.LangTag#of(String)} to create a language tag object. - */ - @Deprecated(forRemoval = true) - public static String[] parse(String languageTag) { - String[] parts = new String[partsLength] ; - - String x = pattern.toString() ; - - Pattern.compile(languageRE_1) ; - - Matcher m = pattern.matcher(languageTag) ; - if ( !m.find() ) { - m = patternPrivateuse.matcher(languageTag) ; - if ( m.find() ) { - // Place in the "extension" part - parts[idxExtension] = m.group(0) ; - return parts ; - } - - m = patternGrandfathered.matcher(languageTag) ; - - if ( m.find() ) { - // Place in the "extension" part - parts[idxExtension] = m.group(0) ; - return parts ; - } - - // Give up. - return null ; - } - - int gc = m.groupCount() ; - for (int i = 0; i < gc; i++) - parts[i] = m.group(i + 1) ; - - parts[idxLanguage] = lowercase(parts[idxLanguage]) ; - parts[idxScript] = strcase(parts[idxScript]) ; - parts[idxRegion] = strcase(parts[idxRegion]) ; - parts[idxVariant] = strcase(parts[idxVariant]) ; - // parts[idxExtension] = strcase(parts[idxExtension]) ; // Leave - // extensions alone. - return parts ; - } - - private static String strcase(String string) { - if ( string == null ) - return null ; - if ( string.length() == 2 ) - return uppercase(string) ; - if ( string.length() == 4 ) - return titlecase(string) ; - return lowercase(string) ; - } - - - private static String lowercase(String string) { - if ( string == null ) - return null ; - return string.toLowerCase(Locale.ROOT) ; - } - - private static String uppercase(String string) { - if ( string == null ) - return null ; - return string.toUpperCase(Locale.ROOT) ; - } - - private static String titlecase(String string) { - if ( string == null ) - return null ; - char ch1 = string.charAt(0) ; - ch1 = Character.toUpperCase(ch1) ; - string = lowercase(string.substring(1)) ; - return ch1 + string ; - } - /** - * Canonicalize with the rules ofRFC 5646 without replacement of preferred form. - * @deprecated Use {@link LangTagX#formatLanguageTag(String)} - */ - @Deprecated(forRemoval = true) - public static String canonical(String langTagStr) { - return LangTagX.formatLanguageTag(langTagStr); - } -} diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/ARQConstants.java b/jena-arq/src/main/java/org/apache/jena/sparql/ARQConstants.java index 8c19d110b0..f67b2ca63c 100644 --- a/jena-arq/src/main/java/org/apache/jena/sparql/ARQConstants.java +++ b/jena-arq/src/main/java/org/apache/jena/sparql/ARQConstants.java @@ -212,6 +212,10 @@ public class ARQConstants public static final String allocSSEAnonVars = allocVarAnonMarker ; // ParseHandlerPlain - SSE token "??" public static final String allocSSENamedVars = allocVarMarker ; // ParseHandlerPlain - SSE token "?." + // Regular expression engines. + public static final String strJavaRegex = "javaRegex"; + public static final String strXercesRegex = "xercesRegex"; + /** Marker for system symbols */ public static final String systemVarNS = "http://jena.apache.org/ARQ/system#" ; diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/SystemARQ.java b/jena-arq/src/main/java/org/apache/jena/sparql/SystemARQ.java index a9b4332a18..52da5270c8 100644 --- a/jena-arq/src/main/java/org/apache/jena/sparql/SystemARQ.java +++ b/jena-arq/src/main/java/org/apache/jena/sparql/SystemARQ.java @@ -57,13 +57,6 @@ public class SystemARQ */ public static boolean EnableRomanNumerals = true ; - /** - * Use a plain graph (sameAs is term equality) - * @deprecated From jena5, all graph are term equality except where support the Model API. - */ - @Deprecated(forRemoval = true) - public static boolean UsePlainGraph = false ; - /** * Sync a Model if it provides the underlying graph provides sync . Do nothing * otherwise. diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/AssemblerUtils.java b/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/AssemblerUtils.java index 69988f21ae..f53e5a35e5 100644 --- a/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/AssemblerUtils.java +++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/AssemblerUtils.java @@ -138,12 +138,6 @@ public class AssemblerUtils return model; } - /** @deprecated Use {@link #prepareForAssembler(Model)} */ - @Deprecated(forRemoval = true) - public static Model addRegistered(Model model) { - return prepareForAssembler(model); - } - public static Object build(String assemblerFile, String typeURI) { Resource type = ResourceFactory.createResource(typeURI); return build(assemblerFile, type); diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/ExecutionContext.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/ExecutionContext.java index c004a240c5..a1b87415f8 100644 --- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/ExecutionContext.java +++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/ExecutionContext.java @@ -163,34 +163,7 @@ public class ExecutionContext implements FunctionEnv return create(dsg, graph, cxt); } - // ---- Previous generation - constructors - - /** - * Setup with defaults of global settings - * @deprecated Use {@link #create(DatasetGraph)} - * */ - @Deprecated(forRemoval = true) - public ExecutionContext(DatasetGraph dataset) { - this(dataset, QC.getFactory(ARQ.getContext())); - } - - /** Setup with defaults of global settings but explicit {@link OpExecutorFactory}. - * @deprecated Use {@link #create(DatasetGraph)} - */ - @Deprecated(forRemoval = true) - public ExecutionContext(DatasetGraph dataset, OpExecutorFactory factory) { - this(ARQ.getContext().copy(), dataset.getDefaultGraph(), dataset, factory); - } - - /** @deprecated Use a "create" function where possible. */ - @Deprecated - public ExecutionContext(Context params, Graph activeGraph, DatasetGraph dataset, OpExecutorFactory factory) { - this(params, activeGraph, dataset, factory, Context.getCancelSignal(params)); - } - - /** @deprecated This will be changed to be private. */ - @Deprecated - public ExecutionContext(Context params, Graph activeGraph, DatasetGraph dataset, OpExecutorFactory factory, AtomicBoolean cancelSignal) { + private ExecutionContext(Context params, Graph activeGraph, DatasetGraph dataset, OpExecutorFactory factory, AtomicBoolean cancelSignal) { this.context = params; this.dataset = dataset; this.openIterators = new ArrayList<>(); @@ -201,8 +174,6 @@ public class ExecutionContext implements FunctionEnv this.cancelSignal = cancelSignal; } - // ---- Previous generation - constructors - @Override public Context getContext() { return context; diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/ResultSetCheckCondition.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/ResultSetCheckCondition.java deleted file mode 100644 index ba7957fdc1..0000000000 --- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/ResultSetCheckCondition.java +++ /dev/null @@ -1,120 +0,0 @@ -/* - * 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.engine; - -import java.util.List ; -import java.util.function.Consumer; - -import org.apache.jena.query.QueryExecution ; -import org.apache.jena.query.QuerySolution ; -import org.apache.jena.query.ResultSet ; -import org.apache.jena.rdf.model.Model ; -import org.apache.jena.sparql.ARQException ; -import org.apache.jena.sparql.engine.binding.Binding ; - -/** ResultSet wrapper that check whether some condition is true - * (e.g. the QueryExecution has not been closed). - * @deprecated To be removed. - */ -@Deprecated(forRemoval = true) -public class ResultSetCheckCondition implements ResultSet -{ - interface Condition { boolean check() ; } - private final ResultSet other ; - private final Condition condition ; - - public ResultSetCheckCondition(ResultSet other, QueryExecution qExec) { - this(other, checkQExec(qExec) ) ; - } - - public ResultSetCheckCondition(ResultSet other, Condition condition) { - this.other = other ; - this.condition = condition ; - } - - private static Condition checkQExec(final QueryExecution qExec) { - return ()-> ! qExec.isClosed() ; - } - - @Override - public boolean hasNext() { - check() ; - return other.hasNext() ; - } - - @Override - public QuerySolution next() { - check() ; - return other.next() ; - } - - @Override - public QuerySolution nextSolution() { - check() ; - return other.nextSolution() ; - } - - @Override - public Binding nextBinding() { - check() ; - return other.nextBinding() ; - } - - @Override - public void close() { - check() ; - other.close(); - } - - /** - * Attention: The check is only done once before the first consumer accept call. - * @param action The action to be performed for each element - */ - @Override - public void forEachRemaining(Consumer<? super QuerySolution> action) { - check() ; - other.forEachRemaining(action); - } - - @Override - public int getRowNumber() { - check() ; - return other.getRowNumber() ; - } - - @Override - public List<String> getResultVars() { - check() ; - return other.getResultVars() ; - } - - @Override - public Model getResourceModel() { - check() ; - return other.getResourceModel() ; - } - - private final void check() { - if ( ! condition.check() ) { - throw new ARQException("ResultSet no longer valid (QueryExecution has been closed)") ; - } - } - - -} diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/join/JoinKey.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/join/JoinKey.java index b8b2bea8cf..e28827fefe 100644 --- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/join/JoinKey.java +++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/join/JoinKey.java @@ -47,16 +47,6 @@ public final class JoinKey extends ImmutableUniqueList<Var> return create(intersection) ; } - /** Make a JoinKey of single variable from the intersection of two sets. **/ - @Deprecated - public static JoinKey createVarKey(Collection<Var> vars1, Collection<Var> vars2) { - for ( Var v : vars1 ) { - if ( vars2.contains(v) ) - return create(v) ; - } - return empty() ; - } - public static JoinKey create(Var var) { return createUnsafe(new Var[] { var }); } diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/main/iterator/QueryIterService.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/main/iterator/QueryIterService.java deleted file mode 100644 index 53160340c2..0000000000 --- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/main/iterator/QueryIterService.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * 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.engine.main.iterator; - -import org.apache.jena.atlas.logging.Log ; -import org.apache.jena.query.QueryExecException ; -import org.apache.jena.riot.out.NodeFmtLib; -import org.apache.jena.sparql.algebra.op.OpService ; -import org.apache.jena.sparql.engine.ExecutionContext ; -import org.apache.jena.sparql.engine.QueryIterator ; -import org.apache.jena.sparql.engine.binding.Binding ; -import org.apache.jena.sparql.engine.iterator.QueryIter; -import org.apache.jena.sparql.engine.iterator.QueryIterCommonParent; -import org.apache.jena.sparql.engine.iterator.QueryIterRepeatApply; -import org.apache.jena.sparql.engine.iterator.QueryIterSingleton; -import org.apache.jena.sparql.engine.main.QC ; -import org.apache.jena.sparql.exec.http.Service; -import org.apache.jena.sparql.service.ServiceExecutorRegistry; -import org.apache.jena.sparql.service.single.ChainingServiceExecutor; -import org.apache.jena.sparql.util.Context; - -/** - * This class continues to exist for compatibility with legacy service extensions. - * New code should register extensions at a {@link ServiceExecutorRegistry}. - * @deprecated To be removed. Migrate to {@link ServiceExecutorRegistry}. - */ -@Deprecated(forRemoval = true, since = "4.6.0") -public class QueryIterService extends QueryIterRepeatApply -{ - protected OpService opService ; - - public QueryIterService(QueryIterator input, OpService opService, ExecutionContext execCxt) - { - super(input, execCxt) ; - Service.checkServiceAllowed(execCxt.getContext()); - this.opService = opService ; - } - - @Override - protected QueryIterator nextStage(Binding outerBinding) { - boolean silent = opService.getSilent(); - ExecutionContext execCxt = getExecContext(); - Context cxt = execCxt.getContext(); - ServiceExecutorRegistry registry = ServiceExecutorRegistry.get(cxt); - QueryIterator svcExec = null; - OpService substitutedOp = (OpService)QC.substitute(opService, outerBinding); - - try { - // ---- Find handler - if ( registry != null ) { - // FIXME This needs to be updated for chainable executors - for ( ChainingServiceExecutor factory : registry.getSingleChain() ) { - // Internal consistency check - if ( factory == null ) { - Log.warn(this, "SERVICE <" + opService.getService().toString() + ">: Null item in custom ServiceExecutionRegistry"); - continue; - } - - svcExec = factory.createExecution(substitutedOp, opService, outerBinding, execCxt, null); - if ( svcExec != null ) - break; - } - } - - // ---- Execute - if ( svcExec == null ) - throw new QueryExecException("No SERVICE handler"); - QueryIterator qIter = QueryIter.makeTracked(svcExec, getExecContext()); - // Need to put the outerBinding as parent to every binding of the service call. - // There should be no variables in common because of the OpSubstitute.substitute - return new QueryIterCommonParent(qIter, outerBinding, getExecContext()); - } catch (RuntimeException ex) { - if ( silent ) { - Log.warn(this, "SERVICE " + NodeFmtLib.strTTL(substitutedOp.getService()) + " : " + ex.getMessage()); - // Return the input - return QueryIterSingleton.create(outerBinding, getExecContext()); - - } - throw ex; - } - } -} diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/exec/http/QueryExecHTTP.java b/jena-arq/src/main/java/org/apache/jena/sparql/exec/http/QueryExecHTTP.java index 9e4582ad46..e03ddcfa22 100644 --- a/jena-arq/src/main/java/org/apache/jena/sparql/exec/http/QueryExecHTTP.java +++ b/jena-arq/src/main/java/org/apache/jena/sparql/exec/http/QueryExecHTTP.java @@ -54,6 +54,7 @@ import org.apache.jena.http.HttpEnv; import org.apache.jena.http.HttpLib; import org.apache.jena.query.*; import org.apache.jena.riot.*; +import org.apache.jena.riot.lang.IteratorParsers; import org.apache.jena.riot.resultset.ResultSetLang; import org.apache.jena.riot.resultset.ResultSetReaderRegistry; import org.apache.jena.riot.web.HttpNames; @@ -394,25 +395,21 @@ public class QueryExecHTTP implements QueryExec { return dataset; } - @SuppressWarnings("removal") private Iterator<Triple> execTriples(String acceptHeader) { Pair<InputStream, Lang> p = execRdfWorker(acceptHeader, WebContent.contentTypeRDFXML); InputStream input = p.getLeft(); Lang lang = p.getRight(); // Base URI? - // Unless N-Triples, this creates a thread. - Iterator<Triple> iter = RDFDataMgr.createIteratorTriples(input, lang, null); + Iterator<Triple> iter = IteratorParsers.createIteratorTriples(input, lang, null); return Iter.onCloseIO(iter, input); } - @SuppressWarnings("removal") private Iterator<Quad> execQuads() { checkNotClosed(); Pair<InputStream, Lang> p = execRdfWorker(datasetAcceptHeader, WebContent.contentTypeNQuads); InputStream input = p.getLeft(); Lang lang = p.getRight(); - // Unless N-Quads, this creates a thread. - Iterator<Quad> iter = RDFDataMgr.createIteratorQuads(input, lang, null); + Iterator<Quad> iter = IteratorParsers.createIteratorQuads(input, lang, null); return Iter.onCloseIO(iter, input); } diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/expr/RegexEngine.java b/jena-arq/src/main/java/org/apache/jena/sparql/expr/RegexEngine.java index 214a4425cf..d365ce92b4 100644 --- a/jena-arq/src/main/java/org/apache/jena/sparql/expr/RegexEngine.java +++ b/jena-arq/src/main/java/org/apache/jena/sparql/expr/RegexEngine.java @@ -28,6 +28,7 @@ import org.apache.jena.ext.xerces_regex.REUtil; import org.apache.jena.ext.xerces_regex.RegexParseException; import org.apache.jena.ext.xerces_regex.RegularExpression; import org.apache.jena.query.ARQ; +import org.apache.jena.sparql.ARQConstants; import org.apache.jena.sparql.util.Context; import org.apache.jena.sparql.util.Symbol; @@ -52,21 +53,22 @@ public abstract class RegexEngine { private static RegexImpl regexImpl = chooseRegexImpl(ARQ.getContext()); - // Set from the context. - @SuppressWarnings("removal") private static RegexImpl chooseRegexImpl(Context context) { - Object v = ARQ.getContext().get(ARQ.regexImpl, ARQ.javaRegex); - Symbol symbol = null; - if ( v instanceof Symbol sym ) - symbol = sym; - if ( v instanceof String str ) - symbol = Symbol.create(str); - - if ( ARQ.javaRegex.equals(symbol) ) + Object v = ARQ.getContext().get(ARQ.regexImpl); + if ( v == null ) return RegexImpl.Java; - if ( ARQ.xercesRegex.equals(symbol) ) - return RegexImpl.Xerces; - Log.warn(E_Regex.class, "Regex implementation not recognized : default to Java"); + + if ( v instanceof String str ) { + return switch(str) { + case ARQConstants.strJavaRegex -> RegexImpl.Java; + case ARQConstants.strXercesRegex -> RegexImpl.Xerces; + default -> throw new IllegalArgumentException("Unexpected value: " + str); + }; + } + if ( v instanceof Symbol sym ) + Log.error(E_Regex.class, "Regex implementation context setting is a symbol : default to Java"); + else + Log.warn(E_Regex.class, "Regex implementation not recognized : default to Java"); return RegexImpl.Java; } diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/expr/nodevalue/XSDFuncOp.java b/jena-arq/src/main/java/org/apache/jena/sparql/expr/nodevalue/XSDFuncOp.java index 9d17d9e6b7..6bfc904fe1 100644 --- a/jena-arq/src/main/java/org/apache/jena/sparql/expr/nodevalue/XSDFuncOp.java +++ b/jena-arq/src/main/java/org/apache/jena/sparql/expr/nodevalue/XSDFuncOp.java @@ -56,6 +56,8 @@ import org.apache.jena.sparql.util.XSDNumUtils; /** * Implementation of XQuery/XPath functions and operators. * http://www.w3.org/TR/xpath-functions/ + * <p> + * See also {@link XSDNumUtils}. */ public class XSDFuncOp { @@ -252,33 +254,6 @@ public class XSDFuncOp } } - /** - * Decimal format, cast-to-string. - * <p> - * Decimal canonical form where integer values has no ".0" (as in XSD 1.1). - * <p> - * In XSD 1.0, canonical integer-valued decimal has a trailing ".0". - * In XSD 1.1 and F&O v 3.1, xs:string cast of a decimal which is integer valued, does - * not have the trailing ".0". - * @deprecated Use {@link XSDNumUtils#stringFormatXSD11} instead - */ - @Deprecated(forRemoval = true) - public static String canonicalDecimalStrNoIntegerDot(BigDecimal bd) { - return XSDNumUtils.stringFormatXSD11(bd); - } - - /** - * Canonical decimal according to XML Schema Datatype 2 v1.0. - * Integer-valued decimals have a trailing ".0". - * (In XML Schema Datatype 1.1 they did not have a ".0".) - * <p> - * @deprecated Use {@link XSDNumUtils#stringFormatXSD10(BigDecimal)} instead - */ - @Deprecated(forRemoval = true) - public static String canonicalDecimalStr(BigDecimal decimal) { - return XSDNumUtils.stringFormatXSD10(decimal); - } - public static NodeValue max(NodeValue nv1, NodeValue nv2) { int x = compareNumeric(nv1, nv2); if ( x == Expr.CMP_LESS ) @@ -299,12 +274,6 @@ public class XSDFuncOp return NodeValue.booleanReturn(!b); } - /** @deprecated Renamed as {@link #effectiveBooleanValueAsNodeValue}. */ - @Deprecated(forRemoval = true) - public static NodeValue booleanEffectiveValueAsNodeValue(NodeValue nv) { - return effectiveBooleanValueAsNodeValue(nv); - } - /** {@literal F&O} fn:boolean */ public static NodeValue effectiveBooleanValueAsNodeValue(NodeValue nv) { if ( nv.isBoolean() ) // "Optimization" (saves on object churn) @@ -312,12 +281,6 @@ public class XSDFuncOp return NodeValue.booleanReturn(effectiveBooleanValue(nv)); } - /** @deprecated Renamed as {@link #effectiveBooleanValue}. */ - @Deprecated(forRemoval = true) - public static boolean booleanEffectiveValue(NodeValue nv) { - return effectiveBooleanValue(nv); - } - /** Effective Boolean Value */ public static boolean effectiveBooleanValue(NodeValue nv) { Objects.requireNonNull(nv, "NodeValue is null in call to effectiveBooleanValue"); @@ -1032,7 +995,7 @@ public class XSDFuncOp XSDDatatype.XSDgMonthDay, XSDDatatype.XSDgDay ); - + public static boolean isTemporalDatatype(XSDDatatype datatype) { return temporalDatatypes.contains(datatype); } diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/lang/SyntaxVarScope.java b/jena-arq/src/main/java/org/apache/jena/sparql/lang/SyntaxVarScope.java index 03f444657a..4996550fe4 100644 --- a/jena-arq/src/main/java/org/apache/jena/sparql/lang/SyntaxVarScope.java +++ b/jena-arq/src/main/java/org/apache/jena/sparql/lang/SyntaxVarScope.java @@ -88,12 +88,6 @@ public class SyntaxVarScope { checkExprVarGroupBy(query); } - /** - * @deprecated use {@link #checkElement} - */ - @Deprecated(forRemoval = true) - public static void check(Element queryPattern) { checkElement(queryPattern); } - /** * Apply the SPARQL scope rules to a query element (part or all of a WEHERE clause). * Throw {@link QueryParseException} if there is a violation. diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/resultset/ResultSetCompare.java b/jena-arq/src/main/java/org/apache/jena/sparql/resultset/ResultSetCompare.java deleted file mode 100644 index ebaa375bcc..0000000000 --- a/jena-arq/src/main/java/org/apache/jena/sparql/resultset/ResultSetCompare.java +++ /dev/null @@ -1,193 +0,0 @@ -/* - * 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.resultset; - -import org.apache.jena.atlas.lib.ListUtils; -import org.apache.jena.query.ResultSet; -import org.apache.jena.query.ResultSetFactory; -import org.apache.jena.query.ResultSetRewindable; -import org.apache.jena.rdf.model.Model; -import org.apache.jena.sparql.exec.RowSet; - -/** - * Comparison of ResultSets. - * Note that reading ResultSets is destructive so consider using {@link ResultSetRewindable} - * from {@link ResultSetFactory#makeRewindable}. - * - * @deprecated Use {@link ResultsCompare}. - */ -@Deprecated(forRemoval = true) -public class ResultSetCompare -{ - /** Compare two result sets for equivalence. Equivalence means: - * A row rs1 has one matching row in rs2, and vice versa. - * A row is only matched once. - * Rows match if they have the same variables with the same values. - * bNodes must map to a consistent other bNodes. Value comparisons of nodes. - * - * Destructive - rs1 and rs2 are both read, possibly to exhaustion. - * @param rs1 - * @param rs2 - * @return true if they are equivalent - */ - - public static boolean equalsByValue(ResultSet rs1, ResultSet rs2) { - return equalsByValue(RowSet.adapt(rs1), RowSet.adapt(rs2)); - } - - /** See {@link #equalsByValue(ResultSet, ResultSet)} */ - public static boolean equalsByValue(RowSet rs1, RowSet rs2) { - return ResultsCompare.equalsByValue(rs1, rs2); - } - - /** - * Compare two result sets for equivalence. Equivalence means: - * A row rs1 has one matching row in rs2, and vice versa. - * A row is only matched once. - * Rows match if they have the same variables with the same values, - * bNodes must map to a consistent other bNodes. - * Term comparisons of nodes. - * - * Destructive - rs1 and rs2 are both read, possibly to exhaustion. - * @param rs1 - * @param rs2 - * @return true if they are equivalent - */ - - public static boolean equalsByTerm(ResultSet rs1, ResultSet rs2) { - return ResultsCompare.equalsByTerm(rs1, rs2); - } - - /** - * Compare two result sets for equivalence. Equivalence means: - * A row rs1 has one matching row in rs2, and vice versa. - * A row is only matched once. - * Rows match if they have the same variables with the same values, - * bNodes must map to a consistent other bNodes. - * Term comparisons of nodes. - * - * Destructive - rs1 and rs2 are both read, possibly to exhaustion. - * @param rs1 - * @param rs2 - * @return true if they are equivalent - */ - public static boolean equalsByTerm(RowSet rs1, RowSet rs2) { - return ResultsCompare.equalsByTerm(rs1, rs2); - } - - /** Compare two result sets for equivalence. Equivalence means: - * Each row in rs1 matches the same index row in rs2. - * Rows match if they have the same variables with the same values, - * bNodes must map to a consistent other bNodes. - * Value comparisons of nodes. - * - * @param rs1 - * @param rs2 - * @return true if they are equivalent - */ - public static boolean equalsByValueAndOrder(ResultSet rs1, ResultSet rs2) { - return ResultsCompare.equalsByValueAndOrder(rs1, rs2); - } - - /** See {@link #equalsByValueAndOrder(ResultSet, ResultSet)} */ - public static boolean equalsByValueAndOrder(RowSet rs1, RowSet rs2) { - return ResultsCompare.equalsByValueAndOrder(rs1, rs2); - } - - /** compare two result sets for equivalence. Equivalence means: - * Each row in rs1 matches the same index row in rs2. - * Rows match if they have the same variables with the same values, - * bNodes must map to a consistent other bNodes. - * RDF term comparisons of nodes. - * - * @param rs1 - * @param rs2 - * @return true if they are equivalent - */ - public static boolean equalsByTermAndOrder(ResultSet rs1, ResultSet rs2) { - return ResultsCompare.equalsByTermAndOrder(rs1, rs2); - } - - /** See {@link #equalsByTermAndOrder(ResultSet, ResultSet)} */ - public static boolean equalsByTermAndOrder(RowSet rs1, RowSet rs2) { - return ResultsCompare.equalsByTermAndOrder(rs1, rs2); - } - - /** - * Compare two result sets for exact equality equivalence and order. - * Blank nodes must have same labels. - * - * @param rs1 - * @param rs2 - * @return true if they are equivalent - */ - public static boolean equalsExact(ResultSet rs1, ResultSet rs2) { - return ResultsCompare.equalsExact(rs1, rs2); - } - - /** - * Compare two result sets for exact equality equivalence and order. - * Blank nodes must have same labels. - * - * @param rs1 - * @param rs2 - * @return true if they are equivalent - */ - public static boolean equalsExact(RowSet rs1, RowSet rs2) { - return ResultsCompare.equalsByTermAndOrder(rs1, rs2); - } - - private static boolean compareHeader(RowSet rs1, RowSet rs2) { - if ( rs1 == null && rs2 == null ) - return true; - if ( rs1 == null ) - return false; - if ( rs2 == null ) - return false; - return ListUtils.equalsUnordered(rs1.getResultVars(), rs2.getResultVars()); - } - - /* - * Compare two result sets for blank node isomorphism equivalence. Only does RDF - * term comparison. - * - * This method does not handle triple terms in results. - * - * @deprecated Use {@link #equalsByTerm(ResultSet, ResultSet)} */ - @Deprecated(forRemoval = true) - public static boolean isomorphic(ResultSet rs1, ResultSet rs2) { - Model m1 = RDFOutput.encodeAsModel(rs1); - Model m2 = RDFOutput.encodeAsModel(rs2); - return m1.isIsomorphicWith(m2); - } - - /** - * Compare two row sets for blank node isomorphism equivalence. Only does RDF - * term comparison. - * - * This method does not handle triple terms in results. - * - * @deprecated Use {@link #equalsByTerm(RowSet, RowSet)} - */ - @Deprecated(forRemoval = true) - public static boolean isomorphic(RowSet rs1, RowSet rs2) { - return isomorphic(ResultSet.adapt(rs1), ResultSet.adapt(rs2)); - } - -} diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/service/ServiceExec.java b/jena-arq/src/main/java/org/apache/jena/sparql/service/ServiceExec.java index 16476db523..aeacf5cb98 100644 --- a/jena-arq/src/main/java/org/apache/jena/sparql/service/ServiceExec.java +++ b/jena-arq/src/main/java/org/apache/jena/sparql/service/ServiceExec.java @@ -33,15 +33,6 @@ import org.apache.jena.sparql.util.Context; */ public class ServiceExec { - /** - * Use {@link #exec(OpService, QueryIterator, ExecutionContext)} whose parameter order matches that of - * {@link ServiceExecutorBulk#createExecution(OpService, QueryIterator, ExecutionContext)}. - */ - @Deprecated(forRemoval = true, since = "5.4.0") - public static QueryIterator exec(QueryIterator input, OpService opService, ExecutionContext execCxt) { - return exec(opService, input, execCxt); - } - /** * Execute an OpService w.r.t. the execCxt's service executor registry. * This is the route from OpExecutor. diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/service/ServiceExecution.java b/jena-arq/src/main/java/org/apache/jena/sparql/service/ServiceExecution.java deleted file mode 100644 index 2076149e9a..0000000000 --- a/jena-arq/src/main/java/org/apache/jena/sparql/service/ServiceExecution.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * 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.service; - -import org.apache.jena.sparql.engine.QueryIterator; -import org.apache.jena.sparql.engine.main.iterator.QueryIterService; -import org.apache.jena.sparql.service.single.ServiceExecutor; - -/** - * Execution of a SERVICE clause in the context of {@link QueryIterService} applying an input binding.s - * @see ServiceExecutor - * @see ServiceExecutorRegistry - * - * @deprecated Deprecated in favor of QueryIterators that initialize lazily - */ -@Deprecated(since = "4.6.0") -public interface ServiceExecution { - public QueryIterator exec(); -} diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/service/ServiceExecutorFactory.java b/jena-arq/src/main/java/org/apache/jena/sparql/service/ServiceExecutorFactory.java deleted file mode 100644 index 0bdb01846b..0000000000 --- a/jena-arq/src/main/java/org/apache/jena/sparql/service/ServiceExecutorFactory.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * 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.service; - -import org.apache.jena.sparql.algebra.op.OpService; -import org.apache.jena.sparql.engine.ExecutionContext; -import org.apache.jena.sparql.engine.QueryIterator; -import org.apache.jena.sparql.engine.binding.Binding; -import org.apache.jena.sparql.service.single.ChainingServiceExecutor; -import org.apache.jena.sparql.service.single.ServiceExecutor; - -/** Compatibility interface. Consider migrating legacy code to {@link ChainingServiceExecutor} or {@link ServiceExecutor} */ -@Deprecated(since = "4.6.0") -@FunctionalInterface -public interface ServiceExecutorFactory - extends ServiceExecutor -{ - @Override - default QueryIterator createExecution(OpService opExecute, OpService original, Binding binding, ExecutionContext execCxt) { - ServiceExecution svcExec = createExecutor(opExecute, original, binding, execCxt); - QueryIterator result = svcExec == null ? null : svcExec.exec(); - return result; - } - - ServiceExecution createExecutor(OpService opExecute, OpService original, Binding binding, ExecutionContext execCxt); -} diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/service/ServiceExecutorRegistry.java b/jena-arq/src/main/java/org/apache/jena/sparql/service/ServiceExecutorRegistry.java index 29509743d0..ae67acef54 100644 --- a/jena-arq/src/main/java/org/apache/jena/sparql/service/ServiceExecutorRegistry.java +++ b/jena-arq/src/main/java/org/apache/jena/sparql/service/ServiceExecutorRegistry.java @@ -25,9 +25,6 @@ import java.util.Objects; import org.apache.jena.query.ARQ; import org.apache.jena.sparql.ARQConstants; -import org.apache.jena.sparql.algebra.op.OpService; -import org.apache.jena.sparql.engine.ExecutionContext; -import org.apache.jena.sparql.engine.QueryIterator; import org.apache.jena.sparql.service.bulk.ChainingServiceExecutorBulk; import org.apache.jena.sparql.service.single.ChainingServiceExecutor; import org.apache.jena.sparql.service.single.ChainingServiceExecutorWrapper; @@ -214,13 +211,4 @@ public class ServiceExecutorRegistry ServiceExecutorRegistry result = tmp == null ? new ServiceExecutorRegistry() : tmp.copy(); return result; } - - /** - * Execution - * @deprecated To be removed. Moved to {@link ServiceExec#exec}. - */ - @Deprecated(forRemoval = true, since = "4.9.0") - public static QueryIterator exec(QueryIterator input, OpService opService, ExecutionContext execCxt) { - return ServiceExec.exec(input, opService, execCxt); - } } diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/syntax/ElementGroup.java b/jena-arq/src/main/java/org/apache/jena/sparql/syntax/ElementGroup.java index af68c551e3..c81c6a4863 100644 --- a/jena-arq/src/main/java/org/apache/jena/sparql/syntax/ElementGroup.java +++ b/jena-arq/src/main/java/org/apache/jena/sparql/syntax/ElementGroup.java @@ -43,14 +43,7 @@ public class ElementGroup extends Element { ensureBGP().addTriple(t); } - /** @deprecated Use {@link #addElement} */ - @Deprecated(forRemoval = true) - public void addElementFilter(ElementFilter el) { - addElement(el); - } - // Ensure the current top element is a basic graph pattern. - private ElementTriplesBlock ensureBGP() { if ( elements.size() == 0 ) return pushBGP(); diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/syntax/syntaxtransform/QueryTransformOps.java b/jena-arq/src/main/java/org/apache/jena/sparql/syntax/syntaxtransform/QueryTransformOps.java index 44a7a12730..7de683b917 100644 --- a/jena-arq/src/main/java/org/apache/jena/sparql/syntax/syntaxtransform/QueryTransformOps.java +++ b/jena-arq/src/main/java/org/apache/jena/sparql/syntax/syntaxtransform/QueryTransformOps.java @@ -67,12 +67,6 @@ public class QueryTransformOps { return query2; } - /** @deprecated Use {@link #replaceVars} */ - @Deprecated - public static Query transform(Query query, Map<Var, ? extends Node> substitutions) { - return replaceVars(query, substitutions); - } - /** * Transform a query based on a mapping from {@link Var} variable to replacement {@link Node}. * The replacement can be a constant or another variable. @@ -86,12 +80,6 @@ public class QueryTransformOps { return transformSubstitute(query, substitutions); } - /** @deprecated Use {@link #queryReplaceVars} */ - @Deprecated - public static Query transformQuery(Query query, Map<String, ? extends RDFNode> substitutions) { - return queryReplaceVars(query, substitutions); - } - /** * Transform a query based on a mapping from variable name to replacement * {@link RDFNode} (a {@link Resource} (or blank node) or a {@link Literal}). diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/util/NodeFactoryExtra.java b/jena-arq/src/main/java/org/apache/jena/sparql/util/NodeFactoryExtra.java index 1ec4d255d3..02551f862b 100644 --- a/jena-arq/src/main/java/org/apache/jena/sparql/util/NodeFactoryExtra.java +++ b/jena-arq/src/main/java/org/apache/jena/sparql/util/NodeFactoryExtra.java @@ -21,12 +21,9 @@ package org.apache.jena.sparql.util ; import java.util.Calendar ; import org.apache.jena.atlas.lib.DateTimeUtils ; -import org.apache.jena.datatypes.RDFDatatype ; -import org.apache.jena.datatypes.TypeMapper ; import org.apache.jena.datatypes.xsd.XSDDatatype ; import org.apache.jena.graph.Node ; import org.apache.jena.graph.NodeFactory ; -import org.apache.jena.graph.TextDirection; import org.apache.jena.graph.impl.LiteralLabel ; import org.apache.jena.riot.RiotException ; import org.apache.jena.riot.system.PrefixMap ; @@ -86,37 +83,6 @@ public class NodeFactoryExtra { return node ; } - /** - * Create a literal Node, when the datatype, if given, is a string. - * @deprecated Use {@link NodeFactory#createLiteral(String, String, RDFDatatype)} - */ - @Deprecated(forRemoval = true) - public static Node createLiteralNode(String lex, String lang, String datatypeURI) { - return createLiteralNode(lex, lang, null, datatypeURI); - } - - /** - * Create a literal Node, when the datatype, if given, is a string. - * @deprecated Use {@link NodeFactory#createLiteral(String, String, String, RDFDatatype)} - */ - @Deprecated(forRemoval = true) - public static Node createLiteralNode(String lex, String lang, String baseDir, String datatypeURI) { - if ( datatypeURI != null && datatypeURI.equals("") ) - datatypeURI = null ; - - if ( lang != null && lang.equals("") ) - lang = null ; - - RDFDatatype dType = null ; - if ( datatypeURI != null ) - dType = TypeMapper.getInstance().getSafeTypeByName(datatypeURI) ; - - TextDirection baseDirection = TextDirection.createOrNull(baseDir); - - Node n = NodeFactory.createLiteral(lex, lang, baseDirection, dType) ; - return n ; - } - /** * Node to int * diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/util/Utils.java b/jena-arq/src/main/java/org/apache/jena/sparql/util/Utils.java deleted file mode 100644 index 6eea93f01e..0000000000 --- a/jena-arq/src/main/java/org/apache/jena/sparql/util/Utils.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * 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.math.BigDecimal ; - -/** - * Miscellaneous operations - not query specific - * @deprecated Use XSDNumUtils - */ -@Deprecated(forRemoval = true) -public class Utils { - - /** - * @deprecated Use {@link XSDNumUtils#stringForm(BigDecimal)} - */ - @Deprecated(forRemoval = true) - public static String stringForm(BigDecimal decimal) { - return XSDNumUtils.stringForm(decimal); - } - - /** - * @deprecated Use {@link XSDNumUtils#stringForm(double)} - */ - @Deprecated(forRemoval = true) - public static String stringForm(double d) { - return XSDNumUtils.stringForm(d); - } - - /** - * @deprecated Use {@link XSDNumUtils#stringForm(float)} - */ - @Deprecated(forRemoval = true) - public static String stringForm(float f) { - return XSDNumUtils.stringForm(f); - } -} diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/util/XSDNumUtils.java b/jena-arq/src/main/java/org/apache/jena/sparql/util/XSDNumUtils.java index 453602e6e3..c6bfe286b1 100644 --- a/jena-arq/src/main/java/org/apache/jena/sparql/util/XSDNumUtils.java +++ b/jena-arq/src/main/java/org/apache/jena/sparql/util/XSDNumUtils.java @@ -119,12 +119,29 @@ public class XSDNumUtils { return canonicalDecimalStrWithDot(bd); } - /** Strict XSD 1.0 format for {@code xsd:decimal}. */ + + /** + * Strict XSD 1.0 format for {@code xsd:decimal}. + * <p> + * Decimal canonical form where integer values has a ".0" (as in XSD 1.0). + * <p> + * In XSD 1.0, canonical integer-valued decimal has a trailing ".0". + * In XSD 1.1 and F&O v 3.1, xs:string cast of a decimal which is integer valued, does + * not have the trailing ".0". + */ public static String stringFormatXSD10(BigDecimal bd) { return canonicalDecimalStrWithDot(bd); } - /** Strict XSD 1.1 format for {@code xsd:decimal}. */ + /** + * Strict XSD 1.1 format for {@code xsd:decimal}. + * <p> + * Decimal canonical form where integer values has no ".0" (as in XSD 1.1). + * <p> + * In XSD 1.0, canonical integer-valued decimal has a trailing ".0". + * In XSD 1.1 and F&O v 3.1, xs:string cast of a decimal which is integer valued, does + * not have the trailing ".0". + */ public static String stringFormatXSD11(BigDecimal bd) { return canonicalDecimalStrNoIntegerDot(bd); } diff --git a/jena-arq/src/main/java/org/apache/jena/update/UpdateStreaming.java b/jena-arq/src/main/java/org/apache/jena/update/UpdateStreaming.java index bee2c28c7f..feebfeac74 100644 --- a/jena-arq/src/main/java/org/apache/jena/update/UpdateStreaming.java +++ b/jena-arq/src/main/java/org/apache/jena/update/UpdateStreaming.java @@ -31,18 +31,6 @@ import org.apache.jena.sparql.util.Context; public class UpdateStreaming { - /** - * Create an UpdateExecution appropriate to the datasetGraph, or null if no - * available factory to make an UpdateExecution - * - * @param datasetGraph - * @return UpdateExecution - */ - @Deprecated(forRemoval = true) - public static UpdateProcessorStreaming createStreaming(DatasetGraph datasetGraph) { - return makeStreaming(datasetGraph, null, null); - } - /** * Create an UpdateExecution appropriate to the datasetGraph, or null if no * available factory to make an UpdateExecution @@ -84,19 +72,6 @@ public class UpdateStreaming { return makeStreaming(dataset.asDatasetGraph(), null, context); } - /** - * Create an UpdateExecution appropriate to the datasetGraph, or null if no - * available factory to make an UpdateExecution - * - * @param datasetGraph - * @param context (null means use merge of global and graph store context)) - * @return UpdateExecution - */ - @Deprecated(forRemoval = true) - public static UpdateProcessorStreaming createStreaming(DatasetGraph datasetGraph, Context context) { - return makeStreaming(datasetGraph, null, context); - } - // Everything for local updates comes through one of these two make methods /*package*/ static UpdateProcessorStreaming makeStreaming(DatasetGraph datasetGraph, Binding inputBinding, Context context) { Prologue prologue = new Prologue(); @@ -105,5 +80,4 @@ public class UpdateStreaming { UpdateProcessorStreamingBase uProc = new UpdateProcessorStreamingBase(datasetGraph, inputBinding, prologue, cxt, f); return uProc; } - } diff --git a/jena-arq/src/main/java/org/apache/jena/web/FileSender.java b/jena-arq/src/main/java/org/apache/jena/web/FileSender.java deleted file mode 100644 index 2a7f26bef1..0000000000 --- a/jena-arq/src/main/java/org/apache/jena/web/FileSender.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * 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.web; - -import java.io.InputStream; -import java.net.URI; -import java.net.http.HttpClient; -import java.net.http.HttpRequest; -import java.net.http.HttpRequest.BodyPublishers; -import java.net.http.HttpResponse; -import java.net.http.HttpResponse.BodyHandlers; -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; - -import org.apache.jena.http.HttpLib; -import org.apache.jena.riot.WebContent; -import org.apache.jena.riot.web.HttpNames; - -/** - * @deprecated To be removed - do not use. - */ -@Deprecated(forRemoval = true) -public class FileSender { - - static record Entry(String fileName, String content, String contentType) {} - - private List<Entry> items = new ArrayList<>(); - - private final String url; - - public FileSender(String url ) { this.url = url; } - - public void add(String filename, String content, String type) { - Entry e = new Entry(filename, content, type); - items.add(e); - } - - /** Return response code */ - public int send(String method) { - String WNL = "\r\n"; // Web newline - String boundary = UUID.randomUUID().toString(); - - // This is for testing so build a body. - StringBuilder strBuidler = new StringBuilder(); - for ( Entry e : items ) { - strBuidler.append("--" + boundary+WNL); - strBuidler.append("Content-Disposition: form-data; name=\"FILE\"; filename=\""+e.fileName+"\""+WNL); - strBuidler.append("Content-Type: "+e.contentType+";charset=UTF-8"+WNL); - strBuidler.append(WNL); - strBuidler.append(e.content); - strBuidler.append(WNL); - } - strBuidler.append("--" + boundary + "--"+WNL); - - URI uri = HttpLib.toRequestURI(url); - String body = strBuidler.toString(); - String ctHeaderValue = WebContent.contentTypeMultipartFormData+"; boundary="+boundary; - - HttpRequest request = HttpRequest - .newBuilder(uri) - .setHeader(HttpNames.hContentType, ctHeaderValue) - .method(method, BodyPublishers.ofString(body)) - .build(); - HttpResponse<InputStream> response = HttpLib.executeJDK(HttpClient.newHttpClient(), request, BodyHandlers.ofInputStream()); - HttpLib.handleResponseNoBody(response); - return response.statusCode(); - } -} diff --git a/jena-arq/src/test/java/org/apache/jena/riot/TS_RiotGeneral.java b/jena-arq/src/test/java/org/apache/jena/riot/TS_RiotGeneral.java index 3b529ab722..23579459b6 100644 --- a/jena-arq/src/test/java/org/apache/jena/riot/TS_RiotGeneral.java +++ b/jena-arq/src/test/java/org/apache/jena/riot/TS_RiotGeneral.java @@ -28,7 +28,7 @@ import org.junit.platform.suite.api.Suite; , TestSyntaxDetermination.class , TestJenaReaderRIOT.class , TestReadData.class - , TestRiotReader.class + , TestRiotParserIterators.class , TestParserRegistry.class , TestRDFParser.class , TestRDFWriter.class diff --git a/jena-arq/src/test/java/org/apache/jena/riot/TestRiotReader.java b/jena-arq/src/test/java/org/apache/jena/riot/TestRiotParserIterators.java similarity index 63% rename from jena-arq/src/test/java/org/apache/jena/riot/TestRiotReader.java rename to jena-arq/src/test/java/org/apache/jena/riot/TestRiotParserIterators.java index 6c273b2cb5..80090de9bc 100644 --- a/jena-arq/src/test/java/org/apache/jena/riot/TestRiotReader.java +++ b/jena-arq/src/test/java/org/apache/jena/riot/TestRiotParserIterators.java @@ -24,35 +24,35 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.ByteArrayInputStream; +import java.io.InputStream; import java.util.Iterator; import org.junit.jupiter.api.Test; +import org.apache.jena.atlas.iterator.IteratorCloseable; import org.apache.jena.atlas.lib.Bytes; import org.apache.jena.atlas.lib.StrUtils; import org.apache.jena.graph.Triple; +import org.apache.jena.riot.lang.IteratorParsers; +import org.apache.jena.riot.system.AsyncParser; -@SuppressWarnings("removal") -public class TestRiotReader { +public class TestRiotParserIterators { @Test public void testCreateIteratorTriples_01() { - Iterator<Triple> it = RDFDataMgr.createIteratorTriples(new ByteArrayInputStream(new byte[0]), - RDFLanguages.NTRIPLES, "http://example/"); + Iterator<Triple> it = IteratorParsers.createIteratorNTriples(new ByteArrayInputStream(new byte[0])); assertFalse(it.hasNext()); } @Test public void testEncodedUTF8() { - Iterator<Triple> it = RDFDataMgr.createIteratorTriples(new ByteArrayInputStream(Bytes.asUTF8bytes("<a> <b> \"\\u263A\" .")), - RDFLanguages.NTRIPLES, null); + Iterator<Triple> it = IteratorParsers.createIteratorNTriples(new ByteArrayInputStream(Bytes.asUTF8bytes("<a> <b> \"\\u263A\" ."))); assertTrue(it.hasNext()); assertEquals("☺", it.next().getObject().getLiteralLexicalForm()); } @Test public void testRawUTF8() { - Iterator<Triple> it = RDFDataMgr.createIteratorTriples(new ByteArrayInputStream(Bytes.asUTF8bytes("<a> <b> \"☺\" .")), - RDFLanguages.NTRIPLES, null); + Iterator<Triple> it = IteratorParsers.createIteratorNTriples(new ByteArrayInputStream(Bytes.asUTF8bytes("<a> <b> \"☺\" ."))); assertTrue(it.hasNext()); assertEquals("☺", it.next().getObject().getLiteralLexicalForm()); } @@ -71,16 +71,19 @@ public class TestRiotReader { "</rdf:RDF>"); //@formatter:on - Iterator<Triple> it = RDFDataMgr.createIteratorTriples(new ByteArrayInputStream(Bytes.asUTF8bytes(x)), - RDFLanguages.RDFXML, - "http://example/"); - assertTrue(it.hasNext()); - Triple t = it.next(); - assertNotNull(t); - assertEquals("http://example/s", t.getSubject().getURI()); - assertEquals("http://example/p", t.getPredicate().getURI()); - assertEquals("http://example/o", t.getObject().getURI()); + InputStream input = new ByteArrayInputStream(Bytes.asUTF8bytes(x)); + IteratorCloseable<Triple> it = AsyncParser.asyncParseTriples(input, Lang.RDFXML, "http://example/"); + try { + assertTrue(it.hasNext()); + Triple t = it.next(); + assertNotNull(t); + assertEquals("http://example/s", t.getSubject().getURI()); + assertEquals("http://example/p", t.getPredicate().getURI()); + assertEquals("http://example/o", t.getObject().getURI()); - assertFalse(it.hasNext()); + assertFalse(it.hasNext()); + } finally { + it.close(); + } } } diff --git a/jena-arq/src/test/java/org/apache/jena/system/TestJenaTitanium.java b/jena-arq/src/test/java/org/apache/jena/system/TestJenaTitanium.java index 1ed5738bd8..7577d62d1c 100644 --- a/jena-arq/src/test/java/org/apache/jena/system/TestJenaTitanium.java +++ b/jena-arq/src/test/java/org/apache/jena/system/TestJenaTitanium.java @@ -20,29 +20,14 @@ package org.apache.jena.system; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; -import java.io.IOException; -import java.io.StringWriter; - -import com.apicatalog.rdf.RdfDataset; -import com.apicatalog.rdf.io.RdfWriter; -import com.apicatalog.rdf.io.error.RdfWriterException; - import org.junit.jupiter.api.Test; -import org.apache.jena.atlas.lib.StrUtils; -import org.apache.jena.graph.NodeFactory; import org.apache.jena.riot.RDFParser; -import org.apache.jena.riot.system.JenaTitanium; import org.apache.jena.sparql.core.DatasetGraph; import org.apache.jena.sparql.core.DatasetGraphFactory; -import org.apache.jena.sparql.core.Quad; -import org.apache.jena.sparql.sse.SSE; -import org.apache.jena.sparql.util.IsoMatcher; -@SuppressWarnings({"removal", "deprecation"}) public class TestJenaTitanium { @Test @@ -73,64 +58,4 @@ public class TestJenaTitanium { assertTrue(dsg.prefixes().containsPrefix("")); assertFalse(dsg.prefixes().containsPrefix("bar")); } - - @Test public void convertDataset() throws IOException, RdfWriterException { - String dsStr = StrUtils.strjoinNL - ("(dataset" - , " (_ :s :p :o)" - , " (_ :s :p 123)" - , " (_ :s :p 123.5)" - , " (_ :s :p 1e10)" - , " (_ :s :p '2021-08-10'^^xsd:date)" - , " (_ :s :p 'foo')" - , " (:g1 :s :p :o)" - , " (:g1 _:x :p :o)" - , " (:g2 _:x :p 123)" - , " (:g2 _:x :p 'abc'@en)" - , " (_:x _:x :p _:x)" - //, " (_ <<:s :q :z>> :p <<:s :q :z>>)" - ,")" - ); - DatasetGraph dsg1 = SSE.parseDatasetGraph(dsStr); - //RDFDataMgr.write(System.out, dsg1, Lang.NQUADS); - - RdfDataset rdfDataset = JenaTitanium.convert(dsg1); - - // Check the RdfDataset - try ( StringWriter writer = new StringWriter() ) { - RdfWriter w = new com.apicatalog.rdf.io.nquad.NQuadsWriter(writer); - w.write(rdfDataset); - String s = writer.toString(); - assertTrue(s.contains("_:b0")); - assertTrue(s.contains("http://example/p")); - assertTrue(s.contains("@en")); - } - - DatasetGraph dsg2 = JenaTitanium.convert(rdfDataset); - assertTrue(IsoMatcher.isomorphic(dsg1, dsg2)); - } - - @Test public void convertDatasetWithNullGraph() throws IOException, RdfWriterException { - // .createTxnMem() returns an implementation that does not allow tripleInQuad - DatasetGraph dsg1 = DatasetGraphFactory.create(); - - // Add a triple in quad -- the graph term is set to null. - // The S, P, O terms can be whatever else. - // See: https://github.com/apache/jena/issues/2578 - dsg1.add(Quad.create( - Quad.tripleInQuad, - NodeFactory.createBlankNode(), - NodeFactory.createBlankNode(), - NodeFactory.createBlankNode() - )); - - RdfDataset rdfDataset = JenaTitanium.convert(dsg1); - - // Try converting it back – it should not output any nulls. - DatasetGraph dsg2 = JenaTitanium.convert(rdfDataset); - dsg2.find().forEachRemaining(q->{ - assertNotNull(q.getGraph()); - assertTrue(q.isDefaultGraph()); - }); - } } diff --git a/jena-integration-tests/src/test/java/org/apache/jena/test/service/TestCustomServiceExecutor.java b/jena-integration-tests/src/test/java/org/apache/jena/test/service/TestCustomServiceExecutor.java index 91f3bf9633..4d5941e3ea 100644 --- a/jena-integration-tests/src/test/java/org/apache/jena/test/service/TestCustomServiceExecutor.java +++ b/jena-integration-tests/src/test/java/org/apache/jena/test/service/TestCustomServiceExecutor.java @@ -41,7 +41,6 @@ import org.apache.jena.sparql.algebra.op.OpService; import org.apache.jena.sparql.core.DatasetGraphFactory; import org.apache.jena.sparql.core.Var; import org.apache.jena.sparql.engine.ExecutionContext; -import org.apache.jena.sparql.engine.QueryIterator; import org.apache.jena.sparql.engine.binding.Binding; import org.apache.jena.sparql.engine.iterator.QueryIter; import org.apache.jena.sparql.exec.QueryExec; @@ -134,7 +133,7 @@ public class TestCustomServiceExecutor { /** * A test case where custom executors both forward requests down the chain as well - * as start the chain over using {@link ServiceExec#exec(QueryIterator, OpService, ExecutionContext)}. + * as start the chain over using {@link ServiceExec#exec}. * * This test case tests the chain for bulk execution. */
