为什么XSLT在网络上很少使用?[关闭]


12

XSLT是成熟的,被广泛接受的标准。

它可以在浏览器(甚至在旧的IE中)和服务器端使用(nginx具有XSLT模块,当然可以从编程语言中使用它)。它的实现是经过编译的,因此应该比Python或JS快得多。JS实现Saxon JS至少可以用作后备。Jinja,Angular,Ruby的Slim,ASP和PHP模板还差得远。

可以在IDE中轻松验证XSL模板。有多少个IDE可以帮助Jinja或Angular?

用XSLT分解UI和数据似乎是一个绝妙的主意。

诚然,在某些特殊情况下,实现可能会给出不同的结果,但这仅是在客户端进行模板处理才是问题。与HTML,CSS和其他在客户端完成的操作相同。

那么,为什么不使用XSLT?


4
JSON比XML更容易。我不是在骗你,就在昨晚,我听到开发人员说他们非常感激他们不再需要使用XSLT。请参阅:stackoverflow.com/questions/4862310/json-and-xml-comparison
Dan Wilson

6
您是否尝试过做一些无关紧要的事情?
PlasmaHH

9
“因为使用它是痛苦的”是有效的答案吗?
扩展了

2
@thisextendsthat:不,因为JavaScript和CSS过去曾被人痛苦地使用,但仍被广泛使用。
JacquesB '18 -10-21

4
@JacquesB 仍然难以使用JS和CSS 。
安迪

Answers:


39

XSLT在现代交互式Web中实际上没有起到有用的作用。XSLT的目的是将一种XML语言转换为另一种XML语言-但实际上您根本不需要这样做。如果您没有技术要解决的问题,那么技术的强大,快速和良好支持就无关紧要。

XSLT用例消失的原因有很多:

  • HTML赢了。XSLT被认为有助于将某些语义标记格式的“富文本”内容转换为HTML。但是HTML本身是一种非常好的格式,那么为什么不首先使用它作为内容并跳过转换呢?
  • CSS已变得更加强大。XSLT的承诺之一是,您可以保持源标记的纯净和语义,然后将其转换为“表示性HTML”,该标记可跨浏览器工作,并可以在其中重新排列元素等。但是,这些天您实际上并不需要演示HTML,可以使用语义HTML,而CSS可以执行必要的样式和布局。
  • XML尚未成为数据的普遍格式。从数据库中获取SQL数据时,将其直接合并到模板中而不是先将其转换为XML然后再通过XSLT进行转换要简单得多。JSON几乎已经取代了XML,用于客户端的结构化数据。
  • XSLT旨在一次转换整个文档。但是在现代的交互式网页中,小片段的数据一直被零碎下载并合并到页面中。
  • 数据不是那么复杂。对于大多数用例,带有占位符和转发器的简单模板格式可以很好地解决任务。XSLT功能更强大,但是您几乎不需要额外的功能,而且复杂性和丑陋性代价很高。

XSLT从发布开始就发展了,您可以采用一种单向过程,从一种结构化的源格式转换为多种发布格式,例如打印,PDF和静态网页。大多数网站都不适合这种用例。


内容非常丰富的答案(+1)。
乔治

2
我不知道自己的经验是否与其他用户相同,但是向我解释的XSLT的“卖点”之一是减少了带宽:如果您的常规页面很大,则发送最小的XML(<chapter><title><par>...)和XSLT将“扩大”它与divtabletr根据需要,与另外,它可以被缓存。因此(再次,我不知道这种“优势”被解释为多么广泛),带宽的提高也会损害它(以及大多数HTML页面很小的事实)。
SJuan76 '18 -10-21

@ SJuan76:这是将语义标记转换为使用表进行布局的详细表示HTML的想法。幸运的是,不再需要使用表格进行布局,这样用例就没有意义了。
JacquesB '18 -10-22

1
@JacquesB我在页面上使用了这对夫妇:programaths.be/job/job.xml,它非常完美。XML用于显示页面并检查生成的问题清单的答案。这与表的格式无关,但是XML为我提供了很好的抽象。当然,我不在乎别人作弊。但是它表明,即使在现代,它也可能非常有用!
programaths

9

取决于您在“网络中”的意思。

