@financial-times/content-tree

中文文档
0.28.0发布于 2026/11/11MITTypeScript零依赖近 30 天下载 2635

内容树格式

中文使用文档
文档目录14 节
  1. 目录
  2. 概览
  3. 概念
  4. (正文)语法树
  5. 中转对休息
  6. external
  7. 使用 content-tree
  8. 字体
  9. 杰森·斯克马
  10. 去图书馆
  11. 捐款
  12. 释放
  13. Beta 发布
  14. 许可证

content-tree

内容树 是描述 FT 文章外形为抽象树的规格。 它执行 无符号 谱. 它意在成为我们整个中央管理系统的共享数据合同(闪光),内容 APIs,和前端系统.

要读到光谱,去 SPEC.md 高频。如果您正在执行文章渲染器,或者添加或修改文章组件,您应该读取该规格.

如果您正在寻找关于 CAPI 返回内容的确定指南, 可在 https://api-docs.ft.com/内部/参考文献/get content-tree-uuid


目录

概览

主要内容- 树的规格定义在一个 markdown 文件

  • SPEC.md:一个标记下文档,定义了树的规格. 以类似打字符的语法写成, 附加自定义 [external](#concepts) 属性修改符.

从这个光谱中,我们自动生成以下作为构建过程的一部分:

  • content-tree.d.ts - 从下标谱自动生成的打字符类型
  • /schemas - JSON schemas, 自动由下调光谱生成

这个 内容元数据( M) 团队保持一些 走开 用于支持在戈兰g内使用内容树工作的代码:

  • content_tree.go - Go structs,其中载有戈兰格应用中使用的内容树谱的类型定义。 通过内容和元数据手动更新.
  • /libraries - 用于在其他格式之间转换内容树数据结构的图书馆

支持代码 :

  • /tests - 验证计划及变压器的测试
  • /tools - 建造和生成计划及类型的公用事业

概念

(正文)语法树

抽象语法树,即AST,是对内容的一种结构化的代表,其中内容的含义和结构作为树来体现,独立于任何特定的渲染指令或表示.

内容 树是代表 语义 文章的结构----例如段落、标题、图像、其他编辑部分----不执行特定的标记语言或视觉表现。 这使得在不同的产品和平台及背景中更容易使用相同的内容.

  • Node - 树上的元素 type 表示内容单位
  • Parent - 一个 Node 它已经 children 节点
  • Root - 单身顶级 Node 在树上

中转对休息

FT文章可能包含独立于内容(如图像,视频剪辑)发布的补充资产,或者从外部系统(如繁荣图,社交媒体帖子)提取数据的编辑部分. 当文章通过网络传输(例如通过 FT Content API 获取)时,这些外部资源通常通过 id,而获取这些资源需要花费大量时间.

为支持这两种使用案例,内容树可以存在于不同的州:a 满 树(有已解析的外部数据)和 a 过境 树(如果外部资源被ID引用)。 两个州的内容和编辑意图保持不变.

external

为了区分中转和完全节点属性,我们在我们的打字属性上使用一个额外的修饰符,叫做 external说明该财产从过境代表处中省去,必须由消费申请提供,以便建造一整棵树.

示例 推特/X的帖子会用ID发布,但该帖子的实际内容应该在时从X API取出.

光谱 过境 满 松动
interface Tweet extends Node {
    id: string
    type: "tweet"
    external html: string
}
interface Tweet extends Node {
    id: string
    type: "tweet"
}
interface Tweet extends Node {
    id: string
    type: "tweet"
    html: string
}
interface Tweet extends Node {
    id: string
    type: "tweet"
    html?: string
}

使用 content-tree

字体

此软件包提供打字机类型 content-tree.d.ts 用于验证JS/TS应用程序中的数据形状。 这些类型自动生成自 SPEC.md 高频。 。 。 .

有三个不同的名称空间被曝光,对于不同的状态来说,一棵树可以存在于其中(参见: 中转对休息(中文(简体) )

  • ContentTree.transit - 仅包含内容API答复中公布和可用的字段
  • ContentTree.full - 包含内容的充分表述,包括需要外部资源提供的任何数据(在最高一级也披露) ContentTree 名称空间)
  • ContentTree.loose - 充分说明内容,包括作为可选内容的外部资源所需的任何数据
  1. 以依赖方式安装此寄存器 :
npm install https://github.com/Financial-Times/content-tree
  1. 在您的 Typescript/ JSDoc 代码中使用 :
import type { ContentTree } from "@financial-times/content-tree"

function makeBigNumber(): ContentTree.BigNumber {
    return {
        type: "big-number", //will autocomplete in code editor, and be valid
        number: "1.2m",
        description: "People affected worldwide"
    }
}

function makeImageSetNoFixins(): ContentTree.transit.ImageSet {
    return {
        type: "image-set",
        id: "79acd774-6ca7-487d-a257-cbf64d2498d9",
        // if you try to add a `picture` here it will get mad
    }
}

杰森·斯克马

也有一些JSON schemas由光谱生成.

  • content-tree.schema.json - JSON为全内容树形状设计的计划
  • transit-tree.schema.json - JSON计划,不包括任何 external 属性
  • body-tree.schema.json - JSON为中转树设计的方案 无 页:1 Root 节点,仅包含 体质 定义。 此方案定义返回的数据 bodyTree 字段 /content-tree API (英语).

去图书馆

这些库是供内容和元数据组内部使用的,用于确保我们所有的内容 API 表述与内容-树谱的变化保持一致.

  • from-bodyxml - 转换遗产 bodyXML 字段,从 C&M 的内部代表到有效的 bodyTree 贾森.
  • to-external-bodyxml - 将内容树转换为稳定的XML代表,用作 bodyXML 字段在 FT 中 /enrichedcontent API 密码
  • to-string - 将内容树转换为纯文本字符串

(TODO:如何安装/使用)

捐款

要更改内容树谱 :

  • 切开这个回放并运行 npm install
  • 更新 SPEC.md 高频 使用您的更改 :
    • 要添加一个新的格式化节点,请在 Formatting Blocks。如果格式化可以适用于段落中的案文,确保添加到段落中 Phrasing 类型
    • 要增加一个新的故事块,请在下面添加定义: Storyblocks。 。 。 .
  • 运行 npm run build 用于更新 content-tree.d.ts 和(视需要) schemas 文件

公关一旦建立,与 内容元数据( M) 确保Go图书馆和变压器进行相关的修改.

对于重大或非标准变化,考虑首先创建一个问题,或在 #content-pipeline 斯克频道.

释放

对内容树的单一语义变化通常会分出多个拉取请求,而Go和JS更改则由单独的团队执行. 因此,必须在C&M、Spark和CP之间协调发布,以确保每个发布包含支持新版内容树所需的所有修改.

在发布之前,你还需要提出拉出请求来递增软件包.json版本号,这应该在自己的PR中进行,这样每个团队至少有一位成员可以批准. 请你把签到 {\fn方正粗倩简体\fs12\an8\1chffff00\b0}动画故事团队 松动频道,并分享这个PR在那里。 然后通过 GitHub 发布: 它们必须包含 SemVer 标签 vX.Y.Z 和Json包裹里的那个吻合 发行笔记应当填写,以沟通发行中的变化. 削减发行会引发CI为JS消费者发布npm. Go 消费者可以依赖新的 git 标签作为模块版本.

Beta 发布

如果您想要在合并为主之前从分支中实现β放出,可以采取以下步骤:

  • 将您的释放设置为 v0.0.0-beta.0 地点 0 您所设置的版本号是什么
  • 在Github,进入 https://github.com/Financial-Times/content-tree/releases (中文(简体) ) 并按下草稿的新释放按钮
  • 起草新版本时
    • 将标记设置为您 β 的标签
    • 将目标设定为要释放的分支
    • 设置版本编号的发行标题
    • 以正常方式填入释放笔记
    • 检查发布标签下的释放前选项
    • 按下出版发布按钮

许可证

本软件由金融时报根据以下规定出版: 麻省理工学院许可证。 。 。 .

衍生自 无符号 © Titus 虫类

版本与发布记录

@financial-times/content-tree 共发布 32 个版本,首次发布于 2026/02/11;过去 12 个月发布了 32 个版本。

版本发布日期距今
0.28.0latest2026/11/113 天前
0.27.02026/10/2718 天前
0.26.02026/10/121 个月前
0.25.02026/09/301 个月前
0.24.02026/09/082 个月前
0.23.02026/08/242 个月前

其他发布通道:beta → 0.12.0-beta.9。

关于 @financial-times/content-tree 的常见问题

@financial-times/content-tree 是什么?

内容树格式

如何安装 @financial-times/content-tree?

在项目目录运行 npm install @financial-times/content-tree,或使用 pnpm add / yarn add / bun add。

@financial-times/content-tree 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@financial-times/content-tree 可以商用吗?

@financial-times/content-tree 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@financial-times/content-tree 的下载量有多少?

根据 npm 官方下载统计,@financial-times/content-tree 在 2026/10/15 – 2026/11/13 这 30 天内被下载 2,635 次,日均约 88 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@financial-times/content-tree 还在维护吗?

最新版本 0.28.0 发布于 2026/11/11(3 天前);至今共发布 32 个版本,其中过去 12 个月发布了 32 个;首次发布于 2026/02/11。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。