詳述JavaScript 代碼顯示經過 JSON 序列化的文本
JavaScript 代碼 的數據輸入模型,在序列化日期時,選擇非常有限。我可以:將日期轉換為日期的 JavaScript toString 序列(例如,2007 年 10 月 21 日 星期日 12:34:28 GMT-0700 (PDT)) 按日期在 Atom 文檔中的呈現形式對其進行復制。
前兩個選項可以在 JavaScript 中處理,不需要開發人員做太多的工作。也就是說,要獲得正確的 JavaScript Date 對象,只需調用新的 Date(feed.updated)。但是,其缺點是,使用第一個選項會丟失與毫秒數和時區偏移有關的重要信息;
如果使用第二個選項,日期的 toString 序列會因實現和地區的不同而不同。盡管使用 RFC 3339 序列需要額外的工作,但這是避免數據丟失和數據含義不明的惟一選項。
文本結構
Atom 支持大量的文本和內容選項,到目前為止,這是在 JSON 序列化過程中碰到的最復雜最困難的問題。文本結構,比如 title、subtitle、summary 和 rights 元素,可以包含純文本、轉義 HTML 或JavaScript 代碼;這些結構具有語言敏感性,因此必須考慮 xml:lang 屬性;#t#
而且 HTML 和 XHTML 標記可以包含需要解析的相對 URI。由于 Atom content 元素支持 Base64 編碼的內容、任意 XML 標記和使用 src 屬性引用的外部內容,這使得序列化過程更加困難。
對 Atom 內容進行 JSON 序列化的目的是找到一種通用的表示方法,該方法能夠盡可能一致地捕獲這些選項。清單 18 展示了一個帶有 3 種文本結構的提要示例。
- <updated>2007-10-14T12:12:12Z</updated>
title 元素為純文本。它需要繼承提要的語言上下文,否則不具備描述性。subtitle 元素包含轉義的 HTML 標記。right 元素也是純文本,但它覆蓋了語言上下文。清單 19 展示了這 3 個元素的JavaScript 代碼。
- <feed xmlns="http://www.w3.org/2005/Atom"> ...
- <title>Example Feed</title> <subtitle type="html"><p>This is an example feed</p></subtitle>
- <rights xml:lang="fr">...</right> ...</feed>
注意,這只是最簡單的情形,title 被序列化為一個簡單字符串。但是,由于 right 元素中的語言上下文時刻都會變化,所以盡管它是純文本,也被序列化為包含兩個字段(attributes 和 children)的對象。
對于 subtitle 元素,JavaScript 代碼標記被解析并呈現為一種分層結構。XHTML 標記也使用相同的結構(清單 20 和 21)。
- { "title":"Example Feed", "subtitle":{ "attributes":{ "type":"html" },
- "children":[ { "name":"p", "attributes":{ }, "children":["This is an
- example feed" ] } ] }, "rights":{ "attributes":{ "lang":"fr" },
- "children":[ "..." ] } }