한 XSL 스타일시트가 다른 XSLT 스타일시트를 포함할 수 있다. 다른 식으로 표현하면, 한 XSL 스타일시트 안에 다른 XSLT 스타일시트를 들여올(import) 수 있다.
<xsl:import> 요소가 그러한 기능을 수행한다.예를 들어 다음은 main.xsl을 driver.xsl이 포함하는 예이다.
파일 main.xsl<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <xsl:apply-templates /> </xsl:template> <xsl:template match="para"> <p> <xsl:value-of select="."/> </p> </xsl:template> </xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:import href="main.xsl"/> </xsl:stylesheet>
이러한 포함 기능은 복잡한 변환 과제를 여러 개의 XSL 스타일시트들로 분할할 수 있게 한다. 예를 들면 공통적인 기능을 담은 XSL과 특수한 경우에 대한 XSL들을 분리하고 적절히 조합하는 등.
이러한 포함 기능에서 한 가지 중요한 특징은, 포함하는 XSL에 정의되어 있는 것이 포함되는 XSL의 것을 덮어쓴다는 것이다. 예를 들어 앞의 예에서 driver.xsl을 다음처럼 바꾼다고 하자.
파일 driver2.xsl:<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:import href="main.xsl"/> <xsl:template match="para"> <문단> <xsl:value-of select="."/> </문단> </xsl:template> </xsl:stylesheet>
main.xsl에는 para라는 요소의 내용을 <p>로 감싸는 템플릿이 있다. 그러나 driver2.xsl은 그 템플릿을 다른 것으로 바꾼다. 좀 더 구체적으로 이야기하면:
이러한 기능에서 중요한 것은, 기존의 XSL 스타일시트를 전혀 건드리지 않고 그 XSL 스타일시트의 일부만을 변경할 수 있다는 점이다. 닥북 XSL 커스텀화는 이런 점을 기반을 둔 것이다.
기존 스타일시트의 일부를 특정한 요구에 맞게 커스텀화하는 용도로 쓰이는 스타일시트들을 커스텀화 계층이라고 부른다. 앞의 예에 나온 driver.xsl, driver2.xsl이 바로 커스텀화 계층이다.
닥북 XSL의 경우 기존 스타일시트는 DocBook XSL 이라는 이름으로 http://docbook.sourceforg.net/ 에서 배포되는 스타일시트 패키지(이하 기본 닥북 XSL)가 바로 기존 스타일시트에 해당하며, 그 스타일시트를 직접 수정하지 않고 일부를 변경하는 것은 모두 닥북 XSL 커스텀화 계층이라 할 수 있다.
닥북 한국이 배포하는 패키지에 포함된(CVS를 통해서 따로 다운받을 수도 있다) dbk-???.xsl들이 닥북 XSL 커스텀화 계층의 좋은 예이다.