查看單個文章
舊 2004-06-21, 02:08 PM   #8 (permalink)
mic64
註冊會員
 
mic64 的頭像
榮譽勳章
UID - 582
在線等級: 級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時
註冊日期: 2002-12-06
VIP期限: 2007-04
住址: MIB總部
文章: 412
精華: 0
現金: 499 金幣
資產: 499 金幣
預設

有效地放置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=" ..." />

xslreserve-space <xslreserve-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

xslaram-variabse <xslaram-variabse name="..."> ...
</xslaram-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 。書籍說明網頁的結果將會展示在瀏覽器中。
mic64 目前離線  
送花文章: 0, 收花文章: 21 篇, 收花: 61 次