Docs

Machine Page Format (MPF) 0.6

Vorige versie. MPF 0.6 blijft gepubliceerd zodat documenten die deze versie declareren volgens hun oorspronkelijke contract kunnen worden geïnterpreteerd. De huidige geïmplementeerde versie is MPF 0.7.

Status: geïmplementeerde specificatie
Versie: 0.6
Referentie-implementatie: mpf-build

Machine Page Format (MPF) is een gegenereerde, machineleesbare companion-representatie van een webpagina. MPF 0.6 wordt hier bepaald door het gedrag van de mpf-build-implementatie voor deze versie. Dit document beschrijft wat die implementatie produceert; het definieert geen toekomstig gedrag dat nog niet is geïmplementeerd.

1. Bestandsvorm

Een MPF-document is UTF-8-tekst met YAML-frontmatter gevolgd door een Markdown-body.

---
mpf: '0.6'
title: Example
...
mpf-id: <sha256>
---

# Markdown body

De frontmatter wordt geserialiseerd in stabiele invoegvolgorde. De body wordt vóór serialisatie getrimd en het uiteindelijke document eindigt met een newline.

1.1 MPF-identifier

mpf-id is een SHA-256-hash van het volledige gegenereerde MPF-document voordat het veld mpf-id zelf wordt toegevoegd.

De hashbron is exact:

---
<serialized YAML without mpf-id>
---

<body>

Daarmee is mpf-id een contentidentifier voor de gegenereerde MPF-representatie, niet voor de bron-HTML.

1.2 Bronhash

source-hash is een SHA-256-hash van de ruwe bron-HTML die mpf-build leest.

2. Paginageneratie

mpf-build doorloopt de bronmap recursief, negeert verborgen items en node_modules, en verwerkt bestanden die eindigen op .html of .htm.

Voor elke pagina:

  1. leest het de ruwe HTML en de wijzigingstijd van het bestand;
  2. laadt het de siteconfiguratie en eventuele page override;
  3. parseert het de paginametadata;
  4. haalt het MPF-only materiaal uit de pagina en past het de MPF-HTML-transformaties van de implementatie toe;
  5. selecteert het het geconfigureerde contentgebied;
  6. verwijdert het ruis die niet tot de content behoort;
  7. converteert het de geselecteerde HTML naar Markdown;
  8. voegt het stabiele heading-ankers toe en bouwt het de inhoudsopgave;
  9. plaatst het MPF-only Markdown vooraan, indien aanwezig;
  10. bepaalt het canonical-, MPF-, identiteits-, taal- en provenancemetadata;
  11. plaatst het een companion instruction-blok vooraan wanneer geconfigureerd;
  12. serialiseert het het MPF-document en schrijft het naar de outputtree;
  13. schrijft het een signature naast het MPF-document wanneer signing is geconfigureerd.

De outputmap is standaard de bronmap en kan met --out worden gewijzigd.

3. Frontmatter

3.1 Velden die voor een pagina worden uitgestuurd

De huidige paginagenerator stuurt de volgende velden uit:

Veld Gedrag
mpf MPF-versie uit de siteconfiguratie.
title HTML-paginatitel. Verplicht.
url Canonieke URL voor mensen. Verplicht.
mpf-url Absolute URL van dit MPF-bestand.
organization Organisatie uit de siteconfiguratie.
domain Domein uit de siteconfiguratie.
lang Taal uit page override, anders afgeleid uit pad, anders standaardtaal.
updated Wijzigingsdatum van de bron-HTML, geformatteerd als YYYY-MM-DD.
author Auteur uit de siteconfiguratie.
provenance Page override of geconfigureerde standaard. Verplicht.
source-hash SHA-256 van de ruwe bron-HTML.
toc Array met gegenereerde heading-items.
spec-origin Geconfigureerde spec-origin, anders het geconfigureerde domein.
content-origin Geconfigureerde content-origin, anders het geconfigureerde domein.
content-id Page override of gegenereerde stabiele contentidentiteit. Verplicht.
content-parity Relatie tussen MPF-content en voor mensen zichtbare HTML.
mpf-id SHA-256-identifier van de gegenereerde MPF-representatie.

