内容树 是描述 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取出.
| 光谱 | 过境 | 满 | 松动 |
|
|
|
|
使用 content-tree
字体
此软件包提供打字机类型 content-tree.d.ts 用于验证JS/TS应用程序中的数据形状。 这些类型自动生成自 SPEC.md 高频。 。 。 .
有三个不同的名称空间被曝光,对于不同的状态来说,一棵树可以存在于其中(参见: 中转对休息(中文(简体) )
ContentTree.transit- 仅包含内容API答复中公布和可用的字段ContentTree.full- 包含内容的充分表述,包括需要外部资源提供的任何数据(在最高一级也披露)ContentTree名称空间)ContentTree.loose- 充分说明内容,包括作为可选内容的外部资源所需的任何数据
- 以依赖方式安装此寄存器 :
npm install https://github.com/Financial-Times/content-tree
- 在您的 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为中转树设计的方案 无 页:1Root节点,仅包含 体质 定义。 此方案定义返回的数据bodyTree字段/content-treeAPI (英语).
去图书馆
这些库是供内容和元数据组内部使用的,用于确保我们所有的内容 API 表述与内容-树谱的变化保持一致.
from-bodyxml- 转换遗产bodyXML字段,从 C&M 的内部代表到有效的bodyTree贾森.to-external-bodyxml- 将内容树转换为稳定的XML代表,用作bodyXML字段在 FT 中/enrichedcontentAPI 密码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 (中文(简体) ) 并按下草稿的新释放按钮
- 起草新版本时
- 将标记设置为您 β 的标签
- 将目标设定为要释放的分支
- 设置版本编号的发行标题
- 以正常方式填入释放笔记
- 检查发布标签下的释放前选项
- 按下出版发布按钮
许可证
本软件由金融时报根据以下规定出版: 麻省理工学院许可证。 。 。 .
