24

我早在90年代末就开始了我的网页设计生涯,当时网页技术似乎处于不断变化的状态。特别是,我记得在XHTML被广泛采用之前的一个过渡时期,一些主要网站开始部署由于浏览器支持不足而无法在人们的机器上呈现的XML网页。

我熟悉所涉及的技术,但我想知道是什么因素导致了XML和XSLT在web页面上的采用,然后又被放弃?这是不是因为技术太开放、太复杂,人们无法处理,而XHTML成为了一个明智的折衷方案?XML格式当然,它仍然很普遍,尽管我怀疑JSON已经从中窃取了一些市场份额,但HTML5/CSS3正在试图解决的一些问题现在25年前XML/XSLT似乎已经解决了这个问题。我知道HTML、XHTML和HTML5与XML和SGML有着明确的渊源,并且是直接从它们派生而来的,但我不知道失去使XML和XSLT如此强大的功能有什么好处。

我将引用我最喜欢的技术记者沙申克·夏尔马(Shashank Sharma)的一句话来结束我的问题,沙申克·沙尔马在被问及如何解决一个特别困难的问题时回答道:

我确信有一些使用XML的方法可以做到这一点。世界上的每一个问题都可以用XML解决。

22
  • 11
    只是对“一切都可以用XML解决”的一点评论:我曾经遇到过一些测试设备,它们能够将一些数据结构修改为具有明文解码属性的人类可理解树,然后再编码为被测试设备的二进制数据结构。导出/保存数据以供以后使用的唯一方法是XML,但它只是将二进制转储作为十六进制字符串。这是没有用的,因为将二进制转存作为普通二进制文件将是一种更有用的格式,不需要在XML和任何其他所需格式之间进行转换。 4月28日15:27
  • 9
    哇…XML/XSLT和XHTML。我已经有将近20年没有想过这些了。我不认为XML输给了XHTML,因为在我使用web服务的经验中,XML仍在继续。当然,JSON已经大大削弱了XML的吸引力,但XML仍在遗留系统中使用,我遇到了仍在使用它的API端点。我认为XHTML失去了前端开发人员对HTML5的青睐,因为XHTML没有提供HTML5可以做的任何有用的东西,而且HTML5也没有那么严格。全面披露:我花了很多时间研究XML/XSLT的复杂性。我真的很喜欢。 4月28日16:15
  • 23
    XHTML不是一个XML应用程序吗?也就是说,如果一个结构是XHTML,那么根据定义它也是XML。
    – 戴夫
    4月28日16:37
  • 12
    我最喜欢的理论是:XHTML输给了HTML5,主要是因为(a)Internet Explorer长期不支持XHTML;(b) 支持XHTML的Firefox不支持渐进式渲染;(c) 人们害怕黄屏死机,因为在黄屏死因中,一个语法错误就可能完全阻止页面的呈现,而没有工具生成格式良好的XHTML–HTML是通过字符串串联生成的,而没有太多注意正确的语法,而由浏览器来修复错误。不过,我不确定能否用消息来源证实这一点。 4月28日19:59
  • 9
    什么,没有人提到“XML就像暴力”?“XML就像暴力:如果它不能解决你的问题,你就没有充分利用它。”  —属性。到“slashdot via rust”。“XML就像暴力。当然,乍一看,这似乎是一个快速而简单的解决方案,但随后它就会失控,陷入彻底的混乱。”萨科斯
    – 吉迪斯
    4月29日15:25

11答案11

重置为默认值
43

正如您在问题标题中指出的那样,XML并没有输给XHTML,它已经输给了JSON作为传输格式。

也就是说,为了成为结构化数据之外的任何数据(XML有效负载就是这样),需要将其转换为浏览器可以呈现的内容。实现这一点的技术是XSLT样式表,它可以对所述结构化数据(查找轴)做一些真正令人惊叹的事情,包括将其转换为HTML文档,然后浏览器可以渲染该文档。

不幸的是,当时对遵守标准的关注并没有今天那么高,浏览器从来没有达到这样一个地步,即这仅仅是一开始就提供纯HTML。

XHTML没有做HTML不能做的任何事情,除了可以被机器检查的有效XML之外,所以它是“很好但没有实际价值”位。这些工作都是在Javascript中完成的,因为这正是我们今天所知道的实际Web应用程序的功能,而不是您浏览的半静态页面,服务器生成了您必须看到的内容。

然后将其形式化为HTML5。

因此,它并不是一开始就失去了足够的吸引力,因为它没有解决web开发人员遇到的问题。