De implementatie kan daarnaast de volgende optionele velden uitsturen wanneer ze naar een niet-lege waarde resolven:

  • c2pa-manifest
  • section
  • parent
  • related
  • summary
  • index
  • confidence
  • valid-until
  • review-after
  • content-type
  • companion-instruction
  • companion-contact
  • preferred-representation
  • companion-scope
  • supersedes
  • superseded-by
  • language-variants
  • signature

De builder stopt met een fout als de pagina geen titel, canonical URL, provenance of content ID heeft.

3.2 Samenvatting

summary wordt in deze volgorde bepaald:

  1. page override summary;
  2. HTML-metadatabeschrijving;
  3. weggelaten.

3.3 Content parity

Als de HTML MPF-only materiaal bevat dat de implementatie detecteert, wordt de page frontmatter geforceerd naar:

content-parity:
  html: false
  human-visible-source: false
  hidden-sections: true

Anders gebruikt content-parity de geconfigureerde standaard. Als geen standaard is geconfigureerd, gebruikt de implementatie:

content-parity:
  html: true
  human-visible-source: true
  hidden-sections: false

4. URL’s en identiteit

4.1 Canonieke URL

Als paginametadata een canonical URL levert, wordt die tegen de geconfigureerde base URL opgelost en gebruikt. Voor een index.html-pagina wordt het canonical pad genormaliseerd zodat het op / eindigt.

Zonder canonical paginametadata:

  • resolveert root index.html naar de genormaliseerde base URL plus /;
  • resolven andere HTML-paden onder de geconfigureerde base URL nadat een afsluitende index.html is verwijderd.

4.2 Content ID

Gegenereerde pagina-identiteit heeft deze vorm:

<content-id-prefix>:page:<slug>

De geconfigureerde locale-prefix wordt verwijderd vóór de slug wordt gegenereerd, zodat vertalingen van dezelfde route hetzelfde gegenereerde content ID krijgen.

De slug van de rootpagina is home.

Voor niet-rootpagina’s wordt de route naar lowercase omgezet, worden padsegmenten met koppeltekens verbonden en worden niet-ondersteunde tekens naar koppeltekens genormaliseerd.

Voorbeeld uit de ESFI-implementatie:

esfi:page:home

4.3 Taaldetectie

Geconfigureerde talen komen uit config.languages. Als die lijst leeg of afwezig is, wordt alleen de geconfigureerde standaardtaal gebruikt.

De builder controleert het eerste padsegment. Is dat een geconfigureerde taalcode, dan wordt die taal toegewezen; anders wordt de standaardtaal toegewezen.

4.4 Taalvarianten

Voor elke geconfigureerde taal genereert de builder een language-variants-item dat naar de verwachte MPF-URL voor hetzelfde locale-onafhankelijke contentpad wijst.

Voor de standaardtaal wordt geen locale-padprefix ingevoegd. Niet-standaardvarianten krijgen /<lang>/.

De implementatie genereert deze URL’s uit configuratie en padidentiteit; in deze stap controleert ze niet of elk vertaald bestand bestaat.

Voorbeeld:

language-variants:
  en: https://esfi.eu/index.mpf
  fr: https://esfi.eu/fr/index.mpf
  nl: https://esfi.eu/nl/index.mpf
  de: https://esfi.eu/de/index.mpf

5. Markdown-body en inhoudsopgave

De geselecteerde HTML-content wordt vóór MPF-serialisatie naar Markdown geconverteerd.

Headings H1 tot en met H4 worden in toc opgenomen en krijgen expliciete Markdown-ankers:

## Example heading {#example-heading}

Elke TOC-entry heeft:

- level: 2
  text: Example heading
  id: example-heading

Ankergeneratie:

  • zet de heading om naar lowercase;
  • behoudt Unicode-letters en -cijfers;
  • vervangt andere reeksen door -;
  • reduceert herhaalde koppeltekens;
  • verwijdert koppeltekens aan begin en einde;
  • valt terug op section als geen slug overblijft;
  • lost duplicaten op door -2, -3 enzovoort toe te voegen.

Headings binnen fenced code blocks worden genegeerd.

Bestaande inline Markdown-opmaak en links worden verwijderd uit de headingtekst die voor TOC-identiteit wordt gebruikt.

6. Companion instruction

