Docs

Implementatie

Van een bestaande statische site naar gepubliceerde MPF, in één buildstap.

MPF wordt gegenereerd, niet met de hand geschreven. De referentie-implementatie, mpf-build, leest de voltooide HTML van een site en schrijft naast elke pagina een .mpf-companion, samen met de machine-indexen van de site. In productie verandert niets: de server blijft statische bestanden serveren.

Deze pagina is de implementatiehandleiding. Velddefinities staan in Specificatie 0.7; discovery wordt behandeld in Publicatie en discovery. Elke regel hieronder is gemarkeerd als Specificatie 0.7, Referentie-implementatie of ESFI-praktijk; de markers worden uitgelegd in het Overzicht.

Vereisten

  • Een site die statische HTML-bestanden produceert (ongeacht generator, of handgeschreven HTML).
  • Node.js 18 of nieuwer om mpf-build uit te voeren. Referentie-implementatie
  • Schrijftoegang tot de outputmap, en tot DNS als u de optionele DNS-declaratie publiceert.

1. Haal de referentie-implementatie op

mpf-build wordt als bron gepubliceerd op git.esfi.eu/esfi/mpf. Het wordt momenteel niet via het npm-register verspreid.

git clone https://git.esfi.eu/esfi/mpf.git
cd mpf/mpf-build
npm install

Voer het rechtstreeks uit:

node ./bin/mpf-build.js <source-dir> --config <path-to-mpf.config.json>

of maak het commando mpf-build beschikbaar op uw machine met npm link vanuit dezelfde map.

2. Declareer de uitgever: mpf.config.json

Het configuratiebestand vermeldt wie de uitgever is, welke talen de site gebruikt en welke standaarddeclaraties elke pagina draagt. Het staat doorgaans in de projectroot.

{
  "mpf": "0.7",
  "organization": "Example Publisher",
  "domain": "example.org",
  "base-url": "https://example.org/",
  "spec-url": "https://docs.esfi.eu/spec/mpf/0.7",
  "author": "Example Publisher",
  "default-lang": "en",
  "languages": ["en"],
  "content-id-prefix": "example",
  "content-selector": "main",
  "description": "One line describing this publication.",
  "defaults": {
    "provenance": "human",
    "index": true,
    "companion-scope": {
      "cite": true,
      "summarize": true,
      "train": false,
      "index": true,
      "relay": false
    },
    "companion-contact": "mailto:web@example.org",
    "companion-footer": "Example Publisher — https://example.org"
  }
}

Verplichte keys

De builder stopt met een fout wanneer een van deze ontbreekt of ongeldig is. Referentie-implementatie

Key Regel
mpf Versiestring die in elk bestand wordt uitgestuurd
organization, domain, author Niet-lege strings
base-url Basis-URL van de site; afsluitende slashes worden genormaliseerd
default-lang Moet één van languages zijn
languages Niet-lege array met taalcodes
content-id-prefix Namespace voor gegenereerde content-id-waarden; bewust los van organization zodat identifiers een naamswijziging overleven
defaults.provenance human, ai-assisted of ai-generated
defaults.index Boolean

Optionele keys

Key Effect Status
spec-url Canonieke specificatie-URL, uitgestuurd als MPF-spec in llms.txt Specificatie 0.7
description Beschrijving op één regel gebruikt in llms.txt en llms.mpf Specificatie 0.7
content-selector CSS-selector voor het contentgebied Specificatie 0.7
spec-origin, content-origin Origindeclaraties in frontmatter; standaard domain Specificatie 0.7
signing-key Pad naar een private key; activeert signatures (zie stap 6) Specificatie 0.7 (gedrag), Referentie-implementatie (key handling)
defaults.confidence confirmed, probable, speculative of contested Referentie-implementatie (toegestane waarden)
defaults.content-type specification, narrative, data, analysis, reference, legal of profile Referentie-implementatie (toegestane waarden)
defaults.companion-scope Booleans voor cite, summarize, train, index, relay Specificatie 0.7 (veld), Referentie-implementatie (validatie)
defaults.content-parity Standaard pariteitsdeclaratie Specificatie 0.7
defaults.companion-instruction Bericht van de uitgever aan de machinelezer; wordt ook als blockquote voor de body geplaatst Specificatie 0.7
defaults.companion-footer Uitgeverssignatuur op één regel, toegevoegd aan de body; mag geen regeleinden of HTML bevatten Specificatie 0.7
defaults.companion-contact Contact voor machinelezers, bijvoorbeeld mailto: Specificatie 0.7
defaults.c2pa-manifest Verwijzing naar een C2PA-manifest Specificatie 0.7
defaults.preferred-representation mpf of html Referentie-implementatie (toegestane waarden)