12
  • 4
    你关于“这很好,但没有实际价值”的评论正是我想的。我认为XHTML没有得到充分利用,或者(再一次)它对人们来说太开放了,或者利用得不够好。我记得我花了很多时间学习SGML、XML和XSLT,并认为这确实是一种很好的方法,尤其是将所有内容放在一个地方并将其呈现为多种不同类型的格式,与此同时,现代浏览器仍在努力将简单的网页呈现为打印文档:/ 4月28日18:53
  • 18
    此外,它成为了一种宗教,这对它不利——即使在没有意义的情况下,它也倾向于使用110%的XML。将函数式编程语言作为转换机制的想法很有意义。函数式编程语言的思想自身必须编码为XML(即XSLT)(没有定义的“标准”语法)是愚蠢至极的,只有一个喝了一加仑可乐的人才会想到推广它能够为XML生态系统的利益而接受。) 4月28日19:21
  • @Nelson它与极其复杂的HTML解析规则有关,其中充满了异常和隐式状态转换,使得一些DOM树无法表示为标记。在XHTML中,每个DOM树都有一个明确的序列化,这是无损的(直到文本节点规范化)。通过XHTML而不是HTML进行遍历序列化绝对可以避免这个问题。 4月29日2:01
  • 2
    XML是一种糟糕的序列化格式,因为它是一种标记语言,而不是序列化格式。 4月30日16:02
  • 1
    @davidbak在XSLT出现之前,有多种用于SGML的转换语言,也有多种用于XML的转换语言(包括基于Scheme或Tcl的语言),但它们都没有XSLT的吸引力(显然,它们都没有这么长的使用寿命)。XSLT从W3C的努力中受益匪浅,但能够对文档和样式使用相同的编辑器也有好处,当您喝够了Kool-Aid之后,使用XSLT生成XSLT就很方便了。任何人在XSLT紧凑语法方面的努力都没有取得任何进展。 4月30日16:13
31

作为当时在场的人,我的印象是XML+XSLT和XHTML输给了HTML5,原因有两个,这两个是试图用HTML(SGML方言的一种表示形式,称为XML)取代HTML(SGML方言)的固有原因:

  1. 假设稳健性原则(“做什么要保守,接受别人的什么要自由”),人们认为用mimetype为XHTML提供服务的缺点太多,好处太少,这实际上会触发XHTML解析,因为这意味着单个未加密或键入的字节可能会导致整个页面无法访问,用户盯着一个解析错误。

    如果发现无效RSS提要很常见,那么您需要一些允许的内容,例如通用馈线分析器对于Python的模块,在人们习惯于使用字符串处理模板的语言中严格要求有什么希望?

    (在那段时间里,我确实研究了在加载时强制实现良好格式的模板引擎(元史这是我记忆中的),作为对Rust编译时间严格性的热爱的一部分,但没有发现任何东西比它慢了一个数量级。)

  2. XHTML 2试图打破与以前的HTML和XHTML版本的兼容性,比如替换<br>具有<l> 这是一个显式行…生态系统普遍拒绝的东西。

当时我的印象是,HTML 5的开发和HTML作为“生活标准”概念的引入,有点类似于从XFree86迁移到X.org,从OpenOffice.org迁移到LibreOffice,或是GCC 2.95的EGCS祝福……这是一次不信任投票。

(请记住,这也发生在Firefox在版本4中切换到快速发布节奏之前,因此人们的脑海中有一个“缓慢和脱离接触的开发导致崩溃”的元素,类似于今天人们对GIMP的看法。)

XHTML和XML+XSLT出自同一个学派,该学派也迷恋RDF和语义Web。反过来,这些微格式被更为自然的微格式生态系统所取代,我们已经看到消费者喜欢这些微格式谷歌搜索.

8
  • 2
    似乎过去/现在仍然存在这样一种心态,即不兼容的HTML是完全有效的,浏览器应该理解完全的垃圾(例如浏览器试图解析输出到同一页面的两组HTML文档)。我觉得奇怪的是,浏览器开发人员对这种情况无限期地继续下去感到高兴。你提到的例子<br>(从我的角度来看)<br><br/>然后返回到<br>似乎再次违反了标记系统的整体概念,比如他们不知道或不知道如何在XML中表示换行符。 4月28日23:25
  • 27
    “我觉得奇怪的是,浏览器开发人员对这种情况很满意”——他们并不满意,但如果他们的浏览器不能理解完全的垃圾,而其他浏览器可以,他们的浏览器将失去市场份额。幸运的是,过了一段时间,他们将完整垃圾的确切意义标准化了,现在每个人都很高兴:) 4月29日0:07
  • 有太多的生态系统建立在只假设稳健性谬误的第二部分的基础上,很容易忘记第一部分。 4月29日2:05
  • 1
    此外,微格式现在几乎已经过时了。随风而动,只显示标记和模糊的CSS类名,我们来了! 4月29日2:06
  • 7
    你必须记住,浏览器是其用户的代理,用户通常只是想阅读网页。像所有软件一样,我们应该期望它尝试做用户想要的任何事情。对于一个信息性网页(虽然不一定是一个web应用程序),用户希望它能尽可能地理解所抛出的任何东西。读者宁愿看到一些东西,即使是部分乱码,也不愿意看到任何东西。由于这种浏览器行为,他们看到看起来正确但实际上具有误导性的内容的可能性非常低。 4月29日12:55
