(1)DTD:

DTD(Document Type Definition)即文档类型定义,是一种XML约束模式语言,是XML文件的验证机制

如下所示是公共DTD示例。

<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">

关于DTD的声明解释如下:

1、DTD声明始终以!DOCTYPE开头,空一格后跟着文档根元素的名称。

2、根元素名:configuration。所以每一个标签库定义文件都是以taglib为根元素的,否则就不会验证通过。

3、PUBLIC "-//mybatis.org//DTD Config 3.0//EN,这是一个公共DTD的名称(私有的使用SYSTEM表示)。这个东西命名是有些讲究的。首先它是以"-"开头的,表示这个DTD不是一个标准组织制定的。(如果是ISO标准化组织批准的,以“ISO”开头)。接着就是双斜杠“//”,跟着的是DTD所有者的名字,很明显这个DTD是MyBatis公司定的。接着又是双斜杠“//”,然后跟着的是DTD描述的文档类型,可以看出这份DTD描述的是DTD Config 3.0的格式。再跟着的就是“//”和ISO 639语言标识符。

4、绿色的字"http://mybatis.org/dtd/mybatis-3-config.dtd",表示这个DTD的位置。

疑问:是不是xml分析器都会到java.sun.com上去找这个dtd呢?答案是否定的,xml分析器首先会以某种机制查找公共DTD的名称,查到了,则以此为标准,如果查不到,再到DTD位置上去找。

(2)XSD

​ 文档结构描述XML Schema Definition 缩写,这种文件同样可以用来定义我们xml文件的结构!

我们看看pom文件的xml头部:

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd
">

1、第一行的xmlns代表了一个xml文件中的一个命名空间,通常是一个唯一的字符串,一般使用一个url,因为不会重复嘛。

它的语法如下:

xmlns:namespace-prefix="namespaceURI"

后边什么也不加,代表默认命名空间,我们在书写标签的时候不需要加任何前缀。

如果我将其改为:

xmlns:c="http://maven.apache.org/POM/4.0.0"

image-20211104144031737

2、xmlns:xsi 定义了一个命名空间前缀 xsi 对应的唯一字符串 http://www.w3.org/2001/XMLSchema-instance。但这个 xmlns:xsi 在不同的 xml 文档中似乎都会出现。 这是因为, xsi 已经成为了一个业界默认的用于 XSD((XML Schema Definition) 文件的命名空间。 而 XSD 文件(也常常称为 Schema 文件)是用来定义 xml 文档结构的。剩余两行的目的在于为我们的命名空间指定对应的xsd文件。

事实上我们这么写也是可以的:

image-20211104144300243

上面这行的语法其实是, xsi:schemaLocation = "ns1url xsd1 ns2url xsd2”

XML Schema相对于DTD的优点在于:

  1. XML Schema基于XML,没有专门的语法。
  2. XML Schema可以像其他XML文件一样解析和处理。
  3. XML Schema比DTD提供了更丰富的数据类型。
  4. XML Schema提供可扩充的数据模型。
  5. XML Schema支持综合命名空间。
  6. XML Schema支持属性组。