RDF 1.2 for Ada
Read RDF without holding it all.
Turtle, TriG, N-Triples and N-Quads arrive as statements, not as a document in memory. Input may be split at any byte. Invalid terms are unrepresentable: a literal in predicate position is a compile error, not a runtime check.
Sink : Collector;
Parser : Turtle_Parsers.Parser :=
Turtle_Parsers.Create
(Source_Name => "example",
Base_IRI => "http://example.org/",
Syntax => Turtle_Parsers.Turtle_Syntax);
begin
Turtle_Parsers.Feed (Parser, Chunk, Sink);
Status := Turtle_Parsers.Finish (Parser, Sink);
Conformance, measured rather than claimed
Each harness reads the W3C manifests with this library's own Turtle parser and reports what it examined, not a verdict. Corpora are pinned by commit, because a conformance number produced against an unrecorded revision is not evidence.
| Suite | Examined | Rejected valid | Accepted invalid | Wrong result |
|---|---|---|---|---|
| RDF 1.1 and 1.2 | 1050 | 0 | 0 | 0 |
| RDFC-1.0 canonicalization | 86 | — | — | 0 |
| Notation3 syntax | 1070 | 0 | 0 | — |
| SPARQL 1.1 syntax | 488 | 0 | 0 | — |
A differential asks two other implementations, oxigraph and Jena, the question the suites cannot: whether anybody else reads what this library writes. Across 2,443 documents there is no divergence either would not be able to name.
Three crates
They are separate because their models are, not merely because they are large.
| Crate | What it is |
|---|---|
flyology_rdf | The RDF 1.2 model and its serializations |
flyology_n3 | Notation3, whose formulas and variables RDF cannot express |
flyology_sparql | SPARQL 1.1 queries, which are documents rather than data |