27

XML陷入了浏览器战争的交火中。

21世纪初,浏览器供应商和W3C对HTML标准的控制发生了激烈的争论。我真的不知道这其中的政治背景,也不知道为什么浏览器供应商将W3C排挤在一边,走自己的路,但XML是受害者——浏览器供应商认为它是一种W3C技术,让W3C控制了web的发展,他们不喜欢这样,所以他们将其排挤在了一边。由于浏览器本质上是一个封闭的平台,独立的第三方技术几乎没有机会使用,因此它们实际上冻结了XML。

问题的一部分在于技术意识形态:你是通过拒绝不符合标准的内容来获得强大的网络,还是通过接受任何人愿意制作的内容来获取强大的网络?但我不认为这就是全部。

问题的另一部分是很难为浏览器环境生成一个好的XSLT处理器,特别是一个适合异步资源访问的浏览器/Javascript模型的处理器。浏览器供应商不愿意进行这项投资,而是采用了一种从未为该环境设计过的第三方处理器(libxslt),该处理器是由隐喻性的“内布拉斯加州的某个家伙”开发和维护的,这带来了集成难题。在21世纪的很长一段时间里,你根本无法依赖内置XSLT处理器的浏览器,如果没有它,你就无法部署依赖于客户端XSLT处理的网站;这反过来导致了对技术的投资不足。

另一个角度是,21世纪初的浏览器之战实质上是占据主导市场份额的微软与独立挑战者(如Mozilla Firefox和Opera)之间的较量。微软在XML技术上投入了大量资金,其他公司很难与之竞争;因此,淡化XML的重要性符合竞争者的利益。

除此之外,您还可以补充一个事实,即XSLT是一种功能极其强大的技术,但它具有敏锐的学习曲线。很多人看了一眼就被吓跑了。很少有语言能更受用户的喜爱或更受非用户的讨厌。

1
  • 10
    只是为了记录。Michael Kay编写了XSLT处理器Saxon,这是我近十年来的go-to实现。他还努力解决了缩放问题,因为XSLT悄悄地假设您可以将整个输入文档保存在内存中(对于Java实现,此时所需的内存大约是磁盘上文件大小的十倍),将XML作为一个需要更少内存的流来处理,但这只是在商业版本中,唉,我们不需要足够的钱来购买。如果有人知道这段历史,那就是他🙂 4月29日20:52
11

要了解为什么这些技术可能会被采用,也可能不会被采用,我们需要考虑谁会采用它们。主要是浏览器开发人员和网站创建者/开发人员。

对于XHTML,与经典HTML的主要区别在于严格性,大多数XHTML文档也是有效的HTML。这使浏览器开发人员的操作更加简单,但他们不能忽略旧的纯HTML解析代码,因为仍然需要呈现任何未进行转换的站点。对于网站创建者来说,用XHTML制作网站的压力很小,因为主要的区别是浏览器可以拒绝呈现无效的XHTML文档,而有错误的HTML文档可能仍然会显示内容,但会有样式错误。

XML/XSLT是一个稍有不同的故事,使用XML/XSLS的想法是基于动态数据生成网页。主要有三种方法:

  • 让整个网页在服务器上以编程方式创建HTML(可能使用某种模板引擎)
  • AJAX:有一个固定页面,然后在单独获取数据后更新浏览器中的HTML
  • XML/XSLT:从XML API获取数据,然后与XSLT结合生成HTML页面,以便在浏览器中呈现。

所有这些都有各自的优缺点,但对于XML/XSLT,还有许多其他缺点:

  • 浏览器中支持XML和XSLT的大量额外工作
  • 网站创建者必须同时使用三种不同的语言(HTML、XML和XSLT),这三种语言表面上都很相似
  • XSLT文件包含分布在XSLT处理中的HTML标记。这很难阅读
  • 一个小错误会导致文档无效,并且无法渲染
  • 很难在一个页面上组合来自多个源的数据

