Answers:
从“ 将DTD转换为模式”一文中的“ DTD与模式之间的区别”部分:
DTD和XML Schema之间的关键区别在于XML Schema使用基于XML的语法,而DTD具有从SGML DTD保留的唯一语法。尽管由于需要学习新语法而经常批评DTD,但语法本身非常简洁。对于XML Schema来说,情况恰恰相反,因为冗长,但也使用了标记和XML,因此XML的作者应该发现XML Schema的语法不太令人生畏。
对于可能要将SGML DTD转换为XML DTD的应用程序,DTD的目标是保持与SGML的兼容性。但是,为了符合XML的目标之一,“ XML标记中的简洁性至关重要”,对于语法的简短性并没有真正的担忧。
[...]
那么,在转换DTD时,其他一些特别重要的区别是什么?让我们来看看。
打字
DTD和XML Schema之间最显着的区别是能够结合元素和属性声明在Schema中创建和使用数据类型。实际上,这是一个重要的区别,XML Schema Recommendation的一半专门用于数据类型化和XML Schema。我们将在本书的第三部分“ XML Schema数据类型”中详细介绍数据类型。
[...]
发生约束
DTD和架构有很大不同的另一个领域是出现限制。如果您从第2章“架构结构”(或您自己的DTD使用)中的先前示例中回想起,可以使用三个符号来限制元素的出现次数:*,+和?。
[...]
枚举
因此,假设我们有一个元素,并且希望能够为衬衫定义一个size属性,该属性允许用户选择大小:小,中或大。我们的DTD如下所示:
<!ELEMENT item (shirt)> <!ELEMENT shirt (#PCDATA)> <!ATTLIST shirt size_value (small | medium | large)>
[...]
但是,如果我们想
size
成为一个元素怎么办?我们无法使用DTD做到这一点。DTD不提供元素文本内容中的枚举。但是,由于使用Schema的数据类型,当我们在前面的示例中声明枚举时,我们实际上创建了一个simpleType
callsize_values
,现在可以将其与一个元素一起使用:<xs:element name="size" type="size_value">
[...]