Oxiland command line¶
oxiland-cli manages local RDF datasets from scripts and interactive shells.
It can create or open a persistent store, import RDF, inspect statements and
graphs, execute SPARQL queries, and export standards RDF.
Install¶
oxiland-cli requires Rust 1.87 or newer:
From a repository checkout:
Invocation model¶
Each process opens a store, runs exactly one command, and exits. There is no interactive multi-command session. Use the same persistent path across invocations to build a workflow.
With --storage fjall, STORE_NAME is a filesystem path. With
--storage memory, use memory; that model starts empty and is discarded when
the command exits.
Global options¶
| Option | Default | Meaning |
|---|---|---|
-s, --storage <TYPE> |
fjall |
fjall, memory (mem is accepted), or an optional backend compiled into oxiland-cli |
-n, --new |
off | Allow creation of a missing persistent store |
-q, --quiet |
off | Suppress informational status on stderr |
-o, --output <SYNTAX> |
nquads |
RDF syntax for print, find, graph queries, and default serialize |
-r, --results <FORMAT> |
xml |
ASK/SELECT result format: XML, JSON, CSV, or TSV |
-V, --version |
— | Print the package version |
Data output goes to stdout. Status and errors go to stderr, which makes shell redirection safe:
Successful commands exit 0. Argument, RDF, SPARQL, storage, and I/O failures
exit nonzero and include an oxiland-cli: diagnostic on stderr.
Create and import a dataset¶
Syntax is inferred from an unambiguous path extension. Override it for files without a useful extension:
Choose import failure semantics deliberately:
| Command | Behavior |
|---|---|
parse |
Parses the complete input before insertion; malformed RDF leaves the model unchanged |
parse-stream |
Inserts progressively; statements before a later parse error may remain durable |
Use parse for normal imports. Use parse-stream only when partial progress is
acceptable and recovery is defined.
Supported RDF names are turtle, ntriples, nquads, trig, and rdfxml.
Unknown or ambiguous formats fail instead of being guessed.
Inspect and export¶
Print all quads as N-Quads:
Serialize as Turtle when the dataset is graph-only:
Use N-Quads or TriG for a dataset containing named graphs. Turtle, N-Triples, and RDF/XML cannot represent multiple graph names.
List named graph IRIs:
Add and remove statements¶
Arguments use plain absolute IRIs, _: blank-node identifiers, and simple
literals. Quote literals at the shell boundary when they contain whitespace:
oxiland-cli ./catalog add \
https://example.com/alice \
https://schema.org/name \
'Alice Smith'
oxiland-cli ./catalog remove \
https://example.com/alice \
https://schema.org/name \
'Alice Smith'
Add a final graph IRI to operate in a named graph:
oxiland-cli ./catalog add \
https://example.com/alice \
https://schema.org/name \
Alice \
https://example.com/graph/people
The node-argument grammar intentionally does not support typed or language-tagged literals. Import RDF for those values or use an application SPARQL Update API.
Find statements¶
find accepts subject, predicate, object, and an optional context. Use - as a
wildcard:
# Everything about Alice, across graphs
oxiland-cli ./catalog find https://example.com/alice - -
# Everything in one named graph
oxiland-cli ./catalog find - - - https://example.com/graph/people
find output uses the global --output syntax. The implementation currently
collects matching quads before serialization, so bound patterns are preferable
for large stores.
Query with SPARQL¶
The query command keeps an rdfproc-shaped language and URI position:
Use sparql or - for the language and - for the unused query URI:
oxiland-cli --results csv ./catalog query sparql - \
'SELECT ?s ?name WHERE { ?s <https://schema.org/name> ?name } LIMIT 100'
ASK and SELECT use --results (xml, json, csv, or tsv). CONSTRUCT and
DESCRIBE use the RDF --output syntax.
RDQL and SPARQL Update are not CLI commands. Use the Rust or Python API for updates.
In-memory mode¶
Because every invocation performs one command and exits, in-memory mode is useful for input validation and one-shot empty-dataset checks—not for a sequence of import, query, and export commands. Use a persistent path for those workflows.
Backup workflow¶
Export named graphs to a file outside the live store directory:
Verify restoration into a new path:
oxiland-cli --new ./restore-check parse ./backups/default-graph.nt --syntax ntriples
oxiland-cli ./restore-check query sparql - 'ASK { ?s ?p ?o }'
Import merges statements into the target dataset. Restore into a new store when replacement semantics are required.
Named-graph restore
The CLI can export a complete named-graph dataset as N-Quads, but its
parser does not expose the dataset graph target needed to import arbitrary
named graphs from one N-Quads or TriG file. Restore those backups with Rust
Model::import_nquads_from_path or Python Model.import_nquads. CLI restore
works directly for graph-only N-Triples/Turtle/RDF/XML data.
Scope and migration¶
The CLI is inspired by Redland rdfproc workflows, but it is not a binary,
flag, output, or session-level drop-in. It supports the documented Oxiland
storage and syntax matrix and rejects unknown backends and query languages.
See Migration from Redland, Persistence, and the FAQ.