顯示具有 XML / RSS 標籤的文章。 顯示所有文章
顯示具有 XML / RSS 標籤的文章。 顯示所有文章

2008年5月7日 星期三

PHP - 產生 RSS/ATOM pubDate/created 所需格式

RSS 2.0 的規格,中提到 pubDate 內容發佈日期,日期時間的規格遵循 RFC 822 的標準。那麼在 PHP 是該如何產生這樣的日期格式 (RSS => pubDate, ATOM => created)。

PHP 有提供這些需要的日期格式相關全域變數可以使用(PHP 5.1.1 以後開始支援這些全域變數)。

如果是 MySQL timestamp/datetime format 可以直接使用如下︰


目前支援的日期格式全域變數如下︰


  • DATE_ATOM : Atom Atom ( 2008-05-06T23:51:08+00:00 )
  • DATE_COOKIE : HTTP Cookies ( Tue, 06 May 2008 23:51:08 UTC )
  • DATE_ISO8601 : ISO-8601 ( 2008-05-06T23:51:08+0000 )
  • DATE_RFC822 : RFC 822 ( Tue, 06 May 2008 23:51:08 UTC )
  • DATE_RFC850 : RFC 850 ( Tuesday, 06-May-08 23:51:08 UTC )
  • DATE_RFC1036 : RFC 1036 ( Tuesday, 06-May-08 23:51:08 UTC )
  • DATE_RFC1123 : RFC 1123 ( Tue, 06 May 2008 23:51:08 UTC )
  • DATE_RFC2822 : RFC 2822 ( Tue, 06 May 2008 23:51:08 +0000 )
  • DATE_RFC3339 : Same as DATE_ATOM ( 2008-05-06T23:51:08+00:00 )
  • DATE_RSS : RSS ( Tue, 06 May 2008 23:51:08 UTC )
  • DATE_W3C : World Wide Web Consortium ( 2008-05-06T23:51:08+00:00 )

2008年4月17日 星期四

RSS 2.0 的規格

RSS 是一種網頁內容聚合格式,為 Really Simple Syndication 的縮寫,是一種消息來源格式規範,用以發佈經常更新資料的網站,例如部落格文章、新聞、音訊或視訊的網摘。RSS 文件包含了全文或是節錄的文字,加上發行者的相關資訊及版權宣告等。訂閱者只要透過 RSS 閱讀器(如 Google 閱讀器),就可看到即時更新的內容。

RSS

所有的 RSS 文件都必須符合 XML 1.0 的規範。在最外層是一個 <rss> 並定義所順應的規格版本,往下由單一個 <channel> 以及多個 <item> 元素所組成。

RSS 的結構應該大致長得像這樣:

以下簡短說明 RSS 2.0 的規格:

必須的 channel 元素


  • title:此「channel」的名稱,供人識別你提供的資料,通常設成網站的標題即可。

  • link:你的網站 URL。

  • description:網站或此 RSS 服務的簡介。


選擇性的 channel 元素

  • language:語系,如「en-us」、「zh-tw」等,參考W3C 的定義

  • copyright:版權宣告。

  • managingEditor:RSS 內容負責人的 E-Mail。

  • webMaster:技術負責人的 E-Mail。

  • pubDate:內容發佈日期,比如日報的發佈應該會每天更新一次。日期時間的規格遵循 RFC 822 的標準。例:「Sat, 07 Sep 2002 00:00:01 GMT」。

  • lastBuildDate:本 RSS 內容的最後更新時間,如:「Sat, 07 Sep 2002 09:42:31 GMT」。

  • category:指出一或多個本 RSS 的性質分類,供 RSS 目錄系統使用,語法和 item 之中 category 的一樣,參考

  • generator:產生此 RSS 的程式名稱。

  • docs:敘述此 RSS 之格式的文件網址,也可將其指向 http://blogs.law.harvard.edu/tech/rss。

  • cloud:註冊以得到更新訊息的方式,如:「<cloud domain="rpc.sys.com" port="80" path="/RPC2" registerProcedure="pingMe" protocol="soap"/>」,參考

  • ttl:本 RSS 內容的有效期限,即 RSS 閱讀器可以將此 RSS 快取住多久的時間,單位為分鐘,參考

  • image:提供一個 GIF, JPEG 或 PNG 檔來代表此 RSS,參考

  • rating:內容分級制度評分,請參考 PICS

  • textInput:呈現一個可輸入文字的欄位,參考

  • skipHours:告訴訂閱程式哪些小時可以跳過,參考

  • skipDays:告訴訂閱程式哪些日期可以跳過,參考


item 元素

  • title:此 item 的標題。

  • link:此 item 的網址。

  • description:此 item 的概述。

  • author:此 item 作者的 E-Mail,參考

  • category:此 item 的分類,參考

  • comments:與此 item 相關評論的網址,參考

  • enclosure:此 item 內載的多媒體內容,參考

  • guid:此 item 的索引(唯一識別碼),通常也是網址,參考

  • pubDate:此 item 的發佈日期,參考

  • source:此 item 最新內容的 XML 網址,參考


相關資料︰
RSS 2.0 Specification
Extensible Markup Language (XML) 1.0 (Fourth Edition)
RSS - 維基百科,自由的百科全書

W3C - Language codes,ISO 639 語言代碼,ISO 3166 標準國家代碼,ISO 4217 貨幣代碼

