XSLT和XSL-FO有什么区别?

时间:2009-04-11 16:43:51

标签: xml xslt xsl-fo

XSLT和XSL-FO有什么区别?

我读过的每一种资源都与它们打交道,好像它们是1,或者至少非常紧密相关......

9 个答案:

答案 0 :(得分:36)

我想知道这个问题的基础,因为我觉得这很容易回答,但是一旦你到这里就来了:http://www.w3.org/TR/xsl/很明显它实际上是一个很好的问题 - 因为几乎是第一件事在页面上是这个声明:

  

此规范定义了可扩展样式表语言(XSL)的功能和语法,XSL是一种表达样式表的语言。它由两部分组成:

     
      
  1. 用于转换XML的语言   文档(XSLT)和
  2.   
  3. 用于指定的XML词汇表   格式化语义。
  4.   

然而,回到现实世界,XSLT(这也是大多数人会认为你的意思是XSL)是一种将XML文档转换成其他东西的方法 - 其他东西往往不是另一个结构良好的文档也格式化为XML(虽然我使用XSLT将XML呈现为csv和普通(ish)文本)。

另一方面,XSL-FO是关于格式化 - 关于以相当严格的方式在页面或一系列页面上布置内容。它非常有用,因为它允许您管理分布在多个页面上的内容,它相对简单地指定页面(甚至是奇数页面)的格式,包括页眉,页脚,边框,列等,并让您的内容流入。因此,人们可以在XML格式中加载大量数据,然后使用XSLT将该数据转换为由XSL-FO组成的文档,而XSL-FO又使用PDF中的适当工具进行渲染以进行打印或其他分发方式

我的用例是获取一堆表格数据,将该数据导出为XML,然后将其呈现为XSL-FO,然后从那里转换为PDF,然后将PDF转换为将PDF转换为500页目录的打印机。一个在XSL-FO中指定一个人想要页码,在特定情况下分页,有一个目录和一个索引(每个都基于特定的元素)和渲染过程(到PDF)处理填写页码全面。

希望你现在不那么困惑了..

答案 1 :(得分:19)

除了首字母缩写词中的相似之处,这两种技术曾经是同一W3C规范的一部分(草案形式)。后来决定将XSL(XSL-fo)和XSLT分成两个单独的规范。

Quote from W3Schools

  

XSL-FO正式命名为XSL

     

为什么会出现这种混乱?是XSL-FO和XSL   同样的事情?

     

是的,但是我们会给你一个   说明:

     

造型既是关于转变也是关于   格式化信息。当世界   Wide Web Consortium(W3C)取得了成功   首先是XSL工作草案,它包含在内   两者的语言语法   转换和格式化XML   文档。

     

后来,W3C的工作组分裂了   将原始草案分开   建议:

* XSLT, a language for transforming XML documents
* XSL or XSL-FO, a language for formatting XML documents
* XPath, a language for navigating in XML documents

年表的详细注释可以在Dave Pawson的主页上找到http://www.dpawson.co.uk/xsl/sect1/history.html

答案 2 :(得分:7)

XSL 是用于转换和呈现XML文档的语言系列

XSLT (XSL转换):用于将XML文档转换为其他XML 文档或其他格式(如 HTML for web)的语言页面,纯文本 XSL格式化对象,随后可能会转换为其他格式,例如 PDF ,PostScript和PNG。

转化可以采取以下三种方式:

  1. 引用: Let the browser do the transformation :使用<xsl:processing-instruction>
  2. 嵌入式: Client side transformation using JavaScript.
  3. 运行时: To make XML data available to all kind of browsers, we can transform the XML document on the SERVER.
  4. 例如

    enter image description here XSL-FO (XSL格式化对象):Web浏览器不支持它,因为它专为打印输出而非在线查看而设计。 (来自@Hobbes)
    目前支持的输出格式包括PDF,PCL,PS,AFP,TIFF,PNG,SVG,XML(区域树表示),Print,AWT和TXT。主要输出目标是PDF。 Soruce

    示例代码:

    <fo:table-row height=".5cm">
                <fo:table-cell>
                    <fo:block></fo:block>
                </fo:table-cell>
            </fo:table-row>
    

    流程图:enter image description here

答案 3 :(得分:6)

XSLT用于转换,XSL(与XSL-FO相同)用于格式化。

http://www.w3schools.com/xslfo/xslfo_intro.asp

答案 4 :(得分:3)

Wikipedia definition怎么样?

  

XSL格式化对象,或XSL-FO,是   XML文档的标记语言   格式化,这是最常用的   生成PDF。 XSL-FO是XSL的一部分,   一套专为W3C设计的技术   转型和格式化   XML数据。 XSL的其他部分是   XSLT和XPath。截至12月12日,   2006年,XSL-FO的当前版本是   V1.1。

答案 5 :(得分:2)

这可能会令人困惑,因为w3schools tutorial site(与w3.org无关)说

  

XSL-FO现在正式命名为XSL

enter image description here

