Skip to content

Files & field selection

The CLI detects SQLite and DuckDB by file header, and other formats by file extension. Start by previewing:

jevotron preview records.csv
jevotron preview records.yaml
jevotron preview ontology.obo
jevotron preview services.toml
jevotron preview events.jsonl.gz
jt preview inventory.db
Format One entry Default fields
CSV / TSV One row Each column
YAML Each top-level list item, or one mapping/scalar document Top-level keys
JSON Each top-level array item, or one object/scalar Top-level keys
JSONL Each nonblank line Top-level keys
OBO One stanza Each tag-value occurrence
TOML One document; use records for an array of tables Top-level keys
Text / Markdown One paragraph (configurable) /text
Logs / textlines One nonblank line (configurable) /text
FASTA One sequence record ID, description, sequence
GMT One named set Name, description, members
SQLite / DuckDB One row from each user table Each column

YAML supports multiple documents and keeps dates as text. CSV values remain strings, preserving leading zeros and empty cells. Duplicate headers, duplicate YAML/JSON keys, and ragged CSV rows are rejected rather than silently dropped.

The file format reference explains every parser's defaults, data shapes, extensions, gzip support, and options. Discover options without leaving the terminal:

jevotron formats csv
jevotron preview export.data --format csv --format-option 'delimiter=;'
jevotron preview catalog.json --format-option records=/products

records selects a collection before chunking. --field selects what to score inside each chunk.

Choose fields without writing Python

Repeat --field for each JSON Pointer you want assessed:

jevotron scan airports.csv --id-column ident \
  --field /iso_country --field /latitude_deg --field /longitude_deg

The entire entry remains visible; only selected fields receive scores. --field overrides a parser or config's selected fields. Omit it to use defaults.

Name entries

jevotron preview products.jsonl --id-column sku

--id-column selects a top-level scalar field as the reporting ID. IDs must be nonempty and unique within a scan. Without it, tabular parsers use positional IDs and OBO uses the stanza's id. Databases use primary keys when available, otherwise row positions, and always qualify IDs with the schema and table name (also with --id-column). See database selection rules. Reporting IDs do not affect the cache, but the same values inside the entry data do.

Nested and repeated fields

jevotron preview people.yaml --field /terms/0/start
jevotron preview units.obo --field /def/0
Path Selects
/name Top-level name
/terms/0/start First term's start date
/synonym/1 Second OBO synonym
/a~1b A key literally named a/b
/a~0b A key literally named a~b
'' The whole entry (use --field '')

Paths are exact: wildcard selection is not implemented. For structures that need reshaping rather than selecting, use a small custom parser through --config.

Entries that do not all carry the same fields

A --field path is required: an entry that lacks it is skipped, and the run reports how many were skipped and which path was missing.

jevotron scan mondo-edit.obo --field /def/0
# Skipped 16014 entries lacking selected fields: /def/0 absent in 16014.

Two options relax that requirement:

Option An entry is assessed when
--field (default) it carries every selected path
--optional-field it carries every --field; the optional path is scored where present
--relaxed it carries at least one selected path
# Score the definition always, the comment wherever there is one.
jevotron scan mondo-edit.obo --field /def/0 --optional-field /comment/0

# Score whichever of the two a term happens to carry.
jevotron scan mondo-edit.obo --field /def/0 --field /comment/0 --relaxed

An entry carrying none of the selected paths is always skipped, because there would be nothing to ask about. A path that matches no entry anywhere is a typo rather than sparse data, so the run fails with Field does not exist before making any API call.

Each result lists the selected paths the entry did not carry:

{"id": "MONDO:0000002", "fields": [{"path": "/def/0", ...}], "absent": ["/comment/0"]}

Read that alongside score. An entry's score is the highest score among the fields listed in fields, so an entry assessed on fewer fields had fewer chances to score highly. absent records what was never looked at, rather than letting it read as a field that passed. To rank entries without that effect, use --output-format csv, which emits one row per field, and sort by field_score.

OBO behavior

Every tag maps to a list, even when it appears once. The stanza type is retained as _stanza context. Raw values retain comments and escapes; continued lines are joined. File headers are ignored. No identifiers are resolved and no graph is traversed. Put shared background information in --guidance.