我用谷歌搜索了这个问题,但我不清楚什么是XML模式和DTD(文档类型定义),以及为什么XML模式比DTD更强大
任何指导都将不胜感激
从将DTD转换为模式文章的DTD和模式之间的差异部分:
DTD之间的关键区别
XML模式就是那个XML模式
利用基于XML的语法,而
DTD具有独特的语法
来自SGML DTD。虽然DTD是
经常因为这种需要而受到批评
要学习新语法,语法
它本身相当简洁。相反的是
对于XML模式为true,这是
冗长,但也使用标记和
XML,以便XML的作者能够找到
XML无模式的语法
吓人的DTDs的目标是保持一个水平
与SGML的兼容性
可能希望
将SGML DTD转换为XML DTD。
然而,为了符合
XML的目标,“XML标记中的简洁性”
是最不重要的,“没有
真正关心的是保持语法
简短的[……]
那么,在转换DTD时,还有哪些其他可能特别重要的差异呢?让我们看一下。
键入
DTD和XMLSchema之间最显著的区别在于能够在模式中创建和使用数据类型以及元素和属性声明。事实上,这是一个非常重要的区别,XMLSchema建议的一半用于数据类型和XMLSchema。我们将在本书的第三部分“XML模式数据类型”中详细介绍数据类型
[……]
发生约束
DTD和模式的另一个显著不同之处是出现约束。如果您还记得我们在第2章“模式结构”(或您自己使用DTD的工作)中前面的示例,那么您可以使用三个符号来限制元素的出现次数:*、+和
[……]
枚举数
假设我们有一个元素,我们希望能够为衬衫定义一个尺寸属性,允许用户选择尺寸:小、中或大。我们的DTD如下所示:
<;!元素项目(衬衫)>; <;!元素衬衫(PCDATA)>; <;!ATTLIST衬衫 尺寸值(小|中|大)>;[……]
但是如果我们想要
size成为一个元素呢?我们不能用DTD这样做。DTD不提供元素文本内容中的枚举。但是,由于使用模式的数据类型,当我们在前面的示例中声明枚举时,我们实际上创建了一个名为size\u values的simpleType,现在可以与元素一起使用:<;xs:element name=“size”type=“size\u value”>;[……]