Skip to content

[NEXT][CLEANUP] Clarify query packages outside KGRAM#499

Merged
abdessamad-abdoun merged 4 commits into
feature/corese-nextfrom
refactor/next-query-cleanup
Jul 20, 2026
Merged

[NEXT][CLEANUP] Clarify query packages outside KGRAM#499
abdessamad-abdoun merged 4 commits into
feature/corese-nextfrom
refactor/next-query-cleanup

Conversation

@remiceres

@remiceres remiceres commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

Context

Part of #473.

The Corese-next query pipeline had accumulated duplicated parser contracts, implementation classes under public API packages, ambiguous listener names, and inconsistent result serializer contracts.

This PR clarifies those boundaries before the public SPARQL request API is designed.

It is rebased on #492, so the public SPARQL Dataset type remains owned by the query API.

What changed

Parser ownership

  • Removed the duplicate QueryParser, QueryOptions, and AbstractQueryParser definitions.
  • Moved parser contracts, parser options, and validation factories out of the public query API and into impl.parser.
  • Made AbstractQueryParser an internal parser implementation detail.
  • Removed the dependency from public API packages to the internal SPARQL AST.

The parser and AST are pipeline internals. The future public SPARQL API should expose prepared queries and results rather than parsing infrastructure.

ANTLR listeners

  • Renamed SparqlListener to SparqlListenerDispatcher.
  • Made the dispatcher package-private.
  • Renamed parser classes from *Feature to *AstListener.
  • Renamed query and update listener base types accordingly.

Examples:

  • BgpFeatureBgpAstListener
  • SelectQueryFeatureSelectQueryAstListener
  • FilterFeatureFilterAstListener
  • ClearRequestFeatureClearUpdateAstListener

These classes listen to ANTLR events and populate AST builders. Their previous names could incorrectly suggest that they implemented a complete SPARQL feature across parsing, bridging, and execution.

Result serialization

  • Moved ResultFormat from api.base.io to api.io.
  • Renamed IResultSerializerFactory to ResultSerializerFactory.
  • Renamed the implementation to DefaultResultSerializerFactory.
  • Replaced createSerializer(...) with createTupleSerializer(...).
  • Made createBooleanSerializer(...) return BooleanResultSerializer.
  • Reject unsupported result formats explicitly instead of returning null.
  • Renamed concrete serializers to describe both their format and result type.

Examples:

  • JSONSerializerJsonTupleResultSerializer
  • JSONBooleanSerializerJsonBooleanResultSerializer
  • XMLSerializerXmlTupleResultSerializer
  • CSVSerializerCsvTupleResultSerializer

Serializer option and constant classes follow the same naming convention.

SPARQL JSON boolean result

ASK results are now serialized as JSON booleans:

{"boolean": true}

instead of JSON strings:

{"boolean": "true"}

This aligns the output with the SPARQL Query Results JSON format.

Package documentation

Added short package-info.java files for the main architectural boundaries:

  • public query API;
  • parser and parser listeners;
  • result implementations;
  • internal SPARQL AST;
  • AST-to-KGRAM bridge;
  • execution orchestration;
  • serializer contracts.

Architectural result

The intended dependency direction is now:

public query contracts
        ↓
parser and result implementations
        ↓
internal SPARQL AST
        ↓
AST-to-KGRAM bridge
        ↓
KGRAM execution and storage

Parser, AST, bridge, and execution wiring are not considered part of the future public SPARQL request API.

Out of scope

  • Any change under next.query.kgram.**
  • New SPARQL features
  • StorageManager redesign
  • Final public SPARQL request API design
  • Large-scale decomposition of SparqlAstBuilder

@remiceres remiceres added the Refactoring Issue created during the 2025 refactoring effort label Jul 17, 2026
@remiceres remiceres changed the title Refactor/next query cleanup [NEXT][CLEANUP] Clarify query packages outside KGRAM Jul 17, 2026
@github-actions

Copy link
Copy Markdown
Overall Project 51.15% -0.02% 🍏
Files changed 87.73% 🍏

