学习mybatis时发现配置文件表头含有
<!DOCTYPE 根元素 PUBLIC 应用DTD文件版本 DTD文件下载地址>
DTD为英文Document Type Definition,中文意思为“文档类型定义”。
一个DTD文档包含:元素的定义规则、元素间关系的定义规则、元素可使用的属性、可使用的实体或符号规则。
DTD肩负着两重任务:
1.帮助你编写合法的代码
2.让浏览器正确地显示其代码
在配置文件中主要作用为第一个帮助你编写合法的代码。
ibatis-3-config.dtd内容大致如下
<?xml version="1.0" encoding="UTF-8" ?>
<!ELEMENT configuration (properties?, settings?, typeAliases?, typeHandlers?, objectFactory?, plugins?, environments?, mappers?)>
<!ELEMENT properties (property*)>
<!ATTLIST properties
resource CDATA #IMPLIED
url CDATA #IMPLIED
>
<!ELEMENT property EMPTY>
<!ATTLIST property
name CDATA #REQUIRED
value CDATA #REQUIRED
>
<!ELEMENT settings (setting+)>
<!ELEMENT setting EMPTY>
<!ATTLIST setting
name CDATA #REQUIRED
value CDATA #REQUIRED
>
<!ELEMENT typeAliases (typeAlias+)>
<!ELEMENT typeAlias EMPTY>
<!ATTLIST typeAlias
type CDATA #REQUIRED
alias CDATA #IMPLIED
>
<!ELEMENT typeHandlers (typeHandler+)>
<!ELEMENT typeHandler EMPTY>
<!ATTLIST typeHandler
javaType CDATA #REQUIRED
jdbcType CDATA #IMPLIED
handler CDATA #REQUIRED
>
<!ELEMENT objectFactory (property*)>
<!ATTLIST objectFactory
type CDATA #REQUIRED
>
<!ELEMENT plugins (plugin+)>
<!ELEMENT plugin (property*)>
<!ATTLIST plugin
interceptor CDATA #REQUIRED
>
<!ELEMENT environments (environment+)>
<!ATTLIST environments
default CDATA #REQUIRED
>
<!ELEMENT environment (transactionManager,dataSource)>
<!ATTLIST environment
id CDATA #REQUIRED
>
<!ELEMENT transactionManager (property*)>
<!ATTLIST transactionManager
type CDATA #REQUIRED
>
<!ELEMENT dataSource (property*)>
<!ATTLIST dataSource
type CDATA #REQUIRED
>
<!ELEMENT mappers (mapper+)>
<!ELEMENT mapper EMPTY>
<!ATTLIST mapper
resource CDATA #IMPLIED
url CDATA #IMPLIED
>
代码解读
现对configuration、properties进行解读,其他元素大同小异。
1.configuration 定义
<!ELEMENT configuration (properties?, settings?, typeAliases?, typeHandlers?, objectFactory?, plugins?, environments?, mappers?)>
表示元素configuration 可以包含properties, settings, typeAliases等子元素,并且只能含有最多一个种子元素。
2.properties 定义
<!ELEMENT properties (property*)>
<!ATTLIST properties
resource CDATA #IMPLIED
url CDATA #IMPLIED
>
表示properties可以含有0到多个子元素,properties元素含有resource属性为字符类型(CDATA)非必须属性(#IMPLIED)
3.属性类型及属性值
属性类型:
类型 | 描述 |
---|---|
CDATA | 值为字符数据 (character data) |
(en1|en2|..) | 此值是枚举列表中的一个值 |
ID | 值为唯一的 id |
IDREF | 值为另外一个元素的 id |
IDREFS | 值为其他 id 的列表 |
NMTOKEN | 值为合法的 XML 名称 |
NMTOKENS | 值为合法的 XML 名称的列表 |
ENTITY | 值是一个实体 |
ENTITIES | 值是一个实体列表 |
NOTATION | 此值是符号的名称 |
xml: | 值是一个预定义的 XML 值 |
属性值:
值 | 解释 | 语法 |
---|---|---|
值 | 属性的默认值 | <!ATTLIST 元素名称 属性名称 属性类型 "value"> |
#REQUIRED | 属性值是必需的 | <!ATTLIST 元素名称 属性名称 属性类型 #REQUIRED> |
#IMPLIED | 属性不是必需的 | <!ATTLIST 元素名称 属性名称 属性类型 #IMPLIED> |
#FIXED value | 属性值是固定的 | <!ATTLIST 元素名称 属性名称 属性类型 #FIXED "value"> |
修饰符:
符号 | 用途 | 示例 | 说明 |
---|---|---|---|
() | 元素分组 | <!ELEMENT configuration (properties?, settings?)> | |
| | 列出对象中选择一个 | <!ELEMENT configuration (properties|settings)> | |
+ | 该对象至少出现一次 | | settings元素中至少含有一个setting元素 |
* | 该对象出现0到n此 | | objectFactory元素中property元素可以有0到n个 |
? | 该对象不出现或出现一次 | | configuration元素中properties元素可以有0或1个 |
, | 对象必须按指定顺序出现 | | configuration元素中properties和settings依次出现 |