XML Schema是SGML DTD的一个子集吗?

3

XML是SGML的一个子集。一个有效的XML文档也是一个有效的SGML文档,但逆反之则不成立。

如果我使用XML Schema而不是DTD,这个结论是否依然成立?

疑问来源于XML DTD是SGML DTD的子集,但XML Schema允许定义在XML DTD中无法定义的东西。

那么XML Schema仍然是一个子集吗?我能用SGML DTD做到XML Schema所能做的一切吗?


现有的关于XSD和DTD表达能力详细比较的问题包括https://dev59.com/qnI_5IYBdhLWcg3wEOrq、https://dev59.com/CHE95IYBdhLWcg3wQ7qb和https://dev59.com/qXjZa4cB1Zd3GeqPfZHp。所给出的比较不受SGML DTD和XML DTD之间差异的影响。 - C. M. Sperberg-McQueen
1个回答

2

XML Schema是SGML DTD的子集吗?

不是,XML Schema远非DTD的子集。 XML Schema使用完全不同于DTD的语法,并且XML Schema可以表达许多在DTD中不可能的约束。

一个有效的XML文档也是一个有效的SGML文档

您可能指的是格式良好,而不是有效格式良好与有效不同。这里可能是您想要进行子集声明的地方。 是的,XML被设计为SGML的子集。

我能用SGML DTD做到XML Schema所能做的一切吗?

不行,甚至差得很远。 举个例子,DTD无法将数据限制为数字类型,但XML Schema可以轻松实现。 总体而言,XML Schema比DTD更加具有表现力。


一个有效的XML文档(使用DTD)如何不是一个有效的SGML文档? - zer0uno
1
你可能误解了我的回答,或者仍然没有仔细区分有效 vs 格式正确。无论哪种方式,XML 是 SGML 的子集并不意味着 XML Schema 是 SGML DTD 的子集。学习有效格式正确之间的区别,这将极大地帮助你理解这里的问题。 - kjhughes
1
现在你提出了一个完全不同的问题(与你关于XML Schema的其他查询线路没有明确的联系);请参阅SGML和XML的比较以了解SGML和XML之间的区别概述。 - kjhughes
你知道在XML推荐中定义的DTDXML Schema(也称为XSD)不是同一回事,对吗? - kjhughes
我知道它们是不同的。也许这篇文章可以帮助解释我的意思:http://www.differencebetween.net/technology/difference-between-sgml-and-xml/。它说:“由于 XML 只是 SGML 的一个子集,因此 SGML 解析器能够读取和解码有效的 XML 文件。然而,反过来则未必成立,因为 SGML 文件可能具有 XML 解析器无法理解的功能。” - zer0uno
显示剩余4条评论

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