Als companion-instruction aanwezig is, plaatst de builder die als blockquote vooraan in de Markdown-body.

Eénregelige vorm:

> Companion instruction: <instruction>

Meerregelige vorm:

> Companion instruction:
> <line 1>
> <line 2>

7. Site-indexen

Een build produceert ook drie discoveryoutputs op siteniveau:

  • llms.mpf
  • llms.txt
  • llms-full.txt

7.1 Geïndexeerde pagina’s

Een pagina wordt alleen in gegenereerde indexen opgenomen wanneer de resolved frontmatter bevat:

index: true

Geïndexeerde entries worden lexicografisch op MPF-URL gesorteerd.

7.2 llms.mpf

llms.mpf is zelf een MPF 0.6-document. De gegenereerde frontmatter gebruikt:

  • titel Site Index — <organization>;
  • taal = geconfigureerde standaardtaal;
  • provenance = human;
  • content type = reference;
  • index: true;
  • content-id: <content-id-prefix>:page:llms;
  • verborgen/niet-HTML content parity.

De body bevat de heading van de organisatie, een optionele geconfigureerde beschrijving en een Markdown-lijst van alle geïndexeerde MPF-pagina’s. Elk item bevat de paginasamenvatting wanneer beschikbaar.

De huidige implementatie neemt geïndexeerde pagina’s uit alle geconfigureerde talen op in llms.mpf.

7.3 llms.txt

De builder onderhoudt een MPF-discoverysectie in llms.txt:

MPF: <version>
MPF-index: /llms.mpf

## Pages
...

Bestaat geen llms.txt, dan maakt de builder er een met een organisatieheading. Bestaat al een MPF-sectie, dan vervangt hij die sectie terwijl content ervoor en erna behouden blijft.

7.4 llms-full.txt

llms-full.txt concateneert alleen de bodies van geïndexeerde pagina’s in de geconfigureerde standaardtaal.

Per pagina schrijft het de titel, canonical URL en gegenereerde MPF-body.

8. Ondertekening

De builder laadt een signing key uit de geconfigureerde signing-key-instelling.

Wanneer een signing key beschikbaar is:

  • krijgt page frontmatter een signature-URL;
  • krijgt llms.mpf eveneens een signature-URL;
  • schrijft de implementatie een signature-artifact naast de gegenereerde MPF-content.

Als geen signing key is geconfigureerd, wordt het signature-veld weggelaten.

9. Command-line interface

De geïmplementeerde CLI is:

mpf-build <source-dir> [options]

Opties:

Optie Effect
--config <path> Gebruik een specifiek mpf.config.json.
--out <path> Schrijf gegenereerde bestanden naar een andere map.
--dry-run Rapporteer gegenereerde paden zonder bestanden te schrijven.
--verbose Log elk verwerkt bestand met titel, URL en TOC-aantal.
--watch Bouw opnieuw bij wijzigingen in HTML, page override of configuratie.

In watchmodus worden rebuildverzoeken geserialiseerd: als tijdens een actieve build een wijziging optreedt, wordt één extra rebuild in de wachtrij gezet en daarna uitgevoerd.

10. ESFI 0.6-referentieconfiguratie

De ESFI 0.6-deployment gebruikte:

{
  "mpf": "0.6",
  "organization": "European Strategy & Future Infrastructure",
  "domain": "esfi.eu",
  "base-url": "https://esfi.eu/",
  "author": "ESFI",
  "default-lang": "en",
  "languages": ["en", "fr", "nl", "de"],
  "content-id-prefix": "esfi"
}

Die deployment definieerde daarnaast standaardwaarden voor provenance, confidence, content type, indexing, companion scope, companion contact, preferred representation en content parity.

11. Niet-claims

MPF 0.6 krijgt niet automatisch een capaciteit alleen omdat een veldnaam die zou kunnen beschrijven. Deze specificatie claimt uitsluitend gedrag dat in de bijbehorende referentie-implementatie aanwezig is.

Met name gegenereerde metadata zoals language-variants, confidence, companion-scope, valid-until of review-after zijn beschrijvende metadata. De builder stuurt of leidt ze af zoals hierboven beschreven; de 0.6-implementatie impliceert geen aanvullende policy engine, netwerkvalidatie, vertaalverificatie, expiry enforcement of confidence-berekening.