天天看點

深入XSLT第六章--- 聯合樣式表

深入XSLT第六章--- 聯合樣式表

XSL提供兩種機制來聯合樣式表:

1.樣式表導入,允許樣式表之間互相引用

2.樣式表包含,允許樣式表被原文組合.

樣式表導入

一個XSL樣式表可以包含xsl:import元素.所有xsl:import元素必須出現在樣式表的開頭. xsl:import元素有一個 href 屬性,它的值就表示要導入的樣式表的URI. 相對URI是指相對于xsl:import元素的基URI.

<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

<xsl:import href="article.xsl"/>

<xsl:import href="bigfont.xsl"/>

<xsl:define-attribute-set name="note-style">

<xsl:attribute-set font-posture="italic"/>

</xsl:define-attribute-set>

</xsl:stylesheet>

導向的樣式表中的規則和定義比任何被導入樣式表中的規則和定義都要重要.同樣,一被導入的樣式表中的規則和定義比之前導入的樣式表中的規則和定義都要重要.一般來說,更重要的規則或定義比次重要的規則或定義要優先.每一類的規則和定義都會詳細規定它.

樣式表包含

一個樣式表中可以用xsl:include元素來包含另一個XSL樣式表. xsl:include也有href 屬性,它的值就表示被包含的樣式表的URI. 相對URI是指相對于xsl:include元素的基URI. xsl:include元素可以作為xsl:stylesheet元素的子元素,出現在任何xsl:import之後.在XML樹的層次在上該包含生效.由href屬性值定位的資源内容作為一個XML文檔解析,在該文檔中的xsl:stylesheet元素的子元素替代包含文檔的xsl:include元素.同時在被包含的文檔的xsl:import元素在包含文檔中移上至任一存在的xsl:import元素之後. 不象xsl:import,被包含的規則或定義不影響他們被處理的方式.

嵌入樣式表

通常一個樣式表就是一個完整的XML文檔,xsl:stylesheet元素作為文檔的元素. 然而一個XSL樣式表也可以嵌入在其它文檔内容之中.内嵌的方式可能有兩種:XSL樣式表可以原文嵌入在一個非XML文檔中或者xsl:stylesheet不作為文檔元素出現在一個XML文檔中.在第二種情況增加了出現内嵌樣式,即自己規定樣式的文檔的可能. XSL還沒有為之定義相應的機制.這是由于可以采用把樣式表結合文檔的通用方式來實作,隻要滿足: 

1. 該方式允許一部分内容可以規定為樣式表,例如使用有片段辨別符URI 

2. 該方式本身能被嵌入在文檔中, 比如作為一個處理指令.定義這樣的方式不在XSL的範圍之内. 

下例表明了怎樣用xml:stylesheet處理指令将樣式表和文檔結合來實作内嵌樣式. 其中的URI在片段辨別符中使用了一個Xpointer來确定xsl:stylesheet元素的位置.

<?xml version="1.0"?>

<?xml:stylesheet type="text/xsl" href="#id(style1)"?>

<!DOCTYPE doc SYSTEM "doc.dtd">

<doc>

<head>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl" id="style1">

<xsl:import href="doc.xsl"/>

<xsl:template match="id(foo)">

<fo:block font-weight="bold"><xsl:process-children/></fo:block>

</xsl:template>

</head>

<body>

<para id="foo">

...

</para>

</body>

</doc>