MIRA
Modular Interoperable Research Attribution — The discourse-graph schema eLife’s article platform reads. This states what we believe the schema requires and how a claim tree maps onto it. Where we have read it wrong, the last section is where to tell us.
Pinned at 483f0b21 ·
mapping tables generated from scripts/export_mira.py ·
the export layer, per paper
What the schema requires
MIRA defines fourteen classes and thirty properties. For a claim graph the load-bearing
ones are the node types — Claim, Evidence,
Question, Study, Protocol,
SourceDocument — and three classes imported from a Discourse Graphs
base schema that govern relations: AbstractRelationDef,
RelationDef and RelationInstance.
Relations are reified. An edge is a node carrying source
and destination, typed by a relation declaration. It is not a predicate on
a claim: supports and opposes sit on an Argument
mixin that neither Claim nor Evidence mixes in, and every
generated node shape is sh:closed, so an inline relation is rejected.
The vocabulary is extensible. AbstractRelationDef names a
relation type; RelationDef binds its domain and range. The abstract root
carries no supporting or opposing commitment, which is what allows a relation that is
neither — a boundary condition, a deductive step — to be declared rather
than forced into supports.
Every Claim addresses a Question. A claim tree has no such node, so one
is derived from each hypothesis and flagged haak:autoDerived; the gap
report lists all 37 for review.
MIRA is a draft — bibo:status status:draft, no tags or releases. This
corpus pins commit 483f0b21480c, vendored under
vendor/ so validation is reproducible offline. Note that the JSON-LD
context is served from purl.org/mira-science/mira.jsonld; the GitHub Pages
copy is stale and retypes Study as Protocol.
Claim roles to MIRA node types
| Claim role | MIRA type |
|---|---|
assessment | mira:Claim |
control | mira:Evidence |
empirical | mira:Evidence |
hypothesis | mira:Claim |
interpretation | mira:Claim |
literature-context | dg:SourceDocument |
methodological | mira:Protocol |
prediction | mira:Claim |
scope | mira:Claim |
synthesis | mira:Claim |
Relation types
Each is declared in every export document as an AbstractRelationDef with a
domain, a range and a description, then used to type edge nodes. Those declared under a
core predicate remain legible to a reader who follows only supports and
opposes.
Declared under mira:supports
| Relation | Domain → range | Meaning |
|---|---|---|
confirms | Evidence → Claim | The source evidence confirms the destination claim. |
extends | Claim → Claim | The source claim extends the destination claim to new conditions. |
predicts | Claim → Evidence | The source claim predicts the destination result; inverse of confirms. |
replicates | Evidence → Claim | The source evidence independently replicates the destination claim. |
supports | Claim → Claim | The source claim provides support for the destination claim. |
validates | Evidence → Claim | The source evidence validates the destination claim. |
Declared under mira:opposes
| Relation | Domain → range | Meaning |
|---|---|---|
contradicts | Claim → Claim | The source claim contradicts the destination claim. |
in-tension-with | Claim → Claim | The source and destination claims are both asserted yet pull a shared implication in opposite directions. |
opposes | Claim → Claim | The source claim stands against the destination claim. |
refutes | Evidence → Claim | The source evidence is incompatible with the destination claim. |
rules-out | Evidence → Claim | The source evidence eliminates the destination claim as viable. |
Declared neutrally — neither support nor opposition
| Relation | Domain → range | Meaning |
|---|---|---|
derived-from
inverse of entails | Claim → Claim | The source claim was derived from the destination claim; the inverse of entails. |
dissociates-with | Claim → Claim | The source and destination jointly establish a dissociation — a contrast between two results, neither bearing on the other's truth. MIRA has no predicate for a contrast, so like the deductive relations it hangs at AbstractRelationDef and the gap report names it. |
enables-method | Evidence → Protocol | The source result makes the destination method possible. |
entails | Claim → Claim | The source claim logically entails the destination claim: the deductive step from a hypothesis to a prediction it commits to. |
interprets | Claim → Evidence | The source claim offers a theoretical reading of the destination result. |
part-of | Claim → Claim | The source claim is a component of the destination — one comparison, condition, measure or study of a proposition the destination states whole. MIRA has no predicate for composition, so like the deductive relations it hangs at AbstractRelationDef and the gap report names it. |
qualifies | Claim → Claim | The source narrows the destination claim's applicability. |
requires | Claim → Claim | The source claim depends on the destination holding. If the destination fails, the source is undermined. |
scopes | Claim → Claim | The source states a boundary condition governing where the destination claim is valid. Neither supports nor opposes. |
tests | Evidence → Claim | The source evidence was gathered to test the destination claim. Neither supports nor opposes: it records that a test was run, not how it came out. |
What the conversion does not carry
Paper-level scope. 3 relations of 916 target the paper
as a whole rather than another claim. scopes has mira:Claim as
its range and MIRA has no paper-level node, so no edge is emitted and no target is
invented. Each paper’s gap report names them.
Inverse relations. 48 derived-from relations
are declared with owl:inverseOf and emitted in one direction only, which is
MIRA’s own practice. Both directions are recoverable from the forward edge and the
declaration; nothing is lost.
Verification. 197 records state which code was
run, against which deposited file, at which commit, and what value came out beside the
published one. MIRA has no node type for any of it — observationBase
records what a claim rests on, not whether anyone recomputed it.
Stance. MIRA cannot record that a paper considered a proposition and
rejected it. An alternative explanation exported as a mira:Claim therefore
reads as one the paper asserts; the rules-out edge gives a reader the
direction of the argument but not the paper’s position.
Both of the last two are additive — neither requires changing anything MIRA
already does — and both travel in the extended export under a
haak: namespace pending a decision upstream.
Does it validate
violations attributable to our encoding, across all 12 exports, against the pinned shapes.
from one bug in MIRA’s own generated shapes, on two properties, which no document can satisfy.
A four-node document, using only MIRA’s own terms, that MIRA’s own shapes reject
gen-shacl renders subproperty_of as an sh:in list of slot names, so both properties demand an IRI that is also one of two strings. No document can satisfy them.
pyshacl -s vendor/mira.shacl -sf turtle -e vendor/mira.ttl \
-df json-ld docs/schema-mapping/mira-sh-in-bug.jsonld
Conforms: False · 2 violations, one per property | Paper | Ours | Upstream | Failing property |
|---|---|---|---|
| gadeke-2026-guilt-insula | 0 | 44 | addresses, sourceDocument |
| ejdrup-2026-dopamine | 0 | 19 | addresses, sourceDocument |
| headley-2026-inhibitory-rhythms | 0 | 19 | addresses, sourceDocument |
| bouyeure-2026-fear-rsa | 0 | 18 | addresses, sourceDocument |
| meijer-2025-serotonin-orthogonal | 0 | 17 | addresses, sourceDocument |
| wengert-2026-kcnc1 | 0 | 16 | addresses, sourceDocument |
| rozak-2026-neurovascular-dl | 0 | 14 | addresses, sourceDocument |
| scheller-2026-self-prioritization | 0 | 13 | addresses, sourceDocument |
| artiushin-2026-spider-atlas | 0 | 10 | sourceDocument |
| kolb-2026-igabasnfr2 | 0 | 10 | addresses, sourceDocument |
| meijer-2025-serotonin-additive-r1 | 0 | 4 | addresses |
| kammer-2026-foveal-feedback | 0 | 3 | addresses |
Generated by scripts/validate_mira.py against vendor/mira.shacl at 483f0b21
Against the pinned shapes, these exports produce 0 violations
attributable to this encoding. The 187 that remain come
from one constraint in MIRA’s generated shapes that no document can satisfy:
gen-shacl renders mira:addresses and
mira:sourceDocument with an sh:in list of slot names beside an
sh:class and sh:nodeKind sh:BlankNodeOrIRI, so each shape
requires an IRI and then requires that IRI to be one of two strings.
A four-node document using only MIRA’s own terms fails identically. It ships as
docs/schema-mapping/mira-sh-in-bug.jsonld so the distinction between a
schema fault and an encoding fault can be checked rather than asserted.
python3 scripts/validate_mira.py The script reproduces the upstream fault first and refuses to classify anything if that proof stops behaving as documented, then splits every violation into upstream or ours and exits non-zero if any is ours.
Open questions for the MIRA authors
- Is the reified relation node the intended encoding? It is derivable only from closed-shape failures, and a line in the README would save every consumer the work.
- Should
ClaimandEvidencemix inArgument? They do indiscoursegraphs.yamlandmira.ttlbut not inmira.yaml, which decides whether an inlinesupportsis ever legal. - Is the
sh:inartifact a known issue in the forked LinkML generator? subClassOfis typed@idrather than@vocab, so bare terms in the reference data resolve against the document base rather than the vocabulary. Intended?sh:closed trueon every node shape leaves no sanctioned extension point. Is one planned?- Would MIRA accept a
Verificationnode type, carrying the code, the data identity, the reproduced value and the published value?