diff --git a/src/main/java/fr/inria/corese/core/next/query/AbstractQueryParser.java b/src/main/java/fr/inria/corese/core/next/query/AbstractQueryParser.java deleted file mode 100644 index 104b8ec5e..000000000 --- a/src/main/java/fr/inria/corese/core/next/query/AbstractQueryParser.java +++ /dev/null @@ -1,55 +0,0 @@ -package fr.inria.corese.core.next.query; - -/** - * Base implementation of the {@link QueryParser} interface. - * - *

This abstract class provides common configuration handling logic - * for concrete query parser implementations. It stores and manages - * a {@link QueryOptions} instance that controls parsing behavior - * (e.g., base IRI resolution, strict mode, error handling strategy).

- * - *

Subclasses are responsible for implementing the actual parsing - * logic for the supported query language (e.g., SPARQL) and producing - * - *

This class centralizes configuration management so that all - * parser implementations share consistent option handling behavior.

- * - * @see QueryParser - * @see QueryOptions - */ -public abstract class AbstractQueryParser implements QueryParser { - - /** - * The current configuration used by this parser. - */ - private QueryOptions config; - - /** - * Constructs a new parser with the given configuration. - * - * @param config the initial parsing configuration - */ - protected AbstractQueryParser(QueryOptions config) { - this.config = config; - } - - /** - * Sets the configuration options for this parser. - * - * @param options the parsing configuration - */ - @Override - public void setConfig(QueryOptions options) { - this.config = options; - } - - /** - * Returns the current configuration options of this parser. - * - * @return the parsing configuration - */ - @Override - public QueryOptions getConfig() { - return config; - } -} diff --git a/src/main/java/fr/inria/corese/core/next/query/api/base/io/AbstractQueryParser.java b/src/main/java/fr/inria/corese/core/next/query/api/base/io/AbstractQueryParser.java deleted file mode 100644 index 4197061cc..000000000 --- a/src/main/java/fr/inria/corese/core/next/query/api/base/io/AbstractQueryParser.java +++ /dev/null @@ -1,58 +0,0 @@ -package fr.inria.corese.core.next.query.api.base.io; - -import fr.inria.corese.core.next.query.api.io.parser.QueryOptions; -import fr.inria.corese.core.next.query.api.io.parser.QueryParser; - -/** - * Base implementation of the {@link QueryParser} interface. - * - *

This abstract class provides common configuration handling logic - * for concrete query parser implementations. It stores and manages - * a {@link QueryOptions} instance that controls parsing behavior - * (e.g., base IRI resolution, strict mode, error handling strategy).

- * - *

Subclasses are responsible for implementing the actual parsing - * logic for the supported query language (e.g., SPARQL) and producing - * - *

This class centralizes configuration management so that all - * parser implementations share consistent option handling behavior.

- * - * @see QueryParser - * @see QueryOptions - */ -public abstract class AbstractQueryParser implements QueryParser { - - /** - * The current configuration used by this parser. - */ - private QueryOptions config; - - /** - * Constructs a new parser with the given configuration. - * - * @param config the initial parsing configuration - */ - protected AbstractQueryParser(QueryOptions config) { - this.config = config; - } - - /** - * Sets the configuration options for this parser. - * - * @param options the parsing configuration - */ - @Override - public void setConfig(QueryOptions options) { - this.config = options; - } - - /** - * Returns the current configuration options of this parser. - * - * @return the parsing configuration - */ - @Override - public QueryOptions getConfig() { - return config; - } -} diff --git a/src/main/java/fr/inria/corese/core/next/query/api/base/io/ResultFormat.java b/src/main/java/fr/inria/corese/core/next/query/api/io/ResultFormat.java similarity index 79% rename from src/main/java/fr/inria/corese/core/next/query/api/base/io/ResultFormat.java rename to src/main/java/fr/inria/corese/core/next/query/api/io/ResultFormat.java index bf07aca97..bbb9c3235 100644 --- a/src/main/java/fr/inria/corese/core/next/query/api/base/io/ResultFormat.java +++ b/src/main/java/fr/inria/corese/core/next/query/api/io/ResultFormat.java @@ -1,4 +1,4 @@ -package fr.inria.corese.core.next.query.api.base.io; +package fr.inria.corese.core.next.query.api.io; import fr.inria.corese.core.next.data.api.base.io.FileFormat; @@ -7,7 +7,7 @@ import java.util.Optional; /** - * Describes the SPARQL results serialization formats. Defines the static constants representing the standard formats for result representation. + * Describes the standard SPARQL result serialization formats. */ public class ResultFormat extends FileFormat { @@ -65,10 +65,10 @@ public static Optional byName(String name) { } /** - * Finds a known RDF format by file extension (case-insensitive). + * Finds a known SPARQL result format by file extension (case-insensitive). * - * @param extension The file extension (e.g., "ttl"). - * @return An Optional containing the matching RdfFormat if found. + * @param extension The file extension (for example, {@code "srx"}). + * @return an optional containing the matching result format */ public static Optional byExtension(String extension) { String ext = extension.toLowerCase(Locale.ROOT); @@ -79,10 +79,10 @@ public static Optional byExtension(String extension) { } /** - * Finds a known RDF format by MIME type (case-insensitive). + * Finds a known SPARQL result format by MIME type (case-insensitive). * - * @param mimeType The MIME type (e.g., "text/turtle"). - * @return An Optional containing the matching RdfFormat if found. + * @param mimeType The MIME type (for example, {@code "application/sparql-results+json"}). + * @return an optional containing the matching result format */ public static Optional byMimeType(String mimeType) { String mime = mimeType.toLowerCase(Locale.ROOT); @@ -93,9 +93,9 @@ public static Optional byMimeType(String mimeType) { } /** - * Returns a list of all known RDF formats. + * Returns all known SPARQL result formats. * - * @return An unmodifiable List of all RdfFormat constants. + * @return an unmodifiable list of result formats */ public static List all() { return List.of(CSV, TSV, JSON, XML); diff --git a/src/main/java/fr/inria/corese/core/next/query/api/io/parser/QueryOptions.java b/src/main/java/fr/inria/corese/core/next/query/api/io/parser/QueryOptions.java deleted file mode 100644 index 274f15505..000000000 --- a/src/main/java/fr/inria/corese/core/next/query/api/io/parser/QueryOptions.java +++ /dev/null @@ -1,23 +0,0 @@ -package fr.inria.corese.core.next.query.api.io.parser; - -/** - * Marker interface for configuration objects used by {@link QueryParser} - * implementations. - * - *

Implementations of this interface define parser-specific options - * that influence how a query is parsed and validated. Examples of such - * options may include:

- * - *
    - *
  • Base IRI resolution
  • - *
  • Strict or permissive parsing modes
  • - *
  • Error handling strategies (fail-fast vs. error collection)
  • - *
- * - *

This interface does not define any methods directly. It serves as - * a common supertype for all query parsing configuration classes.

- * - * @see QueryParser - */ -public interface QueryOptions { -} diff --git a/src/main/java/fr/inria/corese/core/next/query/api/io/parser/QueryParser.java b/src/main/java/fr/inria/corese/core/next/query/api/io/parser/QueryParser.java deleted file mode 100644 index e27e88275..000000000 --- a/src/main/java/fr/inria/corese/core/next/query/api/io/parser/QueryParser.java +++ /dev/null @@ -1,52 +0,0 @@ -package fr.inria.corese.core.next.query.api.io.parser; - -import fr.inria.corese.core.next.query.impl.sparql.ast.QueryAst; - -import java.io.InputStream; -import java.io.Reader; - -/** - * A parser for SPARQL queries. - * - *

This interface defines methods for parsing SPARQL queries from - * various input sources (InputStream, Reader, or String) and producing - * a {@link QueryAst} representation.

- * - *

Implementations may support configurable parsing behavior via - * {@link QueryOptions}, such as base IRI handling, strict mode, - * or error handling strategy.

- */ -public interface QueryParser { - - /** - * Sets the configuration options used by this parser. - * - * @param options the parsing configuration - */ - void setConfig(QueryOptions options); - - /** - * Returns the current configuration options used by this parser. - * - * @return the parsing configuration - */ - QueryOptions getConfig(); - - /** Parse a SPARQL query from an InputStream (UTF-8) */ - QueryAst parse(InputStream in); - - /** Parse a SPARQL query from an InputStream with a base IRI */ - QueryAst parse(InputStream in, String baseIRI); - - /** Parse a SPARQL query from a Reader */ - QueryAst parse(Reader reader); - - /** Parse a SPARQL query from a Reader with a base IRI */ - QueryAst parse(Reader reader, String baseIRI); - - /** Parse a SPARQL string query */ - QueryAst parse(String queryString); - - /** Parse a SPARQL string with a base IRI */ - QueryAst parse(String queryString, String baseIRI); -} diff --git a/src/main/java/fr/inria/corese/core/next/query/api/io/serializer/BooleanResultSerializer.java b/src/main/java/fr/inria/corese/core/next/query/api/io/serializer/BooleanResultSerializer.java index 3ecbfa7c1..8b43c124e 100644 --- a/src/main/java/fr/inria/corese/core/next/query/api/io/serializer/BooleanResultSerializer.java +++ b/src/main/java/fr/inria/corese/core/next/query/api/io/serializer/BooleanResultSerializer.java @@ -1,4 +1,5 @@ package fr.inria.corese.core.next.query.api.io.serializer; +/** Serializes the boolean result of a SPARQL ASK query. */ public interface BooleanResultSerializer extends ResultSerializer { } diff --git a/src/main/java/fr/inria/corese/core/next/query/api/io/serializer/ResultSerializer.java b/src/main/java/fr/inria/corese/core/next/query/api/io/serializer/ResultSerializer.java index 4242cf534..84eadc70e 100644 --- a/src/main/java/fr/inria/corese/core/next/query/api/io/serializer/ResultSerializer.java +++ b/src/main/java/fr/inria/corese/core/next/query/api/io/serializer/ResultSerializer.java @@ -3,6 +3,4 @@ import fr.inria.corese.core.next.data.api.io.serializer.Serializer; public interface ResultSerializer extends Serializer { - - } diff --git a/src/main/java/fr/inria/corese/core/next/query/api/io/serializer/IResultSerializerFactory.java b/src/main/java/fr/inria/corese/core/next/query/api/io/serializer/ResultSerializerFactory.java similarity index 64% rename from src/main/java/fr/inria/corese/core/next/query/api/io/serializer/IResultSerializerFactory.java rename to src/main/java/fr/inria/corese/core/next/query/api/io/serializer/ResultSerializerFactory.java index bd528f225..7d045f6cd 100644 --- a/src/main/java/fr/inria/corese/core/next/query/api/io/serializer/IResultSerializerFactory.java +++ b/src/main/java/fr/inria/corese/core/next/query/api/io/serializer/ResultSerializerFactory.java @@ -1,14 +1,13 @@ package fr.inria.corese.core.next.query.api.io.serializer; import fr.inria.corese.core.next.data.api.io.IOOptions; -import fr.inria.corese.core.next.data.api.io.serializer.Serializer; -import fr.inria.corese.core.next.query.api.base.io.ResultFormat; +import fr.inria.corese.core.next.query.api.io.ResultFormat; import fr.inria.corese.core.next.query.api.result.TupleQueryResult; /** - * Factory interface for creating {@link ResultSerializer} instances. This interface defines functions to create serializer based on the given result {@link fr.inria.corese.core.kgram.core.Mappings} and the desired {@link ResultFormat} + * Creates serializers for SPARQL tuple and boolean results. */ -public interface IResultSerializerFactory { +public interface ResultSerializerFactory { /** * Creates a serializer for the given {@link TupleQueryResult} results in the given {@link ResultFormat format} @@ -16,16 +15,16 @@ public interface IResultSerializerFactory { * @param results The {@link TupleQueryResult} results to be serialized * @return a new instance of {@link ResultSerializer} with default configuration. */ - ResultSerializer createSerializer(ResultFormat format, TupleQueryResult results); + ResultSerializer createTupleSerializer(ResultFormat format, TupleQueryResult results); /** * Creates a serializer for the given boolean result in the given {@link ResultFormat format} * * @param format The {@link ResultFormat} to use for serialization. - * @param results The boolean result to be serialized + * @param result The boolean result to be serialized * @return a new instance of {@link ResultSerializer} with default configuration. */ - Serializer createBooleanSerializer(ResultFormat format, boolean results); + BooleanResultSerializer createBooleanSerializer(ResultFormat format, boolean result); /** * Creates a serializer for the given {@link TupleQueryResult} results in the given {@link ResultFormat format} @@ -34,15 +33,21 @@ public interface IResultSerializerFactory { * @param options Options to configure the serialization * @return a new instance of {@link ResultSerializer} with default configuration. */ - ResultSerializer createSerializer(ResultFormat format, TupleQueryResult results, IOOptions options); + ResultSerializer createTupleSerializer( + ResultFormat format, + TupleQueryResult results, + IOOptions options); /** * Creates a serializer for the given boolean result in the given {@link ResultFormat format} * * @param format The {@link ResultFormat} to use for serialization. - * @param results The boolean result to be serialized + * @param result The boolean result to be serialized * @param options Options to configure the serialization * @return a new instance of {@link ResultSerializer} with default configuration. */ - Serializer createBooleanSerializer(ResultFormat format, boolean results, IOOptions options); + BooleanResultSerializer createBooleanSerializer( + ResultFormat format, + boolean result, + IOOptions options); } diff --git a/src/main/java/fr/inria/corese/core/next/query/api/io/serializer/package-info.java b/src/main/java/fr/inria/corese/core/next/query/api/io/serializer/package-info.java new file mode 100644 index 000000000..89a30dc1f --- /dev/null +++ b/src/main/java/fr/inria/corese/core/next/query/api/io/serializer/package-info.java @@ -0,0 +1,8 @@ +/** + * Contracts for serializing SPARQL tuple and boolean results. + * + *

Implementations select a serializer by {@link + * fr.inria.corese.core.next.query.api.io.ResultFormat} and report unsupported + * formats explicitly.

+ */ +package fr.inria.corese.core.next.query.api.io.serializer; diff --git a/src/main/java/fr/inria/corese/core/next/query/api/package-info.java b/src/main/java/fr/inria/corese/core/next/query/api/package-info.java new file mode 100644 index 000000000..0298bb9b7 --- /dev/null +++ b/src/main/java/fr/inria/corese/core/next/query/api/package-info.java @@ -0,0 +1,9 @@ +/** + * Query-facing contracts, result types, validation entry points, and I/O + * abstractions. + * + *

The final public SPARQL request API is not defined yet. Parser, AST, + * bridge, and execution wiring remain outside this package so they cannot be + * mistaken for that future contract.

+ */ +package fr.inria.corese.core.next.query.api; diff --git a/src/main/java/fr/inria/corese/core/next/query/api/validation/QueryValidators.java b/src/main/java/fr/inria/corese/core/next/query/api/validation/QueryValidators.java deleted file mode 100644 index b27751d65..000000000 --- a/src/main/java/fr/inria/corese/core/next/query/api/validation/QueryValidators.java +++ /dev/null @@ -1,17 +0,0 @@ -package fr.inria.corese.core.next.query.api.validation; - -import fr.inria.corese.core.next.query.impl.parser.SparqlParser; - -/** - * Public factories for query validators. - */ -public final class QueryValidators { - - private QueryValidators() { - } - - /** Returns a validator for SPARQL query text. */ - public static QueryTextValidator sparql() { - return new SparqlParser(); - } -} diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/parser/AbstractQueryParser.java b/src/main/java/fr/inria/corese/core/next/query/impl/parser/AbstractQueryParser.java new file mode 100644 index 000000000..152039939 --- /dev/null +++ b/src/main/java/fr/inria/corese/core/next/query/impl/parser/AbstractQueryParser.java @@ -0,0 +1,26 @@ +package fr.inria.corese.core.next.query.impl.parser; + +/** + * Internal base class that stores the configuration shared by query parsers. + * + *

This implementation detail lives beside the concrete parsers; consumers + * pipeline code should use {@link QueryParser}, not extend this class.

+ */ +abstract class AbstractQueryParser implements QueryParser { + + private QueryOptions config; + + protected AbstractQueryParser(QueryOptions config) { + this.config = config; + } + + @Override + public final void setConfig(QueryOptions options) { + this.config = options; + } + + @Override + public final QueryOptions getConfig() { + return config; + } +} diff --git a/src/main/java/fr/inria/corese/core/next/query/QueryOptions.java b/src/main/java/fr/inria/corese/core/next/query/impl/parser/QueryOptions.java similarity index 92% rename from src/main/java/fr/inria/corese/core/next/query/QueryOptions.java rename to src/main/java/fr/inria/corese/core/next/query/impl/parser/QueryOptions.java index 62ceb26da..2d7698246 100644 --- a/src/main/java/fr/inria/corese/core/next/query/QueryOptions.java +++ b/src/main/java/fr/inria/corese/core/next/query/impl/parser/QueryOptions.java @@ -1,4 +1,4 @@ -package fr.inria.corese.core.next.query; +package fr.inria.corese.core.next.query.impl.parser; /** * Marker interface for configuration objects used by {@link QueryParser} diff --git a/src/main/java/fr/inria/corese/core/next/query/QueryParser.java b/src/main/java/fr/inria/corese/core/next/query/impl/parser/QueryParser.java similarity index 96% rename from src/main/java/fr/inria/corese/core/next/query/QueryParser.java rename to src/main/java/fr/inria/corese/core/next/query/impl/parser/QueryParser.java index f2fc04dd8..7a8322024 100644 --- a/src/main/java/fr/inria/corese/core/next/query/QueryParser.java +++ b/src/main/java/fr/inria/corese/core/next/query/impl/parser/QueryParser.java @@ -1,4 +1,4 @@ -package fr.inria.corese.core.next.query; +package fr.inria.corese.core.next.query.impl.parser; import fr.inria.corese.core.next.query.impl.sparql.ast.QueryAst; diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/parser/SparqlAstBuilder.java b/src/main/java/fr/inria/corese/core/next/query/impl/parser/SparqlAstBuilder.java index f1aa39fcf..4ab90e08e 100644 --- a/src/main/java/fr/inria/corese/core/next/query/impl/parser/SparqlAstBuilder.java +++ b/src/main/java/fr/inria/corese/core/next/query/impl/parser/SparqlAstBuilder.java @@ -24,9 +24,7 @@ public abstract class SparqlAstBuilder { private static final String GENERATED_BLANK_NODE_PREFIX = IOConstants.BLANK_NODE_PREFIX + "b"; - /** - * Parser options (e.g. for future use: strict mode, base IRI). - */ + /** Parser options shared by syntax and AST construction. */ protected final SparqlParserOptions options; /** @@ -50,9 +48,7 @@ public abstract class SparqlAstBuilder { */ protected final VariableScopeAnalyzer variableScopeAnalyzer = new VariableScopeAnalyzer(); - /** - * Stack of groups; each group is a list of patterns (BgpAst now, later OptionalAst/UnionAst/...) - */ + /** Stack of graph-pattern groups currently being built. */ protected final Deque> groupStack = new ArrayDeque<>(); /** diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/parser/SparqlErrorListener.java b/src/main/java/fr/inria/corese/core/next/query/impl/parser/SparqlErrorListener.java index 8511b798a..90f97122e 100644 --- a/src/main/java/fr/inria/corese/core/next/query/impl/parser/SparqlErrorListener.java +++ b/src/main/java/fr/inria/corese/core/next/query/impl/parser/SparqlErrorListener.java @@ -1,7 +1,7 @@ package fr.inria.corese.core.next.query.impl.parser; import fr.inria.corese.core.next.query.api.exception.QuerySyntaxException; -import fr.inria.corese.core.next.query.api.sparql.options.SparqlAstError; +import fr.inria.corese.core.next.query.impl.parser.options.SparqlAstError; import org.antlr.v4.runtime.*; import java.util.ArrayList; diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/parser/SparqlListener.java b/src/main/java/fr/inria/corese/core/next/query/impl/parser/SparqlListenerDispatcher.java similarity index 95% rename from src/main/java/fr/inria/corese/core/next/query/impl/parser/SparqlListener.java rename to src/main/java/fr/inria/corese/core/next/query/impl/parser/SparqlListenerDispatcher.java index 374db8c86..327b66be5 100644 --- a/src/main/java/fr/inria/corese/core/next/query/impl/parser/SparqlListener.java +++ b/src/main/java/fr/inria/corese/core/next/query/impl/parser/SparqlListenerDispatcher.java @@ -8,15 +8,17 @@ import java.util.List; /** - * SPARQL listener multiplexer: forwards to delegates only the events needed for - * triple patterns (?s ?p ?o) and BGPs (GroupGraphPattern, TriplesBlock, TriplesSameSubject). - * Additional rules can be added later if needed. + * Dispatches the supported ANTLR SPARQL events to a fixed list of delegates. + * + *

The dispatcher owns no AST-building state. Query-form, graph-pattern, + * expression, modifier, prologue, and update events remain implemented by the + * specialized listeners in the {@code listener} subpackage.

*/ -public final class SparqlListener extends SparqlParserBaseListener { +final class SparqlListenerDispatcher extends SparqlParserBaseListener { private final List delegates; - public SparqlListener(List delegates) { + SparqlListenerDispatcher(List delegates) { this.delegates = delegates != null && !delegates.isEmpty() ? List.copyOf(delegates) : Collections.emptyList(); diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/parser/SparqlParser.java b/src/main/java/fr/inria/corese/core/next/query/impl/parser/SparqlParser.java index 4ccf7c479..67b4c1ddd 100644 --- a/src/main/java/fr/inria/corese/core/next/query/impl/parser/SparqlParser.java +++ b/src/main/java/fr/inria/corese/core/next/query/impl/parser/SparqlParser.java @@ -9,12 +9,11 @@ import org.antlr.v4.runtime.misc.ParseCancellationException; import fr.inria.corese.core.next.data.impl.io.common.IOConstants; -import fr.inria.corese.core.next.query.api.base.io.AbstractQueryParser; import fr.inria.corese.core.next.query.api.exception.QueryEvaluationException; import fr.inria.corese.core.next.query.api.exception.QuerySyntaxException; import fr.inria.corese.core.next.query.api.exception.QueryValidationException; -import fr.inria.corese.core.next.query.api.io.parser.QueryOptions; -import fr.inria.corese.core.next.query.api.sparql.options.BaseIRIOptions; +import fr.inria.corese.core.next.query.impl.parser.QueryOptions; +import fr.inria.corese.core.next.query.impl.parser.options.BaseIRIOptions; import fr.inria.corese.core.next.query.api.validation.QueryDiagnostic; import fr.inria.corese.core.next.query.api.validation.QueryTextValidator; import fr.inria.corese.core.next.query.api.validation.QueryValidationResult; diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/parser/SparqlParserOptions.java b/src/main/java/fr/inria/corese/core/next/query/impl/parser/SparqlParserOptions.java index b2b695aa7..514f4609c 100644 --- a/src/main/java/fr/inria/corese/core/next/query/impl/parser/SparqlParserOptions.java +++ b/src/main/java/fr/inria/corese/core/next/query/impl/parser/SparqlParserOptions.java @@ -1,7 +1,7 @@ package fr.inria.corese.core.next.query.impl.parser; import fr.inria.corese.core.next.data.impl.io.parser.util.ParserConstants; -import fr.inria.corese.core.next.query.api.sparql.options.*; +import fr.inria.corese.core.next.query.impl.parser.options.*; import java.util.ArrayList; import java.util.Collections; diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/parser/SparqlQueryAnalyzer.java b/src/main/java/fr/inria/corese/core/next/query/impl/parser/SparqlQueryAnalyzer.java index 98ccb7fe0..372982ca7 100644 --- a/src/main/java/fr/inria/corese/core/next/query/impl/parser/SparqlQueryAnalyzer.java +++ b/src/main/java/fr/inria/corese/core/next/query/impl/parser/SparqlQueryAnalyzer.java @@ -4,7 +4,7 @@ import fr.inria.corese.core.next.query.api.exception.QueryEvaluationException; import fr.inria.corese.core.next.query.api.exception.QuerySyntaxException; import fr.inria.corese.core.next.query.api.exception.QueryValidationException; -import fr.inria.corese.core.next.query.api.sparql.options.SparqlAstError; +import fr.inria.corese.core.next.query.impl.parser.options.SparqlAstError; import fr.inria.corese.core.next.query.api.validation.QueryDiagnostic; import fr.inria.corese.core.next.query.api.validation.QueryValidationResult; import fr.inria.corese.core.next.query.impl.parser.listener.*; @@ -133,22 +133,22 @@ private QueryAst buildAst( if (root.queryUnit() != null) { SparqlQueryAstBuilder queryBuilder = new SparqlQueryAstBuilder(options); queryBuilder.reserveBlankNodeLabels(blankNodeLabels); - SparqlListener queryListener = new SparqlListener(List.of( - new AskQueryFeature(queryBuilder), - new ConstructQueryFeature(queryBuilder), - new DescribeQueryFeature(queryBuilder), - new SelectQueryFeature(queryBuilder), - new DatasetClauseFeature(queryBuilder), - new HavingFeature(queryBuilder), - new SolutionModifierFeature(queryBuilder), - new ValuesFeature(queryBuilder), - new BgpFeature(queryBuilder), - new FilterFeature(queryBuilder), - new UnionFeature(queryBuilder), - new MinusFeature(queryBuilder), - new PrologueFeature(queryBuilder), - new BindFeature(queryBuilder), - new ServiceFeature(queryBuilder) + SparqlListenerDispatcher queryListener = new SparqlListenerDispatcher(List.of( + new AskQueryAstListener(queryBuilder), + new ConstructQueryAstListener(queryBuilder), + new DescribeQueryAstListener(queryBuilder), + new SelectQueryAstListener(queryBuilder), + new DatasetClauseAstListener(queryBuilder), + new HavingAstListener(queryBuilder), + new SolutionModifierAstListener(queryBuilder), + new ValuesAstListener(queryBuilder), + new BgpAstListener(queryBuilder), + new FilterAstListener(queryBuilder), + new UnionAstListener(queryBuilder), + new MinusAstListener(queryBuilder), + new PrologueAstListener(queryBuilder), + new BindAstListener(queryBuilder), + new ServiceAstListener(queryBuilder) )); walker.walk(queryListener, root.queryUnit()); return queryBuilder.getResult(); @@ -157,17 +157,17 @@ private QueryAst buildAst( if (root.updateUnit() != null) { SparqlUpdateAstBuilder updateBuilder = new SparqlUpdateAstBuilder(options); updateBuilder.reserveBlankNodeLabels(blankNodeLabels); - SparqlListener updateListener = new SparqlListener(List.of( - new ClearRequestFeature(updateBuilder), - new CreateRequestFeature(updateBuilder), - new LoadRequestFeature(updateBuilder), - new BgpFeature(updateBuilder), - new BindFeature(updateBuilder), - new FilterFeature(updateBuilder), - new MinusFeature(updateBuilder), - new PrologueFeature(updateBuilder), - new ServiceFeature(updateBuilder), - new UnionFeature(updateBuilder) + SparqlListenerDispatcher updateListener = new SparqlListenerDispatcher(List.of( + new ClearUpdateAstListener(updateBuilder), + new CreateUpdateAstListener(updateBuilder), + new LoadUpdateAstListener(updateBuilder), + new BgpAstListener(updateBuilder), + new BindAstListener(updateBuilder), + new FilterAstListener(updateBuilder), + new MinusAstListener(updateBuilder), + new PrologueAstListener(updateBuilder), + new ServiceAstListener(updateBuilder), + new UnionAstListener(updateBuilder) )); walker.walk(updateListener, root.updateUnit()); return updateBuilder.getResult(); diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/parser/SparqlQueryAstBuilder.java b/src/main/java/fr/inria/corese/core/next/query/impl/parser/SparqlQueryAstBuilder.java index 16ca86567..90c57384e 100644 --- a/src/main/java/fr/inria/corese/core/next/query/impl/parser/SparqlQueryAstBuilder.java +++ b/src/main/java/fr/inria/corese/core/next/query/impl/parser/SparqlQueryAstBuilder.java @@ -47,11 +47,11 @@ public class SparqlQueryAstBuilder extends SparqlAstBuilder { protected final List values = new ArrayList<>(); /** - * SELECT projection (* or explicit variables). Set by SelectQueryFeature in enterSelectQuery. + * SELECT projection (* or explicit variables). Set by SelectQueryAstListener in enterSelectQuery. */ private ProjectionAst projection = ProjectionAsts.selectAll(); - /** SELECT DISTINCT / REDUCED. Set by SelectQueryFeature when parsing SELECT (DISTINCT | REDUCED)? ... */ + /** SELECT DISTINCT / REDUCED. Set by SelectQueryAstListener when parsing SELECT (DISTINCT | REDUCED)? ... */ private boolean distinct; private boolean reduced; @@ -72,7 +72,7 @@ public class SparqlQueryAstBuilder extends SparqlAstBuilder { private GroupByAst groupBy = new GroupByAst(List.of()); /** - * DESCRIBE resources (IRIs or variables). Set by DescribeQueryFeature. + * DESCRIBE resources (IRIs or variables). Set by DescribeQueryAstListener. */ private final List describeResources = new ArrayList<>(); @@ -282,7 +282,7 @@ public void addValues(List mappings) { } /** - * Sets SELECT DISTINCT. Called by SelectQueryFeature when {@code DISTINCT} is present. + * Sets SELECT DISTINCT. Called by SelectQueryAstListener when {@code DISTINCT} is present. */ public void setDistinct(boolean distinct) { if (hasCurrentSelect()) { @@ -292,7 +292,7 @@ public void setDistinct(boolean distinct) { } /** - * Sets SELECT REDUCED. Called by SelectQueryFeature when {@code REDUCED} is present. + * Sets SELECT REDUCED. Called by SelectQueryAstListener when {@code REDUCED} is present. */ public void setReduced(boolean reduced) { if (hasCurrentSelect()) { diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/parser/SparqlValidators.java b/src/main/java/fr/inria/corese/core/next/query/impl/parser/SparqlValidators.java new file mode 100644 index 000000000..936ce2e1d --- /dev/null +++ b/src/main/java/fr/inria/corese/core/next/query/impl/parser/SparqlValidators.java @@ -0,0 +1,17 @@ +package fr.inria.corese.core.next.query.impl.parser; + +import fr.inria.corese.core.next.query.api.validation.QueryTextValidator; + +/** + * Internal entry points for validators backed by the SPARQL parser. + */ +public final class SparqlValidators { + + private SparqlValidators() { + } + + /** Returns a validator for SPARQL query text. */ + public static QueryTextValidator sparql() { + return new SparqlParser(); + } +} diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/AbstractSparqlFeature.java b/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/AbstractSparqlAstListener.java similarity index 76% rename from src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/AbstractSparqlFeature.java rename to src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/AbstractSparqlAstListener.java index db5854e46..125e95a50 100644 --- a/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/AbstractSparqlFeature.java +++ b/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/AbstractSparqlAstListener.java @@ -8,11 +8,11 @@ * * @see SparqlParserBaseListener */ -public abstract class AbstractSparqlFeature extends SparqlParserBaseListener { +public abstract class AbstractSparqlAstListener extends SparqlParserBaseListener { private final SparqlAstBuilder builder; - protected AbstractSparqlFeature(SparqlAstBuilder builder) { + protected AbstractSparqlAstListener(SparqlAstBuilder builder) { this.builder = builder; } diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/AbstractSparqlQueryFeature.java b/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/AbstractSparqlQueryAstListener.java similarity index 65% rename from src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/AbstractSparqlQueryFeature.java rename to src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/AbstractSparqlQueryAstListener.java index 0725f2d27..a1924e2e1 100644 --- a/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/AbstractSparqlQueryFeature.java +++ b/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/AbstractSparqlQueryAstListener.java @@ -3,9 +3,9 @@ import fr.inria.corese.core.next.query.impl.parser.SparqlAstBuilder; import fr.inria.corese.core.next.query.impl.parser.SparqlQueryAstBuilder; -public abstract class AbstractSparqlQueryFeature extends AbstractSparqlFeature implements QueryFeature { +public abstract class AbstractSparqlQueryAstListener extends AbstractSparqlAstListener implements QueryAstListener { - protected AbstractSparqlQueryFeature(SparqlAstBuilder builder) { + protected AbstractSparqlQueryAstListener(SparqlAstBuilder builder) { super(builder); } diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/AbstractSparqlRequestFeature.java b/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/AbstractSparqlUpdateAstListener.java similarity index 65% rename from src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/AbstractSparqlRequestFeature.java rename to src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/AbstractSparqlUpdateAstListener.java index e7c87c6bd..2befcd54b 100644 --- a/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/AbstractSparqlRequestFeature.java +++ b/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/AbstractSparqlUpdateAstListener.java @@ -3,8 +3,8 @@ import fr.inria.corese.core.next.query.impl.parser.SparqlAstBuilder; import fr.inria.corese.core.next.query.impl.parser.SparqlUpdateAstBuilder; -public abstract class AbstractSparqlRequestFeature extends AbstractSparqlFeature implements UpdateRequestFeature{ - protected AbstractSparqlRequestFeature(SparqlAstBuilder builder) { +public abstract class AbstractSparqlUpdateAstListener extends AbstractSparqlAstListener implements UpdateAstListener{ + protected AbstractSparqlUpdateAstListener(SparqlAstBuilder builder) { super(builder); } diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/AskQueryFeature.java b/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/AskQueryAstListener.java similarity index 81% rename from src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/AskQueryFeature.java rename to src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/AskQueryAstListener.java index e3965e7d4..a8e7f8e19 100644 --- a/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/AskQueryFeature.java +++ b/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/AskQueryAstListener.java @@ -7,9 +7,9 @@ * Sparql ASK query as a feature * The listener will call {@code enterAskQuery()} and {@code exitAskQuery()} */ -public class AskQueryFeature extends AbstractSparqlFeature implements QueryFeature { +public class AskQueryAstListener extends AbstractSparqlAstListener implements QueryAstListener { - public AskQueryFeature(SparqlQueryAstBuilder builder) { + public AskQueryAstListener(SparqlQueryAstBuilder builder) { super(builder); } diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/BgpFeature.java b/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/BgpAstListener.java similarity index 96% rename from src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/BgpFeature.java rename to src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/BgpAstListener.java index 72bd28d31..0006965c2 100644 --- a/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/BgpFeature.java +++ b/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/BgpAstListener.java @@ -18,9 +18,9 @@ *
  • OptionalGraphPattern: {@code OPTIONAL { ... } } → builder.enterOptional() / exitOptional()
  • * */ -public class BgpFeature extends AbstractSparqlFeature { +public class BgpAstListener extends AbstractSparqlAstListener { - public BgpFeature(SparqlAstBuilder builder) { + public BgpAstListener(SparqlAstBuilder builder) { super(builder); } diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/BindFeature.java b/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/BindAstListener.java similarity index 85% rename from src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/BindFeature.java rename to src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/BindAstListener.java index 15d93cb70..c03bcaf36 100644 --- a/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/BindFeature.java +++ b/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/BindAstListener.java @@ -9,9 +9,9 @@ /** * SPARQL {@code BIND} feature */ -public class BindFeature extends AbstractSparqlFeature { +public class BindAstListener extends AbstractSparqlAstListener { - public BindFeature(SparqlAstBuilder builder) { + public BindAstListener(SparqlAstBuilder builder) { super(builder); } @@ -21,4 +21,4 @@ public void exitBind(SparqlParser.BindContext ctx) { VarAst variable = (VarAst) builder().var(ctx.var_().getText()); builder().addBind(new BindAst(expression, variable)); } -} \ No newline at end of file +} diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/ClearRequestFeature.java b/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/ClearUpdateAstListener.java similarity index 80% rename from src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/ClearRequestFeature.java rename to src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/ClearUpdateAstListener.java index f7f5d38a0..f5cc123b1 100644 --- a/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/ClearRequestFeature.java +++ b/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/ClearUpdateAstListener.java @@ -7,8 +7,8 @@ /** * AST feature listener for CLEAR SPARQL update query */ -public class ClearRequestFeature extends AbstractSparqlRequestFeature { - public ClearRequestFeature(SparqlUpdateAstBuilder builder) { +public class ClearUpdateAstListener extends AbstractSparqlUpdateAstListener { + public ClearUpdateAstListener(SparqlUpdateAstBuilder builder) { super(builder); } diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/ConstructQueryFeature.java b/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/ConstructQueryAstListener.java similarity index 92% rename from src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/ConstructQueryFeature.java rename to src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/ConstructQueryAstListener.java index 5f062ce15..d564699d3 100644 --- a/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/ConstructQueryFeature.java +++ b/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/ConstructQueryAstListener.java @@ -9,16 +9,16 @@ /** * SPARQL CONSTRUCT query feature: sets query type, collects the CONSTRUCT template - * (triples to instantiate from WHERE bindings) and delegates the WHERE clause to {@link BgpFeature}. + * (triples to instantiate from WHERE bindings) and delegates the WHERE clause to {@link BgpAstListener}. * *

    Grammar: {@code CONSTRUCT constructTemplate ... whereClause ...} * The template uses the same {@code triplesSameSubject} structure as the WHERE clause. * Triples in the template are emitted when the parent is {@code ConstructTriplesContext}, * using {@link SparqlAstBuilder} term helpers → {@link SparqlQueryAstBuilder#addConstructTriple}. */ -public class ConstructQueryFeature extends AbstractSparqlFeature implements QueryFeature { +public class ConstructQueryAstListener extends AbstractSparqlAstListener implements QueryAstListener { - public ConstructQueryFeature(SparqlQueryAstBuilder builder) { + public ConstructQueryAstListener(SparqlQueryAstBuilder builder) { super(builder); } diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/CreateRequestFeature.java b/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/CreateUpdateAstListener.java similarity index 80% rename from src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/CreateRequestFeature.java rename to src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/CreateUpdateAstListener.java index a76a865c5..73ba71f12 100644 --- a/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/CreateRequestFeature.java +++ b/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/CreateUpdateAstListener.java @@ -7,9 +7,9 @@ /** * AST feature listener for the CREATE SPARQL update operation. */ -public class CreateRequestFeature extends AbstractSparqlRequestFeature { +public class CreateUpdateAstListener extends AbstractSparqlUpdateAstListener { - public CreateRequestFeature(SparqlUpdateAstBuilder builder) { + public CreateUpdateAstListener(SparqlUpdateAstBuilder builder) { super(builder); } @@ -18,4 +18,4 @@ public void enterCreate(SparqlParser.CreateContext ctx) { CreateRequestAst createRequestAst = this.updateBuilder().createToAst(ctx); this.updateBuilder().addRequest(createRequestAst); } -} \ No newline at end of file +} diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/DatasetClauseFeature.java b/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/DatasetClauseAstListener.java similarity index 83% rename from src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/DatasetClauseFeature.java rename to src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/DatasetClauseAstListener.java index e5b892213..567dce226 100644 --- a/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/DatasetClauseFeature.java +++ b/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/DatasetClauseAstListener.java @@ -4,8 +4,8 @@ import fr.inria.corese.core.next.query.impl.parser.SparqlAstBuilder; import fr.inria.corese.core.next.query.impl.sparql.ast.IriAst; -public class DatasetClauseFeature extends AbstractSparqlFeature { - public DatasetClauseFeature(SparqlAstBuilder builder) { +public class DatasetClauseAstListener extends AbstractSparqlAstListener { + public DatasetClauseAstListener(SparqlAstBuilder builder) { super(builder); } diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/DescribeQueryFeature.java b/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/DescribeQueryAstListener.java similarity index 89% rename from src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/DescribeQueryFeature.java rename to src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/DescribeQueryAstListener.java index 93aefcadd..d904dff64 100644 --- a/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/DescribeQueryFeature.java +++ b/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/DescribeQueryAstListener.java @@ -14,15 +14,15 @@ * * * - *

    The WHERE clause (optional) is built by {@link BgpFeature} as usual. + *

    The WHERE clause (optional) is built by {@link BgpAstListener} as usual. */ -public class DescribeQueryFeature extends AbstractSparqlFeature implements QueryFeature { +public class DescribeQueryAstListener extends AbstractSparqlAstListener implements QueryAstListener { /** * Constructs bound to the given AST builder. * * @param builder the {@link SparqlAstBuilder} that will receive DESCRIBE lifecycle events */ - public DescribeQueryFeature(SparqlQueryAstBuilder builder) { + public DescribeQueryAstListener(SparqlQueryAstBuilder builder) { super(builder); } @@ -67,4 +67,4 @@ public void exitDescribeQuery(SparqlParser.DescribeQueryContext ctx) { } queryBuilder().exitDescribeQuery(); } -} \ No newline at end of file +} diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/FilterFeature.java b/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/FilterAstListener.java similarity index 90% rename from src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/FilterFeature.java rename to src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/FilterAstListener.java index 9a9d2af16..402911bfb 100644 --- a/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/FilterFeature.java +++ b/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/FilterAstListener.java @@ -10,9 +10,9 @@ /** * SPARQL {@code FILTER} feature */ -public class FilterFeature extends AbstractSparqlFeature { +public class FilterAstListener extends AbstractSparqlAstListener { - public FilterFeature(SparqlAstBuilder builder) { + public FilterAstListener(SparqlAstBuilder builder) { super(builder); } diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/HavingFeature.java b/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/HavingAstListener.java similarity index 90% rename from src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/HavingFeature.java rename to src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/HavingAstListener.java index f573cd795..d59cd3836 100644 --- a/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/HavingFeature.java +++ b/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/HavingAstListener.java @@ -9,9 +9,9 @@ * Parses {@code havingClause} ({@code HAVING havingCondition+}) into {@link fr.inria.corese.core.next.query.impl.sparql.ast.HavingAst} * conditions on the active {@link SparqlAstBuilder} SELECT frame (or top-level modifier lists for ASK / CONSTRUCT / DESCRIBE). */ -public class HavingFeature extends AbstractSparqlQueryFeature { +public class HavingAstListener extends AbstractSparqlQueryAstListener { - public HavingFeature(SparqlAstBuilder builder) { + public HavingAstListener(SparqlAstBuilder builder) { super(builder); } diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/LoadRequestFeature.java b/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/LoadUpdateAstListener.java similarity index 80% rename from src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/LoadRequestFeature.java rename to src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/LoadUpdateAstListener.java index 76903081c..3574b61c6 100644 --- a/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/LoadRequestFeature.java +++ b/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/LoadUpdateAstListener.java @@ -7,9 +7,9 @@ /** * AST feature listener for LOAD SPARQL update query */ -public class LoadRequestFeature extends AbstractSparqlRequestFeature { +public class LoadUpdateAstListener extends AbstractSparqlUpdateAstListener { - public LoadRequestFeature(SparqlUpdateAstBuilder builder) { + public LoadUpdateAstListener(SparqlUpdateAstBuilder builder) { super(builder); } diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/MinusFeature.java b/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/MinusAstListener.java similarity index 82% rename from src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/MinusFeature.java rename to src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/MinusAstListener.java index afcb1a3a3..08915a999 100644 --- a/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/MinusFeature.java +++ b/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/MinusAstListener.java @@ -6,9 +6,9 @@ /** * SPARQL 1.1 parser feature that handles the {@code MINUS} graph pattern. */ -public class MinusFeature extends AbstractSparqlFeature { +public class MinusAstListener extends AbstractSparqlAstListener { - public MinusFeature(SparqlAstBuilder builder) { + public MinusAstListener(SparqlAstBuilder builder) { super(builder); } diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/PrologueFeature.java b/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/PrologueAstListener.java similarity index 82% rename from src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/PrologueFeature.java rename to src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/PrologueAstListener.java index e35f73c20..0d539ed0a 100644 --- a/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/PrologueFeature.java +++ b/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/PrologueAstListener.java @@ -4,8 +4,8 @@ import fr.inria.corese.core.next.query.impl.parser.SparqlAstBuilder; import fr.inria.corese.core.next.util.StringUtils; -public class PrologueFeature extends AbstractSparqlFeature { - public PrologueFeature(SparqlAstBuilder builder) { +public class PrologueAstListener extends AbstractSparqlAstListener { + public PrologueAstListener(SparqlAstBuilder builder) { super(builder); } diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/QueryFeature.java b/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/QueryAstListener.java similarity index 83% rename from src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/QueryFeature.java rename to src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/QueryAstListener.java index fec553c9a..b70544462 100644 --- a/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/QueryFeature.java +++ b/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/QueryAstListener.java @@ -2,6 +2,6 @@ import fr.inria.corese.core.next.query.impl.parser.SparqlQueryAstBuilder; -public interface QueryFeature { +public interface QueryAstListener { SparqlQueryAstBuilder queryBuilder(); } diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/SelectQueryFeature.java b/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/SelectQueryAstListener.java similarity index 94% rename from src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/SelectQueryFeature.java rename to src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/SelectQueryAstListener.java index 1efa19381..194c97675 100644 --- a/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/SelectQueryFeature.java +++ b/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/SelectQueryAstListener.java @@ -20,7 +20,7 @@ * 2. Extract the projection from the parse context (grammar: {@code (var_+ | '*')}) and call * {@link SparqlQueryAstBuilder#setProjectionAll()} or {@link SparqlQueryAstBuilder#setProjectionVariables(List)}. *

    - * The WHERE clause is built by {@link BgpFeature} (enter/exit GroupGraphPattern, TriplesBlock, addTriple). + * The WHERE clause is built by {@link BgpAstListener} (enter/exit GroupGraphPattern, TriplesBlock, addTriple). * At {@link SparqlAstBuilder#getResult()}, the builder produces a {@link fr.inria.corese.core.next.query.impl.sparql.ast.SelectQueryAst} * with both {@link fr.inria.corese.core.next.query.impl.sparql.ast.ProjectionAst} and the WHERE group. *

    @@ -30,11 +30,11 @@ * Top-level {@code query} may be {@code SELECT}, {@code ASK}, {@code CONSTRUCT}, or {@code DESCRIBE}. * Nested {@code subSelect} uses the same {@link SparqlAstBuilder} stack frames as a top-level {@code SELECT}. */ -public class SelectQueryFeature extends AbstractSparqlFeature implements QueryFeature { +public class SelectQueryAstListener extends AbstractSparqlAstListener implements QueryAstListener { private final VariableScopeAnalyzer variableScopeAnalyzer = new VariableScopeAnalyzer(); - public SelectQueryFeature(SparqlQueryAstBuilder builder) { + public SelectQueryAstListener(SparqlQueryAstBuilder builder) { super(builder); } diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/ServiceFeature.java b/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/ServiceAstListener.java similarity index 87% rename from src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/ServiceFeature.java rename to src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/ServiceAstListener.java index ad02433b0..15b89982f 100644 --- a/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/ServiceFeature.java +++ b/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/ServiceAstListener.java @@ -15,20 +15,20 @@ *

    On {@code enterServiceGraphPattern}, the endpoint IRI (or variable) and the * {@code SILENT} flag are captured and passed to * {@link SparqlAstBuilder#enterService(TermAst, boolean)}. - * The inner {@code groupGraphPattern} is handled by {@link BgpFeature} via the + * The inner {@code groupGraphPattern} is handled by {@link BgpAstListener} via the * shared {@link SparqlAstBuilder#enterGroup()} / {@link SparqlAstBuilder#exitGroup()} * mechanism. When that group is closed, the builder recognises it as the body of a * SERVICE clause and wraps it in a * {@link fr.inria.corese.core.next.query.impl.sparql.ast.ServiceAst}. */ -public class ServiceFeature extends AbstractSparqlFeature { +public class ServiceAstListener extends AbstractSparqlAstListener { /** - * Constructs a {@code ServiceFeature} bound to the given AST builder. + * Constructs a {@code ServiceAstListener} bound to the given AST builder. * * @param builder the {@link SparqlAstBuilder} that will receive SERVICE lifecycle events */ - public ServiceFeature(SparqlAstBuilder builder) { + public ServiceAstListener(SparqlAstBuilder builder) { super(builder); } diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/SolutionModifierFeature.java b/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/SolutionModifierAstListener.java similarity index 95% rename from src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/SolutionModifierFeature.java rename to src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/SolutionModifierAstListener.java index a25452ba3..a128dc1f6 100644 --- a/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/SolutionModifierFeature.java +++ b/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/SolutionModifierAstListener.java @@ -14,9 +14,9 @@ import java.util.Map; import java.util.Set; -public class SolutionModifierFeature extends AbstractSparqlQueryFeature { +public class SolutionModifierAstListener extends AbstractSparqlQueryAstListener { - public SolutionModifierFeature(SparqlAstBuilder builder) { + public SolutionModifierAstListener(SparqlAstBuilder builder) { super(builder); } diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/UnionFeature.java b/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/UnionAstListener.java similarity index 90% rename from src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/UnionFeature.java rename to src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/UnionAstListener.java index 02f6b1b55..00cc76ec4 100644 --- a/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/UnionFeature.java +++ b/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/UnionAstListener.java @@ -7,14 +7,14 @@ * SPARQL 1.0 parser feature that handles the {@code UNION} graph pattern. * */ -public class UnionFeature extends AbstractSparqlFeature { +public class UnionAstListener extends AbstractSparqlAstListener { /** - * Constructs a {@code UnionFeature} bound to the given AST builder. + * Constructs a {@code UnionAstListener} bound to the given AST builder. * * @param builder the {@link SparqlAstBuilder} that will receive UNION lifecycle events */ - public UnionFeature(SparqlAstBuilder builder) { + public UnionAstListener(SparqlAstBuilder builder) { super(builder); } @@ -55,4 +55,4 @@ public void exitGroupGraphPattern(SparqlParser.GroupGraphPatternContext ctx) { public void exitGroupOrUnionGraphPattern(SparqlParser.GroupOrUnionGraphPatternContext ctx) { builder().exitUnion(); } -} \ No newline at end of file +} diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/UpdateRequestFeature.java b/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/UpdateAstListener.java similarity index 82% rename from src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/UpdateRequestFeature.java rename to src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/UpdateAstListener.java index e3c2aba63..27c27e6ce 100644 --- a/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/UpdateRequestFeature.java +++ b/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/UpdateAstListener.java @@ -2,6 +2,6 @@ import fr.inria.corese.core.next.query.impl.parser.SparqlUpdateAstBuilder; -public interface UpdateRequestFeature { +public interface UpdateAstListener { SparqlUpdateAstBuilder updateBuilder(); } diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/ValuesFeature.java b/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/ValuesAstListener.java similarity index 97% rename from src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/ValuesFeature.java rename to src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/ValuesAstListener.java index e681c1fea..fd9128b94 100644 --- a/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/ValuesFeature.java +++ b/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/ValuesAstListener.java @@ -10,9 +10,9 @@ /** * Capture parsing of VALUES. VALUES can be declared both in the WHERE clause (through {@code inlineData}) and outside the query (through {@code valuesClause}). */ -public class ValuesFeature extends AbstractSparqlQueryFeature { +public class ValuesAstListener extends AbstractSparqlQueryAstListener { - public ValuesFeature(SparqlAstBuilder builder) { + public ValuesAstListener(SparqlAstBuilder builder) { super(builder); } diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/package-info.java b/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/package-info.java new file mode 100644 index 000000000..9b273fa0f --- /dev/null +++ b/src/main/java/fr/inria/corese/core/next/query/impl/parser/listener/package-info.java @@ -0,0 +1,8 @@ +/** + * ANTLR listeners that translate individual SPARQL grammar constructs into + * the internal AST builders. + * + *

    Listeners contain grammar-event handling only; orchestration belongs to + * the parser package.

    + */ +package fr.inria.corese.core.next.query.impl.parser.listener; diff --git a/src/main/java/fr/inria/corese/core/next/query/api/sparql/options/AbstractSparqlOptions.java b/src/main/java/fr/inria/corese/core/next/query/impl/parser/options/AbstractSparqlOptions.java similarity index 73% rename from src/main/java/fr/inria/corese/core/next/query/api/sparql/options/AbstractSparqlOptions.java rename to src/main/java/fr/inria/corese/core/next/query/impl/parser/options/AbstractSparqlOptions.java index 20d8e45c9..a948b6334 100644 --- a/src/main/java/fr/inria/corese/core/next/query/api/sparql/options/AbstractSparqlOptions.java +++ b/src/main/java/fr/inria/corese/core/next/query/impl/parser/options/AbstractSparqlOptions.java @@ -1,6 +1,6 @@ -package fr.inria.corese.core.next.query.api.sparql.options; +package fr.inria.corese.core.next.query.impl.parser.options; -import fr.inria.corese.core.next.query.api.io.parser.QueryOptions; +import fr.inria.corese.core.next.query.impl.parser.QueryOptions; /** * Abstract base for SPARQL options using Builder pattern. diff --git a/src/main/java/fr/inria/corese/core/next/query/api/sparql/options/BaseIRIOptions.java b/src/main/java/fr/inria/corese/core/next/query/impl/parser/options/BaseIRIOptions.java similarity index 50% rename from src/main/java/fr/inria/corese/core/next/query/api/sparql/options/BaseIRIOptions.java rename to src/main/java/fr/inria/corese/core/next/query/impl/parser/options/BaseIRIOptions.java index 75b2e2169..c50cef8b4 100644 --- a/src/main/java/fr/inria/corese/core/next/query/api/sparql/options/BaseIRIOptions.java +++ b/src/main/java/fr/inria/corese/core/next/query/impl/parser/options/BaseIRIOptions.java @@ -1,4 +1,4 @@ -package fr.inria.corese.core.next.query.api.sparql.options; +package fr.inria.corese.core.next.query.impl.parser.options; public interface BaseIRIOptions { String getBaseIRI(); diff --git a/src/main/java/fr/inria/corese/core/next/query/api/sparql/options/ErrorHandlingOptions.java b/src/main/java/fr/inria/corese/core/next/query/impl/parser/options/ErrorHandlingOptions.java similarity index 94% rename from src/main/java/fr/inria/corese/core/next/query/api/sparql/options/ErrorHandlingOptions.java rename to src/main/java/fr/inria/corese/core/next/query/impl/parser/options/ErrorHandlingOptions.java index 0674ea52e..ab6f0647f 100644 --- a/src/main/java/fr/inria/corese/core/next/query/api/sparql/options/ErrorHandlingOptions.java +++ b/src/main/java/fr/inria/corese/core/next/query/impl/parser/options/ErrorHandlingOptions.java @@ -1,4 +1,4 @@ -package fr.inria.corese.core.next.query.api.sparql.options; +package fr.inria.corese.core.next.query.impl.parser.options; import java.util.List; diff --git a/src/main/java/fr/inria/corese/core/next/query/api/sparql/options/SparqlAstError.java b/src/main/java/fr/inria/corese/core/next/query/impl/parser/options/SparqlAstError.java similarity index 97% rename from src/main/java/fr/inria/corese/core/next/query/api/sparql/options/SparqlAstError.java rename to src/main/java/fr/inria/corese/core/next/query/impl/parser/options/SparqlAstError.java index 7cec31c8e..255d5e060 100644 --- a/src/main/java/fr/inria/corese/core/next/query/api/sparql/options/SparqlAstError.java +++ b/src/main/java/fr/inria/corese/core/next/query/impl/parser/options/SparqlAstError.java @@ -1,4 +1,4 @@ -package fr.inria.corese.core.next.query.api.sparql.options; +package fr.inria.corese.core.next.query.impl.parser.options; import java.util.Objects; diff --git a/src/main/java/fr/inria/corese/core/next/query/api/sparql/options/StrictModeOptions.java b/src/main/java/fr/inria/corese/core/next/query/impl/parser/options/StrictModeOptions.java similarity index 69% rename from src/main/java/fr/inria/corese/core/next/query/api/sparql/options/StrictModeOptions.java rename to src/main/java/fr/inria/corese/core/next/query/impl/parser/options/StrictModeOptions.java index 146aeebf1..5e4f0fe3e 100644 --- a/src/main/java/fr/inria/corese/core/next/query/api/sparql/options/StrictModeOptions.java +++ b/src/main/java/fr/inria/corese/core/next/query/impl/parser/options/StrictModeOptions.java @@ -1,4 +1,4 @@ -package fr.inria.corese.core.next.query.api.sparql.options; +package fr.inria.corese.core.next.query.impl.parser.options; /** * How strict the parser should be with syntax / grammar quirks. @@ -7,4 +7,4 @@ public interface StrictModeOptions { boolean isStrictMode(); -} \ No newline at end of file +} diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/parser/options/package-info.java b/src/main/java/fr/inria/corese/core/next/query/impl/parser/options/package-info.java new file mode 100644 index 000000000..c2ba1a539 --- /dev/null +++ b/src/main/java/fr/inria/corese/core/next/query/impl/parser/options/package-info.java @@ -0,0 +1,2 @@ +/** Internal configuration facets used by the SPARQL parser and AST builder. */ +package fr.inria.corese.core.next.query.impl.parser.options; diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/parser/package-info.java b/src/main/java/fr/inria/corese/core/next/query/impl/parser/package-info.java new file mode 100644 index 000000000..f7935b803 --- /dev/null +++ b/src/main/java/fr/inria/corese/core/next/query/impl/parser/package-info.java @@ -0,0 +1,7 @@ +/** + * Internal SPARQL parsing, AST construction, and semantic validation. + * + *

    Types in this package may expose the internal AST for pipeline assembly, + * but they are not the public query-execution boundary.

    + */ +package fr.inria.corese.core.next.query.impl.parser; diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/result/package-info.java b/src/main/java/fr/inria/corese/core/next/query/impl/result/package-info.java new file mode 100644 index 000000000..bb864934f --- /dev/null +++ b/src/main/java/fr/inria/corese/core/next/query/impl/result/package-info.java @@ -0,0 +1,2 @@ +/** Corese implementations of the query result contracts. */ +package fr.inria.corese.core.next.query.impl.result; diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/package-info.java b/src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/package-info.java new file mode 100644 index 000000000..7b6414d2c --- /dev/null +++ b/src/main/java/fr/inria/corese/core/next/query/impl/sparql/ast/package-info.java @@ -0,0 +1,7 @@ +/** + * Internal, parser-oriented representation of SPARQL queries and updates. + * + *

    The model records parsed SPARQL structure; it neither executes queries nor + * defines the future public request API.

    + */ +package fr.inria.corese.core.next.query.impl.sparql.ast; diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/sparql/bridge/AstBackedExistTerm.java b/src/main/java/fr/inria/corese/core/next/query/impl/sparql/bridge/AstBackedExistTerm.java index e3de8528d..c50e0b9fb 100644 --- a/src/main/java/fr/inria/corese/core/next/query/impl/sparql/bridge/AstBackedExistTerm.java +++ b/src/main/java/fr/inria/corese/core/next/query/impl/sparql/bridge/AstBackedExistTerm.java @@ -32,8 +32,9 @@ Exp compiledPattern() { } /** - * The legacy {@code Term} reports an existence test through {@code getExist() != null}, but this - * bridge carries the pattern as a next-KGRAM {@link Exp} instead. Reporting it here keeps + * The established {@code Term} contract reports an existence test through + * {@code getExist() != null}, but this bridge carries the pattern as a next-KGRAM + * {@link Exp} instead. Reporting it here keeps * {@code isRecExist()} true, which the engine relies on to place FILTER EXISTS correctly * (QuerySorter, in-scope filters of OPTIONAL/MINUS). */ diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/sparql/bridge/package-info.java b/src/main/java/fr/inria/corese/core/next/query/impl/sparql/bridge/package-info.java new file mode 100644 index 000000000..b50175f43 --- /dev/null +++ b/src/main/java/fr/inria/corese/core/next/query/impl/sparql/bridge/package-info.java @@ -0,0 +1,7 @@ +/** + * Translation from the internal SPARQL AST to structures consumed by KGRAM. + * + *

    Dependencies on KGRAM and established Corese expression types belong at + * this boundary and must not leak back into the parser or AST.

    + */ +package fr.inria.corese.core.next.query.impl.sparql.bridge; diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/sparql/execution/NextSparqlPipelineExecutor.java b/src/main/java/fr/inria/corese/core/next/query/impl/sparql/execution/NextSparqlPipelineExecutor.java index 1358d2a35..3ae32a2c7 100644 --- a/src/main/java/fr/inria/corese/core/next/query/impl/sparql/execution/NextSparqlPipelineExecutor.java +++ b/src/main/java/fr/inria/corese/core/next/query/impl/sparql/execution/NextSparqlPipelineExecutor.java @@ -20,10 +20,9 @@ import java.util.Objects; /** - * Internal executor for the first autonomous Corese-next SPARQL query path. + * Internal orchestrator for the Corese-next SPARQL query path. * - *

    This class is intentionally small and transitional. It validates the - * autonomous execution path:

    + *

    It connects the current pipeline stages:

    * *
      * SPARQL string -> next parser -> next AST -> next KGRAM -> StorageManagerProducer -> StorageManager
    @@ -53,7 +52,7 @@ public NextSparqlPipelineExecutor(StorageManager storage) {
          * Creates an executor with explicit collaborators.
          *
          * 

    This constructor is package-private so tests can inject parser or bridge - * variants without exposing these transitional wiring details as public API.

    + * variants without exposing wiring details as public API.

    */ NextSparqlPipelineExecutor( StorageManager storage, @@ -65,7 +64,7 @@ public NextSparqlPipelineExecutor(StorageManager storage) { } /** - * Evaluates a SELECT query through the autonomous next pipeline. + * Evaluates a SELECT query through the next pipeline. * * @param sparql SPARQL query string to parse and evaluate * @return tuple result backed by the KGRAM mappings produced from next storage @@ -82,7 +81,7 @@ public TupleQueryResult evaluateTuple(String sparql) { } /** - * Evaluates an ASK query through the autonomous next pipeline. + * Evaluates an ASK query through the next pipeline. * * @param sparql SPARQL query string to parse and evaluate * @return {@code true} when at least one mapping matches the ASK pattern diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/sparql/execution/package-info.java b/src/main/java/fr/inria/corese/core/next/query/impl/sparql/execution/package-info.java new file mode 100644 index 000000000..811907626 --- /dev/null +++ b/src/main/java/fr/inria/corese/core/next/query/impl/sparql/execution/package-info.java @@ -0,0 +1,6 @@ +/** + * Internal orchestration of parsing, AST translation, and KGRAM evaluation. + * + *

    This package is pipeline wiring, not the final public SPARQL request API.

    + */ +package fr.inria.corese.core.next.query.impl.sparql.execution; diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/DefaultResultSerializerFactory.java b/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/DefaultResultSerializerFactory.java new file mode 100644 index 000000000..19749ccc8 --- /dev/null +++ b/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/DefaultResultSerializerFactory.java @@ -0,0 +1,78 @@ +package fr.inria.corese.core.next.query.impl.sparql.io.serializer; + +import fr.inria.corese.core.next.data.api.io.IOOptions; +import fr.inria.corese.core.next.query.api.io.ResultFormat; +import fr.inria.corese.core.next.query.api.io.serializer.BooleanResultSerializer; +import fr.inria.corese.core.next.query.api.io.serializer.ResultSerializerFactory; +import fr.inria.corese.core.next.query.api.io.serializer.ResultSerializer; +import fr.inria.corese.core.next.query.api.result.TupleQueryResult; +import fr.inria.corese.core.next.query.impl.sparql.io.serializer.common.BooleanStringSerializer; +import fr.inria.corese.core.next.query.impl.sparql.io.serializer.csv.CsvTupleResultSerializer; +import fr.inria.corese.core.next.query.impl.sparql.io.serializer.json.JsonBooleanResultSerializer; +import fr.inria.corese.core.next.query.impl.sparql.io.serializer.json.JsonTupleResultSerializer; +import fr.inria.corese.core.next.query.impl.sparql.io.serializer.tsv.TsvTupleResultSerializer; +import fr.inria.corese.core.next.query.impl.sparql.io.serializer.xml.XmlBooleanResultSerializer; +import fr.inria.corese.core.next.query.impl.sparql.io.serializer.xml.XmlTupleResultSerializer; + +/** + * Default factory for the SPARQL result serializers supplied by Corese. + */ +public final class DefaultResultSerializerFactory implements ResultSerializerFactory { + @Override + public ResultSerializer createTupleSerializer(ResultFormat format, TupleQueryResult results) { + if(format == ResultFormat.CSV) { + return new CsvTupleResultSerializer(results); + } else if(format == ResultFormat.TSV) { + return new TsvTupleResultSerializer(results); + } else if (format == ResultFormat.JSON) { + return new JsonTupleResultSerializer(results); + } else if(format == ResultFormat.XML) { + return new XmlTupleResultSerializer(results); + } + throw unsupported(format); + } + + @Override + public BooleanResultSerializer createBooleanSerializer(ResultFormat format, boolean results) { + if(format == ResultFormat.CSV + || format == ResultFormat.TSV) { + return new BooleanStringSerializer(results, format); + } else if (format == ResultFormat.JSON) { + return new JsonBooleanResultSerializer(results); + } else if(format == ResultFormat.XML) { + return new XmlBooleanResultSerializer(results); + } + throw unsupported(format); + } + + @Override + public ResultSerializer createTupleSerializer(ResultFormat format, TupleQueryResult results, IOOptions options) { + if(format == ResultFormat.CSV) { + return new CsvTupleResultSerializer(results, options); + } else if(format == ResultFormat.TSV) { + return new TsvTupleResultSerializer(results, options); + } else if (format == ResultFormat.JSON) { + return new JsonTupleResultSerializer(results, options); + } else if (format == ResultFormat.XML) { + return new XmlTupleResultSerializer(results, options); + } + throw unsupported(format); + } + + @Override + public BooleanResultSerializer createBooleanSerializer(ResultFormat format, boolean results, IOOptions options) { + if(format == ResultFormat.CSV + || format == ResultFormat.TSV) { + return new BooleanStringSerializer(results, format); + } else if (format == ResultFormat.JSON) { + return new JsonBooleanResultSerializer(results, options); + } else if (format == ResultFormat.XML) { + return new XmlBooleanResultSerializer(results, options); + } + throw unsupported(format); + } + + private static IllegalArgumentException unsupported(ResultFormat format) { + return new IllegalArgumentException("Unsupported SPARQL result format: " + format); + } +} diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/ResultSerializerFactory.java b/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/ResultSerializerFactory.java deleted file mode 100644 index f74b73b94..000000000 --- a/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/ResultSerializerFactory.java +++ /dev/null @@ -1,77 +0,0 @@ -package fr.inria.corese.core.next.query.impl.sparql.io.serializer; - -import fr.inria.corese.core.next.data.api.base.io.FileFormat; -import fr.inria.corese.core.next.data.api.io.IOOptions; -import fr.inria.corese.core.next.data.api.io.serializer.Serializer; -import fr.inria.corese.core.next.query.api.base.io.ResultFormat; -import fr.inria.corese.core.next.query.api.io.serializer.IResultSerializerFactory; -import fr.inria.corese.core.next.query.api.io.serializer.ResultSerializer; -import fr.inria.corese.core.next.query.api.result.TupleQueryResult; -import fr.inria.corese.core.next.query.impl.sparql.io.serializer.common.BooleanStringSerializer; -import fr.inria.corese.core.next.query.impl.sparql.io.serializer.csv.CSVSerializer; -import fr.inria.corese.core.next.query.impl.sparql.io.serializer.json.JSONBooleanSerializer; -import fr.inria.corese.core.next.query.impl.sparql.io.serializer.json.JSONSerializer; -import fr.inria.corese.core.next.query.impl.sparql.io.serializer.tsv.TSVSerializer; -import fr.inria.corese.core.next.query.impl.sparql.io.serializer.xml.XMLBooleanSerializer; -import fr.inria.corese.core.next.query.impl.sparql.io.serializer.xml.XMLSerializer; - -/** - * Factory class for SPARQL results serializers - */ -public class ResultSerializerFactory implements IResultSerializerFactory { - @Override - public ResultSerializer createSerializer(ResultFormat format, TupleQueryResult results) { - if(format == ResultFormat.CSV) { - return new CSVSerializer(results); - } else if(format == ResultFormat.TSV) { - return new TSVSerializer(results); - } else if (format == ResultFormat.JSON) { - return new JSONSerializer(results); - } else if(format == ResultFormat.XML) { - return new XMLSerializer(results); - } - return null; - } - - @Override - public Serializer createBooleanSerializer(ResultFormat format, boolean results) { - if(format == ResultFormat.CSV - || format == ResultFormat.TSV - || format == FileFormat.PLAIN_TEXT) { - return new BooleanStringSerializer(results); - } else if (format == ResultFormat.JSON) { - return new JSONBooleanSerializer(results); - } else if(format == ResultFormat.XML) { - return new XMLBooleanSerializer(results); - } - return null; - } - - @Override - public ResultSerializer createSerializer(ResultFormat format, TupleQueryResult results, IOOptions options) { - if(format == ResultFormat.CSV) { - return new CSVSerializer(results, options); - } else if(format == ResultFormat.TSV) { - return new TSVSerializer(results, options); - } else if (format == ResultFormat.JSON) { - return new JSONSerializer(results, options); - } else if (format == ResultFormat.XML) { - return new XMLSerializer(results, options); - } - return null; - } - - @Override - public Serializer createBooleanSerializer(ResultFormat format, boolean results, IOOptions options) { - if(format == ResultFormat.CSV - || format == ResultFormat.TSV - || format == FileFormat.PLAIN_TEXT) { - return new BooleanStringSerializer(results); - } else if (format == ResultFormat.JSON) { - return new JSONBooleanSerializer(results, options); - } else if (format == ResultFormat.XML) { - return new XMLBooleanSerializer(results, options); - } - return null; - } -} diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/common/BooleanStringSerializer.java b/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/common/BooleanStringSerializer.java index f12a30979..477330cbd 100644 --- a/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/common/BooleanStringSerializer.java +++ b/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/common/BooleanStringSerializer.java @@ -1,8 +1,7 @@ package fr.inria.corese.core.next.query.impl.sparql.io.serializer.common; -import fr.inria.corese.core.next.data.api.base.io.FileFormat; -import fr.inria.corese.core.next.data.api.io.IOOptions; import fr.inria.corese.core.next.data.impl.exception.SerializationException; +import fr.inria.corese.core.next.query.api.io.ResultFormat; import fr.inria.corese.core.next.query.api.io.serializer.BooleanResultSerializer; import java.io.IOException; @@ -14,13 +13,11 @@ public class BooleanStringSerializer implements BooleanResultSerializer { private final boolean result; + private final ResultFormat format; - public BooleanStringSerializer(boolean result) { - this.result = result; - } - - BooleanStringSerializer(boolean result, IOOptions options) { + public BooleanStringSerializer(boolean result, ResultFormat format) { this.result = result; + this.format = format; } @Override @@ -33,7 +30,7 @@ public void write(Writer writer) throws SerializationException { } @Override - public FileFormat getFormat() { - return FileFormat.PLAIN_TEXT; + public ResultFormat getFormat() { + return format; } } diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/csv/CSVSerializerOptions.java b/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/csv/CsvResultSerializerOptions.java similarity index 55% rename from src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/csv/CSVSerializerOptions.java rename to src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/csv/CsvResultSerializerOptions.java index 6174836de..0634f3cad 100644 --- a/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/csv/CSVSerializerOptions.java +++ b/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/csv/CsvResultSerializerOptions.java @@ -2,15 +2,15 @@ import fr.inria.corese.core.next.query.impl.sparql.io.serializer.common.CharacterSeparatedValuesSerializerOptions; -public class CSVSerializerOptions extends CharacterSeparatedValuesSerializerOptions { - protected CSVSerializerOptions(CSVSerializerOptions.Builder builder) { +public class CsvResultSerializerOptions extends CharacterSeparatedValuesSerializerOptions { + protected CsvResultSerializerOptions(CsvResultSerializerOptions.Builder builder) { super(builder); } public static class Builder extends CharacterSeparatedValuesSerializerOptions.AbstractBuilder { @Override - public CSVSerializerOptions build() { - return new CSVSerializerOptions(this); + public CsvResultSerializerOptions build() { + return new CsvResultSerializerOptions(this); } } } diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/csv/CSVSerializer.java b/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/csv/CsvTupleResultSerializer.java similarity index 83% rename from src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/csv/CSVSerializer.java rename to src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/csv/CsvTupleResultSerializer.java index 84e2d4e89..c02af5c10 100644 --- a/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/csv/CSVSerializer.java +++ b/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/csv/CsvTupleResultSerializer.java @@ -6,7 +6,7 @@ import fr.inria.corese.core.next.data.api.io.IOOptions; import fr.inria.corese.core.next.data.impl.io.common.IOConstants; import fr.inria.corese.core.next.data.impl.io.serialization.util.SerializationConstants; -import fr.inria.corese.core.next.query.api.base.io.ResultFormat; +import fr.inria.corese.core.next.query.api.io.ResultFormat; import fr.inria.corese.core.next.query.api.result.TupleQueryResult; import fr.inria.corese.core.next.query.impl.sparql.io.serializer.common.CharacterSeparatedValuesSerializer; @@ -14,14 +14,14 @@ * CSV serializer for the CSV format of SPARQL results. * @see CSV SPARQL result format recommendation */ -public class CSVSerializer extends CharacterSeparatedValuesSerializer { +public class CsvTupleResultSerializer extends CharacterSeparatedValuesSerializer { - public CSVSerializer(TupleQueryResult results, IOOptions options) { + public CsvTupleResultSerializer(TupleQueryResult results, IOOptions options) { super(SerializationConstants.COMMA, results, options); } - public CSVSerializer(TupleQueryResult results) { - this(results, new CSVSerializerOptions.Builder().build()); + public CsvTupleResultSerializer(TupleQueryResult results) { + this(results, new CsvResultSerializerOptions.Builder().build()); } @Override diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/json/JSONBooleanSerializer.java b/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/json/JsonBooleanResultSerializer.java similarity index 68% rename from src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/json/JSONBooleanSerializer.java rename to src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/json/JsonBooleanResultSerializer.java index e3386c6eb..724e369e7 100644 --- a/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/json/JSONBooleanSerializer.java +++ b/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/json/JsonBooleanResultSerializer.java @@ -3,7 +3,7 @@ import fr.inria.corese.core.next.data.api.base.io.FileFormat; import fr.inria.corese.core.next.data.api.io.IOOptions; import fr.inria.corese.core.next.data.impl.exception.SerializationException; -import fr.inria.corese.core.next.query.api.base.io.ResultFormat; +import fr.inria.corese.core.next.query.api.io.ResultFormat; import fr.inria.corese.core.next.query.api.io.serializer.BooleanResultSerializer; import fr.inria.corese.core.next.query.api.io.serializer.LinksOptions; import jakarta.json.Json; @@ -15,16 +15,16 @@ /** * Serializer class for boolean results (ASK results) for JSON */ -public class JSONBooleanSerializer implements BooleanResultSerializer { +public class JsonBooleanResultSerializer implements BooleanResultSerializer { private final boolean result; private final IOOptions config; - public JSONBooleanSerializer(boolean result) { - this(result, new JSONSerializerOptions.Builder().build()); + public JsonBooleanResultSerializer(boolean result) { + this(result, new JsonResultSerializerOptions.Builder().build()); } - public JSONBooleanSerializer(boolean result, IOOptions options) { + public JsonBooleanResultSerializer(boolean result, IOOptions options) { this.config = options; this.result = result; } @@ -35,11 +35,11 @@ public void write(Writer writer) throws SerializationException { if(this.config instanceof LinksOptions linksOptions && ! linksOptions.links().isEmpty() ) { JsonObjectBuilder headerBuilder = Json.createObjectBuilder(); - headerBuilder.add(JSONSerializerConstants.LINK, Json.createArrayBuilder(linksOptions.links())); - resultBuilder.add(JSONSerializerConstants.HEAD, headerBuilder.build()); + headerBuilder.add(JsonResultConstants.LINK, Json.createArrayBuilder(linksOptions.links())); + resultBuilder.add(JsonResultConstants.HEAD, headerBuilder.build()); } - resultBuilder.add(JSONSerializerConstants.BOOLEAN, String.valueOf(this.result)); + resultBuilder.add(JsonResultConstants.BOOLEAN, this.result); JsonWriter jsonWriter = Json.createWriter(writer); jsonWriter.writeObject( resultBuilder.build()); diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/json/JSONSerializerConstants.java b/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/json/JsonResultConstants.java similarity index 91% rename from src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/json/JSONSerializerConstants.java rename to src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/json/JsonResultConstants.java index f2691169b..9a7f336d1 100644 --- a/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/json/JSONSerializerConstants.java +++ b/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/json/JsonResultConstants.java @@ -3,12 +3,12 @@ /** * Constants used in the serialization of SPARQL results to JSON */ -public class JSONSerializerConstants { +final class JsonResultConstants { /** * Forbids instantiation */ - private JSONSerializerConstants() {} + private JsonResultConstants() {} public static final String HEAD = "head"; public static final String VARS = "vars"; diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/json/JSONSerializerOptions.java b/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/json/JsonResultSerializerOptions.java similarity index 76% rename from src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/json/JSONSerializerOptions.java rename to src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/json/JsonResultSerializerOptions.java index f2e1efe5a..778113329 100644 --- a/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/json/JSONSerializerOptions.java +++ b/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/json/JsonResultSerializerOptions.java @@ -9,10 +9,10 @@ /** * Options to configure the SPARQL results JSON serializer */ -public class JSONSerializerOptions extends AbstractIOOptions implements LinksOptions { - private final JSONSerializerOptions.Builder builder; +public class JsonResultSerializerOptions extends AbstractIOOptions implements LinksOptions { + private final JsonResultSerializerOptions.Builder builder; - protected JSONSerializerOptions(JSONSerializerOptions.Builder builder) { + protected JsonResultSerializerOptions(JsonResultSerializerOptions.Builder builder) { this.builder = builder; } @@ -21,7 +21,7 @@ public Collection links() { return this.builder.links; } - public static class Builder extends AbstractIOOptions.Builder { + public static class Builder extends AbstractIOOptions.Builder { private final Collection links; public Builder() { @@ -29,8 +29,8 @@ public Builder() { } @Override - public JSONSerializerOptions build() { - return new JSONSerializerOptions(this); + public JsonResultSerializerOptions build() { + return new JsonResultSerializerOptions(this); } /** diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/json/JSONSerializer.java b/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/json/JsonTupleResultSerializer.java similarity index 68% rename from src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/json/JSONSerializer.java rename to src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/json/JsonTupleResultSerializer.java index 01e16e9ef..0af427a18 100644 --- a/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/json/JSONSerializer.java +++ b/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/json/JsonTupleResultSerializer.java @@ -9,7 +9,7 @@ import fr.inria.corese.core.next.data.impl.common.literal.RDF; import fr.inria.corese.core.next.data.impl.common.literal.XSD; import fr.inria.corese.core.next.data.impl.exception.SerializationException; -import fr.inria.corese.core.next.query.api.base.io.ResultFormat; +import fr.inria.corese.core.next.query.api.io.ResultFormat; import fr.inria.corese.core.next.query.api.io.serializer.LinksOptions; import fr.inria.corese.core.next.query.api.io.serializer.ResultSerializer; import fr.inria.corese.core.next.query.api.result.BindingSet; @@ -21,18 +21,18 @@ /** * Serializer for SPARQL results in JSON as described in the W3C recommendation */ -public class JSONSerializer implements ResultSerializer { +public class JsonTupleResultSerializer implements ResultSerializer { private final TupleQueryResult results; private final IOOptions config; - public JSONSerializer(TupleQueryResult results, IOOptions options) { + public JsonTupleResultSerializer(TupleQueryResult results, IOOptions options) { this.config = options; this.results = results; } - public JSONSerializer(TupleQueryResult results) { - this(results, new JSONSerializerOptions.Builder().build()); + public JsonTupleResultSerializer(TupleQueryResult results) { + this(results, new JsonResultSerializerOptions.Builder().build()); } @Override @@ -41,15 +41,15 @@ public void write(Writer writer) throws SerializationException { // header JsonObjectBuilder headerbuilder = Json.createObjectBuilder() - .add(JSONSerializerConstants.VARS, Json.createArrayBuilder(this.results.getBindingNames())); + .add(JsonResultConstants.VARS, Json.createArrayBuilder(this.results.getBindingNames())); if(this.config instanceof LinksOptions linksOptions && ! linksOptions.links().isEmpty() ) { - headerbuilder.add(JSONSerializerConstants.LINK, Json.createArrayBuilder(linksOptions.links())); + headerbuilder.add(JsonResultConstants.LINK, Json.createArrayBuilder(linksOptions.links())); } - resultBuilder.add(JSONSerializerConstants.HEAD, headerbuilder.build()); + resultBuilder.add(JsonResultConstants.HEAD, headerbuilder.build()); // Result bindings - resultBuilder.add(JSONSerializerConstants.RESULTS, Json.createObjectBuilder() - .add(JSONSerializerConstants.BINDINGS, Json.createArrayBuilder(this.results.stream().map(this::bindingSetToJson).toList())) + resultBuilder.add(JsonResultConstants.RESULTS, Json.createObjectBuilder() + .add(JsonResultConstants.BINDINGS, Json.createArrayBuilder(this.results.stream().map(this::bindingSetToJson).toList())) ); JsonWriter jsonWriter = Json.createWriter(writer); @@ -77,13 +77,13 @@ private JsonObject bindingSetToJson(BindingSet bindings) { private JsonObject valueToJson(Value value) { if(value instanceof IRI iriValue) { return Json.createObjectBuilder() - .add(JSONSerializerConstants.TYPE, JSONSerializerConstants.URI) - .add(JSONSerializerConstants.VALUE, iriValue.stringValue()) + .add(JsonResultConstants.TYPE, JsonResultConstants.URI) + .add(JsonResultConstants.VALUE, iriValue.stringValue()) .build(); } else if (value instanceof BNode bnodeValue) { return Json.createObjectBuilder() - .add(JSONSerializerConstants.TYPE, JSONSerializerConstants.BNODE) - .add(JSONSerializerConstants.VALUE, bnodeValue.getID()) + .add(JsonResultConstants.TYPE, JsonResultConstants.BNODE) + .add(JsonResultConstants.VALUE, bnodeValue.getID()) .build(); } else if (value instanceof Literal literalValue) { JsonObjectBuilder literalBuilder = Json.createObjectBuilder(); @@ -91,13 +91,13 @@ private JsonObject valueToJson(Value value) { && literalValue.getDatatype() != null && literalValue.getDatatype() != XSD.STRING.getIRI() && literalValue.getDatatype() != RDF.LANGSTRING.getIRI()){ - literalBuilder.add(JSONSerializerConstants.DATATYPE, literalValue.getDatatype().stringValue()); + literalBuilder.add(JsonResultConstants.DATATYPE, literalValue.getDatatype().stringValue()); } String literalStringValue = literalValue.stringValue(); - literalBuilder.add(JSONSerializerConstants.TYPE, JSONSerializerConstants.LITERAL) - .add(JSONSerializerConstants.VALUE, literalStringValue); + literalBuilder.add(JsonResultConstants.TYPE, JsonResultConstants.LITERAL) + .add(JsonResultConstants.VALUE, literalStringValue); if(literalValue.getLanguage().isPresent()) { - literalBuilder.add(JSONSerializerConstants.LANG, literalValue.getLanguage().get()); + literalBuilder.add(JsonResultConstants.LANG, literalValue.getLanguage().get()); } return literalBuilder.build(); } diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/tsv/TSVSerializerOptions.java b/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/tsv/TSVSerializerOptions.java deleted file mode 100644 index 5b9bd17eb..000000000 --- a/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/tsv/TSVSerializerOptions.java +++ /dev/null @@ -1,16 +0,0 @@ -package fr.inria.corese.core.next.query.impl.sparql.io.serializer.tsv; - -import fr.inria.corese.core.next.query.impl.sparql.io.serializer.common.CharacterSeparatedValuesSerializerOptions; - -public class TSVSerializerOptions extends CharacterSeparatedValuesSerializerOptions { - protected TSVSerializerOptions(TSVSerializerOptions.Builder builder) { - super(builder); - } - - public static class Builder extends CharacterSeparatedValuesSerializerOptions.AbstractBuilder { - @Override - public TSVSerializerOptions build() { - return new TSVSerializerOptions(this); - } - } -} diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/tsv/TsvResultSerializerOptions.java b/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/tsv/TsvResultSerializerOptions.java new file mode 100644 index 000000000..bc223c8ee --- /dev/null +++ b/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/tsv/TsvResultSerializerOptions.java @@ -0,0 +1,16 @@ +package fr.inria.corese.core.next.query.impl.sparql.io.serializer.tsv; + +import fr.inria.corese.core.next.query.impl.sparql.io.serializer.common.CharacterSeparatedValuesSerializerOptions; + +public class TsvResultSerializerOptions extends CharacterSeparatedValuesSerializerOptions { + protected TsvResultSerializerOptions(TsvResultSerializerOptions.Builder builder) { + super(builder); + } + + public static class Builder extends CharacterSeparatedValuesSerializerOptions.AbstractBuilder { + @Override + public TsvResultSerializerOptions build() { + return new TsvResultSerializerOptions(this); + } + } +} diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/tsv/TSVSerializer.java b/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/tsv/TsvTupleResultSerializer.java similarity index 91% rename from src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/tsv/TSVSerializer.java rename to src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/tsv/TsvTupleResultSerializer.java index 456ad75cd..f239c091f 100644 --- a/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/tsv/TSVSerializer.java +++ b/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/tsv/TsvTupleResultSerializer.java @@ -9,7 +9,7 @@ import fr.inria.corese.core.next.data.impl.common.literal.RDF; import fr.inria.corese.core.next.data.impl.common.literal.XSD; import fr.inria.corese.core.next.data.impl.io.serialization.util.SerializationConstants; -import fr.inria.corese.core.next.query.api.base.io.ResultFormat; +import fr.inria.corese.core.next.query.api.io.ResultFormat; import fr.inria.corese.core.next.query.api.result.TupleQueryResult; import fr.inria.corese.core.next.query.impl.sparql.io.serializer.common.CharacterSeparatedValuesSerializer; @@ -19,14 +19,14 @@ * TSV serializer for the CSV format of SPARQL results. * @see TSV SPARQL result format recommendation */ -public class TSVSerializer extends CharacterSeparatedValuesSerializer { +public class TsvTupleResultSerializer extends CharacterSeparatedValuesSerializer { - public TSVSerializer(TupleQueryResult results, IOOptions options) { + public TsvTupleResultSerializer(TupleQueryResult results, IOOptions options) { super(SerializationConstants.TAB, results, options); } - public TSVSerializer(TupleQueryResult results) { - this(results, new TSVSerializerOptions.Builder().build()); + public TsvTupleResultSerializer(TupleQueryResult results) { + this(results, new TsvResultSerializerOptions.Builder().build()); } @Override diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/xml/XMLBooleanSerializer.java b/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/xml/XmlBooleanResultSerializer.java similarity index 78% rename from src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/xml/XMLBooleanSerializer.java rename to src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/xml/XmlBooleanResultSerializer.java index 5887a5ffc..0a08e97c3 100644 --- a/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/xml/XMLBooleanSerializer.java +++ b/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/xml/XmlBooleanResultSerializer.java @@ -3,7 +3,7 @@ import fr.inria.corese.core.next.data.api.base.io.FileFormat; import fr.inria.corese.core.next.data.api.io.IOOptions; import fr.inria.corese.core.next.data.impl.exception.SerializationException; -import fr.inria.corese.core.next.query.api.base.io.ResultFormat; +import fr.inria.corese.core.next.query.api.io.ResultFormat; import fr.inria.corese.core.next.query.api.io.serializer.BooleanResultSerializer; import fr.inria.corese.core.next.query.api.io.serializer.LinksOptions; import org.w3c.dom.Document; @@ -19,17 +19,17 @@ /** * Serializer class for boolean results (ASK results) for XML */ -public class XMLBooleanSerializer implements BooleanResultSerializer { +public class XmlBooleanResultSerializer implements BooleanResultSerializer { private final DocumentBuilderFactory xmlDocumentBuilder = DocumentBuilderFactory.newDefaultInstance(); private final boolean result; private final IOOptions options; - public XMLBooleanSerializer(boolean result) { - this(result, new XMLSerializerOptions.Builder().build()); + public XmlBooleanResultSerializer(boolean result) { + this(result, new XmlResultSerializerOptions.Builder().build()); } - public XMLBooleanSerializer(boolean result, IOOptions options) { + public XmlBooleanResultSerializer(boolean result, IOOptions options) { this.result = result; this.options = options; } @@ -38,15 +38,15 @@ public XMLBooleanSerializer(boolean result, IOOptions options) { public void write(Writer writer) throws SerializationException { try { Document resultDocument = this.xmlDocumentBuilder.newDocumentBuilder().newDocument(); - Element root = resultDocument.createElementNS(XMLSerializerConstants.SPARQL_RESULT_NS, XMLSerializerConstants.SPARQL_QNAME); - Element results = resultDocument.createElement(XMLSerializerConstants.BOOLEAN_QNAME); + Element root = resultDocument.createElementNS(XmlResultConstants.SPARQL_RESULT_NS, XmlResultConstants.SPARQL_QNAME); + Element results = resultDocument.createElement(XmlResultConstants.BOOLEAN_QNAME); // Head if(this.options instanceof LinksOptions linksOptions && ! linksOptions.links().isEmpty()) { - Element head = resultDocument.createElement(XMLSerializerConstants.HEAD_QNAME); + Element head = resultDocument.createElement(XmlResultConstants.HEAD_QNAME); linksOptions.links().forEach(link -> { - Element linkElement = resultDocument.createElement(XMLSerializerConstants.LINK_QNAME); - linkElement.setAttribute(XMLSerializerConstants.HREF_ATTR, link); + Element linkElement = resultDocument.createElement(XmlResultConstants.LINK_QNAME); + linkElement.setAttribute(XmlResultConstants.HREF_ATTR, link); head.appendChild(linkElement); }); root.appendChild(head); @@ -60,7 +60,7 @@ public void write(Writer writer) throws SerializationException { TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); - if(this.options instanceof XMLSerializerOptions xmlSerializerOptions) { + if(this.options instanceof XmlResultSerializerOptions xmlSerializerOptions) { xmlSerializerOptions.getXmlSettings().forEach((key, value) -> { transformer.setOutputProperty(key, value); if(key.equals(OutputKeys.STANDALONE)) { // Fix for Standalone property being ignored diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/xml/XMLSerializerConstants.java b/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/xml/XmlResultConstants.java similarity index 95% rename from src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/xml/XMLSerializerConstants.java rename to src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/xml/XmlResultConstants.java index 4c3461d9f..8ff33e769 100644 --- a/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/xml/XMLSerializerConstants.java +++ b/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/xml/XmlResultConstants.java @@ -1,11 +1,11 @@ package fr.inria.corese.core.next.query.impl.sparql.io.serializer.xml; -public class XMLSerializerConstants { +final class XmlResultConstants { /** * Forbids instantiation */ - private XMLSerializerConstants() {} + private XmlResultConstants() {} public static final String SPARQL_RESULT_NS = "http://www.w3.org/2005/sparql-results#"; public static final String XSI_NS = "http://www.w3.org/2001/XMLSchema-instance"; diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/xml/XMLSerializerOptions.java b/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/xml/XmlResultSerializerOptions.java similarity index 74% rename from src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/xml/XMLSerializerOptions.java rename to src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/xml/XmlResultSerializerOptions.java index ca1a41cf1..89da119a3 100644 --- a/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/xml/XMLSerializerOptions.java +++ b/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/xml/XmlResultSerializerOptions.java @@ -9,10 +9,10 @@ import java.util.HashMap; import java.util.Map; -public class XMLSerializerOptions extends AbstractIOOptions implements LinksOptions { - private final XMLSerializerOptions.Builder builder; +public class XmlResultSerializerOptions extends AbstractIOOptions implements LinksOptions { + private final XmlResultSerializerOptions.Builder builder; - protected XMLSerializerOptions(XMLSerializerOptions.Builder builder) { + protected XmlResultSerializerOptions(XmlResultSerializerOptions.Builder builder) { this.builder = builder; } @@ -25,13 +25,13 @@ public Collection links() { return this.builder.links; } - public static class Builder extends AbstractIOOptions.Builder { + public static class Builder extends AbstractIOOptions.Builder { private final Map xmlSettings; private final Collection links; public Builder() { this.xmlSettings = new HashMap<>(); - this.xmlSettings.put(OutputKeys.STANDALONE, XMLSerializerConstants.YES_PROPERTY_VALUE); + this.xmlSettings.put(OutputKeys.STANDALONE, XmlResultConstants.YES_PROPERTY_VALUE); this.links = new ArrayList<>(); } @@ -51,7 +51,7 @@ public Builder setXMLSetting(String key, String value) { * @param link preferably a URI * @return this */ - public XMLSerializerOptions.Builder addLink(String link) { + public XmlResultSerializerOptions.Builder addLink(String link) { this.links.add(link); return this; } @@ -61,14 +61,14 @@ public XMLSerializerOptions.Builder addLink(String link) { * @param links preferably a set of URIs * @return this */ - public XMLSerializerOptions.Builder addLinks(Collection links) { + public XmlResultSerializerOptions.Builder addLinks(Collection links) { this.links.addAll(links); return this; } @Override - public XMLSerializerOptions build() { - return new XMLSerializerOptions(this); + public XmlResultSerializerOptions build() { + return new XmlResultSerializerOptions(this); } } } diff --git a/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/xml/XMLSerializer.java b/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/xml/XmlTupleResultSerializer.java similarity index 76% rename from src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/xml/XMLSerializer.java rename to src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/xml/XmlTupleResultSerializer.java index 9fda529b0..980776d0f 100644 --- a/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/xml/XMLSerializer.java +++ b/src/main/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/xml/XmlTupleResultSerializer.java @@ -9,7 +9,7 @@ import fr.inria.corese.core.next.data.impl.common.literal.RDF; import fr.inria.corese.core.next.data.impl.common.literal.XSD; import fr.inria.corese.core.next.data.impl.exception.SerializationException; -import fr.inria.corese.core.next.query.api.base.io.ResultFormat; +import fr.inria.corese.core.next.query.api.io.ResultFormat; import fr.inria.corese.core.next.query.api.io.serializer.LinksOptions; import fr.inria.corese.core.next.query.api.io.serializer.ResultSerializer; import fr.inria.corese.core.next.query.api.result.Binding; @@ -29,17 +29,17 @@ /** * Serializer for SPARQL results in XML as described in the W3C recommendation */ -public class XMLSerializer implements ResultSerializer { +public class XmlTupleResultSerializer implements ResultSerializer { private final DocumentBuilderFactory xmlDocumentBuilder = DocumentBuilderFactory.newDefaultInstance(); private final TupleQueryResult results; private final IOOptions options; - public XMLSerializer(TupleQueryResult results) { - this(results, new XMLSerializerOptions.Builder().build()); + public XmlTupleResultSerializer(TupleQueryResult results) { + this(results, new XmlResultSerializerOptions.Builder().build()); } - public XMLSerializer(TupleQueryResult results, IOOptions options) { + public XmlTupleResultSerializer(TupleQueryResult results, IOOptions options) { this.results = results; this.options = options; xmlDocumentBuilder.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "no"); @@ -49,20 +49,20 @@ public XMLSerializer(TupleQueryResult results, IOOptions options) { public void write(Writer writer) throws SerializationException { try { Document resultDocument = this.xmlDocumentBuilder.newDocumentBuilder().newDocument(); - Element root = resultDocument.createElementNS(XMLSerializerConstants.SPARQL_RESULT_NS, XMLSerializerConstants.SPARQL_QNAME); - Element head = resultDocument.createElement(XMLSerializerConstants.HEAD_QNAME); - Element resultsElement = resultDocument.createElement(XMLSerializerConstants.RESULTS_QNAME); + Element root = resultDocument.createElementNS(XmlResultConstants.SPARQL_RESULT_NS, XmlResultConstants.SPARQL_QNAME); + Element head = resultDocument.createElement(XmlResultConstants.HEAD_QNAME); + Element resultsElement = resultDocument.createElement(XmlResultConstants.RESULTS_QNAME); // Head this.results.getBindingNames().forEach(bindingName -> { - Element variableElement = resultDocument.createElement(XMLSerializerConstants.VARIABLE_QNAME); - variableElement.setAttribute(XMLSerializerConstants.NAME_ATTR, bindingName); + Element variableElement = resultDocument.createElement(XmlResultConstants.VARIABLE_QNAME); + variableElement.setAttribute(XmlResultConstants.NAME_ATTR, bindingName); head.appendChild(variableElement); }); if(this.options instanceof LinksOptions linksOptions && ! linksOptions.links().isEmpty()) { linksOptions.links().forEach(link -> { - Element linkElement = resultDocument.createElement(XMLSerializerConstants.LINK_QNAME); - linkElement.setAttribute(XMLSerializerConstants.HREF_ATTR, link); + Element linkElement = resultDocument.createElement(XmlResultConstants.LINK_QNAME); + linkElement.setAttribute(XmlResultConstants.HREF_ATTR, link); head.appendChild(linkElement); }); } @@ -78,7 +78,7 @@ public void write(Writer writer) throws SerializationException { TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); - if(this.options instanceof XMLSerializerOptions xmlSerializerOptions) { + if(this.options instanceof XmlResultSerializerOptions xmlSerializerOptions) { xmlSerializerOptions.getXmlSettings().forEach((key, value) -> { transformer.setOutputProperty(key, value); if(key.equals(OutputKeys.STANDALONE)) { // Fix for Standalone property being ignored @@ -105,7 +105,7 @@ public FileFormat getFormat() { } private Element bindingSetToXML(BindingSet bindings, Document document) { - Element bindingSetElement = document.createElement(XMLSerializerConstants.RESULT_QNAME); + Element bindingSetElement = document.createElement(XmlResultConstants.RESULT_QNAME); bindings.forEach(binding -> bindingSetElement.appendChild(bindingToXML(binding, document))); @@ -113,8 +113,8 @@ private Element bindingSetToXML(BindingSet bindings, Document document) { } private Element bindingToXML(Binding binding, Document document) { - Element bindingElement = document.createElement(XMLSerializerConstants.BINDING_QNAME); - bindingElement.setAttribute(XMLSerializerConstants.NAME_ATTR, binding.name()); + Element bindingElement = document.createElement(XmlResultConstants.BINDING_QNAME); + bindingElement.setAttribute(XmlResultConstants.NAME_ATTR, binding.name()); bindingElement.appendChild(valueToXML(binding.value(), document)); return bindingElement; } @@ -123,23 +123,23 @@ private Element valueToXML(Value value, Document document) { Element valueElement; switch (value) { case IRI iriValue -> { - valueElement = document.createElement(XMLSerializerConstants.URI_QNAME); + valueElement = document.createElement(XmlResultConstants.URI_QNAME); valueElement.setTextContent(iriValue.stringValue()); } case BNode bnodeValue -> { - valueElement = document.createElement(XMLSerializerConstants.BNODE_QNAME); + valueElement = document.createElement(XmlResultConstants.BNODE_QNAME); valueElement.setTextContent(bnodeValue.getID()); } case Literal literalValue -> { - valueElement = document.createElement(XMLSerializerConstants.LITERAL_QNAME); + valueElement = document.createElement(XmlResultConstants.LITERAL_QNAME); if (literalValue.getLanguage().isEmpty() && literalValue.getDatatype() != null && literalValue.getDatatype() != XSD.STRING.getIRI() && literalValue.getDatatype() != RDF.LANGSTRING.getIRI()) { - valueElement.setAttribute(XMLSerializerConstants.DATATYPE_ATTR, literalValue.getDatatype().stringValue()); + valueElement.setAttribute(XmlResultConstants.DATATYPE_ATTR, literalValue.getDatatype().stringValue()); } if (literalValue.getLanguage().isPresent()) { - valueElement.setAttribute(XMLSerializerConstants.LANG_ATTR, literalValue.getLanguage().get()); + valueElement.setAttribute(XmlResultConstants.LANG_ATTR, literalValue.getLanguage().get()); } valueElement.setTextContent(literalValue.stringValue()); } diff --git a/src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlListenerTest.java b/src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlListenerDispatcherTest.java similarity index 80% rename from src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlListenerTest.java rename to src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlListenerDispatcherTest.java index f7dad31e5..2b0ade78e 100644 --- a/src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlListenerTest.java +++ b/src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlListenerDispatcherTest.java @@ -1,9 +1,9 @@ package fr.inria.corese.core.next.query.impl.parser; import fr.inria.corese.core.next.impl.parser.antlr.SparqlLexer; -import fr.inria.corese.core.next.query.impl.parser.listener.SelectQueryFeature; +import fr.inria.corese.core.next.query.impl.parser.listener.SelectQueryAstListener; import fr.inria.corese.core.next.query.impl.sparql.ast.*; -import fr.inria.corese.core.next.query.impl.parser.listener.BgpFeature; +import fr.inria.corese.core.next.query.impl.parser.listener.BgpAstListener; import org.antlr.v4.runtime.CharStreams; import org.antlr.v4.runtime.CommonTokenStream; import org.antlr.v4.runtime.tree.ParseTreeWalker; @@ -16,13 +16,13 @@ import static org.junit.jupiter.api.Assertions.*; /** - * Unit tests for {@link SparqlListener} (multiplexer and delegate forwarding). + * Unit tests for {@link SparqlListenerDispatcher} (multiplexer and delegate forwarding). */ -class SparqlListenerTest { +class SparqlListenerDispatcherTest { @Test void constructorWithNullDelegatesIsEmpty() { - SparqlListener listener = new SparqlListener(null); + SparqlListenerDispatcher listener = new SparqlListenerDispatcher(null); // Walk must not throw when delegates is empty fr.inria.corese.core.next.impl.parser.antlr.SparqlParser p = createAntlrParser("SELECT * WHERE { ?s ?p ?o }"); assertDoesNotThrow(() -> new ParseTreeWalker().walk(listener, p.query())); @@ -30,17 +30,17 @@ void constructorWithNullDelegatesIsEmpty() { @Test void constructorWithEmptyListDelegatesIsEmpty() { - SparqlListener listener = new SparqlListener(Collections.emptyList()); + SparqlListenerDispatcher listener = new SparqlListenerDispatcher(Collections.emptyList()); fr.inria.corese.core.next.impl.parser.antlr.SparqlParser p = createAntlrParser("SELECT * WHERE { }"); assertDoesNotThrow(() -> new ParseTreeWalker().walk(listener, p.query())); } @Test void constructorWithDelegatesCopiesList() { - BgpFeature feature = new BgpFeature( + BgpAstListener feature = new BgpAstListener( new SparqlQueryAstBuilder(new SparqlParserOptions.Builder().build())); - List mutable = new java.util.ArrayList<>(List.of(feature)); - SparqlListener listener = new SparqlListener(mutable); + List mutable = new java.util.ArrayList<>(List.of(feature)); + SparqlListenerDispatcher listener = new SparqlListenerDispatcher(mutable); mutable.clear(); // Listener should still have one delegate (defensive copy) fr.inria.corese.core.next.impl.parser.antlr.SparqlParser antlrParser = createAntlrParser("SELECT * WHERE { ?s ?p ?o }"); @@ -54,7 +54,7 @@ void constructorWithDelegatesCopiesList() { void withSingleBgpDelegateWalkProducesAst() { SparqlParserOptions opts = new SparqlParserOptions.Builder().build(); SparqlQueryAstBuilder builder = new SparqlQueryAstBuilder(opts); - SparqlListener listener = new SparqlListener(List.of(new BgpFeature(builder), new SelectQueryFeature(builder))); + SparqlListenerDispatcher listener = new SparqlListenerDispatcher(List.of(new BgpAstListener(builder), new SelectQueryAstListener(builder))); fr.inria.corese.core.next.impl.parser.antlr.SparqlParser antlrParser = createAntlrParser("SELECT * WHERE { ?s ?p ?o }"); new ParseTreeWalker().walk(listener, antlrParser.query()); diff --git a/src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlParserClearQueryTest.java b/src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlParserClearQueryTest.java index 85504d1ac..b8dc91ff7 100644 --- a/src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlParserClearQueryTest.java +++ b/src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlParserClearQueryTest.java @@ -1,7 +1,7 @@ package fr.inria.corese.core.next.query.impl.parser; import fr.inria.corese.core.next.query.api.exception.QuerySyntaxException; -import fr.inria.corese.core.next.query.api.io.parser.QueryParser; +import fr.inria.corese.core.next.query.impl.parser.QueryParser; import fr.inria.corese.core.next.query.impl.sparql.ast.ClearRequestAst; import fr.inria.corese.core.next.query.impl.sparql.ast.IriAst; import fr.inria.corese.core.next.query.impl.sparql.ast.QueryAst; diff --git a/src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlParserCreateQueryTest.java b/src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlParserCreateQueryTest.java index b98e17470..89c5dadcd 100644 --- a/src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlParserCreateQueryTest.java +++ b/src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlParserCreateQueryTest.java @@ -1,7 +1,7 @@ package fr.inria.corese.core.next.query.impl.parser; import fr.inria.corese.core.next.query.api.exception.QuerySyntaxException; -import fr.inria.corese.core.next.query.api.io.parser.QueryParser; +import fr.inria.corese.core.next.query.impl.parser.QueryParser; import fr.inria.corese.core.next.query.impl.sparql.ast.CreateRequestAst; import fr.inria.corese.core.next.query.impl.sparql.ast.IriAst; import fr.inria.corese.core.next.query.impl.sparql.ast.QueryAst; diff --git a/src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlParserLoadQueryTest.java b/src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlParserLoadQueryTest.java index ac256f45a..e0745f84e 100644 --- a/src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlParserLoadQueryTest.java +++ b/src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlParserLoadQueryTest.java @@ -1,7 +1,7 @@ package fr.inria.corese.core.next.query.impl.parser; import fr.inria.corese.core.next.query.api.exception.QuerySyntaxException; -import fr.inria.corese.core.next.query.api.io.parser.QueryParser; +import fr.inria.corese.core.next.query.impl.parser.QueryParser; import fr.inria.corese.core.next.query.impl.sparql.ast.IriAst; import fr.inria.corese.core.next.query.impl.sparql.ast.LoadRequestAst; import fr.inria.corese.core.next.query.impl.sparql.ast.QueryAst; diff --git a/src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlParserOptionsTest.java b/src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlParserOptionsTest.java index 263835d73..05b31621d 100644 --- a/src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlParserOptionsTest.java +++ b/src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlParserOptionsTest.java @@ -1,6 +1,6 @@ package fr.inria.corese.core.next.query.impl.parser; -import fr.inria.corese.core.next.query.api.sparql.options.SparqlAstError; +import fr.inria.corese.core.next.query.impl.parser.options.SparqlAstError; import org.junit.jupiter.api.Test; import java.util.List; diff --git a/src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlParserServiceTest.java b/src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlParserServiceTest.java index bee38b6cd..64c9c8932 100644 --- a/src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlParserServiceTest.java +++ b/src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlParserServiceTest.java @@ -10,7 +10,7 @@ /** * Integration tests for SPARQL {@code SERVICE} graph pattern parsing. * - *

    Exercises the full pipeline: ANTLR grammar → {@code SparqlListener} → {@code ServiceFeature} + *

    Exercises the full pipeline: ANTLR grammar → {@code SparqlListenerDispatcher} → {@code ServiceAstListener} * → {@code SparqlAstBuilder} → {@link ServiceAst}. */ class SparqlParserServiceTest extends AbstractSparqlParserFeatureTest { diff --git a/src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlParserTest.java b/src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlParserTest.java index 30357df38..a15b6a13a 100644 --- a/src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlParserTest.java +++ b/src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlParserTest.java @@ -20,11 +20,11 @@ import fr.inria.corese.core.next.query.api.exception.QueryEvaluationException; import fr.inria.corese.core.next.query.api.exception.QuerySyntaxException; -import fr.inria.corese.core.next.query.api.io.parser.QueryOptions; +import fr.inria.corese.core.next.query.impl.parser.QueryOptions; import fr.inria.corese.core.next.query.api.validation.QueryDiagnostic; import fr.inria.corese.core.next.query.api.validation.QueryTextValidator; import fr.inria.corese.core.next.query.api.validation.QueryValidationResult; -import fr.inria.corese.core.next.query.api.validation.QueryValidators; +import fr.inria.corese.core.next.query.impl.parser.SparqlValidators; import fr.inria.corese.core.next.query.impl.sparql.ast.BgpAst; import fr.inria.corese.core.next.query.impl.sparql.ast.QueryAst; import fr.inria.corese.core.next.query.impl.sparql.ast.VarAst; @@ -590,7 +590,7 @@ void validateLexerDiagnosticKeepsLocationAndSourceWhenAvailable() { @Test void queryValidatorsFactoryReturnsWorkingSparqlValidator() { - QueryTextValidator validator = QueryValidators.sparql(); + QueryTextValidator validator = SparqlValidators.sparql(); QueryValidationResult result = validator.validate(VALID_SELECT_QUERY); diff --git a/src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlQueryAnalyzerTest.java b/src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlQueryAnalyzerTest.java index a0bce41b9..d988b66a2 100644 --- a/src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlQueryAnalyzerTest.java +++ b/src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlQueryAnalyzerTest.java @@ -1,6 +1,6 @@ package fr.inria.corese.core.next.query.impl.parser; -import fr.inria.corese.core.next.query.api.sparql.options.SparqlAstError; +import fr.inria.corese.core.next.query.impl.parser.options.SparqlAstError; import fr.inria.corese.core.next.query.api.validation.QueryDiagnostic; import org.junit.jupiter.api.Test; diff --git a/src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlUpdateTest.java b/src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlUpdateTest.java index 4871c6193..1f73c969a 100644 --- a/src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlUpdateTest.java +++ b/src/test/java/fr/inria/corese/core/next/query/impl/parser/SparqlUpdateTest.java @@ -1,6 +1,6 @@ package fr.inria.corese.core.next.query.impl.parser; -import fr.inria.corese.core.next.query.api.io.parser.QueryParser; +import fr.inria.corese.core.next.query.impl.parser.QueryParser; import fr.inria.corese.core.next.query.impl.sparql.ast.LoadRequestAst; import fr.inria.corese.core.next.query.impl.sparql.ast.QueryAst; import fr.inria.corese.core.next.query.impl.sparql.ast.UpdateRequestAst; diff --git a/src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/DefaultResultSerializerFactoryTest.java b/src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/DefaultResultSerializerFactoryTest.java new file mode 100644 index 000000000..87a145601 --- /dev/null +++ b/src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/DefaultResultSerializerFactoryTest.java @@ -0,0 +1,63 @@ +package fr.inria.corese.core.next.query.impl.sparql.io.serializer; + +import fr.inria.corese.core.next.query.api.io.ResultFormat; +import fr.inria.corese.core.next.query.api.io.serializer.BooleanResultSerializer; +import fr.inria.corese.core.next.query.api.io.serializer.ResultSerializer; +import fr.inria.corese.core.next.query.api.result.BindingSet; +import fr.inria.corese.core.next.query.api.result.TupleQueryResult; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +class DefaultResultSerializerFactoryTest { + + private final DefaultResultSerializerFactory factory = new DefaultResultSerializerFactory(); + private final TupleQueryResult dummyResults = new TupleQueryResult() { + @Override + public List getBindingNames() { + return List.of(); + } + + @Override + public boolean hasNext() { + return false; + } + + @Override + public BindingSet next() { + return null; + } + + @Override + public void close() { + + } + }; + + @Test + void createsTupleSerializerForEveryStandardFormat() { + ResultFormat.all().forEach(resultFormat -> { + ResultSerializer serializer = factory.createTupleSerializer(resultFormat, dummyResults); + assertEquals(resultFormat, serializer.getFormat()); + }); + } + + @Test + void createsBooleanSerializerWithTheRequestedFormat() { + ResultFormat.all().forEach(resultFormat -> { + BooleanResultSerializer serializer = factory.createBooleanSerializer(resultFormat, true); + assertEquals(resultFormat, serializer.getFormat()); + }); + } + + @Test + void rejectsUnknownTupleResultFormat() { + ResultFormat custom = new ResultFormat("CUSTOM", List.of("custom"), List.of("application/x-custom")); + assertThrows( + IllegalArgumentException.class, + () -> factory.createTupleSerializer(custom, dummyResults)); + } +} diff --git a/src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/ResultSerializerFactoryTest.java b/src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/ResultSerializerFactoryTest.java deleted file mode 100644 index ec00dc019..000000000 --- a/src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/ResultSerializerFactoryTest.java +++ /dev/null @@ -1,45 +0,0 @@ -package fr.inria.corese.core.next.query.impl.sparql.io.serializer; - -import fr.inria.corese.core.next.query.api.base.io.ResultFormat; -import fr.inria.corese.core.next.query.api.io.serializer.ResultSerializer; -import fr.inria.corese.core.next.query.api.result.BindingSet; -import fr.inria.corese.core.next.query.api.result.TupleQueryResult; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -class ResultSerializerFactoryTest { - - private final ResultSerializerFactory factory = new ResultSerializerFactory(); - private final TupleQueryResult dummyResults = new TupleQueryResult() { - @Override - public List getBindingNames() { - return List.of(); - } - - @Override - public boolean hasNext() { - return false; - } - - @Override - public BindingSet next() { - return null; - } - - @Override - public void close() { - - } - }; - - @Test - public void createSerializer() { - ResultFormat.all().forEach(resultFormat -> { - ResultSerializer serializer = factory.createSerializer(resultFormat, dummyResults); - assertEquals(resultFormat, serializer.getFormat()); - }); - } -} \ No newline at end of file diff --git a/src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/common/BooleanStringSerializerTest.java b/src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/common/BooleanStringSerializerTest.java index 96c7512aa..5bfd3cef1 100644 --- a/src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/common/BooleanStringSerializerTest.java +++ b/src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/common/BooleanStringSerializerTest.java @@ -1,17 +1,18 @@ package fr.inria.corese.core.next.query.impl.sparql.io.serializer.common; import fr.inria.corese.core.next.data.api.io.IOOptions; +import fr.inria.corese.core.next.query.api.io.ResultFormat; import fr.inria.corese.core.next.query.api.io.serializer.BooleanResultSerializer; public class BooleanStringSerializerTest extends AbstractBooleanResultSerializerTest { @Override protected BooleanResultSerializer getSerializer(boolean result) { - return new BooleanStringSerializer(result); + return new BooleanStringSerializer(result, ResultFormat.CSV); } @Override protected BooleanResultSerializer getSerializer(boolean result, IOOptions options) { - return new BooleanStringSerializer(result, options); + return new BooleanStringSerializer(result, ResultFormat.CSV); } @Override diff --git a/src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/csv/CSVSerializerOptionsTest.java b/src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/csv/CsvResultSerializerOptionsTest.java similarity index 62% rename from src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/csv/CSVSerializerOptionsTest.java rename to src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/csv/CsvResultSerializerOptionsTest.java index 321c1b982..6a37d7b4f 100644 --- a/src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/csv/CSVSerializerOptionsTest.java +++ b/src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/csv/CsvResultSerializerOptionsTest.java @@ -4,12 +4,12 @@ import static org.junit.jupiter.api.Assertions.*; -class CSVSerializerOptionsTest { +class CsvResultSerializerOptionsTest { @Test void getLineEnding() { - CSVSerializerOptions options = new CSVSerializerOptions.Builder().setLineEnding("tata").build(); + CsvResultSerializerOptions options = new CsvResultSerializerOptions.Builder().setLineEnding("tata").build(); assertEquals("tata", options.getLineEnding()); } -} \ No newline at end of file +} diff --git a/src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/csv/CSVSerializerTest.java b/src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/csv/CsvTupleResultSerializerTest.java similarity index 87% rename from src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/csv/CSVSerializerTest.java rename to src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/csv/CsvTupleResultSerializerTest.java index e52f88631..1da088f7d 100644 --- a/src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/csv/CSVSerializerTest.java +++ b/src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/csv/CsvTupleResultSerializerTest.java @@ -1,22 +1,22 @@ package fr.inria.corese.core.next.query.impl.sparql.io.serializer.csv; import fr.inria.corese.core.next.data.api.io.IOOptions; -import fr.inria.corese.core.next.query.api.base.io.ResultFormat; +import fr.inria.corese.core.next.query.api.io.ResultFormat; import fr.inria.corese.core.next.query.api.io.serializer.ResultSerializer; import fr.inria.corese.core.next.query.api.result.TupleQueryResult; -import fr.inria.corese.core.next.query.impl.sparql.io.serializer.ResultSerializerFactory; +import fr.inria.corese.core.next.query.impl.sparql.io.serializer.DefaultResultSerializerFactory; import fr.inria.corese.core.next.query.impl.sparql.io.serializer.common.AbstractResultSerializerTest; -public class CSVSerializerTest extends AbstractResultSerializerTest { +public class CsvTupleResultSerializerTest extends AbstractResultSerializerTest { @Override protected ResultSerializer getResultSerializer(TupleQueryResult results) { - return new ResultSerializerFactory().createSerializer(ResultFormat.CSV, results); + return new DefaultResultSerializerFactory().createTupleSerializer(ResultFormat.CSV, results); } @Override protected ResultSerializer getResultSerializer(TupleQueryResult results, IOOptions options) { - return new ResultSerializerFactory().createSerializer(ResultFormat.CSV, results, options); + return new DefaultResultSerializerFactory().createTupleSerializer(ResultFormat.CSV, results, options); } @Override diff --git a/src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/json/JSONBooleanSerializerTest.java b/src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/json/JsonBooleanResultSerializerTest.java similarity index 83% rename from src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/json/JSONBooleanSerializerTest.java rename to src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/json/JsonBooleanResultSerializerTest.java index bf720001c..17f142c81 100644 --- a/src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/json/JSONBooleanSerializerTest.java +++ b/src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/json/JsonBooleanResultSerializerTest.java @@ -12,25 +12,25 @@ import static org.junit.jupiter.api.Assertions.assertEquals; -public class JSONBooleanSerializerTest extends AbstractBooleanResultSerializerTest implements LinksSerializerTest { +public class JsonBooleanResultSerializerTest extends AbstractBooleanResultSerializerTest implements LinksSerializerTest { @Override protected BooleanResultSerializer getSerializer(boolean result) { - return new JSONBooleanSerializer(result); + return new JsonBooleanResultSerializer(result); } @Override protected BooleanResultSerializer getSerializer(boolean result, IOOptions options) { - return new JSONBooleanSerializer(result, options); + return new JsonBooleanResultSerializer(result, options); } @Override protected String getTrueResultString() { - return "{\"boolean\":\"true\"}"; + return "{\"boolean\":true}"; } @Override protected String getFalseResultString() { - return "{\"boolean\":\"false\"}"; + return "{\"boolean\":false}"; } private String getLinksTestResultsString() { @@ -41,7 +41,7 @@ private String getLinksTestResultsString() { "\"mailto:bob@corese-test.com\"" + "]" + "}," + - "\"boolean\":\"true\"" + + "\"boolean\":true" + "}"; } diff --git a/src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/json/JSONSerializerTest.java b/src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/json/JsonTupleResultSerializerTest.java similarity index 97% rename from src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/json/JSONSerializerTest.java rename to src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/json/JsonTupleResultSerializerTest.java index 7a17fc4bb..3b848f511 100644 --- a/src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/json/JSONSerializerTest.java +++ b/src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/json/JsonTupleResultSerializerTest.java @@ -18,15 +18,15 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static fr.inria.corese.core.next.query.impl.sparql.io.serializer.common.ResultSerializerTestUtils.MockQueryResults; -public class JSONSerializerTest extends AbstractResultSerializerTest implements LinksSerializerTest { +public class JsonTupleResultSerializerTest extends AbstractResultSerializerTest implements LinksSerializerTest { @Override protected ResultSerializer getResultSerializer(TupleQueryResult results) { - return new JSONSerializer(results); + return new JsonTupleResultSerializer(results); } @Override protected ResultSerializer getResultSerializer(TupleQueryResult results, IOOptions options) { - return new JSONSerializer(results, options); + return new JsonTupleResultSerializer(results, options); } @Override @@ -272,7 +272,7 @@ protected String getJSONStandardResultsString() { @Test @DisplayName("Tests the serialization of the results used as example in the SPARQL result JSON format recommendation") public void JSONStandardResultsTest() { - JSONSerializerOptions options = new JSONSerializerOptions.Builder().addLink("http://www.w3.org/TR/rdf-sparql-XMLres/example.rq").build(); + JsonResultSerializerOptions options = new JsonResultSerializerOptions.Builder().addLink("http://www.w3.org/TR/rdf-sparql-XMLres/example.rq").build(); ResultSerializer serializer = getResultSerializer(getJSONStandardResults(), options); StringWriter writer = new StringWriter(); serializer.write(writer); diff --git a/src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/tsv/TSVSerializerOptionsTest.java b/src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/tsv/TsvResultSerializerOptionsTest.java similarity index 63% rename from src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/tsv/TSVSerializerOptionsTest.java rename to src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/tsv/TsvResultSerializerOptionsTest.java index d4b0b0bce..dec930899 100644 --- a/src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/tsv/TSVSerializerOptionsTest.java +++ b/src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/tsv/TsvResultSerializerOptionsTest.java @@ -4,12 +4,12 @@ import static org.junit.jupiter.api.Assertions.assertEquals; -class TSVSerializerOptionsTest { +class TsvResultSerializerOptionsTest { @Test void getLineEnding() { - TSVSerializerOptions options = new TSVSerializerOptions.Builder().setLineEnding("tata").build(); + TsvResultSerializerOptions options = new TsvResultSerializerOptions.Builder().setLineEnding("tata").build(); assertEquals("tata", options.getLineEnding()); } -} \ No newline at end of file +} diff --git a/src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/tsv/TSVSerializerTest.java b/src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/tsv/TsvTupleResultSerializerTest.java similarity index 87% rename from src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/tsv/TSVSerializerTest.java rename to src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/tsv/TsvTupleResultSerializerTest.java index ef6151e37..e6587878b 100644 --- a/src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/tsv/TSVSerializerTest.java +++ b/src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/tsv/TsvTupleResultSerializerTest.java @@ -1,22 +1,22 @@ package fr.inria.corese.core.next.query.impl.sparql.io.serializer.tsv; import fr.inria.corese.core.next.data.api.io.IOOptions; -import fr.inria.corese.core.next.query.api.base.io.ResultFormat; +import fr.inria.corese.core.next.query.api.io.ResultFormat; import fr.inria.corese.core.next.query.api.io.serializer.ResultSerializer; import fr.inria.corese.core.next.query.api.result.TupleQueryResult; -import fr.inria.corese.core.next.query.impl.sparql.io.serializer.ResultSerializerFactory; +import fr.inria.corese.core.next.query.impl.sparql.io.serializer.DefaultResultSerializerFactory; import fr.inria.corese.core.next.query.impl.sparql.io.serializer.common.AbstractResultSerializerTest; -public class TSVSerializerTest extends AbstractResultSerializerTest { +public class TsvTupleResultSerializerTest extends AbstractResultSerializerTest { @Override protected ResultSerializer getResultSerializer(TupleQueryResult results) { - return new ResultSerializerFactory().createSerializer(ResultFormat.TSV, results); + return new DefaultResultSerializerFactory().createTupleSerializer(ResultFormat.TSV, results); } @Override protected ResultSerializer getResultSerializer(TupleQueryResult results, IOOptions options) { - return new ResultSerializerFactory().createSerializer(ResultFormat.TSV, results, options); + return new DefaultResultSerializerFactory().createTupleSerializer(ResultFormat.TSV, results, options); } @Override diff --git a/src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/xml/XMLBooleanSerializerTest.java b/src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/xml/XmlBooleanResultSerializerTest.java similarity index 87% rename from src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/xml/XMLBooleanSerializerTest.java rename to src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/xml/XmlBooleanResultSerializerTest.java index e52fc7f49..171a60954 100644 --- a/src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/xml/XMLBooleanSerializerTest.java +++ b/src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/xml/XmlBooleanResultSerializerTest.java @@ -12,15 +12,15 @@ import static org.junit.jupiter.api.Assertions.assertEquals; -public class XMLBooleanSerializerTest extends AbstractBooleanResultSerializerTest implements LinksSerializerTest { +public class XmlBooleanResultSerializerTest extends AbstractBooleanResultSerializerTest implements LinksSerializerTest { @Override protected BooleanResultSerializer getSerializer(boolean result) { - return new XMLBooleanSerializer(result); + return new XmlBooleanResultSerializer(result); } @Override protected BooleanResultSerializer getSerializer(boolean result, IOOptions options) { - return new XMLBooleanSerializer(result, options); + return new XmlBooleanResultSerializer(result, options); } @Override @@ -54,7 +54,7 @@ private String getLinksTestResultsString() { @DisplayName("Tests the serialization of results including several links") public void linksTest() { IOOptions options = getOptionsWithLinks(); - ResultSerializer serializer = new XMLBooleanSerializer(true, options); + ResultSerializer serializer = new XmlBooleanResultSerializer(true, options); StringWriter writer = new StringWriter(); serializer.write(writer); assertEquals(getLinksTestResultsString(), writer.toString()); diff --git a/src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/xml/XMLSerializerOptionsTest.java b/src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/xml/XmlResultSerializerOptionsTest.java similarity index 76% rename from src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/xml/XMLSerializerOptionsTest.java rename to src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/xml/XmlResultSerializerOptionsTest.java index 1dd5d34dd..ac004453e 100644 --- a/src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/xml/XMLSerializerOptionsTest.java +++ b/src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/xml/XmlResultSerializerOptionsTest.java @@ -12,19 +12,19 @@ import static fr.inria.corese.core.next.query.impl.sparql.io.serializer.common.ResultSerializerTestUtils.MockQueryResults; import static org.junit.jupiter.api.Assertions.assertEquals; -public class XMLSerializerOptionsTest { +public class XmlResultSerializerOptionsTest { @Test @DisplayName("Tests the application of the indent XML option to the serializer") void xmlSerializerIndentPropertyTest() { StringWriter outputWriter = new StringWriter(); - IOOptions options = new XMLSerializerOptions.Builder() - .setXMLSetting(OutputKeys.INDENT, XMLSerializerConstants.YES_PROPERTY_VALUE) + IOOptions options = new XmlResultSerializerOptions.Builder() + .setXMLSetting(OutputKeys.INDENT, XmlResultConstants.YES_PROPERTY_VALUE) .build(); MockQueryResults results = new MockQueryResults(List.of("x"), List.of()); - ResultSerializer serializer = new XMLSerializer(results, options); + ResultSerializer serializer = new XmlTupleResultSerializer(results, options); serializer.write(outputWriter); String expected = @@ -46,9 +46,9 @@ void xmlSerializerIndentPropertyTest() { @DisplayName("Tests the application of the standalone XML options to the serializer") void xmlSerializerStandalonePropertyTest() { StringWriter outputWriter = new StringWriter(); - IOOptions options = new XMLSerializerOptions.Builder().setXMLSetting(OutputKeys.STANDALONE, XMLSerializerConstants.NO_PROPERTY_VALUE).build(); + IOOptions options = new XmlResultSerializerOptions.Builder().setXMLSetting(OutputKeys.STANDALONE, XmlResultConstants.NO_PROPERTY_VALUE).build(); MockQueryResults results = new MockQueryResults(List.of("x"), List.of()); - ResultSerializer serializer = new XMLSerializer(results, options); + ResultSerializer serializer = new XmlTupleResultSerializer(results, options); serializer.write(outputWriter); assertEquals("" + @@ -64,9 +64,9 @@ void xmlSerializerStandalonePropertyTest() { @DisplayName("Tests the application of the declaration XML options to the serializer") void xmlSerializerOmitDeclarationPropertyTest() { StringWriter outputWriter = new StringWriter(); - IOOptions options = new XMLSerializerOptions.Builder().setXMLSetting(OutputKeys.OMIT_XML_DECLARATION, XMLSerializerConstants.YES_PROPERTY_VALUE).build(); + IOOptions options = new XmlResultSerializerOptions.Builder().setXMLSetting(OutputKeys.OMIT_XML_DECLARATION, XmlResultConstants.YES_PROPERTY_VALUE).build(); MockQueryResults results = new MockQueryResults(List.of("x"), List.of()); - ResultSerializer serializer = new XMLSerializer(results, options); + ResultSerializer serializer = new XmlTupleResultSerializer(results, options); serializer.write(outputWriter); assertEquals("" + @@ -81,9 +81,9 @@ void xmlSerializerOmitDeclarationPropertyTest() { @DisplayName("Tests the application of the declaration XML options to the serializer") void xmlSerializerMediaTypePropertyTest() { StringWriter outputWriter = new StringWriter(); - IOOptions options = new XMLSerializerOptions.Builder().setXMLSetting(OutputKeys.OMIT_XML_DECLARATION, XMLSerializerConstants.YES_PROPERTY_VALUE).build(); + IOOptions options = new XmlResultSerializerOptions.Builder().setXMLSetting(OutputKeys.OMIT_XML_DECLARATION, XmlResultConstants.YES_PROPERTY_VALUE).build(); MockQueryResults results = new MockQueryResults(List.of("x"), List.of()); - ResultSerializer serializer = new XMLSerializer(results, options); + ResultSerializer serializer = new XmlTupleResultSerializer(results, options); serializer.write(outputWriter); assertEquals("" + diff --git a/src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/xml/XMLSerializerTest.java b/src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/xml/XmlTupleResultSerializerTest.java similarity index 96% rename from src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/xml/XMLSerializerTest.java rename to src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/xml/XmlTupleResultSerializerTest.java index e8f0e5d78..15ed7f1fc 100644 --- a/src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/xml/XMLSerializerTest.java +++ b/src/test/java/fr/inria/corese/core/next/query/impl/sparql/io/serializer/xml/XmlTupleResultSerializerTest.java @@ -12,19 +12,19 @@ import java.io.StringWriter; -import static fr.inria.corese.core.next.query.impl.sparql.io.serializer.xml.XMLSerializerConstants.YES_PROPERTY_VALUE; +import static fr.inria.corese.core.next.query.impl.sparql.io.serializer.xml.XmlResultConstants.YES_PROPERTY_VALUE; import static org.junit.jupiter.api.Assertions.assertEquals; -public class XMLSerializerTest extends AbstractResultSerializerTest implements LinksSerializerTest { +public class XmlTupleResultSerializerTest extends AbstractResultSerializerTest implements LinksSerializerTest { @Override protected ResultSerializer getResultSerializer(TupleQueryResult results) { - XMLSerializerOptions options = new XMLSerializerOptions.Builder().setXMLSetting(OutputKeys.STANDALONE, YES_PROPERTY_VALUE).build(); - return new XMLSerializer(results, options); + XmlResultSerializerOptions options = new XmlResultSerializerOptions.Builder().setXMLSetting(OutputKeys.STANDALONE, YES_PROPERTY_VALUE).build(); + return new XmlTupleResultSerializer(results, options); } @Override protected ResultSerializer getResultSerializer(TupleQueryResult results, IOOptions options) { - return new XMLSerializer(results, options); + return new XmlTupleResultSerializer(results, options); } @Override