XSLT和XSL-FO有什么区别?

XSLT和XSL-FO有什么区别?

我读过的每一个资源都与它们相似,就好像它们是1,或者至less是非常紧密的联系在一起。

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

本规范定义了可扩展样式表语言(Extensible Stylesheet Language,XSL)的function和语法,XSL是表示样式表的一种语言。 它由两部分组成:

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

然而,回到现实世界,XSLT(这也是大多数人认为你的意思是XSL)是一种将XML文档转换成其他东西的手段 – 其他的东西往往不是另一种结构良好的文档,可能也被格式化为XML(尽pipe我已经使用XSLT将XML呈现为csv和纯文本(ish))。

另一方面,XSL-FO是关于格式化的 – 关于在一个页面或一系列页面上以相当严格的方式布置内容。 它很有用,因为它允许你pipe理分布在多个页面上的内容,它相对简单地指定一个页面(甚至是奇数页面)的格式,包括页眉,页脚,边框,栏等,并让你的内容stream入。 因此,人们会以XML格式读取大量数据,然后使用XSLT将数据转换为由XSL-FO组成的文档,然后使用适当的工具(例如PDF)进行渲染,以便打印或以其他方式分发。

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

希望你现在有点困惑了..

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

引自W3Schools :

XSL-FO正式命名为XSL

为什么这个混乱? XSL-FO和XSL是一回事吗?

是的,但我们会给你一个解释:

造型是关于转换和格式化信息。 万维网联盟(W3C)制定了他们的第一个XSL工作草案时,它包含用于转换和格式化XML文档的语言语法。

之后,W3C工作组将原始草案分为不同的build议书:

* 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的主页上find : http : //www.dpawson.co.uk/xsl/sect1/history.html

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

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

维基百科定义呢?

XSL格式化对象(或XSL-FO)是XML文档格式化的标记语言,最常用于生成PDF。 XSL-FO是XSL的一部分,XSL是一组用于XML数据转换和格式化的W3C技术。 XSL的其他部分是XSLT和XPath。 截至2006年12月12日,当前版本的XSL-FO是v1.1。

这可能是相当混乱的w3schools教程网站 (不相关w3.org)说

XSL-FO现在正式命名为XSL

在这里输入图像说明

这意味着XSL-FO和XSL是一样的东西,但他们不是!

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

另一个很大的区别是XSL和XSL FO有不同的引擎。 XSL无法渲染XSL-FO标签。 这个问题是关于哪个引擎用于XSL FO

哪个是最好的商业xsl fo引擎?

一个典型的XSL Fo tempate喜欢这样的

 <?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或文字,你需要寻呼机号码,文件号码,布局等。 有了这些信息,很难实现页码或标题等。

由于这个文档几乎可以肯定包含XSL标签,因为我们将拉取XML数据。 但是,如果没有XSL Fo引擎,文档将不会被渲染。

总而言之,他们是相似的,一起工作,但他们不是一回事。 它们由不同的引擎渲染。

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

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

转型可以做以下三种方式:

  1. 引用: 让浏览器进行转换:使用<xsl:processing-instruction>
  2. embedded式: 使用JavaScript的客户端转换。
  3. 运行时: 为了使XML数据可用于所有types的浏览器,我们可以在SERVER上转换XML文档。

例如

在这里输入图像说明 XSL-FO (XSL格式化对象):Web浏览器不支持XSL-FO,因为它是为打印输出而不是在线查看而devise的。 (来自@霍布斯)
当前支持的输出格式包括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> 

stream程图: 在这里输入图像说明

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

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

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

XSLT是一种语言(用XML编写)“用于将XML文档转换为其他XML文档”,尽pipe当前的XSLT 3.0 CR( http://www.w3.org/TR/xslt-30/ )将其改为“a 主要是为了将XML文档转换成其他XML文档而devise的。“ (强调补充说。)

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

历史进入它的最初只有一个规范 – 可扩展样式表语言(Extensible Stylesheet Language,XSL) – 定义了转换 – 将XML转化为FO XML词汇表 – 以及样式 – 定义FO的样式分页forms。 Dave Pawson的历史logging页面( http://www.dpawson.co.uk/xsl/sect1/history.html )与Mads Hansen的答案相关联,具有完整的细节,但沿着XSL成为build议书的路上,转型部分被认为是普遍有用的,被分解为“XSL转换(XSLT)”。 将标记转换为标记并不是新事物,但是具有多个(大部分)兼容实现的标准对于标记来说是一片新鲜空气。

XSLT可以处理XML文档的部分的方式也被认为是非常有用的,它被分解为“XML Path Language(XPath)”,所以可以被其他规范使用。 (XPath被XQuery和XLink使用)。

从这个angular度来看,XSL 1.1build议书仍然定义了一个转换加格式化的过程,但转换部分刚好在一个单独的文档中定义。 见http://www.w3.org/TR/xsl11/#d0e386

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

从历史angular度来看,XSLT 1.0( http://www.w3.org/TR/xslt )将自己定义为XSL系统的一部分:

XSLT被devise用作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格式化器可以兼得。

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

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