在结构化文档中,定义文档类型有两种技术:DTD和XSD。今天来讨论什么是DTD,什么又是XSD,以及他们之间的区别。
虽然DTD(Document Type Definition)和XSD(XML Schema Definition)都与标记语言,称为XML(可扩展标记语言)相关,但它们在很多方面都有所不同。
DTD和XSD之间的主要区别是DTD对XML的控制较少,而XSD提供了对XML的更好控制。DTD是一种用于定义XML结构的文档类型,XSD是用于描述XML结构和内容的方法。
1. 什么是DTD?
DTD是文档类型定义的缩写,是一种用于定义XML文件结构的文档类型。XML语言的属性由DTD精确定义。它主要用于检查XML文件结构的语法和有效性。
DTD可以进一步分为两部分,即外部DTD和内部DTD。在XML文件中声明的DTD元素称为内部DTD,而在一些其他文件中宣布的DTD元素则称为外部DTD。
DTD源自SGML(标准通用标记语言)语法。它不支持命名空间和数据类型,对XML的控制较少。DTD也不可扩展。
使用DTD的人不能在其中使用强类型(即:不支持数据类型)。然而,它有时确实充当XML的扩展版本。DTD学习起来并不简单。DTD正是定义SGML文档类型的声明。
DTD属于第一代技术。
DTD例子:
<!DOCTYPE address [
<!ELEMENT address (name, email, phone, birthday)>
<!ELEMENT name (first, last)>
<!ELEMENT first (#PCDATA)>
<!ELEMENT last (#PCDATA)>
<!ELEMENT email (#PCDATA)>
<!ELEMENT phone (#PCDATA)>
<!ELEMENT birthday (year, month, day)>
<!ELEMENT year (#PCDATA)>
<!ELEMENT month (#PCDATA)>
<!ELEMENT day (#PCDATA)>
]>
2. 什么是XSD?
XSD是XML Schema定义,是一种用于描述XML文档及其内容的方法。XML文档的所有属性和元素的规则都由XSD精确定义。它主要用于检查XML文件的词汇和结构的正确性。
XSD文件有两种类型,即简单类型和复杂类型。允许具有基于文本的元素、包含较少属性和子元素且不能为空的类型称为简单类型XSD。允许保存多个属性和元素、包含子元素且不能为空的类型称为复杂类型XSD。
XML用于编写XSD。它支持元素和属性的命名空间和数据类型。XSD是可扩展的,使我们能够更好地控制XML文档。
XSD被精确地用于描述XML文档中的元素。学习XSD相对来说比DTD更容易,因为在这里,我们不需要学习新的语言。
XSD属于第二代技术。
XSD例子:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
3. DTD和XSD之间的主要区别
- DTD代表文档类型定义,而XSD代表XML Schema定义。
- DTD主要用于定义XML文件的结构,而XSD主要用于描述XML文件的内容和结构。
- DTD是不可扩展的,而XSD是可扩展的。
- DTD源自SGML(标准通用标记语言)语法,而XSD是用XML编写的。
- DTD不支持命名空间,而XSD支持命名空间。
- DTD不支持数据类型,而XSD支持元素和属性的数据类型。
- DTD对XML的控制较少,而XSD对XML提供了更多的控制。
- DTD比XSD更难学习,而XSD很容易学习,因为这里我们不需要学习新语言。
4. 参考资料
- https://dl.acm.org/doi/abs/10.1145/1017074.1017095
- https://www.650.org/en/what-is/what-is-the-difference-between-dtd-and-xsd
- https://blog.metapercept.com/what-is-the-difference-between-a-schema-and-a-dtd