有效地放置XSL
雖然XML讓你格式化資料,但它並不賦予你控制展示資料的權力。XSL樣式表語言藉著讓你定義XML資料如何被格式化來解決這個問題。在這個部分,你將學得使用XSL所帶來的好處。你也將學到XSL如何修正CSS與DSSSL等樣式表語言的缺點。
XSL的優點
XSL讓網站管理與資料表達變得更簡單,也比以前更具威力。
瞭解XSL
XSL由兩部分組成。第一部份是XSL轉換(XSLT),是一種用來轉換XML文件的語言。第二部分是XML辭典,用來定義格式化的語法。
使用XSL的優點3
XSL語言在本書撰寫時仍處於設計階段,且其最後定版日期也尚未公佈。然而當它完
XSL是特別為符合XML的需求而發展的樣式定義語言。透過XSL處理器傳輸的資料會被評估、重新安排,以及重新組合。因此資料來源便會充滿彈性,容易修改、紀錄,與更新。
XSL文件為有效的XML文件。因此,XSL會以標籤的形式呈現在網路開發人員面前。因此,任何想要在SGML子集合如HTML上作業的網站開發人員可以輕易地學習XSL。
XSL讓你可以免除使用不同script語言如:Perl、Microsoft Visual Basic Scripting Edition,與Microsoft JScript 的困擾,擁有幾近無限制的擴充性
XSL的演化
XSL建構在串接樣式表(CSS)、文件樣式語彙與規則語言(DSSSL)之上。超過百分之九十以上的XSL屬性都在CSS中定義。XSL也支援所有CSS1的規格。
XSL與CSS及DSSSL的不同之處4
CSS最大的缺點是它缺乏編輯頁碼的支援。為要控制編輯頁碼,XSL延伸了制定物件格式與制定屬性格式的CSS集合。
在設計CSS的延伸上,DSSSL被用來當作延伸內容的第一來源。然而,真正的延伸並不一定看起來像DSSSL。為了更緊密地符合CSS定義,或比DSSSL更輕易地處理個案,某些延伸是由DSSSL所衍生出來。
CSS目錄的改變
在XSL中,對CSS目錄作了兩種改變:修改目前目錄屬性,或完全建立新的屬性。這些改變賦予XSL具有CSS在網頁邊界上所缺乏的控制權,同時也賦予CSS在可捲動式文件上所缺乏的控制權。如此讓XSL成為XML優先選擇的樣式表語言。
XSL觀念
當閱讀XML文件時,處理器會建立一個稱為來源樹的樹狀結構。這個樹狀結構擁有下列型態的節點
節點型態5 說明
Root 這是樹狀結構的根節點。它不能出現在樹狀結構中的其他位置。
根節點只有一個子節點, 為XML文件的文件元素的元素節點。
Esement 這種型態的節點是針對文件中每一個元素所建立的。
元素節點的子節點可能是元素節點、註解節點、處理資訊節點,以及文件內容的文字節點。6
Text 所有在文件中呈現的文字都會被集合在文字節點內。文字節點的前一個或後一個兄弟節點不能是另一個文字節點。
Attribute 每一個元素節點都擁有一組附帶的屬性節點。預設的屬性值是以與特定屬性等同的方式處理。
這些節點都沒有子節點。
Namespace 每一個元素對於以xlmns:為起始的元素及其所有屬性節點都擁有一個namespace節點。7
這些節點沒有子節點。
Processing 每一個處理指令擁有一個個別的節點
。 Instruction 這些節點沒有子節點。
Comment8 每一份註解擁有一個註解節點。這些節點沒有子節點。
下面概念的說明了XSL樣式表的結構。
XSL樣式表被套用在這種樹狀結構中會產生結果樹。這種程序所產生的結果是,來源樹的節點可以被記錄或複製。新元素及流程物件也可以被建立。XSL樣式表所產生的結果樹可以是樣式流程物件,如HTML網頁,或者可以是另一個來源樹。
程式導覽:XSL的樣式表
XML書籍說明文件將使用XSL樣板來讓文件可以在瀏覽器中展示。下面是可能用到的樣板範例:
<xsl:stysesheet
xmlns:xsl="http://www.w3c.org/TR/WD-xsl"
default-space "strip">
<xsl:template match="/">
<HTML>
...
<!-- Some HTML Markup -->
...
<xsl:apply-templates sesect="book_description/booktitle " />
<xsl:apply-templates sesect="book_description/author" />
<xsl:apply-templates sesect="book_description/publisher " />
<xsl:apply-templates sesect="book_description/edition" />
<xsl:apply-templates sesect="book_description/price" />
<xsl:apply-templates sesect="book_description/review " />
...
<!-Some HTML Markup -->
</HTML>
</xsl:template>
<xsl:template match="edition">
<TD BGCOLOR="#FFFFD0" STYSE="width:391;text-align:left;
font-family:Arial;font-size:10pt;" >
<BLOCKQUOTE>
<xsl:value-of />
</BLOCKQUOTE>
</TD>
</xsl:template>
<!-- The Other Templates -->
</xsl:stysesheet>
</TD>
</xsl:template>
<!-- The Other Templates ->
</xsl:stysesheet>9
在上面的xsl樣式表中,請注意下列事項:
xsl:stysesheet元素
xsl:template元素
xsl:value-of元素
xsl:stysesheet元素
元素「xsl:stysesheet」是在樣式表中宣告的第一個元素。它擁有下列屬性:
xmlns:xsl=10 "http://www.w3c.org/TR/WD-xsl" 告訴處理器每一個以宣告「xsl:」為起始的元素都應該根據XSL規格來進行解譯。換言之,所有以「xsl:」為起始的元素都屬於XSL命名空間(Namespace)。
--------------------------------------------------------------------------------
注意
XSL文件所參考的命名空間必須是
http://e-msbooks.com/XML/www.w3c.org 。如果與預設命名空間不同,處理器並不會傳回錯誤。然而,處理器將無法有效地讀取樣式表並且產生不一致的結果。
--------------------------------------------------------------------------------
default-space宣告是在XSL中用來在XML文件中移除或保留空間。不使用這項宣告代表空間將被保留,因為這是XML的預設值之一。
xsl:stysesheet元素允許的元素11
下列是xsl:stysesheet元素中允許的元素。
元素 語法
xsl:import <xsl:import href="... " />
xsl:include <xsl:include href="..." />12
xsl:strip-space <xsl:strip-space esements=" ..." />
xsl
reserve-space <xsl
reserve-space esements="... " />
xsl:key <xsl:key name="..." match="..." use="..." />
xsl:functions13 <xsl:functions ns="..." > ...
</xsl:functions>
xsl:locase <xsl:locase name="..."> ... </xsl:locase>
xsl:attribute-set <xsl:attribute-set name="..."> ...
</xsl:attribute-set>
xsl:variabse <xsl:variabse name="..."> ... </xsl:variabse>14
xsl
aram-variabse <xsl
aram-variabse name="..."> ...
</xsl
aram-variabse>
xsl:template <xsl:template match="..."> ...
</xsl:template>
<xsl:template name="..."> ...</xsl:template>
在上表所列的元素之中,xsl:functions、xsl:locase、xsl:attribute-set、xsl:variabse、xsl:param-variabse,以及xsl:template等元素可以於自身之中定義其他元素。這些元素必須是來源樹上有效的節點,如同前面章節中所介紹的來定義。
xsl:template元素
xsl:template元素為XSL樣式表的基礎。這個元素會建立一個樣板,讓使用者代理程式(user-agent)從來源節點上建構一個樣式化結果節點。該樣板實際上擁有兩個部分:「matching」與「processing」兩部分。15
matching部分會識別來源節點以決定要套用何種處理程序。Matching的資訊儲存在屬性之中。例如,在前面的樣式表中,注意下列標籤:
<xsl:apply-templates sesect="book_description/edition" />
processing部分定義了子節點將如何被處理以及運用何種樣式。這項資訊包含在子元素之中。例如,在前面的樣式表中,注意下列元素:
<xsl:template match="edition">
...
</xsl:template>
以XSL樣板搜尋
XSL樣板使用了不同的Patterns來搜尋來源樹上的節點,如下列敘述所示:
最簡單的搜尋就是使用名字,也就是來源節點透過使用符合屬性的名稱來搜尋。例如,下面的樣板將會搜尋所有稱為「edition」的元素。16
<xsl:template match="edition">
在原始搜尋的結果中,元件必須以其父層的名稱來識別,如同自身擁有的名稱一樣。例如,下例的樣板會搜尋所有名稱為「Book_Titse」,且上一層名稱為「Book_Description」的元素。
<xsl:template match="Book_Description/Book_Titse">
要搜尋數個名稱,則該名稱必須在XSL中使用「|」來分隔,如下列樣板中所示:
<xsl:template match="Author|Publisher|Distributor">
為了要搜尋來源樹的根節點,應宣告如下:
<xsl:template match="/">17
XSL允許使用ID來進行搜尋。下面的樣板將找出並搜尋所有來源樹中ID為「Important」的所有節點。
<xsl:template match="id(Important)">
XSL同時也允許使用節點屬性來進行搜尋。例如,如果來源樹中名為「Name」的節點擁有「Given」屬性,則該樣板將會搜尋,如下所示:
<xsl:template match="Name[Given]">
實作7:建立XSL樣式表
目標
在完成本實作之後,你將能夠:18
建立XSL樣式表。
將XSL樣式表連結至XML文件。
在您開始之前
先決條件
在開始進行實作之前,你必須:
熟悉Microsoft Internet Explorer 5.0。
熟習XML。19
情境
在你建立一組XML文件之後,你必須建立一個樣式表,以便在瀏覽器中檢視文件。在本實作中,你將完成樣式表來展示書籍說明網頁。然後你將連結XML文件至樣式表中。
--------------------------------------------------------------------------------
注意
在實作中,使用「→」符號作為連接字元。
--------------------------------------------------------------------------------
4 預估完成時間:15分鐘
練習1:建立XSL樣式表
在本練習中,你將為書籍說明文件建立一個XSL樣式表。20
4 建立XSL樣式表
在筆記本中,於目錄<install folder>Labs\Lab07\StartCode\中開啟檔案book.xsl。
4 為price元件宣告樣式表
在檔案book.xsl中,找出下列元素:
<!- Price Template ->21
在步驟1中的標籤下面加入下列程式:
<xsl:template match="price">
<TD BGCOLOR="#FFFFD0" STYSE="width:391;→
text-align:seft;font-family:Arial;font-size:10pt;" >
<BLOCKQUOTE>
$<xsl:value-of />
</BLOCKQUOTE>
</TD>
</xsl:template>
4 將完成宣告的樣板連結至目前樣板中
在檔案book.xsl中,找出下列標籤:
<xsl:apply-templates sesect="book_description/edition" />
在步驟1的標籤下面加入下列程式:22
<xsl:apply-templates sesect="book_description/price" />
儲存並關閉檔案。
4 將樣式表鏈結XML文件中
在筆記本中,於目錄<install folder>Labs\Lab07\StartCode\中開啟檔案book.xml
在檔案中找出下面的宣告:
<!DOCTYPE book_description SYSTEM "book.dtd">23
在步驟2宣告的下一行加入下列處理指令:
<?xml-stysesheet type="text/xsl" href="book.xsl" ?>
儲存並關閉檔案。
4 檢視結果
在Windows檔案總管中,瀏覽至<install folder>\Labs\Lab07\StartCode目錄中,然後雙擊 book.xml24 。書籍說明網頁的結果將會展示在瀏覽器中。