DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> XML學習教程 >> XML詳解 >> XML 編程思想:利用模式注釋實現自下而上的語義透明
XML 編程思想:利用模式注釋實現自下而上的語義透明
編輯:XML詳解     

進一步了解實現語義透明的不同方法,Uche Ogbuji 闡述了語義透明對使用 XML 的開發人員意味著什麼。無論是否重用模式,都會發現使用正式的注釋(與以前討論的非正式注釋相比)是很有價值的。這樣做在不同的層次上帶來了好處。在最直接的實踐層面上,可以生成更好的文檔。更深遠的好處在於它提供了語義透明性的一種重要度量。這一期的文章將討論語義錨,並給出一些例子。作者還將花一點時間討論一下 XTech Conference 2005。

  以前的兩期文章“ Thinking XML: XML 建模藝術描述”和“ Thinking XML: 利用模式標准化實現自上而下的語義透明”中,我介紹了針對語義透明的一些有趣的技術和技巧。本文是這一小型系列的最後一部分,即第 3 部分,在本文中,我將討論我認為最重要的語義透明工具。正確的模式注釋在各種層次上都很有用,最起碼可以改進文檔。本系列的第一期中討論了非正式的模式注釋。本文中討論的方法是對這一思想的重要提煉,將利用語義錨實現注釋的形式化。這種方法還受益於 developerWorks 上的另一篇短文,“ 技巧:將數據詞典用於 XML 和 Web 服務大綱”。繼續閱讀本文之前,建議您看一看這些文章。

  不過,首先我想提一下最近參加的一次很棒的會議。

  XTech Conference 2005

  XTech 會議源自原來的 XML Europe 會議,特別增加了補充 XML 的浏覽器技術和語義技術專題討論會。此外, 開放式數據的專題討論會和所有主題不僅考察處理 XML 的全新技術,還探討人們和組織如何向世界自由提供數據,以便創建全新的、增加價值的應用程序和資源。

  XTech 2005 於 5 月 25-27 日在阿姆斯特丹召開(與 XML Europe 2004 的地點相同,很可能 2006 年也在這裡召開)。我一直非常喜歡這個會議,高度關注標記技術的新思想和實際應用。浏覽器和開放式數據專題討論會為整個會議注入了很大活力,組織者 Edd Dumbill 為了營造團結協作的大會氛圍所做的創造性工作也增強了大會的吸引力。會議提供了 Wiki(公開征求意見)和 IRC 頻道(公開討論)。Edd 在主持 Planet XTech 中很好地運用了流行的 XML 技術用法,這是一個元數據驅動的 Weblog 和 XTech 相關圖片的集合,以 XML 的形式提供會議的日程安排,鼓勵人們以有趣的、有用的方式“重新混合”或者處理信息。它幫助完成了開放式數據專題討論會的所有任務。

 微格式(microformat)是會議討論的一大主題。基本上就是內嵌在宿主格式(如 XHtml 或 CSS)中的 XML 數據島。微格式允許用戶在信息中混合各種類型的擴展內容,如日歷信息、個人聯系信息或者圖片元數據。大會中我最喜歡的話題之一討論了一個系統,該系統的名稱很長,叫做 Gleaning Resource Descriptions from Dialects of Languages,或 GRDDL,可以用它從微格式中提取結構化的元數據(用法之一)。GRDDL 是一個重要的概念,我希望在以後的 Thinking XML 專欄文章中討論它。雖然我個人的陳述出了些問題 —— 會場上的投影儀拒絕與我的膝上電腦視頻驅動程序合作 —— 但我還是學到了很多東西,度過了一段美好的時光,最重要的是,我很滿意地看到 XML 領域對語義技術越來越重視的更多證據(有於 XTech 大會的更多信息,請參閱 參考資料)。

  正式的模式注釋

  形式化模式注釋的關鍵在於為所用的術語找到好的詞匯表資源和一組清晰的標識符。然後在模式中作為數據詞典連接的端點寫上這些標識符(通常是 URI)。清單 1 中的 RELAX NG 模式(緊湊語法)片段包含有非正式的注釋。

  清單 1. 使用非正式注釋提供語義線索的示例 RELAX NG 模式

          
namespace dc = "http://purl.org/dc/elements/1.1/"
element purchase-order
{
 dc:description [ "General purpose purchase order for merchandise" ]
 attribute id {
  dc:description [ "Unique identifIEr for the purchase order" ]
  text
 }
 #Rest of the schema here
}
   

  這種方法的局限性很大。僅僅提供了非正式的描述,需要人們讀懂後才能使用。因此很難開發能夠使用這類注釋推斷模式語義的軟件。非正式性反映在注釋使用了 dc:description 元素,該元素一般用於資源的松散說明。為了實現注釋的正式化,我將選用 OWL Web Ontology Language 中更確定的聲明,顯然我是在使用詞匯表術語標識模式數據元素。我選擇 WordNet 作為詞匯表。WordNet 是英文單詞及其詞法關系的數據庫。我曾經在本專欄 最近的一期文章 中討論過 WordNet,基本上可以將其作為一種機器可讀的詞匯表使用。清單 2 以 清單 1 為基礎,但使用了更正式的注釋。

