namedgraph opened a new issue, #4091:
URL: https://github.com/apache/jena/issues/4091
## Version
6.0.0 and 6.1.0 (current release). Works in 5.6.0. Still present on `main`
(by code inspection, links below).
Environment: macOS (arm64), OpenJDK 25.0.1 (Homebrew).
## What happened
The `arq` CLI can no longer output the result of a quad `CONSTRUCT { GRAPH …
{ … } }` query (the ARQ syntax extension) in **any** format — the default
output path throws, and the dataset-capable `--results` formats were dropped.
Minimal repro, no data files needed:
```shell
echo 'CONSTRUCT { GRAPH <urn:x:g> { <urn:x:s> <urn:x:p> <urn:x:o> } } WHERE
{}' > quads.rq
apache-jena-5.6.0/bin/arq --query quads.rq # exit 0:
# <urn:x:g> {
# <urn:x:s> <urn:x:p> <urn:x:o> .
# }
apache-jena-6.1.0/bin/arq --query quads.rq # exit 2 (same on 6.0.0):
# org.apache.jena.riot.RiotException: No dataset writer for Turtle_pretty
```
Full stack trace on 6.1.0:
```
org.apache.jena.riot.RiotException: No dataset writer for Turtle_pretty
at
org.apache.jena.riot.RDFWriter.createDatasetWriter$(RDFWriter.java:253)
at org.apache.jena.riot.RDFWriter.write$(RDFWriter.java:263)
at org.apache.jena.riot.RDFWriter.output(RDFWriter.java:222)
at org.apache.jena.riot.RDFWriter.output(RDFWriter.java:161)
at
org.apache.jena.riot.RDFWriterBuilder.output(RDFWriterBuilder.java:213)
at
org.apache.jena.sparql.util.QueryExecUtils.writeDataset(QueryExecUtils.java:282)
at
org.apache.jena.sparql.util.QueryExecUtils.doConstructQuadsQuery(QueryExecUtils.java:250)
at
org.apache.jena.sparql.util.QueryExecUtils.executeQuery(QueryExecUtils.java:124)
at arq.query.lambda$queryExec$0(query.java:248)
at org.apache.jena.system.Txn.exec(Txn.java:82)
at org.apache.jena.system.Txn.executeRead(Txn.java:120)
at arq.query.queryExec(query.java:244)
at arq.query.exec(query.java:161)
at org.apache.jena.cmd.CmdMain.mainMethod(CmdMain.java:98)
at org.apache.jena.cmd.CmdMain.mainRun(CmdMain.java:64)
at org.apache.jena.cmd.CmdMain.mainRun(CmdMain.java:52)
at arq.arq.main(arq.java:31)
```
There is no workaround from the CLI:
- `--results=trig` / `--results=nq` → `Unrecognized output format` in 6.x
(5.6.0 accepted `trig`)
- `--results=text` → the same exception as the default
- `--syntax=arq` changes nothing — parsing and execution succeed (the stack
reaches `doConstructQuadsQuery`); the failure is purely in output-writer
selection
So pipelines that use `arq` for quad CONSTRUCT are pinned to Jena ≤ 5.6.0.
## Analysis
Introduced by the 6.0.0 `ResultsFormat` rewrite (symbol registry → enum):
- The default results format `TEXT` carries `RDFFormat.TURTLE`
([ResultsFormat.java#L43](https://github.com/apache/jena/blob/jena-6.1.0/jena-arq/src/main/java/org/apache/jena/sparql/resultset/ResultsFormat.java#L43)).
- `QueryExecUtils.writeDataset` passes `outputFormat.rdfFormat()` straight
to `RDFWriter`
([QueryExecUtils.java#L278-L284](https://github.com/apache/jena/blob/jena-6.1.0/jena-arq/src/main/java/org/apache/jena/sparql/util/QueryExecUtils.java#L278-L284));
Turtle has no dataset writer → `RiotException`.
- No enum constant carries a dataset-capable `RDFFormat`, and the
`trig`/`nquads` name registrations are commented out
([ResultsFormat.java#L167-L169](https://github.com/apache/jena/blob/jena-6.1.0/jena-arq/src/main/java/org/apache/jena/sparql/resultset/ResultsFormat.java#L167-L169))
— so TriG/N-Quads output is unreachable. Unchanged on `main`.
Related regression from the same rewrite: for a plain (triples) CONSTRUCT,
`writeModel` hardcodes `RDFFormat.TURTLE_PRETTY` and ignores the requested
format
([QueryExecUtils.java#L272-L276](https://github.com/apache/jena/blob/jena-6.1.0/jena-arq/src/main/java/org/apache/jena/sparql/util/QueryExecUtils.java#L272-L276)):
```shell
echo 'CONSTRUCT { <urn:x:s> <urn:x:p> <urn:x:o> } WHERE {}' > triples.rq
apache-jena-6.1.0/bin/arq --query triples.rq --results=rdfxml # exit 0:
# <urn:x:s> <urn:x:p> <urn:x:o> .
```
Turtle, not the requested RDF/XML. (5.6.0 rejected the unsupported name
outright with `Unrecognized output format: rdfxml`, exit 5 — 6.x accepts it and
silently ignores it.)
## Self-contained repro script
Downloads 5.6.0 / 6.0.0 / 6.1.0 from archive.apache.org and prints the full
matrix (default quad output, `--results=trig`, `--results=rdfxml`) per version:
<details>
<summary>jena-quad-construct-repro.sh</summary>
```shell
#!/usr/bin/env bash
# Minimal repro: `arq` cannot output quad CONSTRUCT results in Apache Jena
6.x.
# 5.6.0: emits TriG, exit 0
# 6.0.0/6.1.0: org.apache.jena.riot.RiotException: No dataset writer for
Turtle_pretty, exit 2
# Usage: ./jena-quad-construct-repro.sh [workdir] (default
/tmp/jena-quad-repro)
# Requires: curl, tar, Java 21+ (Jena 6.x requirement).
set -uo pipefail
WORK="${1:-/tmp/jena-quad-repro}"
VERSIONS=(5.6.0 6.0.0 6.1.0)
MIRROR=https://archive.apache.org/dist/jena/binaries
mkdir -p "$WORK"
cd "$WORK"
for v in "${VERSIONS[@]}"; do
[ -d "apache-jena-$v" ] && continue
echo "downloading apache-jena-$v ..." >&2
curl -fsSL -o "apache-jena-$v.tar.gz" "$MIRROR/apache-jena-$v.tar.gz"
tar xzf "apache-jena-$v.tar.gz"
done
cat > quads.rq <<'EOF'
CONSTRUCT { GRAPH <urn:x:g> { <urn:x:s> <urn:x:p> <urn:x:o> } } WHERE {}
EOF
cat > triples.rq <<'EOF'
CONSTRUCT { <urn:x:s> <urn:x:p> <urn:x:o> } WHERE {}
EOF
# NB: bin/arq honors a pre-set JENA_HOME when building the classpath, so a
stray
# export runs a DIFFERENT version's jars than the script path suggests — pin
it.
run() {
local v=$1; shift
env JENA_HOME="$WORK/apache-jena-$v" "$WORK/apache-jena-$v/bin/arq" "$@"
}
for v in "${VERSIONS[@]}"; do
echo "================ Apache Jena $v ================"
echo "--- quad CONSTRUCT, default output ---"
run "$v" --query quads.rq 2>&1 | head -4
echo "exit=${PIPESTATUS[0]}"
echo "--- quad CONSTRUCT, --results=trig ---"
run "$v" --query quads.rq --results=trig 2>&1 | head -4
echo "exit=${PIPESTATUS[0]}"
echo "--- triples CONSTRUCT, --results=rdfxml ---"
run "$v" --query triples.rq --results=rdfxml 2>&1 | head -4
echo "exit=${PIPESTATUS[0]}"
echo
done
```
</details>
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]