因此,虽然XML/XSLT可能具有一些技术优势,但可用性因素很可能是它的衰落

1
7

我会补充我的想法,因为它们不太适合作为评论。我也在同一时间,只有局外人的观点。有几条评论已经触及了它头上的整体问题“用户只是想看内容”,因此,破坏一堆现有网站通常是不好的,尽管我认为还有更多。

早期的HTML很难看,显然还有很多“难看”的结构仍然在四处游荡。当人们看到这样的东西时,他们经常想把它清理干净。然而,互操作性、向后兼容性和开发人员灵活性都很重要。记住许多网络工具的FOSS根源也很重要。

XML格式-我记得这方面有很大的推动,主要是由一些标准机构和供应商领导的。XML的问题是如何处理它——你不能“按原样”将它呈现给用户,所以你需要对它进行转换,但您要么需要完全在服务器上呈现,要么让浏览器尝试呈现(而且最初基于浏览器的XSLT通常依赖于特定于供应商的扩展,我记得有很多情况我只在IE中使用过)。作为一名开发人员,我对XSLT的印象是,它不容易使用(尤其是v1.0有一些漏洞),如果在浏览器中运行,可能很容易导致空白页面,有时几乎不支持调试。

然后我们讨论XML模式。我不知道百分比,但我觉得使用率有所下降(这可能是因为JSON,或者只是因为开发人员的不满)。XMLSchema显然是高度数据类型驱动的,似乎很适合“工具优先”的方法。IMO,这在开放网络中遇到了问题,因为工具大多是专有的——我知道我一直在使用需要大量手动工作才能编辑模式的工具。我认为非常聪明的人在XMLSchema方面做了大量工作,但最终只是试图推动一种有点狭隘和以数据为中心的视图。相比之下,我简要地研究了RelaxNG模式——它感觉更自然,但当时许多工具需要.xml扩展名,而当时RelaxNG拒绝提出任何类型的通用处理指令或其他文件内标记。

XHTML(XHTML)显然,这被定义为XML,所以说它“优于”XML有点误导。虽然我认为我理解,但有一些建议是将原始XML直接提供给浏览器(直接加载或通过JS加载),并使用XSLT向用户呈现某些内容;XHTML试图将HTML从更宽松的SGML规范重新定义为更严格的基于XML的规范。就其本身而言,我认为这有点问题,例如浏览器可能需要两种呈现模式,这取决于类型,而当时CPU和内存比现在贵得多,然而,随着时间的推移,XHTML标准可能最终会成为规范。然而,大约在同一时间还引入了许多其他标准化方面的尝试,如XForms等,RDF也被推出。至少在我看来,这不仅是过火(采取一种相当简单的形式并添加大量定义只是为了获得一些简单的东西),而且可能是试图将开发人员锁定在昂贵的工具中来生成、编辑和调试。我不知道其他人是如何看待这一点的,但这是我的印象。

HTML5虽然该标准基本上是独立的,但如果没有CSS3和现代DOM,很难想象会出现这种情况。它并不完美,但它使向后兼容性成为了一个相当核心的目标,并且通常使IMO更加不依赖于工具。JSON有点明显是一种有机开发,就像它自己的问题一样,但至少它很容易编写和模板,并且由于提交的数据需要在服务器上进行验证,所以不必总是将模式推送到客户端。

所以总结一下,观众是很重要的。主要受众是那些只想浏览网页而不关心格式的用户。第二类是使用这些格式的内容作者和网络开发人员,如果他们没有意识到相对于努力的价值,那么接受可能会很慢,其他解决方案将有机会站稳脚跟。

1
  • 1
    这里有一些非常好的观点,特别是关于可用工具的专有性质和XSLT的复杂性。 4月29日16:48
7

我想说,这个问题是基于一个(好吧,第二个)轻微的误解,以及为平息民意而制造的营销烟雾给人们的记忆蒙上了阴影。

让我们来看一看:

XML格式

XML的全部要点是制定标记的结构规则。目标是允许编写用于读取的极其简单的解析器,以及用于创建的同样简单的标准工具。

XML从来不是网页标记语言的定义,它甚至没有尝试过。它是100%的结构和0%的语义。事实上,XML本身并没有任何用处。它是一本关于如何创建任意特殊用途语言的规则书。最好将其视为SGML的简化版,只描述语法,而不是基于语法的任何语言的任何语义。因此,它不能输给(X)HTML(5),因为它不是有意的,也不能这样做。

