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:
- leest het de ruwe HTML en de wijzigingstijd van het bestand;
- laadt het de siteconfiguratie en eventuele page override;
- parseert het de paginametadata;
- haalt het MPF-only materiaal uit de pagina en past het de MPF-HTML-transformaties van de implementatie toe;
- selecteert het het geconfigureerde contentgebied;
- verwijdert het ruis die niet tot de content behoort;
- converteert het de geselecteerde HTML naar Markdown;
- voegt het stabiele heading-ankers toe en bouwt het de inhoudsopgave;
- plaatst het MPF-only Markdown vooraan, indien aanwezig;
- bepaalt het canonical-, MPF-, identiteits-, taal- en provenancemetadata;
- plaatst het een companion instruction-blok vooraan wanneer geconfigureerd;
- serialiseert het het MPF-document en schrijft het naar de outputtree;
- 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-manifestsectionparentrelatedsummaryindexconfidencevalid-untilreview-aftercontent-typecompanion-instructioncompanion-contactpreferred-representationcompanion-scopesupersedessuperseded-bylanguage-variantssignature
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:
- page override
summary; - HTML-metadatabeschrijving;
- 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.htmlnaar de genormaliseerde base URL plus/; - resolven andere HTML-paden onder de geconfigureerde base URL nadat een afsluitende
index.htmlis 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
sectionals geen slug overblijft; - lost duplicaten op door
-2,-3enzovoort 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.mpfllms.txtllms-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.mpfeveneens eensignature-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.