Skip to content

Design: 0.6 CLI (oxiland-cli / rdfproc workflows)

Status: accepted for milestone 0.6
Milestone: 0.6
Related: ADR-019

Goal

Ship a workspace binary crate crates/oxiland-cli that covers the rdfproc class of workflows using the safe Oxiland facade. This is workflow parity, not a drop-in binary/ABI clone of native rdfproc.

Packaging

  • Cargo workspace member oxiland-cli
  • Depends on path crate oxiland
  • Owns argv parsing and human-facing output only (no RDF semantics)

Invocation:

oxiland-cli [options] store-name <command> [args...]

store-name is a path (Fjall) or the literal memory for an in-memory model.

Options

rdfproc Oxiland CLI
-n / --new Create Fjall store if missing (OpenOptions::create(true)); without -n, missing paths fail
-s / --storage memory or fjall only; other types error
-o / --output Serialize syntax name (default nquads so named graphs work)
-r / --results SPARQL results format (ResultsFormat::from_name)
-q / --quiet Suppress informational stderr
-v / --version Print crate version
-h / --help Clap help

Commands (0.6 minimum)

Command Behavior
parse PATH [--syntax S] [--base B] Parser::load_path_collecting
parse-stream PATH [--syntax S] [--base B] Parser::load_path_into (progressive)
serialize [--syntax S] Serialize model
print Serialize with -o (default nquads)
add S P O [CONTEXT] Insert statement
remove S P O [CONTEXT] Remove statement
find S|- P|- O|- [CONTEXT] Pattern match; print quads
query sparql|- - QUERY SPARQL only (rdql errors)
contexts List named graphs present

Node arguments use simple heuristics: IRIs as absolute URIs, blank nodes as _:id, otherwise literals.

Non-goals

  • MySQL / Virtuoso / BDB hashes storage plugins
  • Password prompting for remote stores
  • RDQL
  • Exact rdfproc exit codes and banner strings

Evidence

  • Integration tests under crates/oxiland-cli/tests/
  • Harness: compatibility/harness/cli_smoke.py
  • User guide: docs/users/cli.md