Elke declaratie is een beslissing van de uitgever. Behandel de defaults als een verklaring waar uw organisatie achter zal staan, niet als technische instellingen.

companion-scope legt alleen processing intent vast. MPF bevat geen licentievoorwaarden, prijzen of compensatievoorwaarden; die horen bij licentiemechanismen buiten het formaat.

3. Override per pagina

Elke pagina kan sitestandaarden overschrijven met een JSON-sidecar naast haar HTML-bestand: index.html → index.mpf.json, guide/page.html → guide/page.mpf.json. Specificatie 0.7 (bestaan), Referentie-implementatie (toegestane velden)

{
  "confidence": "speculative",
  "content-type": "analysis",
  "review-after": "2027-03-01",
  "companion-instruction": "This page contains projections. Treat figures as estimates."
}

Toegestane overridevelden: title, author, summary, section, parent, lang, provenance, c2pa-manifest, confidence, content-type, valid-until, review-after, index, related, companion-instruction, companion-footer, companion-scope, companion-contact, preferred-representation, supersedes, superseded-by, language-variants, content-id, content-parity, signature.

Een onbekend veld stopt de build. related is een array van { "url", "relation" }, waarbij relation één van prerequisite, extends, source, contradicts, alternative, supersedes, details is. Referentie-implementatie

4. Bepaal wat in de body terechtkomt

Contentgebied

De builder neemt het element dat overeenkomt met content-selector. Als niets overeenkomt, of de match leeg is, valt hij in deze volgorde terug op main, article, [role="main"], .content en body. Binnen het geselecteerde gebied verwijdert hij navigatie, headers, footers, scripts, styles en elementen met aria-hidden="true". Een pagina zonder bruikbaar contentgebied wordt overgeslagen en gerapporteerd. Specificatie 0.7 (contentselectie), Referentie-implementatie (fallbackvolgorde en ruislijst)

Markers in de pagina

Vier HTML-attributen laten een uitgever de machinebody sturen zonder te veranderen wat mensen zien. Referentie-implementatie

Attribuut Effect
data-mpf-only Content verschijnt alleen in de MPF-body en wordt ervoor geplaatst. De aanwezigheid ervan zet content-parity op html: false, human-visible-source: false, hidden-sections: true.
data-mpf-hide Content wordt uitgesloten van de MPF-body.
data-mpf-text="…" Het element wordt in de MPF-body vervangen door de opgegeven tekst; nuttig voor verhulde contactadressen.
data-mpf-alt="…" Afbeeldingen, media en embeds worden vervangen door de opgegeven tekst. Embeds zonder dit attribuut verdwijnen uit de MPF-body.

data-mpf-only moet spaarzaam worden gebruikt. Machine-only content is precies waarvoor de pariteitsdeclaratie bestaat; de builder declareert die automatisch zodat ze niet verborgen gezag kan krijgen.

5. Voer de build als laatste uit

Voer mpf-build uit nadat de HTML definitief is, over de voltooide outputmap:

"scripts": {
  "build": "astro build",
  "postbuild": "mpf-build dist --config mpf.config.json"
}

Geef --config expliciet door wanneer u een gegenereerde map zoals dist/ verwerkt, zodat de builder de configuratie niet daarin zoekt. Referentie-implementatie

Command-line opties

Specificatie 0.7

Optie Effect
--config <path> Configuratiebestand; standaard <source-dir>/mpf.config.json
--out <path> Schrijf output naar een andere map; standaard in place
--dry-run Rapporteer wat zou worden geschreven, schrijf niets
--verbose Log elke verwerkte pagina met titel, URL en aantal items in de inhoudsopgave
--watch Bouw opnieuw bij wijzigingen in HTML, page overrides of configuratie

Wat de build schrijft

Artefact Locatie Status
Page companion Naast elke pagina, .html → .mpf Specificatie 0.7
llms.mpf Siteroot; MPF-index van pagina’s met index: true Specificatie 0.7
llms.txt Siteroot; MPF-sectie gemaakt of vervangen, overige content behouden Specificatie 0.7
llms-full.txt Siteroot; bodies van geïndexeerde pagina’s in de standaardtaal Specificatie 0.7
.sig-bestanden Naast elke .mpf, wanneer signing is geconfigureerd Specificatie 0.7

