DTD/Schema用于约束/规定XML元素的结构。类似于XML元素的模式定义,而XML文档就是对应模式的实例。
此篇文章记录DTD(文档类型定义)学习的内容。
-
声明方式:DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。——W3school
-
声明在XML文档内部:
<!DOCTYPE 根元素 [ 约束列表 ]>
-
声明在外部:在XML文档内添加如下语句,其中DTD文件名后缀.dtd,SYSTEM表明是本地文件
<!DOCTYPE 根元素 SYSTEM "文件目录">
- 声明在网络:PUBLIC表明是网络文件,DTD名称通常包含作者或所属信息
<!DOCTYPE 根元素 PUBLIC "DTD名称" "文件URI">
-
- 语法:一行一个约束,根元素的约束写在第一行
- 元素约束,形如
<!ELEMENT person (name+,age,phone*,(salary|job),patner?,#PCDATA)>
- +表示子元素至少出现一次,*表示子元素可以出现任意次,?表示至多出现一次,(a|b)表示两者选一个出现,以上运算符可以联合使用,括号决定优先级。
- #PCDATA代表任何可解析的字符串,如果一个元素的子元素列表是#PCDATA等于未对此元素进行约束(不知道是否可以使用#CDATA,请大佬指教:)
- 各个子元素按顺序出现
- 属性约束,形如
<!ATTLIST 元素名称 属性名称 属性类型 默认值>
属性类型和默认值的取值在W3school有列出 http://www.w3school.com.cn/dtd/dtd_attributes.asp - 实体声明:类似C的宏,或者字符串常量,对XML中的实体进行字面替换
- 内部声明:直接在dtd文档内声明
<!ENTITY 实体名称 "实体的值">
-
外部声明:在本地文件或者网络上
<!ENTITY 实体名称 SYSTEM "URI/URL">
- 内部声明:直接在dtd文档内声明
-
实体引用:在XML文档中使用dtd文档中的实体,作用是字面替换,例如
-
DTD中
<!ENTITY writer "Bill Gates">
writer是"Bill Gates"的实体别名
-
XML中:被引用的实体名前加&
<author>&writer</author>
以上两例来自W3school
-
- 元素约束,形如