XSLT 和 XSL-FO 有啥区别?
Posted
技术标签:
【中文标题】XSLT 和 XSL-FO 有啥区别?【英文标题】:What's the difference between XSLT and XSL-FO?XSLT 和 XSL-FO 有什么区别? 【发布时间】:2010-10-18 22:21:08 【问题描述】:XSLT 和 XSL-FO 有什么区别?
我读过的每一个资源都将它们视为 1,或者至少非常紧密地联系在一起..
【问题讨论】:
另见***.com/q/10641667/287948 【参考方案1】:我想知道这个问题的基础,因为我认为它很容易回答,但是一旦你来到这里:http://www.w3.org/TR/xsl/ 很明显它实际上是一个很好的问题 - 因为几乎第一件事就是页面是这样的声明:
本规范定义了可扩展样式表语言 (XSL) 的特性和语法,这是一种用于表达样式表的语言。它由两部分组成:
一种用于转换 XML 的语言 文档 (XSLT),以及 用于指定的 XML 词汇表 格式化语义。
然而,回到现实世界,XSLT(这也是大多数人认为您所说的 XSL 的意思)是将 XML 文档转换成其他东西的一种方法——其他东西往往不是另一个结构良好的文档也格式化为 XML(尽管我使用 XSLT 将 XML 呈现为 csv 和纯(ish)文本)。
另一方面,XSL-FO 是关于格式化的——关于以相当严格的方式在一个页面或一系列页面上布置内容。它很有用,因为它允许您管理分布在多个页面上的内容,它相对简单地指定页面(或偶数页和奇数页)的格式,包括页眉、页脚、边框、列等,并使您的内容流入其中.因此,需要以 XML 格式加载数据,然后使用 XSLT 将该数据转换为由 XSL-FO 组成的文档,然后使用适当的工具(例如 PDF)进行渲染以进行打印或其他分发方式.
我的用例是获取一堆表格数据,将该数据导出为 XML,将其渲染为 XSL-FO,然后从那里转换为 PDF,然后再将其发送给打印机,打印机将所述 PDF 转换为 500 页的目录。在 XSL-FO 中指定需要页码、特定情况下的分页符、有一个目录和一个索引(每个都基于特定元素),并且呈现过程(到 PDF)处理填充页码全面的。
希望你现在不那么困惑了..
【讨论】:
【参考方案2】:除了首字母缩略词的相似性之外,这两种技术曾经是同一个 W3C 规范的一部分(草稿形式)。后来决定将 XSL(XSL-fo) 和 XSLT 分成两个独立的规范。
Quote from W3Schools:
XSL-FO 正式命名为 XSL
为什么会出现这种混乱?是 XSL-FO 和 XSL 一样的吗?
是的,但我们会给你一个 解释:
造型既是关于变换,也是关于 格式化信息。当世界 万维网联盟 (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
【讨论】:
【参考方案3】:XSL 是用于转换和呈现 XML 文档的语言系列
XSLT(XSL 转换):是一种用于将 XML 文档转换为 其他 XML 文档或其他格式(例如用于 Web 的 HTML)的语言页面、纯文本或XSL格式化对象,随后可以转换为其他格式,例如PDF、PostScript和PNG。 p>
改造可以通过以下三种方式进行:
-
引用: Let the browser do the transformation : 使用
<xsl:processing-instruction>
嵌入式: Client side transformation using javascript.
运行时: To make XML data available to all kind of browsers, we can transform the XML document on the SERVER.
例如:
XSL-FO(XSL 格式化对象):Web 浏览器不支持,因为它是为打印输出而设计的,而不是在线查看。 (来自@Hobbes) 当前支持的输出格式包括 PDF、PCL、PS、AFP、TIFF、PNG、SVG、XML(区域树表示)、打印、AWT 和 TXT。主要输出目标是 PDF。 Soruce
示例代码:
<fo:table-row >
<fo:table-cell>
<fo:block></fo:block>
</fo:table-cell>
</fo:table-row>
流程图:
【讨论】:
Web 浏览器不支持 XSL-FO,因为它是为打印输出而不是在线查看而设计的。 @Hobbes 感谢您提供宝贵的信息,让我也补充一下这一点【参考方案4】:XSLT 用于转换,XSL(与 XSL-FO 相同)用于格式化。
http://www.w3schools.com/xslfo/xslfo_intro.asp
【讨论】:
这个“最佳答案”只是部分正确,Mads Hansen 和下面的其他人是真正的最佳答案。 同意@Rob。 XSLT 是一种用于转换 XML 的转换语言。 XSL-FO 是一个用于分页布局和格式化的 XML 词汇表。 XSL 由 XSLT 和 XSL-FO 组成。【参考方案5】:Wikipedia definition 呢?
XSL 格式化对象或 XSL-FO 是 XML 文档的标记语言 最常用的格式 生成 PDF。 XSL-FO 是 XSL 的一部分, 一组 W3C 技术,专为 的转换和格式化 XML 数据。 XSL 的其他部分是 XSLT 和 XPath。截至 12 月 12 日, 2006 年,XSL-FO 的当前版本是 v1.1.
【讨论】:
这不再正确,XSL 是 XSL-FO。然而,XSLT 和 XPath 不是 XSL 或 XSL 的一部分。它们是来自 W3C 的独立建议。 他们最初是作为草案形式的同一规范的一部分,然后他们决定将它们拆分为单独的规范。这可能导致了混乱(除了首字母缩写词的相似之处)。【参考方案6】:正如w3schools tutorial site(与 w3.org 无关)所说,这可能会让人很困惑
XSL-FO 现在正式命名为 XSL
这意味着 XSL-FO 和 XSL 是同一个东西,但它们不是!
XSL 基本上是将 XML 数据表示为 HTML 文档 XSL-FO 是关于文档本身的格式化。例如,如果您想将 XML 转换为 word 文档,您想添加页码、更改页边距或页面布局、添加页眉和页脚等。这些项目只能通过 XSL FO 标签来处理,XSLT 无法访问文档属性。在技术领域,您很可能会遇到 XML 数据以 word 或 PDF 文档呈现的场景。它需要页码、布局格式、页眉等。这些是文档中非常重要的部分。
另一个很大的区别是 XSL 和 XSL FO 有不同的引擎。 XSL 无法呈现 XSL-FO 标记。这个问题讨论了 XSL FO 使用哪个引擎
Which is the Best commercial xsl fo engine?
一个典型的 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 或 word,则需要寻呼机编号、文档编号、布局等。没有这些信息,很难实现页码或标题等。
之所以会出现混淆,是因为该文档几乎肯定会包含 XSL 标记,因为我们将提取 XML 数据。但是如果没有 XSL Fo 引擎,文档将不会被渲染。
所以简而言之,它们是相似的并且可以一起工作,但它们不是一回事。它们由不同的引擎渲染。
【讨论】:
所以如果我有使用 xsl:template 标签和 html 的 xslt 模板,我不能使用 xsl-fo 来设置页面属性,因为你不能混合使用这两者? 很久没用了,记不太清了。【参考方案7】:与许多其他事情一样,这取决于您的观点和历史。
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 Recommendation 仍然定义了转换和格式化的过程,但是转换部分恰好在单独的文档中定义。见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 指定 XML 文档的样式,它使用 XSLT 描述文档如何转换为另一个使用格式化词汇表的 XML 文档。
但这种观点在 XSLT 2.0 (http://www.w3.org/TR/xslt20/) 中不存在,并且到 XSLT 3.0 时早已不复存在。
观点的最后一部分是,当许多人说“XSL”时,他们只是指 XSLT,除了那些当他们说“XSL”时,他们指的是 XSL-FO,而大多数人都忘记了他们的 FO 格式化程序可以同时做这两件事。
【讨论】:
【参考方案8】:XSL-FO 代表可扩展样式表语言格式化对象,它是关于格式化的,现在被称为 XSL 以避免所有混淆。所以不用再担心 XSL-FO。
然而,XSLT 是关于转换 XML。所以非常清楚。 XSL 是关于格式化,而 XSLT 是关于转换。
【讨论】:
不完全。 XSL-FO is 仍然称为 XSL-FO,这是引用它的最清晰的方式。 XSL 恰当地指代 XSLT 和 XSL-FO,但如果人们用它来指代其中之一,他们通常指的是 XSLT。【参考方案9】:XSLT 是一种模板格式,可用于生成各种文档,包括纯文本文档。
XSL-FO 表示使用 XSLT 生成 FO 文档。
【讨论】:
不完全。 XSL-FO 是一个 XML 词汇表,用于指定文档的布局和格式。 XSL-FO 文档可以通过 XSLT 生成,也可以不使用 XSLT。 另外,XSL-FO 的含义与 FO 相同。以上是关于XSLT 和 XSL-FO 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章