Canonieke URL’s en source-hash-waarden worden altijd uit de bron-HTML en het bronrelatieve pad afgeleid, nooit uit het outputpad. Referentie-implementatie

Volgorde en drift

Elke companion verankert zijn bron met source-hash. Als de HTML opnieuw wordt gegenereerd zonder mpf-build opnieuw te draaien, of omgekeerd, drijven beide uit elkaar. Een verouderde companion is erger dan een ontbrekende, omdat hij gezaghebbend lijkt. Houd MPF-generatie als laatste stap van de build en deploy beide representaties samen.

6. Ondertekenen (optioneel)

Wanneer signing-key naar een private-keybestand wijst, ondertekent de builder elke page companion en llms.mpf, schrijft de signature base64-gecodeerd naar een .sig-bestand ernaast en voegt een signature-URL aan de frontmatter toe. Als het keybestand ontbreekt, gaat de build zonder signatures door en print een waarschuwing. Specificatie 0.7 (signatureveld en artefact), Referentie-implementatie (encoding en key handling)

De signature dekt het volledige MPF-bestand zoals geschreven. Publiceer de bijbehorende public key waar lezers hem kunnen vinden en vermeld welk algoritme wordt gebruikt. De key hoort nooit in de repository of outputmap.

7. Publiceer discovery

De build produceert llms.txt en llms.mpf. ESFI-sites publiceren daarnaast een DNS TXT-record, een /.well-known/mpf-declaratie en optioneel een page-level alternate link. Dit is ESFI-praktijk; hoe u die instelt staat in Publicatie en discovery.

8. Verifieer

Controleer wat u hebt gepubliceerd, niet wat u hebt geconfigureerd:

curl -s https://example.org/index.mpf | head -30     # companion bestaat en kan worden geparsed
curl -s https://example.org/llms.mpf | head -30      # index bestaat en bevat pagina's
curl -s https://example.org/llms.txt                 # MPF-sectie, MPF-spec, MPF-index
curl -s https://example.org/.well-known/mpf          # ESFI-praktijk
dig +short TXT _mpf.example.org                      # ESFI-praktijk

Controleer daarna de relatie tussen beide representaties:

  1. Drift. Bereken de SHA-256 van de geserveerde HTML en vergelijk die met source-hash. Een mismatch betekent dat het paar uit sync is, tenzij de server HTML tijdens transport wijzigt.
  2. Identiteit. url moet de canonieke menselijke pagina zijn; mpf-url moet het adres zijn dat u hebt opgehaald.
  3. Talen. Bevestig voor elke invoer in language-variants dat het bestand bestaat. De builder genereert deze adressen uit configuratie en controleert ze niet.
  4. Pariteit. Als hidden-sections true is, lees de machine-only content en controleer dat u die bedoelt.
  5. Scope. Bevestig dat companion-scope in de bestanden, /.well-known/mpf en het DNS-record dezelfde waarden vermelden.

Zodra uw output kan worden geïnspecteerd en overeenkomt met een gepubliceerde versie, kan hij in het Implementatieregister worden opgenomen.

Problemen oplossen

Symptoom Waarschijnlijke oorzaak Oplossing
skipped: … (no content root) Selector matcht niets en de fallbacks zijn leeg Stel content-selector in op het element met de paginacontent
Lege of bijna lege bodies Selector matcht een wrapper zonder content Voer uit met --verbose en pas content-selector aan
Build stopt op configuratie Verplichte key ontbreekt of waarde ligt buiten toegestane set Lees de fout; die noemt het veld
Build stopt op een page override Niet-ondersteund veld in een .mpf.json-bestand Verwijder het veld of controleer de spelling (keys zijn kebab-case)
source-hash mismatch na deploy HTML is veranderd na MPF-generatie Voer de volledige pipeline opnieuw uit met MPF als laatste
Pagina ontbreekt in llms.mpf index is false voor die pagina Controleer de page override en defaults.index
companion-footer-fout Footer bevat een regeleinde of HTML Gebruik één regel platte tekst
Verkeerde taal op een pagina Pad begint niet met een geconfigureerde taalcode Voeg de taal toe aan languages of stel lang in de page override in

Specificatie: Specificatie 0.7 · Discovery: Publicatie en discovery · Bron: git.esfi.eu/esfi/mpf