Vincent.Chan‘s Blog

          常用鏈接

          統計

          積分與排名

          網站

          最新評論

          Thinking XML: 利用模式注釋實現自下而上的語義透明::讓模式超越語法進入語義范疇

          級別: 初級

          Uche Ogbuji, 首席顧問, Fourthought, Inc.

          2005 年 8 月 08 日

          進 一步了解實現語義透明的不同方法,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 元素,或者包含子元素 identpurchase-order 元素。其工作原理請參閱我的 前一篇文章。無論選擇什么語法,都可以把這種結構從具體的模式范式回溯到抽象范式(參見 清單 3),從而找到確定其定義的語義錨。模式將限定 count(key('ids', .)) = 1 檢查所有的標識符,從而確保只有一個包含當前值(換句話說,確定該標識符是否是惟一的)。它要求事先定義一個名為 ids 的鍵。





          回頁首


          結束語

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

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





          回頁首


          參考資料





          回頁首


          關于作者

          Uche Ogbuji 的照片

          Uche Ogbuji 是 Fourthought Inc. 的顧問兼創始人,該公司是一家專為企業知識管理提供 XML 解決方案的軟件供應商和咨詢公司。Fourthought 開發了 4Suite,這是一個用于 XML、RDF 和知識管理應用程序的開源平臺。Ogbuji 先生還是 Versa RDF 查詢語言的首席開發人員。他是一位出生于尼日利亞的計算機工程師和作家,目前生活和工作在美國科羅拉多的博耳德。您可以通過 Ogbuji 先生的 Weblog Copia 進一步了解他,或者通過 uche.ogbuji@fourthought.com 與他聯系。

          posted on 2006-03-21 23:51 Vincent.Chen 閱讀(278) 評論(0)  編輯  收藏 所屬分類: XML

          主站蜘蛛池模板: 武鸣县| 福清市| 庆阳市| 兴和县| 盐山县| 高雄县| 靖江市| 昂仁县| 凌云县| 南开区| 阆中市| 新丰县| 卢龙县| 樟树市| 上虞市| 浦江县| 黄浦区| 康乐县| 修文县| 平安县| 宜章县| 汉源县| 沅陵县| 闽侯县| 台南市| 凤冈县| 北宁市| 万山特区| 黄浦区| 琼结县| 虎林市| 伊宁县| 高要市| 沁源县| 绥宁县| 胶南市| 华蓥市| 鲁甸县| 祥云县| 宜章县| 南澳县|