XML的主要问题是,它从来没有真正被应用程序级程序员(也称为编码人员)使用过,但它是在没有真正指出区别的情况下提交给他们的。所以他们看到的都是与日常工作无关的东西。它们在非常非抽象的层面上工作。他们不想知道你如何为新语言创造新元素。他们想要的只是一个元素,可以让东西闪烁、滚动、更改字体和颜色(*1)。

另外,作为一个附带说明,XML并没有死,只是在它所属的背景中移动了一下——尽管不是到处都是。一些设想中的节省并没有实现,例如浏览器仍然需要额外的生成器/解析器来生成JSON:(

XHTML(XHTML)

XHTML并不是什么新东西,只是HTML(4)

  1. 随着时间的推移添加的所有垃圾
  2. 调整语法以清理XML
  3. 严格关注标记
  4. 将所有显示生成移到CSS中
  5. 限制交互元素的混合(又名JS)

基本上删除了所有草率的结构,这只是因为大多数浏览器都修复了它们,或者使用隐含的假设并使HTML成为标记,其他什么都没有。

第1点再次引起了应用程序程序员的反感,不仅仅是因为他们的爱人<马克>标签不见了,但它也意味着将所有的演示文稿移动到新的、非常奇怪的CSS文件或内联中——这被认为是膨胀的和无用的。

类似点2。毕竟,改变有什么好处<BR>进入之内<br/>? 人们普遍认为,所有这些变化都是不必要的和有限的。页面显然是按原样工作的,所以为什么要更改?

更不用说,当时许多人仍在考虑手工创建HTML和使用Perl进行交互。

最后但并非最不重要的#4和#5。最终,XHTML和XML非常相似,是一个非常抽象的干净表单设计。比如经常问一些非学术用户的理解。对于一个新的设计来说,并不是所有的东西都从一开始就被支持,并且会被添加到后续的组件中,这是很正常的。但这并不是网页设计第一线的人所需要的。他们希望自己拥有的一切,以及对新元素和功能的所有愿望都能实现。这就是HTML5的用武之地。

HTML5

HTML5与XML来自同一个方向——摆脱旧的垃圾,理顺结构,将标记与样式、交互分离开来——但WHAT-WG以更为实际的方式瞄准了所有这些:具体的元素和功能,允许怪癖继续工作,等等。

此外,HTML5通过添加JS API(如地理位置、服务器端事件和大量其他新挂钩),提供了对新功能的强大支持,从而允许更多的交互,甚至可以拖放。以前在每个浏览器上的工作方式都不同。

但最重要的是,HTML5专注于将所有内容作为延续进行销售,这是对HTML4的一个“小”更改,而不是一个需要从头开始学习的全新内容。(*2)

从长远来看,一切都像XML所设想的那样运行,并且几乎都是由工具独占生成的,至少隐藏了膨胀的本质。

XSLT等。

XSLT是操作XML树的好主意。和XML一样,它不是大多数程序员都能直接看到或处理的。这是接口/文档转换的特殊情况。作为一个通用的工具,它当然比CSS提供的更强大,可以调整特定的文档类型以生成各种输出。但是,CSS对于定义较窄的用例来说是一种特殊的类型语言,因此需要较少的努力才能获得相同的结果。CISC与RISC之比较。

我个人喜欢使用XSLT将结构化文档转换为他们需要的每种格式,包括将web应用程序中创建的数据输入到大型机应用程序中,这些大型机应用软件可能会认为他们正在阅读穿孔卡片:))


*1-一些微软确实很了解的东西,使得Internet Explorer在某种程度上很受欢迎。

*这是一个古老的故事,人们不喜欢根本的改变。他们想要更多相同的东西。IMHO几乎是CP/M的100%克隆,这是我们所知道的MS-DOS成功的主要原因。如果它是从2.0文件接口开始的,那么它的接收方式可能会不同。一旦人们转向MS-DOS,以与以前的CP/M相同的方式使用它,引入取代一切的新功能,并没有受到太大的抵制。或者说,我记得一些关于无用的新函数浪费时间之类的评论:)

5
  • 2
    +1表示谈论纯数据方面。我只是听说了xml和xsl用于生成网页的想法。。。。。。。这看起来确实需要很多工作😜 我记得xml是以web和web服务为中心的应用程序的一个出色的数据集成点,在那一天,它的速度一定输给了json
    – 迈克·M
    4月30日2:21
  • 1
    我认为JSON战胜XML的主要原因是XML更加冗长(您需要围绕所有内容使用匹配的结束标记),因此也更加脆弱(因为结束标记可能是错误的)。这被“验证一切”人群视为一个特性,但“容忍一切”人群则认为这是一个错误,HTML(不包括XHTML)一直是后者。即使在验证可能更有益的数据方面,冗长也是其缺点,无论是在脆弱性方面还是在更大的文档方面。
    – 米拉尔
    4月30日6:02
  • 您缺少<br/>上的后反勾号,因此它将直接进入浏览器。我无法修复,因为这是一个1个字符的更改。 4月30日23:05
  • @达沃夫曼哎呀。谢谢。 4月30日23:48
  • 1
    @davolfman在讨论XML和HTML的回答中非常合适;-) 5月1日8:12
