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

913
of 916 relations carried
3
not representable
0
validation violations from this encoding
37
Questions synthesised, each flagged

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

0

violations attributable to our encoding, across all 12 exports, against the pinned shapes.

187

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