現在有許多網站都有提供多國語系的版本,例如 iGoogle 首頁(http://www.google.com/ig?hl=zh-tw),其中(zh-tw)便是在 Google 繁體中文的代碼。但各家網站所使用的語系代碼都不太相同,例如有些網站就把繁體中文代碼直接簡化成(tw)。其實這些都沒有錯,只要本身系統區分的出來就好。

但是我的想法偏向比較標準的定義,在全球資訊網聯盟(World Wide Web Consortium,簡稱︰W3C)有了相關定義,在 8.1.1 Language codes 中定義了表示法如下︰

language-code = primary-code ( "-" subcode )*
primary-code︰為 ISO 639 兩個字母的語言縮寫。
subcode︰為 ISO 3166 國家代碼

在國際標準化組織(英文:International Organization for Standardization,簡稱︰ISO) ISO 639 為各語言所訂定的語言代碼,在 ISO 639-1 中定義了中文、漢語的語言代碼為(zh)。但是中文又區分為繁體中文及簡體中文,這部份通常是在後面加上使用該語言的國家和地區代碼來作為區分。例如︰繁體中文為中華民國、台灣(tw)在使用,那麼繁體中文的語言代碼就可以定義為(zh-tw);簡體中文為中華人民共和國(cn)在使用,所以簡體中文的語言代碼定義為(zh-cn)。

至於國家和地區代碼就必須參考 ISO 3166 中 ISO 3166-1 所定義的標準國家代碼,其中包含有二位字母、三位字母、數字代碼,在語言區分通常是使用二位字母代碼。我們更可以利用 ISO 3166-1 中所定義的數字代碼作為系統其他資料國家記錄所使用的代碼,例如︰紀錄會員資料的國家別。

另外還有 ISO 4217 為貨幣及基金代碼,這些我們都可以用來作為資料紀錄的標準。

相關資料︰
W3C 全球資訊網聯盟
Wikipedia - 全球資訊網聯盟
W3C - 8.1.1 Language codes

ISO 國際標準化組織的官方網站
Wikipedia - 國際標準化組織
Wikipedia - ISO 639
Wikipedia - ISO 639-1
Wikipedia - ISO 3166
Wikipedia - ISO 3166-1
Wikipedia - ISO 4217

2008年4月1日 星期二

CDATA 區段 - XML 標準

XML 對於許多人都不陌生,但還是有些地方大家不知道該如何使用,例如現在所要介紹的 CDATA 區段。

在某些時候內容中含有 HTML 標籤或者是一些特殊字元﹙如﹕<、>、&﹚,當這些字元出現在內容裡,通常都會出現 XML 分析錯誤的情況,這時候就必須將這些字元作些轉換的工作(如︰< / &lt;、> / &gt;、& / &amp;)。

其實並不需要如此,CDATA 區段提供了一種通知剖析器的方法,說明 CDATA 區段所包含的字元沒有標記。

當 XML 剖析器遇到開頭的『<![CDATA[』,會將接下來的內容報告成字元,而不會嘗試將其解譯成項目或實體標籤。字元參考不能在 CDATA 區段內運作。當它遇到結尾的『]]>』時,剖析器會停止報告並回到正常的剖析,這也能使用在 HTML 文件中。使用方法為︰

以下面商品資料文件 PDI0120080331195202.xml 為範例,其中 PDI01DOC.DocContent.Item.ProductUrl 為商品頁面的網址,內容包含了 & 字元;PDI01DOC.DocContent.Item.ProductDesc 為商品說明,內容包含了大量 HTML 標籤。所以這兩個內容我們都用使用了 CDATA 區段包起來,如此 XML 剖析器就能正常剖析了。

PDI0120080331195202.xml

2008年1月11日 星期五

XML/SWF Charts - Flash 繪製圖表

在網頁上常常需要顯示圖表資訊,例如投票結果,如果只用數字來呈現那就遜斃了。這裡提供了一個好用且免費的組件來繪製 Flash 圖表,並且可以產生不同類型的圖表,例如;柱狀圖、圓餅圖、曲線圖等等。


XML/SWF Charts

XML/SWF Charts 是一個由 SWF (Flash) 在 Client 端繪圖的組件。Server 只要準備 XML 格式的資料,圖的部份由 Flash 幫你在 Client 端繪畫起來。省了 Server 的 Loading,也沒有暫存檔的產生,而且是 Flash 做的,還可以有動畫特效,簡單、好用又美觀!

這裡還提供了支援 PHP 的組件,但是個人認為 XML 比較實用,所以對 PHP/SWF Charts 沒有做太多的研究。


PHP/SWF Charts

使用上很簡單,首先下載 XML/SWF Charts 的 library,解開後有一個 charts.swf 和 charts_library 的資料夾。把它們放到 web 可以 access 得到的地方。在 html 或是動態網頁檔加入以下的 flash object︰

其中 src 指向 charts.swf 的所在位置,library_path=charts_library 為 charts_library 資料夾的位置,xml_source=sample.xml 為 XML 資料路徑,由一個固定的 XML 格式表示圖表的原始資料。以下列的圖表為列:






 2001200220032004
Region A5103063
Region B100206555
Region C5621590

那麼 XML 如下:

就可以產生出下面的圖表︰



其中 <chart_type>column</chart_type> 標籤決定繪出圖表的類型,請參閱 <chart_type>

至於如果要呈現中文字請加上下面這兩個標籤,主要目的是將字型改為 system,預設字行為 Arial。

其他還有很多控制的標籤及參數請參閱 TutorialReference

以下是我自己測試的兩個範例圖表︰

XML_SWF_Charts.html

sample_1.xml

sample_2.xml