XML Schema 是 SGML DTD 的子集吗?
Posted
技术标签:
【中文标题】XML Schema 是 SGML DTD 的子集吗?【英文标题】:Is XML Schema a subset of SGML DTD? 【发布时间】:2016-07-02 19:22:19 【问题描述】:XML 是 SGML 的子集。有效的 XML 文档也是有效的 SGML 文档,但反之则不成立。
即使我使用 XML Schema 而不是 DTD,这是否仍然有效?
怀疑源于 XML DTD 是 SGML DTD 的子集这一事实,但 XML Schema 允许在 XML DTD 中无法定义的东西。
那么 XML Schema 仍然是一个子集吗?我可以用 SGML DTD 做我用 XML Schema 做的所有事情吗?
【问题讨论】:
对 XSD 和 DTD 的表达能力进行详细比较的现有问题包括 ***.com/questions/1544200、***.com/questions/2389760 和 ***.com/questions/19683429。给出的比较不受 SGML DTD 和 XML DTD 之间差异的影响。 【参考方案1】:XML Schema 是 SGML DTD 的子集吗?
不,XML Schema 远不是 DTD 的子集。 XML Schema 使用与 DTD 完全不同的语法,XML Schema 可以表达许多 DTD 无法实现的约束。
有效的 XML 文档也是有效的 SGML 文档
您的意思可能是格式良好,而不是有效。 Well-formed is not the same as valid. 这可能是您要进行子集声明的地方。 XML 被设计为 SGML 的子集,是的。
我可以用 SGML DTD 做我用 XML Schema 做的所有事情吗?
不,甚至没有接近。仅举一个例子,DTDs cannot restrict data to numeric types,但 XML Schema 可以很简单。 XML Schema 通常比 DTD 更具表现力。
【讨论】:
一个有效的 XML 文档(使用 DTD)怎么可能不是一个有效的 SGML 文档? 要么你误解了我的回答,要么你仍然没有仔细区分valid vs well-formed。无论哪种方式,XML 是 SGML 的子集并不意味着 XML Schema 是 SGML DTD 的子集。了解valid and well-formed 之间的区别;这将极大地帮助您理解这里。 我不明白有效和格式良好之间的区别。我会试着把问题转过来。 XML DTD 是否有 SGML DTD 没有的“命令”? 现在您提出了一个完全不同的问题(与您关于 XML Schema 的其他查询行的联系不清楚);有关 SGML 和 XML 之间差异的概述,请参阅 Comparison of SGML and XML。 您确实意识到XML Recommendation 中定义的DTD 与XML Schema(又名XSD)不同,对吧?以上是关于XML Schema 是 SGML DTD 的子集吗?的主要内容,如果未能解决你的问题,请参考以下文章