2012-08-13 53 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)作爲處理指令。