oxiland 0.2.0

A Redland-compatible RDF toolkit backed by Oxigraph
Documentation
# Oxiland 0.2 compatibility report

Status: complete  
Milestone: 0.2 — Redland-shaped RDF input and output  
Oxiland version: 0.2.0  
Oxigraph version: 0.5.9  
Inventory:
[`compatibility/inventory/redland-1.0.17-oxiland-0.2.json`](../../compatibility/inventory/redland-1.0.17-oxiland-0.2.json)

## Claim

Oxiland 0.2 provides safe, stream-oriented `Parser` and `Serializer` facades
with closed `Syntax` discovery for Turtle, N-Triples, N-Quads, TriG, and
RDF/XML. Compatibility is scoped to the curated I/O inventory slice and the
evidence linked below. It does **not** claim full Redland API accounting, C
source/ABI compatibility, or byte-identical serialization.

## Decisions

- ADR-007 — progressive `load_into` with explicit collecting path
- ADR-008 — closed `Syntax` and curated alias table
- Graph targets, parse/serialize/Io error categories, and serializer prefix
  builder lifecycle documented in
  [`docs/design/0.2-io-api.md`]../design/0.2-io-api.md

## Evidence

| Gate | Location |
|---|---|
| Integration tests | `tests/io.rs` |
| Curated syntax conformance | `tests/conformance.rs`, `compatibility/conformance/` |
| Format matrix | `compatibility/baseline/format-matrix.json` |
| Native oracle smoke | `compatibility/harness/oracle_smoke.py` |
| Differential smoke | `compatibility/harness/differential_smoke.py` |
| Public API snapshot | `api/oxiland-public-api.txt` |
| Inventory validation | `scripts/check-inventory.py` |

## Acceptance matrix summary

Advertised syntaxes pass empty/one-triple round-trips, malformed-input
categorization, language/datatype preservation, Unicode literals, base/relative
IRI resolution (Turtle), named-graph preservation (N-Quads/TriG), early-stop
streaming, and large-input iteration without a facade-level full collect.
N3 and JSON-LD are unsupported/deferred with explicit errors.

## Known deviations

- Redland content sniffing (`guess`) is unsupported.
- Ambiguous aliases such as `text/plain`, `application/xml`, `.txt`, and `.xml`
  are rejected; callers must use unambiguous media types/extensions or an
  explicit `Syntax` (ADR-008).
- N3 and JSON-LD are not advertised.
- RDF/XML parse diagnostics may omit line/column when Oxigraph does not provide
  a location.
- Progressive model load is intentionally non-atomic until 0.4 transactions;
  Fjall persists each successful progressive insert.
- Serialization is standards-valid, not byte-identical to Raptor.

## Non-claims

SPARQL result formats, SPARQL Update, transactional import, network fetch,
custom factory registration, and C ABI remain out of scope for 0.2.