何时使用SGML和XML?

3
这个问题等同于:“使用SGML与XML,以及XML与SGML的优缺点分别是什么?”我已经了解了SGML和XML之间的一些相似点和不同点,但它们没有回答这个问题。 相似点
  1. SGML和XML都允许我们描述文档(结构、数据、元数据);
  2. 两者将外观(颜色等)与数据/结构/元数据分开;
  3. SGML和XML都可以在Web页面中使用/在Web中使用(即使XML比SGML更专门用于Web)
  4. SGML和XML文档必须包含DTD才能“VALID”
不同点
  1. SGML提供了多种编写方式(例如:我们可以编写空标签和非闭合标签,我们可以编写<foo>d</>等)
  2. SGML文档可能很难编写
  3. 因此,SGML文档的解析可能非常低和复杂
  4. XML是SGML的一个子集,更容易学习、使用
  5. 与SGML不同,XML不允许以几种方式编写(例如:不允许空标签和非闭合标签)
  6. 因此,XML的解析比SGML更简单、更快
  7. SGML文档没有“WELL FORMED”状态,XML文档有(如果语法正确)
  8. SGML文档必须包含DTD,而XML文档不必。
但问题仍然存在

SGML/XML的优缺点是什么?(即:何时使用其中一个而不使用另一个?)?


1
你的第五点在我看来是无稽之谈,我可以在XML中写<foo></foo/>或者<foo/>或者<foo />。或者<element att='value'/>以及<element att="value"/>,这只是两个例子,XML允许使用不同的表示法来表达相同的语义。至于第七点,一个XML文档要有效,必须遵守DTD或模式,参见https://www.w3.org/TR/xml/#dt-valid,其中说到“如果XML文档具有关联的文档类型声明,并且文档符合其中所表达的约束条件,则该XML文档是有效的”。 - Martin Honnen
抱歉,我想说的是在XML中不允许使用空标签和未关闭的标签,我已经编辑了原始帖子。此外,你是对的:只有具备DTD的XML文档才是有效的。然而,与SGML不同,XML文档还有另一种状态:"WELL FORMED"(如果它具有正确的语法,则为WELL FORMED)。 - JarsOfJam-Scheduler
与SGML相反,XML文档可以不存在DTD。这是一个重大的区别吗? - JarsOfJam-Scheduler
你会用什么处理SGML? - biziclop
@biziclop,你可以使用受人尊敬的OpenSP/OpenJade软件包来处理它(在Debian/Ubuntu上使用sudo apt-get install opensp安装,在Mac/MacPorts上使用sudo port install opensp安装;不过我不知道MacBrew的等效方法);我正在使用自己的sgmljs SGML系统(即将发布)。 - imhotap
2个回答

4

区别在于全世界都使用XML,并且有大量的软件支持,而SGML仅由少数高级祭司使用,并且可用的软件非常少。

在这种情况下,技术上的差异基本上是无关紧要的。


3
作为最近花费大量精力在SGML上的人,我想发表一下自己的看法。您提出的第三点(XML比SGML更适用于网络)是不正确的,因为解析HTML超出了XML的能力范围;相反,我认为我们将会看到在当代基于HTML的工作流程中越来越多地使用SGML,其中HTML既用作作者格式也用作交付格式。
您提出的第四点(SGML必须有DTD)仅适用于传统的SGML,在1998年,随着XML规范的发布,SGML的附录K修订版,即“WebSGML”,放弃了这个要求,正是为了使无DTD声明的XML成为SGML的一个合适子集。当然,如果没有DTD声明,您就不能使用标记省略/推断、空元素(HTML“void”元素)、Wiki语法和所有其他SGML具有的强大功能。
此外,我想指出,“SGML vs. XML”的讨论是毫无意义的。SGML是XML的适当超集,可以向下转换为XML,因此在使用SGML时您不会失去任何东西。我个人同时使用XML和SGML;需要其附加功能时使用SGML。
对于如何使用SGML的现代方法,我想向您介绍我的演讲/论文,网址为http://www.xmlprague.cz/day2-2017/(“HTML 5.1 DTD”)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接