(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"
2、xmlns:xsi 定义了一个命名空间前缀 xsi 对应的唯一字符串 http://www.w3.org/2001/XMLSchema-instance。但这个 xmlns:xsi 在不同的 xml 文档中似乎都会出现。 这是因为, xsi 已经成为了一个业界默认的用于 XSD((XML Schema Definition) 文件的命名空间。 而 XSD 文件(也常常称为 Schema 文件)是用来定义 xml 文档结构的。剩余两行的目的在于为我们的命名空间指定对应的xsd文件。
事实上我们这么写也是可以的:
上面这行的语法其实是, xsi:schemaLocation = "ns1url xsd1 ns2url xsd2”
XML Schema相对于DTD的优点在于:
- XML Schema基于XML,没有专门的语法。
- XML Schema可以像其他XML文件一样解析和处理。
- XML Schema比DTD提供了更丰富的数据类型。
- XML Schema提供可扩充的数据模型。
- XML Schema支持综合命名空间。
- XML Schema支持属性组。
Comments NOTHING