【问题标题】:NodeJs CMS - XML or JSON as storage format when building a CMSNodeJs CMS - 构建 CMS 时将 XML 或 JSON 作为存储格式
【发布时间】:2012-08-10 03:35:40
【问题描述】:

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

反过来,所需部分的 JSON 被解析回 HTML 服务器端,并使用 jQuery 插入到 JSDom 文档中,然后将整个文档发送到客户端。

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

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

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

【问题讨论】:

    标签: xml json node.js content-management-system


    【解决方案1】:

    是的,JSON 适用于 Javascript 中的对象,而 XML 适用于您尝试存储的 HTML。因此,请看一下 JSONML,它是一种写下 XML 的 JSON 语法。规范真的很简单,所以简而言之。

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

    这是 JSONML 的一个示例:

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

    转换为以下 XML:

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

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

    【讨论】:

      【解决方案2】:

      出于以下原因,我倾向于使用 XML 数据库解决方案(如 BaseX)将数据存储在 XML 中:

      • 它非常适合使用 XSLT 以符合标准的方式生成 HTML 等其他标记格式
      • 使用 XPath 等符合标准的语言很容易查询
      • 转换为几乎所有其他格式(例如 PDF,例如使用 XSL:FO)相对容易
      • 几乎可以在任何编辑器中轻松阅读/理解

      对我来说,将 HTML 之类的标记语言(我假设 CMS 的输入数据格式)转换为 JSON,然后在以“读取”模式呈现 CMS 页面时将 JSON 转换回 HTML 感觉很复杂。假设输入格式是有效的 XHTML,您可以将其存储和检索为本机 XML,这对我来说感觉更自然。

      【讨论】:

        【解决方案3】:

        JSON 绝对是一种更“节点原生”的存储格式。正如您所指出的,它也适用于 mongo (couch, riak)。将数据存储为 JSON 而不是(字符串化)XML 的另一个优点是,您可以随时在 mongoDB 中开始索引和查询属性。

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

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

        【讨论】:

          【解决方案4】:

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

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

          我最新的开源项目ourjs.org也是基于JSON的。它也是一个小型的CMS,很容易将数据缓存在内存中,所以JSON就是一个。

          【讨论】:

            猜你喜欢
            • 2013-07-01
            • 1970-01-01
            • 2011-05-05
            • 1970-01-01
            • 1970-01-01
            • 2013-11-26
            • 2023-03-19
            • 2020-02-24
            • 1970-01-01
            相关资源
            最近更新 更多