--- mpf: '0.7' title: Spécification MPF 0.6 — ESFI Docs url: https://docs.esfi.eu/fr/standards/mpf/0.6/ mpf-url: https://docs.esfi.eu/fr/standards/mpf/0.6/index.mpf organization: European Strategy & Future Infrastructure domain: docs.esfi.eu lang: fr updated: '2026-11-03' author: ESFI provenance: human source-hash: bb3b8b0e2eb19eff1af2f69a2d704d365737322cba76b8eca3208d0c6bc77cce toc: - level: 1 text: Machine Page Format (MPF) 0.6 id: machine-page-format-mpf-0-6 - level: 2 text: 1\. Forme du fichier id: 1-forme-du-fichier - level: 3 text: 1.1 Identifiant MPF id: 1-1-identifiant-mpf - level: 3 text: 1.2 Hash source id: 1-2-hash-source - level: 2 text: 2\. Génération des pages id: 2-génération-des-pages - level: 2 text: 3\. Frontmatter id: 3-frontmatter - level: 3 text: 3.1 Champs émis pour une page id: 3-1-champs-émis-pour-une-page - level: 3 text: 3.2 Résumé id: 3-2-résumé - level: 3 text: 3.3 Parité du contenu id: 3-3-parité-du-contenu - level: 2 text: 4\. URL et identité id: 4-url-et-identité - level: 3 text: 4.1 URL canonique id: 4-1-url-canonique - level: 3 text: 4.2 Content ID id: 4-2-content-id - level: 3 text: 4.3 Détection de langue id: 4-3-détection-de-langue - level: 3 text: 4.4 Variantes linguistiques id: 4-4-variantes-linguistiques - level: 2 text: 5\. Corps Markdown et table des matières id: 5-corps-markdown-et-table-des-matières - level: 2 text: 6\. Instruction compagnon id: 6-instruction-compagnon - level: 2 text: 7\. Index du site id: 7-index-du-site - level: 3 text: 7.1 Pages indexées id: 7-1-pages-indexées - level: 3 text: 7.2 llms.mpf id: 7-2-llms-mpf - level: 3 text: 7.3 llms.txt id: 7-3-llms-txt - level: 3 text: 7.4 llms-full.txt id: 7-4-llms-full-txt - level: 2 text: 8\. Signature id: 8-signature - level: 2 text: 9\. Interface en ligne de commande id: 9-interface-en-ligne-de-commande - level: 2 text: 10\. Configuration de référence ESFI 0.6 id: 10-configuration-de-référence-esfi-0-6 - level: 2 text: 11\. Non-revendications id: 11-non-revendications - level: 2 text: Sur cette page id: sur-cette-page spec-origin: esfi.eu content-origin: docs.esfi.eu content-id: esfi:page:standards-mpf-0-6 content-parity: html: true human-visible-source: true hidden-sections: false summary: Spécification implémentée précédente de Machine Page Format 0.6 index: true confidence: confirmed content-type: reference companion-footer: ESFI — civilization infrastructure · https://esfi.eu companion-contact: mailto:hermes@esfi.eu preferred-representation: mpf companion-scope: cite: true summarize: true train: true index: true relay: false language-variants: en: https://docs.esfi.eu/standards/mpf/0.6/index.mpf fr: https://docs.esfi.eu/fr/standards/mpf/0.6/index.mpf nl: https://docs.esfi.eu/nl/standards/mpf/0.6/index.mpf de: https://docs.esfi.eu/de/standards/mpf/0.6/index.mpf hr: https://docs.esfi.eu/hr/standards/mpf/0.6/index.mpf mpf-id: d6ac25e70725fcbd491aa5a3421b133bd738ccae268ca90121fdf1b2f3e80b6f --- Langue ✕ /fr/standards/mpf/0.6/index.mpf[ouvrir le fichier ↗](/fr/standards/mpf/0.6/index.mpf)[spécification ↗](/fr/standards/mpf/0.7)✕ chargement… # Machine Page Format (MPF) 0.6 {#machine-page-format-mpf-0-6} > **Version précédente.** MPF 0.6 reste publié afin que les documents qui le déclarent puissent être interprétés selon leur contrat d’origine. La version actuellement implémentée est [MPF 0.7](/fr/standards/mpf/0.7). Statut : spécification implémentée Version : 0.6 Implémentation de référence : `mpf-build` Machine Page Format (MPF) est une représentation compagnon, lisible par machine, générée à partir d’une page web. MPF 0.6 est défini ici par le comportement de l’implémentation actuelle de `mpf-build`. Ce document décrit ce que cette implémentation produit ; il ne définit pas de comportement futur non implémenté. ## 1\. Forme du fichier {#1-forme-du-fichier} Un document MPF est un texte UTF-8 avec un frontmatter YAML suivi d’un corps Markdown. ``` --- mpf: '0.6' title: Example ... mpf-id: --- # Markdown body ``` Le frontmatter est sérialisé dans un ordre d’insertion stable. Le corps est tronqué de ses espaces superflus avant sérialisation et le document final se termine par un saut de ligne. ### 1.1 Identifiant MPF {#1-1-identifiant-mpf} `mpf-id` est un condensat SHA-256 du document MPF généré complet **avant** l’insertion du champ `mpf-id` lui-même. La source exacte du condensat est : ``` --- --- ``` `mpf-id` est donc un identifiant de contenu de la représentation MPF générée, et non du HTML source. ### 1.2 Hash source {#1-2-hash-source} `source-hash` est un condensat SHA-256 du HTML source brut lu par `mpf-build`. ## 2\. Génération des pages {#2-génération-des-pages} `mpf-build` parcourt récursivement le répertoire source, ignore les entrées cachées et `node_modules`, et traite les fichiers se terminant par `.html` ou `.htm`. Pour chaque page, il : 1. lit le HTML brut et la date de modification du fichier ; 2. charge la configuration du site et tout override de page ; 3. analyse les métadonnées de la page ; 4. extrait le contenu réservé à MPF et applique les transformations HTML MPF de l’implémentation ; 5. sélectionne la zone de contenu configurée ; 6. retire le bruit qui n’appartient pas au contenu ; 7. convertit le HTML sélectionné en Markdown ; 8. ajoute des ancres stables aux titres et construit la table des matières ; 9. ajoute en tête le Markdown réservé à MPF, s’il existe ; 10. résout les métadonnées canonical, MPF, d’identité, de langue et de provenance ; 11. ajoute en tête un bloc d’instruction compagnon lorsqu’il est configuré ; 12. sérialise le document MPF et l’écrit dans l’arborescence de sortie ; 13. écrit une signature à côté du document MPF lorsqu’une signature est configurée. Le répertoire de sortie est par défaut le répertoire source et peut être remplacé avec `--out`. ## 3\. Frontmatter {#3-frontmatter} ### 3.1 Champs émis pour une page {#3-1-champs-émis-pour-une-page} Le générateur de page actuel émet les champs suivants : | Champ | Comportement | | --- | --- | | `mpf` | Version MPF issue de la configuration du site. | | `title` | Titre HTML de la page. Obligatoire. | | `url` | URL canonique destinée aux humains. Obligatoire. | | `mpf-url` | URL absolue de ce fichier MPF. | | `organization` | Organisation issue de la configuration du site. | | `domain` | Domaine issu de la configuration du site. | | `lang` | Langue de l’override de page, sinon langue déduite du chemin, sinon langue par défaut. | | `updated` | Date de modification du fichier HTML source au format `YYYY-MM-DD`. | | `author` | Auteur issu de la configuration du site. | | `provenance` | Override de page ou valeur par défaut configurée. Obligatoire. | | `source-hash` | SHA-256 du HTML source brut. | | `toc` | Tableau des entrées de titres générées. | | `spec-origin` | Origine de spécification configurée, sinon domaine configuré. | | `content-origin` | Origine de contenu configurée, sinon domaine configuré. | | `content-id` | Override de page ou identité de contenu stable générée. Obligatoire. | | `content-parity` | Relation entre le contenu MPF et le HTML visible par l’humain. | | `mpf-id` | Identifiant SHA-256 de la représentation MPF générée. | L’implémentation peut également émettre les champs facultatifs suivants lorsqu’ils se résolvent vers une valeur non vide : - `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` Le générateur s’arrête avec une erreur si la page n’a pas de titre, d’URL canonique, de provenance ou de content ID. ### 3.2 Résumé {#3-2-résumé} `summary` est résolu dans cet ordre : 1. `summary` de l’override de page ; 2. description des métadonnées HTML ; 3. omission du champ. ### 3.3 Parité du contenu {#3-3-parité-du-contenu} Si le HTML contient du contenu réservé à MPF détecté par l’implémentation, le frontmatter de page est forcé à : ``` content-parity: html: false human-visible-source: false hidden-sections: true ``` Sinon, `content-parity` utilise la valeur par défaut configurée. Si aucune valeur par défaut n’est configurée, l’implémentation utilise : ``` content-parity: html: true human-visible-source: true hidden-sections: false ``` ## 4\. URL et identité {#4-url-et-identité} ### 4.1 URL canonique {#4-1-url-canonique} Si les métadonnées de la page fournissent une URL canonique, celle-ci est résolue par rapport à l’URL de base configurée et utilisée. Pour une page `index.html`, le chemin canonique est normalisé pour se terminer par `/`. Sans métadonnée canonique de page : - le `index.html` racine se résout vers l’URL de base normalisée suivie de `/` ; - les autres chemins HTML se résolvent sous l’URL de base configurée après suppression d’un `index.html` terminal. ### 4.2 Content ID {#4-2-content-id} L’identité de page générée a cette forme : ``` :page: ``` Le préfixe de locale configuré est supprimé avant la génération du slug, de sorte que les traductions de la même route reçoivent le même content ID généré. Le slug de la page racine est `home`. Pour les pages non racine, la route est convertie en minuscules, les segments du chemin sont joints par des tirets et les caractères non pris en charge sont normalisés en tirets. Exemple de l’implémentation ESFI : ``` esfi:page:home ``` ### 4.3 Détection de langue {#4-3-détection-de-langue} Les langues configurées proviennent de `config.languages`. Si cette liste est vide ou absente, seule la langue par défaut configurée est utilisée. Le générateur examine le premier segment du chemin. S’il s’agit d’un code de langue configuré, cette langue est attribuée ; sinon la langue par défaut est attribuée. ### 4.4 Variantes linguistiques {#4-4-variantes-linguistiques} Pour chaque langue configurée, le générateur produit une entrée `language-variants` pointant vers l’URL MPF attendue pour le même chemin de contenu indépendant de la locale. Pour la langue par défaut, aucun préfixe de locale n’est inséré. Les variantes non par défaut reçoivent `//`. L’implémentation génère ces URL à partir de la configuration et de l’identité du chemin ; elle ne vérifie pas à cette étape que chaque fichier traduit existe. Exemple : ``` 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\. Corps Markdown et table des matières {#5-corps-markdown-et-table-des-matières} Le contenu HTML sélectionné est converti en Markdown avant la sérialisation MPF. Les titres H1 à H4 sont inclus dans `toc` et reçoivent des ancres Markdown explicites : ``` ## Example heading {#example-heading} ``` Chaque entrée de la table des matières a la forme : ``` - level: 2 text: Example heading id: example-heading ``` La génération des ancres : - convertit le titre en minuscules ; - conserve les lettres et chiffres Unicode ; - remplace les autres séquences par `-` ; - fusionne les tirets répétés ; - retire les tirets en début et en fin ; - utilise `section` si aucun slug ne reste ; - résout les doublons en ajoutant `-2`, `-3`, etc. Les titres à l’intérieur de blocs de code fenced sont ignorés. La mise en forme Markdown en ligne et les liens existants sont retirés du texte du titre utilisé pour l’identité dans la table des matières. ## 6\. Instruction compagnon {#6-instruction-compagnon} Si `companion-instruction` est présent, le générateur le place au début du corps Markdown sous forme de blockquote. Forme sur une ligne : ``` > Companion instruction: ``` Forme multiligne : ``` > Companion instruction: > > ``` ## 7\. Index du site {#7-index-du-site} Un build produit également trois sorties de découverte au niveau du site : - `llms.mpf` - `llms.txt` - `llms-full.txt` ### 7.1 Pages indexées {#7-1-pages-indexées} Une page n’est incluse dans les index générés que si son frontmatter résolu contient : ``` index: true ``` Les entrées indexées sont triées lexicalement par URL MPF. ### 7.2 llms.mpf {#7-2-llms-mpf} `llms.mpf` est lui-même un document MPF 0.6. Son frontmatter généré utilise : - le titre `Site Index — ` ; - la langue = langue par défaut configurée ; - la provenance = `human` ; - le type de contenu = `reference` ; - `index: true` ; - `content-id: :page:llms` ; - une parité de contenu cachée/non HTML. Son corps contient le titre de l’organisation, la description configurée facultative et une liste Markdown de toutes les pages MPF indexées. Chaque élément inclut le résumé de la page lorsqu’il existe. L’implémentation actuelle inclut dans `llms.mpf` les pages indexées de toutes les langues configurées. ### 7.3 llms.txt {#7-3-llms-txt} Le générateur maintient une section de découverte MPF dans `llms.txt` : ``` MPF: MPF-index: /llms.mpf ## Pages ... ``` Si aucun `llms.txt` n’existe, le générateur en crée un avec un titre d’organisation. Si une section MPF précédente existe, il remplace cette section tout en préservant le contenu avant et après. ### 7.4 llms-full.txt {#7-4-llms-full-txt} `llms-full.txt` concatène uniquement les corps des pages indexées dans la langue par défaut configurée. Pour chaque page, il écrit le titre, l’URL canonique et le corps MPF généré. ## 8\. Signature {#8-signature} Le générateur charge une clé de signature depuis le paramètre de clé de signature configuré. Lorsqu’une clé de signature est disponible : - le frontmatter de page reçoit une URL `signature` ; - `llms.mpf` reçoit également une URL `signature` ; - l’implémentation écrit un artefact de signature à côté du contenu MPF généré. Lorsqu’aucune clé de signature n’est configurée, le champ `signature` est omis. ## 9\. Interface en ligne de commande {#9-interface-en-ligne-de-commande} La CLI implémentée est : ``` mpf-build [options] ``` Options : | Option | Effet | | --- | --- | | `--config ` | Utiliser un fichier `mpf.config.json` spécifique. | | `--out ` | Écrire les fichiers générés dans un autre répertoire. | | `--dry-run` | Rapporter les chemins générés sans écrire les fichiers. | | `--verbose` | Journaliser chaque fichier traité avec son titre, son URL et le nombre d’entrées TOC. | | `--watch` | Reconstruire lors de changements du HTML, d’un override de page ou de la configuration. | En mode watch, les demandes de reconstruction sont sérialisées : si un changement se produit pendant un build en cours, un seul build supplémentaire est mis en file et exécuté ensuite. ## 10\. Configuration de référence ESFI 0.6 {#10-configuration-de-référence-esfi-0-6} Le déploiement ESFI 0.6 utilisait : ``` { "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" } ``` Ce déploiement définissait également des valeurs par défaut pour la provenance, la confidence, le type de contenu, l’indexation, le companion scope, le companion contact, la représentation préférée et la parité du contenu. ## 11\. Non-revendications {#11-non-revendications} MPF 0.6 n’acquiert **pas** une capacité simplement parce qu’un nom de champ pourrait la décrire. Cette spécification ne revendique que le comportement présent dans l’implémentation de référence. En particulier, les métadonnées générées telles que `language-variants`, `confidence`, `companion-scope`, `valid-until` ou `review-after` sont des métadonnées descriptives. Le générateur les émet ou les dérive comme décrit ci-dessus ; aucune politique supplémentaire, validation réseau, vérification de traduction, application d’expiration ou calcul de confiance n’est impliqué par l’implémentation 0.6. ## Sur cette page {#sur-cette-page} ESFI — civilization infrastructure · https://esfi.eu