XSL Identity Transformation

XSLT 的作用大家應該知道了,便是把 XML 的格式從一種轉成另一種。比如說,把 RSS 或 ATOM 轉為可在瀏覽器上直接觀看的 XHTML (Feedburner 的功能之一),又或者把 XML 格式簡化,程式更容易套取資料。但是,你可有想過以 XSLT 把格式原封不動的弄出來?

或許你會問,這樣是多此一舉,既然一樣啦,為甚麼還要 Transform?

除錯。可能大家沒有這樣的經驗:看不到源 XML。源 XML 是從呼叫 SAX 各個 handler 的函數虛擬出來,根本便沒有 XML 產生過,除錯的時候很來找到問題的所在。用 Identity Transform 就好了,甚麼 XML 經 Transformer 一過便列了出來。

有些時候想把特定的元件改變,但其他則維持原狀,也可以透過從 Identity Transformation 樣版匯入其他樣版達到目的。此外,就是弄出不同排位次序但資料不變的 XML 檔案。

把 identity transformation template 貼出來看看:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>

延伸閱讀:XML.com: Using XSLT to Assist Regression Testing

XSL Family

因為工作需要,硬著頭皮「速成」了 XSL (XML Stylesheet Language Family)。XSL 是一套將 XML 資料變成另一種 XML 資料,及顯示 XML 資料的工具(本身也是 XML),有三名成員:

  1. XSLT(XSL Transformations,XSL 轉換)
    XSLT 給我的感覺很像 Regular Expression + Template,簡單的流程是在源 XML 找出要用的資料,再放到新 template 裏的變數裏去。例如 XML 格式裏有某個節點的資料要找出來,放進 HTML table 顯示給用家 (用家看不慣密麻麻的 XML 嘛)。XSLT 有點 programming 的意味 (有 foreach,也有 if else),但是本身也是一套格式表達的語言呢。
  2. XPath (XML Path Language,XML 路徑語言)
    這套不是 XML,卻是一套存取 XML 文件裏各元件資料 (包括元件值及屬性) 的語言。把 XPath 當成是在 XML 上使用的 SQL 較容易掌握。
  3. XSL – FO (XSL Formatting Object,XSL 格式化物件
    一套專門描述格式試定的 XML… 說穿了其實那是 XHTML 跟 CSS 合在一起,再刪減某些和格式無關的部份。

Sites Near me @ Google Maps

終於踏出了利用 Google Maps + Blogcasting 的第一部!本想在之前的文章更新再寫,不過有很多要說,結果又開了新文章。
網址在此:http://mk-notes.com/sitesnearme.php

這段 script 會透過 geourl.org 尋找在你網誌方圓 70 公里範圍內的所有網站標在衛星圖片上,而網址預設是我的 (http://mk.netgenes.org),但可加進 url 這個 variable 變成你的(你要在 geourl.org 登記你的網站才成)。就如 http://mk-notes.com/sitesnearme.php?url=http%3A%2F%2Ffoobar.com (以 foobar.com 為中心)。由於 Google Maps API 不允許其他網址在 url 上出現,先要把冒號翻成 %3A,slash 翻成 %2F 才可以騙過 Google,讓網頁找到你的家。

(以下為技術文章)
麻煩死了,初想簡簡單單用一段 fetch XML script 把 geourl.org 的rdf 扯到我的 server 裏去,不過發現裏面太多我不想要的東西,用 javascript 讀起來會很麻煩,便試試用 PHP 把那段 rdf transform 一次 (對,我不懂 XSLT,又懶學)。試著用 xml_parser(),不知為甚麼內容統統不見。dom_xml 更奇怪,居然連續抱怨一空白行上不存在的 variable!後來想起伺服器支援 PHP 5,便索性用 simpleXML,簡單方便的寫完!只是在處理命名空間上有點麻煩,不過相對 xml_parser 及 dom_xml 那只是個小問題。

至於 javascript 嘛,不太難。Google Maps API 也頗實用,只是官網上的文件有錯處,害我撞進死胡同 (其實是設定為衛星圖片的常數多了一個 ‘G’ 開頭)。

Update:
剛弄了套較美觀的介面,除此之外還有給放到網頁上的版本。

XHTML 2.0

xml.com 的專欄開始介紹 XHTML 2.0 呢。XHTML 2.0 在語法上有很大變更,例如移除 <br />,換成 <l> … </l>;<img /> 就扔,要用上<object>… 還有新的<nl>呢。看來 W3 要做到 presentation 跟 semantics 絕對分家…

現在我不清楚 HTML 的角色,究竟是一套 presentation language,還是一套 document description language 呢?不過,標準走得太遠,有時也會嚇倒初學用家…… 以後不知道還有沒有人會用 text editor 寫 XHTML 2.0… 我對這套標準的認受性不太樂觀。

連結的背後

超連結的概念早於 1965 年便已構思出來。直到80 年代萬維網之父英國人伯納斯-李發明了超文本語言,才將連結的應用實現。連結的用處,通常是將文件內某字句連到其他文本相關的內容。現在我們只要在電腦前用滑鼠一按,瀏覽器便會下載相關於某字的資料,可謂十分之方便。難怪伯納斯-李被封爵,04 年更獲選為最偉大英國人。 Continue reading