The Mirror format: a lossless JSON projection of a Metanorma document
as a typed node tree — blocks, inline runs, marks — preserving document
order, attributes, and provenance. It is the wire contract consumed by
the SMART document reader and the HTML JS renderer, and it provides the
mirror provenance object embedded in MKO bundles.
-
Node models (
Metanorma::Mirror::Model) — lutaml-model Serializables with key_value mappings; the JSON wire is the contract. -
The transformer walk, handler registry, and rewriter.
-
Serializers (JSON, YAML) and the output pipeline.
Model knowledge. Which document classes map to which handlers, mark
types, rich-HTML renderers, and id categories is registered by the
model gems: metanorma-document and metanorma-standoc seed the defaults
through the registration seams (Mirror.register_default,
Mirror.mark_builders, Mirror.rich_html_renderers,
Mirror.simple_inline_elements, Mirror.inline_text_substitutions,
Mirror.semx_elements, Mirror.inline_content_iterator,
Mirror::IdStrategy::Positional.register_category). A new flavor or
model registers; this gem never changes (OCP).
require "metanorma/mirror"
require "metanorma/document" # seeds the default registrations
tree = Metanorma::Mirror::Transformer.new.call(model)
json = Metanorma::Mirror::Serialization::JsonSerializer.serialize(tree)