我用谷歌搜索了这个问题,但我不清楚什么是 XML 模式和 DTD(文档类型定义),以及为什么 XML 模式比 DTD 更强大。
任何指导将不胜感激。
从将DTD 转换为架构一文的DTD 与架构之间的差异部分:
DTD 和 XML Schema 之间的关键区别在于 XML Schema 使用基于 XML 的语法,而 DTD 具有从 SGML DTD 保留的独特语法。虽然 DTD 经常因为需要学习新的语法而受到批评,但语法本身非常简洁。XML Schema 则相反,它很冗长,但也使用标签和 XML,因此 XML 的作者应该发现 XML Schema 的语法不那么令人生畏。 DTD 的目标是为可能希望将 SGML DTD 转换为 XML DTD 的应用程序保留与 SGML 的兼容性级别。然而,为了与 XML 的目标之一保持一致,“XML 标记的简洁性是最不重要的”,并没有真正关心保持语法简洁。 […] 那么,当我们转换 DTD 时,还有哪些可能特别重要的其他差异?让我们来看看。 打字 DTD 和 XML Schema 之间最显着的区别是在 Schema 中创建和使用数据类型以及元素和属性声明的能力。事实上,XML Schema Recommendation 的一半专门用于数据类型和 XML Schema,这是一个非常重要的区别。我们在本书的第三部分“XML Schema Datatypes”中详细介绍了数据类型。 […] 出现约束 DTD 和模式显着不同的另一个领域是出现约束。如果您还记得我们在第 2 章“模式结构”(或您自己使用 DTD 的工作)中的示例,可以使用三个符号来限制元素的出现次数:*、+ 和 ?。 […] 枚举 所以,假设我们有一个元素,我们希望能够为衬衫定义一个尺寸属性,它允许用户选择尺寸:小号、中号或大号。我们的 DTD 看起来像这样: <!ELEMENT item (shirt)> <!ELEMENT shirt (#PCDATA)> <!ATTLIST shirt size_value (small | medium | large)> […] 但是如果我们想size成为一个元素呢?我们不能用 DTD 做到这一点。DTD 不提供元素文本内容中的枚举。但是,由于 Schema 的数据类型,当我们在前面的示例中声明枚举时,我们实际上创建了一个simpleType调用size_values,我们现在可以将其与元素一起使用: <xs:element name="size" type="size_value"> […]
DTD 和 XML Schema 之间的关键区别在于 XML Schema 使用基于 XML 的语法,而 DTD 具有从 SGML DTD 保留的独特语法。虽然 DTD 经常因为需要学习新的语法而受到批评,但语法本身非常简洁。XML Schema 则相反,它很冗长,但也使用标签和 XML,因此 XML 的作者应该发现 XML Schema 的语法不那么令人生畏。
DTD 的目标是为可能希望将 SGML DTD 转换为 XML DTD 的应用程序保留与 SGML 的兼容性级别。然而,为了与 XML 的目标之一保持一致,“XML 标记的简洁性是最不重要的”,并没有真正关心保持语法简洁。
[…]
那么,当我们转换 DTD 时,还有哪些可能特别重要的其他差异?让我们来看看。
打字
DTD 和 XML Schema 之间最显着的区别是在 Schema 中创建和使用数据类型以及元素和属性声明的能力。事实上,XML Schema Recommendation 的一半专门用于数据类型和 XML Schema,这是一个非常重要的区别。我们在本书的第三部分“XML Schema Datatypes”中详细介绍了数据类型。
出现约束
DTD 和模式显着不同的另一个领域是出现约束。如果您还记得我们在第 2 章“模式结构”(或您自己使用 DTD 的工作)中的示例,可以使用三个符号来限制元素的出现次数:*、+ 和 ?。
枚举
所以,假设我们有一个元素,我们希望能够为衬衫定义一个尺寸属性,它允许用户选择尺寸:小号、中号或大号。我们的 DTD 看起来像这样:
<!ELEMENT item (shirt)> <!ELEMENT shirt (#PCDATA)> <!ATTLIST shirt size_value (small | medium | large)>
但是如果我们想size成为一个元素呢?我们不能用 DTD 做到这一点。DTD 不提供元素文本内容中的枚举。但是,由于 Schema 的数据类型,当我们在前面的示例中声明枚举时,我们实际上创建了一个simpleType调用size_values,我们现在可以将其与元素一起使用:
size
simpleType
size_values
<xs:element name="size" type="size_value">