5

我记得在XHTML被广泛采用之前的一个过渡时期,一些主要网站开始部署由于浏览器支持不足而无法在人们的机器上呈现的XML网页。

我想你所说的是这样一个概念,即不生成[X]HTML,而是为浏览器服务:

  • 一个语义XML文档,用一组自定义元素编写,这些元素表示您想要显示的原始数据;

  • 一个XSLT样式表,可以将这些数据转换为构成网页的表示元素,使用<?xml样式表?>处理指令。

  • (该愿景还有一个变体,其中转换生成的目标文档将是XSL-FO.Yikes。)

一些人相信这就是网络的未来,但从这里的评论来看,现在很少有人记得它了!(我这么做是因为我对一本关于样式表的书进行了技术编辑,该书的作者确信这是不可避免的,并且花费了令人沮丧的部分文本来应对它,并且无法被说服。)

我记得,“采用”主要局限于技术演示;我不认为有任何“主要网站”部署了它。这部分是由于前面提到的浏览器支持问题,但也有:

  • 实施速度不快;XSLT是一种对整个文档重新排序的转换,因此您丢失了渐进式呈现;

  • 除了由于XML格式良好错误(老实说,我认为这被夸大了)而导致页面中断的问题之外,XSLT中的任何错误或浏览器兼容性问题都很有可能使整个页面立即完全无法使用;

  • 在这种设置中,文档模型会如此不同,以至于许多抄袭CSS,尤其是作者想要保留的JS都无法工作;

  • 当您开始使用XSLT时,它感觉超级强大和优雅,但当您开始用它制作网页这一平凡的工作时,单调的现实是它远不如标准模板语言实用。管理页面中所有匹配项的顺序很快就变成了一项繁琐的工作,如果没有真正的编程语言,那么最终会出现一些粗鲁的XPath表达式,从而笨拙地尝试字符串处理。特别是当浏览器仍然限于XSLT1.0时。

但最重要的是:将语义源数据和网页放在同一个文档中,在现实世界中的好处微乎其微。如果你想公开你的数据,你可能会很乐意通过API提供它,而不必把API和UI紧密结合在一起。

最终,就像语义网一般,这是一个很有吸引力的愿景,不受“使其可用对个人作者有什么物质利益?”这个问题的困扰。

5

Microsoft Internet Explorer 6没有正确处理,因此没有人可以

W3C希望从一种更结构化的脚本语言开始,因为HTML已经变成了“标记汤”。也就是说,作者打破了所有规则,浏览器只是尽力显示它。人们只写在浏览器上看起来正确的东西,而不关心它是否正确。这对任何编写新浏览器的人来说都是可怕的,因为规范已经变得毫无用处。他们必须以与其他浏览器完全相同的方式处理所有断开的页面。如果您没有复制其他浏览器的所有未记录行为,并对所有出错的HTML执行与它们完全相同的操作,那么您的新浏览器将无法显示Web上的大多数页面。

W3C解决这一问题的方法是从一种明确打破向后兼容性的新格式开始。不仅如此,它从一开始就将面临“死刑”:任何兼容的用户代理必须拒绝显示包含以下内容的XHTML网页任何错误。W3C还建议将XHTML与application/xhtml+xmlMIME类型。

微软不支持这些。它将接受并显示XHTML,但前提是它与文本/htmlMIME类型。它会将其解释为它无法识别的一些奇怪的HTML方言,并将其显示为标记汤,而不遵循任何标准。每个服务器都通过告诉浏览器他们的XHTML文本/html,其他浏览器试图显示Internet Explorer可以显示的页面。

因此,Web上实际XHTML的很大一部分,甚至是专业的Web设计师,都未能进行正式验证。当时试图强制执行该规范是一个失败的原因:没有人会使用无法显示现有Web很大份额的浏览器,即使一些已发布的标准表示他们应该拒绝它。

那时,XHTML提供的任何新特性(除了一些例外,如MathML)都被添加到了向后兼容的HTML5中,而且切换没有任何好处。

在XML工作开始的时候,HTML被拉向了多个方向,因为不同的团体希望以不同的方式扩展HTML(例如,无线标记语言:https://en.wikipedia.org/wiki/Wireless_Markup_Language(英语)). XML最初是一种“要么搁置,要么闭嘴”的努力,当时一些倾向于SGML的人,主要是Sun Microsystems的Jon Bosak,提出了需要像SGML这样的可扩展的东西的理由。

XML建议书的摘要是:

可扩展标记语言(XML)是本文档中完整描述的SGML的子集。它的目标是使通用SGML能够以HTML现在可能的方式在Web上提供、接收和处理。XML的设计目的是易于实现,并与SGML和HTML互操作。

无论更广泛的W3C最初是否认为SGML编辑审查委员会(事实上)会产生任何有用的东西,W3C在XML开发过程中中途退出了,突然间,XML无处不在。

1997年5月,Tim Bray报道(https://lists.w3.org/Archives/Public/w3c-sgml-wg/1997年5月/0079.html):

  1. 在这方面,我们有一个强烈的政治现实需要处理大型浏览器制造商第一次注意到了XML和他们共同提出了一个强烈的要求:彻底处理错误确定性,浏览器不以卓越为基础进行竞争处理损坏的文件。据观察,如果他们愿意要做到这一点,他们可以做到;但随后指出这是标准存在的确切原因-编纂共享的期望实践竞争对手之间。无论如何,如果我们希望XML在Web上,很难抛出来自M&N回到了他们的脸上。

  2. 事实上,ERB上的每个人基本上都同意M&N的目标是,我们永远不希望XML用户代理遇到WF出错,然后继续进行,好像一切都很好。我们的分歧重点是如何使用规格机器来实现这一点。

浏览器制造商可能意味着HTML5风格的“完全确定性”错误处理,其中每个可想到的输入令牌都有一条路径。虽然可以对固定标记集执行此操作,但如果没有固定标记集,则无法执行此操作。因此,XML采用了“严格的错误处理”,在这种情况下,没有宽容的错误恢复机制。

浏览器选择了为XML错误提供YSOD的道路,最终做到了“只是这样做”,并为他们想要的确定性错误恢复制定了自己的标准。

2

首先,我认为区分两种不同类型的语言很重要:

  • 一个标记语言是为了写作文本具有额外功能的文档,如字体样式(粗体/斜体)、超链接、图像、列表或节标题。
  • 一个数据序列化语言用于代表数据对象,其中可能包含数字、字符串、二进制blob或其他对象。为了方便起见,这种语言可以表示为人类可读的文本,但数据本身不需要在概念上文本。

所以,我将分别考虑这些。

XML作为数据序列化语言

XML格式可以被用作数据序列化语言,并且作为一种语言受到广泛支持。微软的。NET Framework提供了对它的内置支持,并且其文档提供了一个示例。

<?xml version=“1.0”encoding=“utf-8”?><采购订单xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance“xmlns:xsd=”http://www.w3.org/2001/XMLSchema“xmlns=”网址:http://www.cpandl.com"><收货方名称=“Teresa Atkinson”>主街1号线<城市>任何城镇</城市><州>西澳州<邮政编码>00000</收货方>2001年6月27日星期三<项目><订单项>小工具S<说明>小部件</Description><单价>5.23<数量>3</数量><LineTotal>15.69</LineTotal></OrderedItem></项目><小计>15.69<运费>12.51</运费><总成本>28.2</采购订单>

在此期间作品,格式非常冗长。请注意,每个元素名称都写两次:对于open标记<X>和结束标记</X>.有三个命名空间虽然实际上大多数XML处理代码都没有指定URI需要处理元素名称冲突。

还有,为什么收货方。姓名XML属性而不是元素?这种区别在像HTML这样的标记语言中是有意义的,HTML通常(但并不总是)遵循这样的思想,即元素内容是用户可见的,而属性是标记元数据,如<a href=“$URI”>$TEXT</a>但在数据序列化语言中,用两种方法指定对象字段似乎是多余的。

与同等产品比较JSON格式字面意义的:

{“收货方”:{“姓名”:“Teresa Atkinson”,“Line1”:“1 Main St.”,“城市”:“AnyTown”,“州”:“WA”,“邮政编码”:“00000”},“OrderDate”:“2001年6月27日,星期三”,“项目”:{“OrderedItem”:{“ItemName”:“小工具S”,“说明”:“小部件”,“单价”:5.23,“数量”:3,“LineTotal”:15.69}},“小计”:15.69,“运费”:12.51,“总成本”:28.2}
  • 这是36%更短的而不是XML文档。
  • 字符串文字(带引号)和数字文字(不带引号)在句法上有区别。XML是字符串类型的,因此缺乏区分数字的方便方法123从字符串"123",或a无效的空字符串中的值"".

出于这些原因,许多开发人员现在更喜欢使用JSON或亚马尔用于数据序列化。毕竟,他们是设计的为此目的。事实证明,XML不是命名XML(可扩展标记语言)而不是XDSL(可扩展数据序列化语言)。

XML作为标记语言

那里当然,一种基于XML的Web标记语言,名为XHTML(XHTML)。所以这里的问题是:为什么HTML5战胜了XHTML?

XHTML的严格弊大于利

XHTML需要格式良好的XML语法,这意味着更严格的解析规则和更少的错误容忍度。理论上,这是一个特征因为它允许解析器实现更简单,所以它们不必围绕传统HTML臭名昭著的“标记汤”工作。

实际上,有一个许多HTML生成工具使用简单的字符串连接而不是适当的HTML构建库,并且不注意生成“格式良好”的代码。开发人员通常不喜欢看到他们的页面由于语法错误而无法呈现,他们更喜欢HTML更宽容的方法。Postel的法律适用。

至少HTML5尝试将错误处理标准化,以便更一致地处理“草率”的HTML代码。

向后兼容性

与上述内容密切相关的是,HTML5被设计为向后兼容旧版本的HTML,使现有网站更容易过渡到HTML5,而无需进行重大更改。除了将文档声明为<!DOCTYPE html>要将其标记为HTML5,您甚至可能根本不需要修改HTML4文档。

OTOH,XHTML更严格的解析模型使其与现有HTML文档的兼容性降低。

浏览器支持

只需Microsoft Internet Explorer不支持XHTML文件2010年第9版之前。

现在,有一个解决方法:通过使用XHTML附录C消除HTML4和XHTML之间语法差异的兼容性指南用户代理-将Content-Type设置为的条件逻辑文本/html在Internet Explorer上,但application/xhtml+xml在更好的浏览器上,您可以让XHTML文件在IE上工作。

但是,使用起来更简单文本/html对于全部的浏览器,否定了XHTML可能带来的任何优势。

而且,正如@user3840170在评论中指出的那样,这样做可以使Firefox上的页面加载更快,Firefox支持HTML的渐进呈现,但不支持XHTML。

0

可能之前都说过,但以下是我对事情的印象:

  • SGML非常酷(就像隐式结束标记一样),但在CPU和内存周期上很昂贵,所以最初的HTML(可能高达3.2版)有点“轻量级SGML”。
  • 虽然SGML的想法是一个内容模型和严格的语义“标记”,但使用HTML的人使用标记来进行特定的呈现,而不是标记特定的元素(例如“让我们从<h3>,因为<h1>对我的口味来说太大了”)。当时的HTML在很大程度上是“标记汤”(只是一个(大部分)平衡的开始和结束标记的任意集合)。
  • 我的猜测是,人们想要更多的结构,回到SGML的想法,发明了XHTML(与此同时,XML被发明为SGML中的一个子集,用于更轻松的使用),希望在“标记汤”中恢复正确的结构。事实上,HTML4.0或更高版本已经朝着这个方向发展了。我还认为XHTML主要是通过CSS进行样式化的,而人们仍然可以依赖默认样式(如经典HTML)。
  • HTML5通常与“繁重的脚本”(以及各种胡说八道的IMHO)结合在一起,您可以为几乎任何元素指定任何语义。这涉及到DOM(文档对象模型),允许脚本读取和写入整个“文档”(有时也会导致糟糕的性能)。任何文本都可以是一个按钮(例如),您可能会严重滥用元素,导致浏览器及其工具混淆(“为什么我的密码管理器不能用于站点XY?”)。XSLT在另一种技术中被定义为应用于正确结构的文档(浏览器实现仍然不同)。也许HTML5可以用“标记失去了意义”来概括,因为您可以添加任何您喜欢的标记名,并通过脚本为其附加运行时语义(您知道有趣的页面,其中一个按钮从您的鼠标指针“逃走”?)

虽然在HTML时代,人们可以在没有任何脚本支持的情况下查看和使用网页,但今天出现的大多数网页都无法在没有脚本支持的条件下查看。

关于XML的最后意见:我认为XML在太多情况下被误用为一种允许表示树状结构的语法,而不指定元素的结构或其内容(如果感兴趣,这里有一个不使用XML的好例子).

你必须登录来回答这个问题。

不是你想要的答案吗?浏览已标记的其他问题.