2012-08-13 45 views
2

我正在使用Express在NodeJs上用JavaScript编写CMS中的CMS。我的目标是构建过去几年来在.NET中每天构建的内容,但现在纯粹用JavaScript。 目前,我有基本的流程工作,内联编辑页面(带有“contenteditable”属性),然后将这些可编辑div的HTML解析为JSON并将其存储在MongoDB中。NodeJs CMS - 构建CMS时作为存储格式的XML或JSON

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

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

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

对此的任何意见将不胜感激。

回答

0

JSON绝对是一种“节点本地”存储格式。正如你所指出的,它也适用于mongo(沙发,riak)。将数据存储为JSON而不是(Stringified)XML的另外一个优点是,只要您愿意,您可以在mongoDB中开始索引和查询属性。

如果您很好地组织您的应用程序,那么使用toXML()方法替换您的toJSON()页面序列化程序非常简单,反之亦然。您的决定并非一成不变,但由于它似乎对您有用,而且“这是节点方式”,我会坚持使用JSON。

我很想看到一些支持XML的解决方案,如果有人愿意的话。

1

我会倾向于使用基于以下原因就像BaseX一个XML数据库解决方案将数据存储在XML:

  • 它非常适合于产生其他标记格式,如HTML使用XSLT一个符合标准的方式
  • 这是很容易使用的标准来查询像XPath的兼容语言
  • 这是比较容易的(使用XSL如PDF例如:FO)转换为几乎所有的其它格式
  • 这是很容易读/理解几乎任何编辑

对我来说,将标记语言如HTML(这是我假设为CMS的输入数据格式)转换为JSON,然后在将“CMS”页面呈现为“读取”时将JSON转换回HTML,模式。假设输入格式是有效的XHTML,您可以将它作为原生XML存储和检索,这对我来说更自然。

0

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

最重要的是它超快速,我已经测试了在nodejs中解析查询字符串和json对象,json比查询字符串更快。我相信它会比XML更快。

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

2

是的,JSON适用于Javascript中的对象,XML更适合您试图存储的HTML。因此,请查看JSONML,这是一种记录XML的JSON语法。该规范非常简单,所以这里简单介绍一下。

  1. 你开始其表示(根)节点
  2. 此数组中的第一项是其表示的节点名称
  3. 下一个项目,如果它是一个对象的字符串数组,是一种枚举节点上的所有属性
  4. 数组的其余部分表示节点的子节点(如果有)。这里的每个项目可以是一个字符串(用于textnode)或另一个阵列由相同的规则遵守(对于elementnode)

这是JSONML的示例:

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

其转换到遵循XML:

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

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