乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      使用 RSS 和 Atom 實現(xiàn)新聞聯(lián)合

       figol 2006-10-25

      2006 年 10 月 23 日

      RSS 和 Atom 技術(shù)的出現(xiàn)為新聞聯(lián)合(news syndication)帶來了一個嶄新的時代。不管怎樣,Web 站點管理員每天手動發(fā)布新聞并管理電子郵件用戶都需要花費時間。本文說明了如何使用 RSS 和 Atom 聯(lián)合格式實現(xiàn)通用的新聞發(fā)布體系結(jié)構(gòu),使發(fā)布過程變得輕松,并將人為錯誤減至最少。

      如果您對內(nèi)容發(fā)布、RSS 2.0 格式規(guī)范以及 Atom 1.0 格式規(guī)范有了基本了解,那么您就可以準(zhǔn)備使用其中之一或者使用兩種技術(shù)來實現(xiàn)新聞聯(lián)合系統(tǒng),而本文對您來說是一個便利快捷的參考資料。

      RSS 和 Atom 聯(lián)合

      RSS 和 Atom 是相似的基于 XML 的文檔格式,描述被稱為摘要(feed)的相關(guān)信息列表。這些摘要由許多項組成,每項都帶有一套可擴展的附加元數(shù)據(jù);例如,每項都有一個標(biāo)題。這些摘要的主要用途是用于 Web 內(nèi)容聯(lián)合,比如用于 Web 站點和直接用于用戶代理的 Weblog 或者新聞標(biāo)題。

      RSS 2.0 和 Atom 1.0 的兩個例子


      清單 1. RSS 2.0 摘要示例

                  <?xml version="1.0"?>
                  <rss version="2.0">
                  <channel>
                  <title>Feed Title</title>
                  <link>http:///</link>
                  <description>Feed Description</description>
                  <language>en-us</language>
                  <pubDate>Mon, 03 Jan 2005 12:00:00 GMT</pubDate>
                  <item>
                  <title>Article Title</title>
                  <link>http:///articlelink.html</link>
                  <description>Your content included here.</description>
                  </item>
                  <item>
                  <title>Sports</title>
                  <link>http:///sportslink.html</link>
                  <description>Your content included here.</description>
                  </item>
                  </channel>
                  </rss>
                  


      清單 2. Atom 1.0 feed 示例
                  <?xml version="1.0" encoding="utf-8"?>
                  <feed xmlns="http://www./2005/Atom">
                  <title> Feed Title </title>
                  <link href=" http:///"/>
                  <updated>2003-12-13T18:30:02Z</updated>
                  <author>
                  <name>Your Name</name>
                  </author>
                  <id>urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6</id>
                  <entry>
                  <title>Article Title</title>
                  <link href=" http:///articlelink.html "/>
                  <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id>
                  <updated>2003-12-13T18:30:02Z</updated>
                  <summary>Some text.</summary>
                  </entry>
                  <entry>
                  <title>Sports</title>
                  <link href=" http:///sportslink.html "/>
                  <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344e45ab90</id>
                  <updated>2003-12-14T13:30:55Z</updated>
                  <summary>Some text.</summary>
                  </entry>
                  </feed>
                  

      RSS 和 Atom 摘要的相似點

      從前面的兩個例子(清單 1清單 2)可以看出,RSS 和 Atom 具有相似的基于 XML 的格式。它們的基本結(jié)構(gòu)是相同的,只在節(jié)點的表達式上有一點區(qū)別。

      每個摘要文件實際上代表一個通道。它包含通道標(biāo)題、鏈接、描述、作者等等。通道信息提供關(guān)于摘要的基本信息。通道信息之后是一些項。每項代表一篇可以從摘要閱讀器閱讀的真實的新聞或者文章。通常情況下,每項包含有標(biāo)題、鏈接、更新時間和摘要信息。

      RSS 和 Atom 摘要的不同點

      參考 RSS 2.0 and Atom 1.0, Compared,回顧 RSS 和 Atom 的不同點。


      表 1. 比較 RSS 2.0 和 Atom 1.0

      不同點 RSS 2.0 Atom 1.0
      部署 RSS 2.0 得到廣泛部署。 Atom 1.0 還未得到廣泛部署。
      規(guī)范 哈佛大學(xué)擁有版權(quán)并凍結(jié)了 RSS 2.0 規(guī)范。 Atompub 工作組(屬于 IETF)就 Atom 1.0 規(guī)范達成一致意見,并在將來有可能重新修訂。
      所需內(nèi)容 RSS 2.0 包含所需的摘要級別的標(biāo)題、鏈接和描述。它不需要在摘要中出現(xiàn)的任何單獨項的字段。 Atom 1.0 包含摘要和條目所需的標(biāo)題(可以為空)、惟一標(biāo)識和最后更新的時間戳。
      有效負(fù)載(payload) RSS 2.0 可以包含普通文本或者轉(zhuǎn)義 HTML,但是不能分辨所提供的是兩個中的哪一個。 Atom 1.0 包含有效負(fù)載容器。
      全部或者部分內(nèi)容 RSS 2.0 有一個 <description> 元素,可以包含條目的全部文本或者大綱。它沒有用于標(biāo)識內(nèi)容是否完全的內(nèi)置方法。 Atom 1.0 提供單獨的 <summary><content> 元素。如果它是非文本的或者非本地的內(nèi)容,出于可訪問性的原因摘要將很好用。
      自動發(fā)現(xiàn) RSS 2.0 用不同的方法實現(xiàn)自動發(fā)現(xiàn)。 Atom 1.0 標(biāo)準(zhǔn)化自動發(fā)現(xiàn)。
      提取和聚合 RSS 2.0 只有一個可識別的形式:一個 <rss> 文檔。 Atom 1.0 允許獨立的 Atom Entry 文檔,可以使用任何網(wǎng)絡(luò)協(xié)議傳輸;例如,XMPP。Atom 也支持聚合摘要,其中,條目指向它們來自的摘要,前提是如果它們將被包含到其他摘要中。

      RSS 和 Atom 發(fā)布系統(tǒng)的通用體系結(jié)構(gòu)

      隨著 RSS 和 Atom 格式規(guī)范的發(fā)展和完善,可以實現(xiàn)越來越多的 Web 應(yīng)用程序。使用 RSS 或 Atom 的最通用和典型的實現(xiàn)是新聞發(fā)布系統(tǒng)。

      以下是一個使用 RSS 和 ATOM 摘要實現(xiàn)發(fā)布系統(tǒng)的通用體系結(jié)構(gòu)。這個體系結(jié)構(gòu)由三部分組成:

      • 摘要生成器子系統(tǒng)
      • 摘要運行子系統(tǒng)
      • 自動發(fā)布子系統(tǒng)

      現(xiàn)在分別看一下這三個子系統(tǒng)的詳細(xì)內(nèi)容。

      摘要生成器

      摘要生成器負(fù)責(zé)生成基于 XML 的摘要文件。摘要生成器的類圖如下所示:


      圖 1. 摘要生成器的類圖
      摘要生成器的類圖

      摘要生成器的核心是 FeedFileManager 類。它生成與一個特定摘要相關(guān)的 XML 文件。摘要有兩種具體的類型:AtomFeedRssFeed。這兩種 feed 類都包含一個 feed channel 類和一個 feed item 類。feed channel 類和 feed item 類的實現(xiàn)將根據(jù)它們不同的構(gòu)造而不同。

      摘要運行子系統(tǒng)

      摘要運行子系統(tǒng)提供了幾個摘要運行函數(shù),用于運行這兩種類型的摘要文件。例如,insertItem()、deleteItem()updateItem() 函數(shù)。摘要運行子系統(tǒng)的類圖如下所示:


      圖 2. 摘要運行子系統(tǒng)的類圖
      摘要運行子系統(tǒng)的類圖

      首先,需要一個抽象工廠模式 PublisherFactory 生成兩個摘要發(fā)布者之一。然后這個發(fā)布者通過 DataCollection 類從數(shù)據(jù)庫中提取數(shù)據(jù)。

      自動發(fā)布子系統(tǒng)

      自動發(fā)布子系統(tǒng)是在固定時間更新摘要文件的計時器。它利用前面兩個子系統(tǒng)并使發(fā)布系統(tǒng)運行。


      圖 3. 自動發(fā)布子系統(tǒng)的類圖
      自動發(fā)布子系統(tǒng)的類圖




      回頁首


      自動生成 RSS 和 ATOM 摘要的逐步實現(xiàn)

      現(xiàn)在,來看看每一步的詳細(xì)實現(xiàn)過程。首先,圖 4 提供了通用實現(xiàn)過程的圖表。它顯示了幾個主要的構(gòu)建塊以及它們之間的關(guān)系。


      圖 4. 實現(xiàn)過程概覽
      實現(xiàn)過程概覽

      整個應(yīng)用程序是一個大計時器,所以可以在它內(nèi)部設(shè)置固定的啟動時間。當(dāng)時間一到,計時器開始做預(yù)定的工作 —— 生成摘要文件。首先,應(yīng)用程序生成一個 XML 文件,然后形成 RSS 和 Atom 摘要,最后向創(chuàng)建的 XML 文件中寫入這些摘要。摘要的來源可以是數(shù)據(jù)庫、文件或者各種其他的資源。

      計時器

      計時器是發(fā)布系統(tǒng)的核心。它觸發(fā)系統(tǒng)根據(jù)用戶的指定時間或者在每天的固定時間生成摘要文件。對于 Java 應(yīng)用程序,通??梢允褂?Java 標(biāo)準(zhǔn)調(diào)度類:TimerTimerTask 來實現(xiàn)一個重復(fù)執(zhí)行的調(diào)度任務(wù)。

      更一般的是在這個發(fā)布系統(tǒng)中組合調(diào)度循環(huán)任務(wù)。如何組合調(diào)度循環(huán)任務(wù)的詳細(xì)信息可以參考 在 Java 應(yīng)用程序中計劃重復(fù)執(zhí)行的任務(wù)。


      清單 3. Timer start 方法示例

                  public void start() {
                  SchedulerTask st = new SchedulerTask(){
                  public void run() {
                  try {
                  updateNewsFeeds(); //concrete method of update feed files.
                  updateBooksFeeds();
                  ...
                  } catch (Exception e) {
                  e.printStackTrace();
                  }
                  }
                  };
                  

      生成基于 XML 的摘要文件

      RSS 和 ATOM 摘要都是基于 XML 的,所以在實現(xiàn)過程中生成這些基于 XML 的文件是很重要的。在摘要生成器子系統(tǒng)中的 FeedFileManager 類負(fù)責(zé)這項任務(wù)。


      圖 5. FeedFileManager 類
      FeedFileManager 類

      通常,這個類應(yīng)該包括 createFeedFile() 方法。這個方法需要做三件事:

      • 創(chuàng)建一個 XML 文件。要達到這個目標(biāo),可以創(chuàng)建一個靜態(tài)方法 createXMLFile()。
      • 與 “摘要運行子系統(tǒng)” 進行交互來創(chuàng)建相關(guān)通道和項信息。
      • 把所有信息寫回 XML 文件。


      清單 4. createFeedFile 方法示例

                  public String createFeedFile(String channelid, String name, String type)
                  throws Exception {
                  ...
                  createXMLFile(file, type);
                  IPublishable publisher = PublisherFactory.createPublisher(type, file);
                  Feed feed = getFeed(type);
                  Channel channel = feed.getChannel();
                  ArrayList itemlist = feed.getItemList();
                  publisher.insertChannel(channel);
                  publisher.insertItemList(itemlist);
                  publisher.writeback(file);
                  return file;
                  }
                  

      形成 RSS/Atom 摘要

      在上一個過程中,發(fā)布工廠創(chuàng)建了一個發(fā)布者并向某一摘要插入相關(guān)的通道信息和項列表。


      清單 5. 插入通道和項列表的示例代碼

                  publisher.insertChannel(channel);
                  publisher.insertItemList(itemlist);
                  

      要形成精確的通道和項列表,就要從數(shù)據(jù)庫中取出數(shù)據(jù)并向摘要模式中輸入取出的數(shù)據(jù)。下面演示了如何取出數(shù)據(jù),然后向相關(guān) databean 中輸入信息:


      清單 6. 摘要的示例代碼

                  ...
                  NewsBeanManager newsmanager = new NewsBeanManager();
                  newslist = newsmanager.getAllNews(); //interact with database
                  ...
                  for (Iterator it = newslist.iterator(); it.hasNext(); it.next()) {
                  title = "News " + i + ": " + ((NewsBean) newslist.get(i)).getTitle();
                  link = ((NewsBean) newslist.get(i)).getLink();
                  author = ((NewsBean) newslist.get(i)).getAuthor();
                  timestamp = ((NewsBean) newslist.get(i)).getPublishTime();
                  id = String.valueOf(((NewsBean) newslist.get(i)).getNewsID());
                  description = ((NewsBean) newslist.get(i)).getSummary();
                  content = ((NewsBean) newslist.get(i)).getContent();
                  rssitem = new RssItem(title, link, author, timestamp, id,
                  description);
                  rssitemlist.add(i, rssitem);
                  atomitem = new AtomItem(title, link, author, timestamp, id,
                  description, content);
                  atomitemlist.add(i, atomitem);
                  i++;
                  }
                  





      回頁首


      實現(xiàn)技巧

      在成功地實現(xiàn)新聞發(fā)布系統(tǒng)之后,您可能會受益于以下的部署技巧。

      為最流行的摘要閱讀器實現(xiàn) RSS 或者 Atom 摘要

      要滿足最流行的摘要閱讀器的需要,在生成摘要文件時要注意以下幾點。

      • 在 XML 文件頭添加 RSS 和 Atom 版本信息,如 清單 7 所示:

        清單 7. 添加 RSS 和 Atom 版本信息的示例代碼
                        <?xml version="1.0" encoding="utf-8"?>
                        <rss version="2.0">
                        ...
                        <?xml version="1.0" encoding="utf-8"?>
                        <atom version="1.0">
                        

      • 為 RSS 和 Atom 通道提供鏈接信息。在 RSS 2.0 中,鏈接信息顯示為節(jié)點,但是在 Atom 1.0 中,鏈接信息顯示為屬性。雖然鏈接對于 Atom 來說不是強制項,但是為通道部分提供鏈接信息是一種不錯的做法(參見 清單 8)。


      清單 8. 為通道提供鏈接信息的示例代碼

                  <?xml version="1.0" encoding="utf-8" ??>
                  <rss?>
                  <channel?>
                  <title?>News Syndication</title?>
                  <link?>http://www.</link?>
                  <description?>this is a news feed</description?>
                  ...
                  <?xml version="1.0" encoding="utf-8" ??>
                  <feed xmlns="http://www./2005/Atom"?>
                  <title?>News Syndication</title>
                  <link href="http://www." /?>
                  <updated?>2006-07-06T10:26:30Z</updated?>
                  <id>urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6</id?>
                  

      在生成 XML 文件時支持全球化

      在 XML 文件頭中添加編碼信息。


      清單 9. 在 XML 文件頭中添加編碼信息的示例代碼

                  <?xml version="1.0" encoding="utf-8"?>
                  

      當(dāng)實現(xiàn)寫 XML 文件的函數(shù)時,使用 OutputStreamWriter 代替 FileWriter 把編碼設(shè)置為 utf-8。FileWriter 的默認(rèn)編碼是 “GBK”。


      清單 10. 使用 OutputStreamWriter 把編碼設(shè)置為 utf-8 的示例代碼

                  OutputStreamWriter writer = new OutputStreamWriter(outputstream,"utf-8");
                  





      回頁首


      結(jié)束語

      本文中,首先回顧了 RSS 和 Atom 摘要的相似點和不同點,然后考察了使用兩種摘要類型實現(xiàn)發(fā)布系統(tǒng)的體系結(jié)構(gòu)。這種體系結(jié)構(gòu)包括三個子系統(tǒng),彼此相互配合工作。接下來在逐步演示之后,向您介紹了一些實現(xiàn)過程的技巧。現(xiàn)在您可以享受在新聞?wù)袘?yīng)用這些高效方法了。



       

      參考資料

      學(xué)習(xí)


      獲得產(chǎn)品和技術(shù)

      • 使用 IBM 試用軟件 構(gòu)建您的下一個開發(fā)項目,這些軟件可以直接從 developerWorks 下載。


      討論

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多