你还在存储纯文本内容吗?试一下XML吧

279 阅读4分钟

背景

前几天,在公司参加了一次需求评审,产品期望我们能够对文章和诗歌等这一类教学资源进行存储,而本次需要存储的资源内容很简单:文章资源只有文章文本和全文朗读音频,诗歌资源只有诗歌文本和全诗朗读音频

分析

单从本次需求来看,文章和诗歌存储结构设计并不难,无非就是:文本 + 音频

但是进一步去思考,这种存储结构的可扩展性非常差,因为文章资源除了全文文本和全文朗读音频之外,其实还会有文章导读、段落以及段落音频等等,举个例子:

试想这样一个相亲相爱的场景:

产品经理:我们需要为文章增加文章导读

程序员小A:简单,我只需要在原有的基础之上增加导读字段,变成导读 + 文本 + 音频 就好

过了几天......

产品经理:经过进一步的调研,全文朗读音频并不能完全满足市场需求,我们需要增加段落音频

程序员小A:我目前设计的存储结构是以全文为单位存储的,难以支持段落音频的存储呀,这岂不是在为难我胖虎,这XXX一天到晚提的都是啥需求。。。

从一个简单的例子中,我们可以看出,单纯是文本 + 音频的存储结构是无法很好地满足未来需求的变更,哪怕我们为了存储段落音频,而将原来的存储结构改成段落 + 音频 + 文章ID(用于将所有段落串起来变成一篇文章),后面产品经理再提需求:需要为某一句话、某一个字增加音频,那我们的存储结构是不是要接着改,程序员小A也会陷入永无休止地加班中**。。。**

思路

仔细想想,我们可以发现我们之前的存储结构所涉及到的内容均是纯文本,纯文本的存储形式是不利于我们对文章和诗歌这类资源类型去做扩展和管理的,可扩展性会比较差,不利于我们去为其中的某一个段落、某一句话甚至是某一个字去做内容扩展

这时,我便想到了一种方案:基于一种**可扩展性的标记语言(XML)**来存储这一类资源类型

可扩展性的标记语言

定义

来自百度百科的解释:

可扩展标记语言,标准通用标记语言的子集,简称XML。是一种用于标记电子文件使其具有结构性的标记语言。

在电子计算机中,标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息比如文章等。它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 它非常适合万维网传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。是Internet环境中跨平台的、依赖于内容的技术,也是当今处理分布式结构信息的有效工具。早在1998年,W3C就发布了XML1.0规范,使用它来简化Internet的文档信息传输。

使用

以古诗《早发白帝城》为例子演示如何利用XML、使用自己的标记语言来存储这类资源

# 为诗句增加原文通读音频
<text audio="全文音频URL">两岸猿声啼不住,轻舟已过万重山。</text>

# 为诗句增加生词音频
<text audio="全文音频URL">两岸猿声啼不住,<word audio="生词音频URL">轻舟</word>已过万重山。</text>

text、word和audio都是我自己定义的标记语言,通过可扩展性的标记语言去存储这类资源大大增加了可扩展性,将来产品经理即使需要新增文章资源类型去存储,我们也能游刃有余地去面对

结语

这次的需求很有意思,对存储方案的可扩展性提出了一定的要求,使用可扩展标记语言只是众多方案之一,有更好的方案欢迎在评论区提出,咱们一起讨论!