File Coverage
AbstractSparqlOptions.java 100% 🍏
SparqlValidators.java 100% 🍏
SparqlListenerDispatcher.java 100% 🍏
AbstractQueryParser.java 100% 🍏
SparqlParserOptions.java 100% 🍏
TsvResultSerializerOptions.java 100% 🍏
JsonBooleanResultSerializer.java 100% 🍏
ClearUpdateAstListener.java 100% 🍏
LoadUpdateAstListener.java 100% 🍏
CreateUpdateAstListener.java 100% 🍏
ServiceAstListener.java 100% 🍏
MinusAstListener.java 100% 🍏
BindAstListener.java 100% 🍏
AbstractSparqlQueryAstListener.java 100% 🍏
UnionAstListener.java 100% 🍏
DatasetClauseAstListener.java 100% 🍏
PrologueAstListener.java 100% 🍏
AbstractSparqlUpdateAstListener.java 100% 🍏
AbstractSparqlAstListener.java 100% 🍏
CsvResultSerializerOptions.java 100% 🍏
CsvTupleResultSerializer.java 100% 🍏
ConstructQueryAstListener.java 97.67% 🍏
JsonTupleResultSerializer.java 95.63% 🍏
SelectQueryAstListener.java 94.87% 🍏
SparqlQueryAnalyzer.java 94.39% 🍏
SparqlErrorListener.java 93.86% 🍏
NextSparqlPipelineExecutor.java 92.44% 🍏
SparqlAstError.java 91.91% 🍏
SolutionModifierAstListener.java 90.8% 🍏
ValuesAstListener.java 90.11% 🍏
XmlTupleResultSerializer.java 89.16% 🍏
AstBackedExistTerm.java 87.1% 🍏
XmlBooleanResultSerializer.java 83.73% 🍏
TsvTupleResultSerializer.java 82.8% 🍏
SparqlAstBuilder.java 82.5% 🍏
HavingAstListener.java 82.05% 🍏
DescribeQueryAstListener.java 81.97% 🍏
JsonResultSerializerOptions.java 81.08% 🍏
FilterAstListener.java 81.08% 🍏
SparqlQueryAstBuilder.java 78.87% 🍏
SparqlParser.java 76.69% 🍏
XmlResultSerializerOptions.java 76.67% 🍏
AskQueryAstListener.java 75% 🍏
BooleanStringSerializer.java 70.37% 🍏
DefaultResultSerializerFactory.java 49.32% -50.68%
ResultFormat.java 45.95% 🍏
BgpAstListener.java 41.18% 🍏

@github-actions

Copy link
Copy Markdown

Test Results

  438 files    438 suites   21s ⏱️
2 531 tests 2 531 ✅ 0 💤 0 ❌
2 545 runs  2 545 ✅ 0 💤 0 ❌

Results for commit ddc6585.

@abdessamad-abdoun
abdessamad-abdoun marked this pull request as ready for review July 20, 2026 06:27
@abdessamad-abdoun
abdessamad-abdoun merged commit 1ad7f02 into feature/corese-next Jul 20, 2026
1 check passed
@github-actions

Copy link
Copy Markdown
Overall Project 51.15% -0.02% 🍏
Files changed 87.73% 🍏

File Coverage
AbstractSparqlOptions.java 100% 🍏
SparqlValidators.java 100% 🍏
SparqlListenerDispatcher.java 100% 🍏
AbstractQueryParser.java 100% 🍏
SparqlParserOptions.java 100% 🍏
TsvResultSerializerOptions.java 100% 🍏
JsonBooleanResultSerializer.java 100% 🍏
ClearUpdateAstListener.java 100% 🍏
LoadUpdateAstListener.java 100% 🍏
CreateUpdateAstListener.java 100% 🍏
ServiceAstListener.java 100% 🍏
MinusAstListener.java 100% 🍏
BindAstListener.java 100% 🍏
AbstractSparqlQueryAstListener.java 100% 🍏
UnionAstListener.java 100% 🍏
DatasetClauseAstListener.java 100% 🍏
PrologueAstListener.java 100% 🍏
AbstractSparqlUpdateAstListener.java 100% 🍏
AbstractSparqlAstListener.java 100% 🍏
CsvResultSerializerOptions.java 100% 🍏
CsvTupleResultSerializer.java 100% 🍏
ConstructQueryAstListener.java 97.67% 🍏
JsonTupleResultSerializer.java 95.63% 🍏
SelectQueryAstListener.java 94.87% 🍏
SparqlQueryAnalyzer.java 94.39% 🍏
SparqlErrorListener.java 93.86% 🍏
NextSparqlPipelineExecutor.java 92.44% 🍏
SparqlAstError.java 91.91% 🍏
SolutionModifierAstListener.java 90.8% 🍏
ValuesAstListener.java 90.11% 🍏
XmlTupleResultSerializer.java 89.16% 🍏
AstBackedExistTerm.java 87.1% 🍏
XmlBooleanResultSerializer.java 83.73% 🍏
TsvTupleResultSerializer.java 82.8% 🍏
SparqlAstBuilder.java 82.5% 🍏
HavingAstListener.java 82.05% 🍏
DescribeQueryAstListener.java 81.97% 🍏
JsonResultSerializerOptions.java 81.08% 🍏
FilterAstListener.java 81.08% 🍏
SparqlQueryAstBuilder.java 78.87% 🍏
SparqlParser.java 76.69% 🍏
XmlResultSerializerOptions.java 76.67% 🍏
AskQueryAstListener.java 75% 🍏
BooleanStringSerializer.java 70.37% 🍏
DefaultResultSerializerFactory.java 49.32% -50.68%
ResultFormat.java 45.95% 🍏
BgpAstListener.java 41.18% 🍏

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Refactoring Issue created during the 2025 refactoring effort

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants