Three different lexical forms today: SPARQL-JSON/XML render Rust Display ("1000000"), native CSV/TSV renders ryu ("1000000.0"), N-Triples/N-Quads export renders {:E} ("1E6" — missing the mandatory mantissa dot). The XSD canonical form is "1.0E6".
Fix: one shared canonical_xsd_double helper routed through sparql.rs, sparql_xml.rs, delimited.rs, LiteralValue::lexical(), and export.rs:1236/:1465; JSON-LD numeric output stays a native JSON number (deliberate). User-visible output change — changelog note for downstream string-matchers; R2RML/Iceberg lexical() consumers flagged. Roadmap PR-L2.
Found and verified by the W3C SPARQL burn-down audit (PR #1437; docs/audit/burn-down/ROADMAP.md §5 on branch test/sparql-testsuite-full-coverage).
Three different lexical forms today: SPARQL-JSON/XML render Rust
Display("1000000"), native CSV/TSV renders ryu ("1000000.0"), N-Triples/N-Quads export renders{:E}("1E6"— missing the mandatory mantissa dot). The XSD canonical form is"1.0E6".Fix: one shared
canonical_xsd_doublehelper routed throughsparql.rs,sparql_xml.rs,delimited.rs,LiteralValue::lexical(), andexport.rs:1236/:1465; JSON-LD numeric output stays a native JSON number (deliberate). User-visible output change — changelog note for downstream string-matchers; R2RML/Iceberglexical()consumers flagged. Roadmap PR-L2.Found and verified by the W3C SPARQL burn-down audit (PR #1437;
docs/audit/burn-down/ROADMAP.md§5 on branchtest/sparql-testsuite-full-coverage).