XSLT被广泛使用。据我们可以从StackOverflow问题数量等指标来判断,它位于前30种编程语言中,这可能使其成为仅次于SQL的特定于数据模型的顶级编程语言。

但是XSLT在客户端(即浏览器)中并未得到广泛使用。通常在服务器端使用它来响应HTTP请求,按需提供内容,或者在批处理模式下将其用作发布工作流的一部分。当然,它还用于许多与网络无关的应用程序中,例如印刷出版中。

XSLT未在浏览器中广泛使用的原因有很多。主要原因是浏览器供应商对XSLT的良好一致性支持非常慢。没有人愿意使用它,直到在每个浏览器上都可以使用它,并且在每个浏览器上都可以使用它时,人们想要在浏览器中做的事情已经转移了(还记得“ Web 2.0”吗?)和XSLT实现。在浏览器中无法帮助您使用AJAX构建交互式应用程序或获取数据。

Saxonica(免责声明,这是我的产品)试图用Saxon-JS弥补这些差距,但是该产品是该聚会的后起之秀,并且客户端Web开发是非常时尚的驱动力,因此仅拥有一个勾选所有技术框的产品。推动时尚的部分原因是,大多数面向数据的站点(不同于面向文档的站点)已转向JSON而不是XML,这主要是因为JSON更易于从Javascript操作。

另一个问题是XSLT是一种爱或恨的语言。它的声明式,基于规则,面向功能的范例由于具有高级特性而吸引了许多人,但可能与那些仅会编写命令性代码以告诉计算机确切的操作和操作方法的编程人员背道而驰。什么顺序。


3

我在回答这个问题和将其作为主要基于意见的观点之间来回切换。所以,这是我的翻转:

简而言之,因为XML是一种糟糕的编程语言。我认为,与XSLT 的语义有关,但更好的语法将是另一回事。例如,有一些非常酷的基于Lisp的XML转换语言。

XSLT不能决定是否要使用树重写语言,功能语言或过程语言。它具有所有这些功能,但是在所有这些功能上都不是很擅长。对于这三个方面中的任何一个,都有更好的语言。


XML语法确实看起来很冗长。但是,到处都支持哪些其他语言?
乔治·索维托夫

XSLT是一种出色的功能语言IMO。它跌落的地方在于它结合了带有转换逻辑的视图。
RubberDuck

4
@GeorgeSoverov为什么在每个地方都受到支持很重要?它仅需要在您的服务器上受支持。
Esben Skov Pedersen

1
我认为,如果语言适合相关的用例,那么它的丑陋就无关紧要。只是见证JavaScript的成功。XSLT的问题在于用例不存在。
JacquesB '18 -10-21

1
好吧,您肯定表明这是一个吸引基于意见的答案的问题……
Michael Kay

0

因为XML本身在99.9%的情况下看起来都是过时的向后兼容。

XML不能立即替换的唯一用例是诸如docx或odf之类的东西,而SGML可能会更好*。也就是说,我们拥有令人难以置信的丰富文档结构,各种事物相互嵌套,并且应用了大的变换,因此它可以在屏幕和打印机上正确显示。

几乎所有时候,XML都用于传递结构化数据,并且看起来XSLT旨在将结构化文档数据转换为文档数据。该用例即将消失。JSON在结构化数据方面直接优于XML。** markdown和YAML在格式较轻的数据上均很出色。XML最初的亮点是Java和Javacript中的内置解析器。JSON通过利用内置的解析器来处理JSON来源受信任的情况(这在年轻时就是大多数)的情况下打破了这一障碍。

世界已经改变了。内置库的优势现在是微不足道的优势。XHTML被彻底拒绝,其替代品不是继承自它,而是继承自它的前身。

XML现在用于直接与想要接收它的人进行交谈,并且它以所需的格式在整个结构中生成,或者相反,它被读入并直接从其发送的形式解析为对象模型。因为它不再是存储格式或通用交换格式,不再需要将其从模式转换为模式。

*他们在大学里曾教过从未实施过SGML。他们撒谎了。

**我听过有关JSON中错误数字格式的投诉。另一方面,XML没有数字格式,因此仅将所有数据类型填充为字符串仍然会胜过XML。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.