XML-DTD
DTD(Document Type Definition):文档类型定义。
DTD实际应用:
- 验证XML文档数据的有效性
- 为某类XML文档提供统一的格式和相同的结构
- 保证在一定范围内,XML文档数据的交流和共享
- 开发人员可根据DTD了解到XML文档的逻辑结构,从而写出相应的处理应用程序
]>
文本内容1
文本内容2
符合XML语法的XML文档是结构良好的XML文档
通过DTD验证的XML文档是有效的XML文档
]>
李白
18
DTD语句
基本声明语句
- 元素类型声明语句
<!ELEMENT>
- 属性列表声明语句
<!ATTLIST>
- 实体声明语句
<!ENTITY>
- 符号声明语句
<!NOTATION>
- 注释语句
<!-- -->
定义关键字一定要大写,例如
DOCTYPE
、ELEMENT
、#PCDATA
元素名称与数据类型之间要有空格(元素名称后如果有内容,要用空格隔开)
引用外部DTD
外部DTD优点:可以方便高效的被多个XML文档所共享(就是多个XML用同一个DTD)
外部DTD的创建方式、语法、内部DTD是一样的。
&Profile;
李白
18
SYSTEM 表示私有的;公共有的PUBLIC。
另一种说法是:SYSTEM,表示当前的DTD文件是本地的
如果写的是PUBLIC,则表示引入的DTD文件是来自于网络的.
公共DTD名称约定:如果是ISO标准DTD,命名以”+”开始,否则以”-“开始。
根据 DTD_name选择选择版本,如果根据DTD_name找不到相应版本,则根据DTD_location来找。
DTD元素
四种元素类型
- 空元素。例如
<tag></tag>
- 仅包含文本的元素(即字符内容)例如:
<tag>微信公众号:萌狼蓝天</tag>
- 仅包含子元素的元素
<tag><chid>mllt9920</chid></tag>
- 混合型(包含内容既有内容也有文本内容)
元素定义关键字
EMPTY
该元素不能包含元素和文本,但是可以有属性ANY
该元素可以包含任何在DTD中定义的元素内容,而且元素出现的次数和顺序不受限制#PCDATA
仅能包含任何字符数据的文本内容。(子元素)
仅能包含子元素
在元素设置中,如果元素包含多个子元素,这些子元素是有顺序的,没有特殊约束情况下,每个子元素必须出现且只能出现一次。
修饰符号
符号 用途 () 用来给元素分组 \ + 元素至少出现一次,一次或多次 * 元素可有可无,出现零次、一次或多次 ? 元素可有可无,但最多只能出现一次 符号 用途 示例 示例说明 ( ) 用来给元素分组 (古龙\ 金庸\ \ 在列出的对象中选择一个 (男人\ + 该对象最少出现一次,可以出现多次 (1或多次) (成员+) 表示成员必须出现,而且可以出现多个成员 * 该对象允许出现零次到任意多次(0到多次) (爱好*) 爱好可以出现零次到多次 ? 该对象可以出现,但只能出现一次 (0到1次) (菜鸟?) 菜鸟可以出现,也可以不出现,如果出现的话,最多只能出现一次 , 对象必须按指定的顺序出现 (西瓜,苹果,香蕉) 表示西瓜、苹果、香蕉必须出现,并且按这个顺序出现
无修饰符号:必须出现且只能出现一次
DTD中的属性
在DTD中声明元素属性的语法: ¡<!ATTLIST 元素名称 [属性名 属性类型 [约束] [缺省值]]+>
在一个ATTLIST 中可以定义同一个元素下的一个或多个属性。如果包含多个属性声明,属性声明之间使用空格间隔。
- 元素名称:属性所属的元素名称
- 属性名:属性名称
- 属性类型:属性的值类型
- 约束:元素对属性的约束
属性修饰
修饰符 含义 #REQUIRED 表示该属性是必需的,不能没有。 #IMPLIED 表示该属性可以有也可以没有。 #FIXED 表示在XML文档中只会给出一个元素属性所定义的固定值。只有当约束为该值时,才能给出缺省值,注意缺省值必须给出。
属性类型
属性类型 说明 CDATA 单纯的字符数据,大部分属性都设置为该类型 ID 具有唯一性的属性值,需要注意的是该属性值必须以字母开头 IDREF 引用其它ID属性的值,该值必须在其它ID属性中存在 IDREFS 引用多个其它ID属性的值,中间使用空格间隔 ENTITY 未解析的外部实体类型, ENTITIES 多个未解析的外部实体类型,中间使用空格间隔 NMTOKEN 是Name Token,就是关键字的名字。可以包含字母、数字、[.]、[-]、[_]、[:]组合的名字 NMTOKENS 多个NMTOKEN,中间使用空格间隔 NOTATION 标记名称 Enumerated 枚举类型的属性,只能从已有的属性中选取,不能填入新项目
例如
XML教程
清华大学出版社
978-7-302-22348-1
三国演义
人民文学出版社
978702005155
DTD中的实体和符号
内部实体的语法格式: <!ENTITY 实体名称 "实体内容">
- 实体名称:实体名称由DTD程序员自己定义,但必须满足唯一性,即不能重名。同时满足XML的命名规范。
- 实体内容:所需要表达的文本内容
定义外部解析实体的语法: <!ENTITY 实体名称 SYSTEM|PUBLIC ["公共实体标识符" ] "URI/URL">
- URI/URL:所引用的外部文件的路径地址,被引用的外部文件必须是可以被解析的,扩展名没有限制。
- 实体为PUBLIC时才会有相应的”公共实体标识符” ,如果为SYSTEM则没有”公共实体标识符”
定义外部未解析实体的语法: <!ENTITY 实体名称 SYSTEM "URL/URL" NDATA 标记名>
- URI/URL:所引用的外部文件的路径地址
- 标记名:被定义的符号的名称。
这是通过引用外部文件来解析实体。例如图片无法被解析,就用外部图片查看类工具解析
声明参数内部解析实体的语法: <!ENTITY % 参数实体名称 "实体内容">
- 参数实体名称:实体名称由DTD程序员自己定义,但必须满足唯一性,即不能重名。同时满足XML的命名规范。
- 实体内容:所需要表达的文本内容。
声明参数外部解析实体的语法: <!ENTITY % 参数实体名称 SYSTEM "URL/URL">
URI/URL:所引用的外部文件的路径地址
- 引用参数实体的语法:
- %参数实体名称;
参数实体都是在dtd中被引用的
符号
普通符号的语法格式: <!NOTATION 符号名称 SYSTEM | PUBLIC ["公共符号标识符"] "URI\URL">
- 符号名称:名称由DTD程序员自己定义,但必须满足唯一性,即不能重名。同时满足XML的命名规范
- URI\URL:外部来处理这些未解析数据的程序路径
- 符号为PUBLIC时才会有相应的”公共符号标识符” ,如果为SYSTEM则没有”公共符号标识符”
坑
一个小坑
]>
&PIC;
李白
18
如上,正常执行,但是如果是引用的外部dtd,如下
&PIC;
李白
18
则会出现找不到 &PIC;
的情况,询问老师后知道:浏览器不支持这样……
Original: https://www.cnblogs.com/mllt/p/xml-dtd.html
Author: 萌狼蓝天
Title: 【XML】学习笔记第二章-dtd
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/611059/
转载文章受原作者版权保护。转载请注明原作者出处!