清單 2. 使用正式注釋提供語義線索的示例 RELAX NG 模式

          
namespace wn = "http://www.cogsci.princeton.edu/"
element purchase-order
{
 wn:definition [
http://cogsci.princeton.edu/CGI-bin/webwn?stage=1&Word=purchase+order]
 attribute id {
  wn:definition [
http://cogsci.princeton.edu/CGI-bin/webwn2.0?stage=1&Word=identifIEr]
  text
 }
 #Rest of the schema here
}
   

  該例中的注釋為記錄定義提供了明確的引用。可以在引用的 WordNet 頁面上直接找到詞典中的定義:

名詞“purchase order”在 WordNet 中有一種意義。

  1. order, purchase order ——(付款並提供規格說明和數量要求後,請求某人提供某物的商業文檔,“IBM 接到了一百台計算機的訂單”。) 名詞“identifIEr”在 WordNet 中有一種意義。

  1. identifIEr ——(建立受體的身份的符號。)

  機器可使用 URL 的等價物來檢查語義是否等價 —— WordNet 允許您在此基礎上更進一步,使用它的同義詞設置更豐富的語義。如果一個模式中包含指向“name”的錨,另一個包含指向“identifIEr”的錨,那麼機器就可以導航 WordNet 自動識別這些術語詞義的相似性。不過,在實踐中,WordNet 並不一定是這類注釋的最佳選擇,模式中使用的術語多數都有專門的技術含義,而通用詞典中並沒有記載這些含義。另外,由於過於雄心勃勃,WordNet 還沒有完全完成,它包含不少錯誤,仍然在不斷的發展中。作為語義錨,還可以選擇 ebXML 核心成分和 RosettaNet 詞典,兩者本專欄中都曾經談到過。您甚至可以在每個符號中組合使用多個錨。

即使在准備從語義層面上處理這類注釋之前,也可以在文檔任務中加以利用。很容易使用 XSLT 抽取模式定義和注釋,以生成模式索引和數據詞典。甚至可以將從頁面中抽取的信息與 URL 錨結合起來。如果要使用 WordNet 來實現,可能需要使用 WordNet 的某個 RDF 翻譯版本,而不是原來 Princeton 網頁,否則標記非常冗長。

  抽象模式中的語義錨

  如果閱讀過我撰寫的“ Discover the flexibility of Schematron abstract patterns”,就會了解一種非常有用的技術,從具體的 XML 語法中抽象出模式的基本信息內容。我在那篇文章中指出,“通過為 Schematron 抽象模式增加語義豐富的注釋,還可以進一步提高表達能力……最終的模式很容易適應任何語法,同時還提供了語義透明性。”清單 3 中的 Schematron 片段示范了這兩種技術結合的強大功能。

  清單 3. 帶有正式注釋的 Schematron 抽象模式

          
 <pattern abstract="true" name="purchase-order">
  <rule context="$purchase-order">
   <wn:definition href=
"http://cogsci.princeton.edu/CGI-bin/webwn?stage=1&Word=purchase+order"
    />
   <assert test="$id">
    A purchase order requires an ID
   </assert>
  </rule>
  <rule context="$id">
   <wn:definition href=
"http://cogsci.princeton.edu/CGI-bin/webwn?stage=1&Word=identifIEr"
    />
   <assert test="count(key('ids', .)) = 1">
    An ID must be unique
   </assert>
  </rule>
 </pattern>
   

  這段代碼定義了一個 Schematron 抽象模式,包含帶有惟一標識符的訂購單的抽象概念。可以用任何 XML 范式來實例化它,比如使用帶有 ID 屬性的 PO 元素,或者包含子元素 ident 的 purchase-order 元素。其工作原理請參閱我的 前一篇文章。無論選擇什麼語法,都可以把這種結構從具體的模式范式回溯到抽象范式(參見 清單 3),從而找到確定其定義的語義錨。模式將限定 count(key('ids', .)) = 1 檢查所有的標識符,從而確保只有一個包含當前值(換句話說,確定該標識符是否是惟一的)。它要求事先定義一個名為 ids 的鍵。

  結束語

  在從事 XML 設計的咨詢活動中,我發現,對於提高模式以及我開發的其他工具的質量,語義錨是一種非常有用的工具。明顯的好處是,可以使用語義錨為客戶生成支持文檔,而後,清晰的語義所帶來的快速調整和處理技術會讓客戶感到驚喜。

  本文結束了關於實用語義透明技術的考察。希望我已經闡明,良好的語義設計不僅僅是一堆理論,而且能夠在 XML 技術實踐中應用。當然,我將繼續在本專欄中討論這個主題,也建議您參與 Thinking XML 討論論壇,與他人分享您的觀點。


 

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved