NodeJs CMS – 构buildCMS时作为存储格式的XML或JSON

我正在使用Express在NodeJs的顶部写JavaScript的CMS。 我的目标是build立一些我在.NET平台上每天构build的东西,但是现在纯粹用JavaScript。 目前,我有基本的stream程工作,内联编辑页面(“contenteditable”属性),然后parsing这些可编辑div div的HTML到JSON并将其存储在MongoDB中。

另一种方式是,将所需部分的JSONparsing回HTML服务器端,并使用jQuery将其插入到JSDom文档中,然后将整个文档发送到客户端。

这一切都完美的工作,但现在我正在与一个正在质疑HTML存储为JSON的部分的同事讨论。 在他看来,这应该是XML,但在将所有内容都改为XML之前,我想听到更多关于这个问题的意见。

在stream程的任何部分,XML都比JSON有优势吗? 我不得不使用XSLT将XML格式化为HTML,而不是像我所知的那样将JSONparsing回HTML。

任何意见,将不胜感激。

是的,JSON适用于Javascript中的对象,而XML对于您要存储的HTML来说更好。 因此,请查看JSONML,这是一种loggingXML的JSON语法。 这个规范真的很简单,所以在这里简单介绍一下。

  1. 您从代表(根)节点的数组开始
  2. 该数组中的第一项是一个表示节点名称的string
  3. 下一个项目(如果它是一个对象)是该节点上所有属性的枚举
  4. 数组的其余部分表示节点的子节点(如果有的话)。 这里的每个项目可以是一个string(对于一个文本节点)或另一个遵守相同规则的数组(对于一个元素节点)

这是JSONML的一个例子:

[ "lcSequenceOption", [ "lcAnswerContent", "Some answer content" ], [ "lcSequence", { "value": 0 } ] ] 

转换为以下XML:

 <lcSequenceOption> <lcAnswerContent>Some answer content</lcAnswerContent> <lcSequence value="0" /> </lcSequenceOption> 

JSONML不提供处理指令的标记。 在JSONML之上编写自定义规则并不难。 在我工作的组织中,我们解释每个以“?”开头的节点名称(规则2) 作为处理指令。

我倾向于使用像BaseX这样的XML数据库解决scheme将数据存储在XML中,原因如下:

  • 它非常适合使用XSLT以符合标准的方式生成其他标记格式,如HTML
  • 使用符合标准的语言(如XPath)进行查询很容易
  • 将其转换为几乎所有其他格式(例如使用XSL:FO的PDF)
  • 几乎所有的编辑都很容易阅读/理解

对于我来说,将HTML这样的标记语言(我认为是CMS的input数据格式)转换为JSON,然后在以“读”模式呈现CMS页面时将JSON转换回HTML,感觉很复杂。 假设input格式是有效的XHTML,您可以将其作为原生XML进行存储和检索,这对我来说更为自然。

JSON绝对是一种更“节点本地”的存储格式。 正如你所说的,它也适用于mongo(沙发,riak)。 将数据存储为JSON而不是(Stringified)XML的另外一个好处是可以随时在mongoDB中启动索引和查询属性。

如果你很好地组织你的应用程序,用toXML()方法replace你的toJSON()页面序列化器是非常简单的,反之亦然。 你的决定并不是一帆风顺的,但是因为它似乎对你有用,而且“这是节点方式”,所以我会坚持使用JSON。

如果有人愿意,我很乐意看到一些赞成XML的答案。

我build议你使用JSON,它不需要太多的存储空间。

最重要的是它超快,我已经testing了parsingjQuery中的查询string和json对象,json比查询string更快。 我相信它会比XML更快。

我最新的开源项目ourjs.org也是基于JSON的。 这也是一个小的CMS,并且在内存中caching数据非常简单,所以JSON就是其中之一。