> 译文仅供阅读便利。具有规范效力的是英文原文。 # 样板例子:Acme HR ⇄ Government Tax 围绕一个人做联邦 这是那份**从头到尾的样板例子**。两个主权宇宙 - **Acme**(一家雇主)与 **Government Tax** - 做起联邦,好让一名员工的资料能用来报税,而两边谁也不必交出自 己模型或自己数据的所有权。你可以跟着同一个人一路走下去: > **身份 → 映射 → 合约 → 投影 → 同步 → 冲突。** 这里的一切都是具体的、经机器核验的:那些元模型带着真实的语义指纹,那场联邦是一份真 实的 [MUFP](../../03-federation/MUFP-Messages.md) 记录,而两份模型都通过了 V0-V4 的 校验。 ## 两个宇宙 | | Acme | Government Tax | |--|------|----------------| | 元模型 | [`acme/employee-mm.muif.json`](acme/employee-mm.muif.json) | [`gov/taxpayer-mm.muif.json`](gov/taxpayer-mm.muif.json) | | 对象 | `employee.person` | `taxpayer.taxpayer` | | 名字 | `givenName`、`familyName` | `forename`、`surname` | | 指纹 | `sha256:0b4965f1…38c40` | `sha256:d51f639e…37ba6` | | 校验 | [报告](acme/validation-report.json)(V4) | [报告](gov/validation-report.json)(V4) | 这两份模型以**不同的词汇**描述同一份现实 - 而这恰是联邦必须架桥跨过去的东西。 ## 顺着这条线走 1. **身份** - 同一个人,在 Acme 是 `employee:12345`,在 Government Tax 是 `taxpayer:99821`。二者由 [`identity-binding.json`](identity-binding.json) 绑到 同一个正典身份上,凭共有的税号相配。 2. **映射** - 两套词汇由 [`mapping/acme-to-gov.mapping.json`](mapping/acme-to-gov.mapping.json) 对齐: `employee.familyName ≡ taxpayer.surname`,等等。这份映射钉住了两侧的指纹,因此 它只对这两个确切的模型版本有效。 3. **合约** - 披露受 [`contract.json`](contract.json) 管束(`Federation`,目的为 `tax-filing`,三个准许的字段,绑定于目的,不得再往下披露)。指纹 `sha256:44582ad8…28af0`。 4. **投影** - Acme 从不把对象发出去;它发的是一份因目的而定的投影,只露出合约里那 三个字段。 5. **同步与冲突** - Government Tax 察觉 Acme 的 `familyName = "Smith"` 与自己记录 里的 `surname = "Smyth"` 不合。按 [冲突的留存](../../03-federation/Conflict-Resolution.md),这次冲突被记为一等的 `Conflict` 事件,向权威取值化解,且**这次冲突事件被留在历史里**(化解事件以 `causality` 指回它)。 整场往来都在 [`transcript.json`](transcript.json) 里 - 17 个 MUFP 信封。一如往 常,第一份知识(那份投影)要到第 14 条消息才动身,此时身份、信任、合约与架构都已落 定。 ## 核验 ```bash # fingerprints round-trip (mu-fingerprint, see ../../tools/) mu-fingerprint acme/employee-mm.muif.json # sha256:0b4965f1... mu-fingerprint gov/taxpayer-mm.muif.json # sha256:d51f639e... # models validate against the MUIF schemas npx ajv-cli validate -s ../../schemas/manifest.schema.json -r "../../schemas/*.schema.json" \ -d acme/employee-mm.muif.json --spec=draft2020 # every envelope validates against the MUFP envelope schema npx ajv-cli validate -s ../../schemas/mufp-envelope.schema.json -r "../../schemas/*.schema.json" \ -d transcript.json --spec=draft2020 ```