这意味着XSL-FO和XSL是相同的,但它们不是!

XSL基本上将XML数据表示为HTML文档 XSL-FO是关于文档本身的格式。例如,如果要将XML转换为word文档,则需要添加页码,更改页边距或页面布局,添加页眉和页脚等。这些项目只能通过XSL FO标记解决,XSLT无法访问文件适当的。在技​​术领域,您很可能会遇到在Word或PDF文档中呈现XML数据的场景。它需要页码,布局格式,标题等。这些是文档中非常重要的部分。

另一个很大的区别是XSL和XSL FO有不同的引擎。 XSL无法呈现XSL-FO标记。这个问题讨论了用于XSL FO的引擎

Which is the Best commercial xsl fo engine?

一个典型的XSL Fo模板就像这样

<?xml version="1.0" encoding="ISO-8859-1"?>

<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">

<fo:layout-master-set>
  <fo:simple-page-master master-name="A4">
    <fo:region-body />
  </fo:simple-page-master>
</fo:layout-master-set>

<fo:page-sequence master-reference="A4">
  <fo:flow flow-name="xsl-region-body">
    <fo:block>Hello W3Schools</fo:block>
  </fo:flow>
</fo:page-sequence>

</fo:root> 

请注意,没有对XML数据的引用。这都是关于格式化文档本身。在将XML数据转换为法律文档时,这是一个非常重要的元素。因为如果输出文档是pdf或word,您需要寻呼机号码,文档编号,布局等。有了这些信息,很难实现页码或标题等。

由于我们将提取XML数据,因此该文档几乎肯定会包含XSL标记,因此引起了混淆。但是,如果没有XSL Fo引擎,则不会呈现文档。

所以简而言之,他们是相似的,并且一起工作,但他们不是一回事。它们由不同的引擎呈现。

答案 6 :(得分:1)

像许多其他事情一样,这取决于你的观点和你的历史。

XSLT是一种语言(用XML编写)“用于将XML文档转换为其他XML文档。”,尽管当前的XSLT 3.0 CR(http://www.w3.org/TR/xslt-30/)将其更改为“主要设计的语言 用于将XML文档转换为其他XML文档。“ (重点补充。)

XSL-FO是“用于指定格式化语义的XML词汇表”。它在“可扩展样式表语言(XSL)版本1.1”建议书(http://www.w3.org/TR/xsl11/)中定义。格式化程序,例如来自Antenna House,在FO词汇表中获取XML文档,并生成样式和分页输出。

历史进入它的原因是,最初只有一个规范 - 可扩展样式表语言(XSL) - 定义了转换 - 将XML转换为FO XML词汇表 - 以及样式化 - 获取FO分为风格和分页形式。来自Mads Hansen答案的Dave Pawson(http://www.dpawson.co.uk/xsl/sect1/history.html)的历史页面有详尽的全部细节,但在XSL成为推荐标准的过程中,转换部分被认为通常很有用,并被称为“XSL”转换(XSLT)“。将标记转换为标记并不是新的,但是对于具有多个(大多数)兼容实现的标准而言,这是一种新鲜空气。

XSLT可以解决部分XML文档的方式也被认为通常很有用,它被分解为“XML路径语言(XPath)”,因此它可以被其他规范使用。 (XPath由例如XQuery和XLink使用。)

从观点来看,XSL 1.1建议书仍定义了转换加格式化的过程,但转换部分恰好在单独的文档中定义。见http://www.w3.org/TR/xsl11/#d0e386

虽然官方的XSL 1.1 PoV是XSLT和XSL-FO都是XSL的一部分,并且可能每个FO格式化器都可以进行转换部分,但实际上,大多数人使用外部的方法将他们的XML转换为FO词汇表中的XML XSLT处理器并将FO XML提供给它们的格式化程序。

历史遇到的观点是XSLT 1.0(http://www.w3.org/TR/xslt)将自己定义为XSL系统的一部分:

  

XSLT旨在用作XSL的一部分,XSL是XML的样式表语言。除了XSLT之外,XSL还包含用于指定格式的XML词汇表。 XSL通过使用XSLT描述如何将文档转换为使用格式化词汇表的另一个XML文档来指定XML文档的样式。

但是XSLT 2.0(http://www.w3.org/TR/xslt20/)中没有这种观点,并且在XSLT 3.0时代已经过去了。

最后一点是,当许多人说“XSL”时,他们只是指XSLT,除了他们说“XSL”时他们的意思是XSL-FO,而大多数人忘记了他们的FO格式化器可以同时做到这两点。

答案 7 :(得分:0)

XSL-FO代表可扩展样式表语言格式化对象,关于格式化,现在称为XSL以避免混淆。所以不要再担心XSL-FO了。

然而,XSLT是关于转换xML的。所以非常清楚。 XSL是关于格式化的,XSLT是关于转换的。

答案 8 :(得分:-1)

XSLT是一种模板格式,可用于生成各种文档,包括纯文本文档。

XSL-FO表示使用XSLT生成FO文档。