html之DTD基础知识
Posted chen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了html之DTD基础知识相关的知识,希望对你有一定的参考价值。
一、基本概念
- DTD:文档类型定义
- 定义合法的XML文档构建模块
- 使用一系列合法的元素来定义文档的结构
- 可被成行声明于XML文档中,也可作为一个外部引用
使用DTD的好处
- 使每个XML文件均可携带一个有关其自身格式的描述
- 通过其,独立的团体可一致地使用某个标准的DTD来交换数据
- 也可通过标准的DTD来验证从外部接收的数据/自身的数据
二、语法
DOCTYPE声明
内部声明
- 应用场景
DTD被包含在XML源文件中
格式:
<!DOCTYPE 根元素 [元素声明]>
例子:
<!DOCTYPE note [ <!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)> ]>
<note> <to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don\'t forget the meeting!</body> </note>
解释:第一行说明:该文档为note类型的文档
第二行:定义note文档中有四个元素:(to from heading body)
第三行:定义to元素类型为:"#PCDATA"
- 应用场景
外部声明
- 应用场景
DTD文件位于xml外部
- 语法
<!DOCTYPE 根元素 SYSTEM"文件名">
例子:
<!DOCTYPE note SYSTEM "note.dtd"> <note> <to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don\'t forget the meeting!</body> </note>
note.dtd文件
<!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)>
- 应用场景
DTD-XMl构建模块
元素
- 主要构建模块
- 例子:<message></message>
属性
- 提供有关元素得额外信息
- 总是被置于开始标签中,以键值对得形式出现
实体
- 定义普通文本的变量,而实体引用即为对实体的引用
- 当文档被xml解析器解析时,实体就会被展开
例子:
实体引用 字符 < < > > & & " " \' \'
PCDATA
- 被解析的字符数据,当该数据指明为PCDATA的时候,即告诉解析器,在xml元素的开始标签与结束标签中出现的字符数据会被解析器检查实体以及标记,其中文本中的标签被当作标记处理,而实体会被展开
- 被解析的字符数据不应当包含任何的&、等可用字符实体表示的
CDATA
- 字符数据
- 声明则不会被解析器解析的文本,也即在这些文本中标签不会当作标记来处理,实体不会展开处理。
元素声明
- 在DTD中,元素通过元素声明来进行声明的
元素声明语法:
<!ELEMENT 元素名称 类别>/<!ELEMENT 元素名称 (元素内容)>
空元素
- 含义:该标签内没有数据,可含有属性,类似于<br/>
语法:
<!ELEMENT 元素名称 EMPTY>
PCDATA元素
<!ELEMENT 元素名称 (#PCDATA)>
带有任何内容的元素
- 含义:该元素内包含任何可解析的数据组合(杂)
语法:
<! ELEMENT 元素名称 ANY>
带有子元素的元素
语法:
<! ELEMENT 元素名称 (子元素名称1,子元素名称2...)>
- 注意:子元素按照逗号分开序列进行声明,这些子元素在文档中也必须按照相同的顺序出现在文档中,且子元素也必须按照相同顺序被声明,且子元素也可拥有子元素,做法是一样的
声明最少出现一次的元素
语法:
<!ELEMENT 元素名称 (子元素名称+)>
- 含义:子元素在父元素内至少出现一次
声明出现0/多次的元素
<!ELEMENT 元素名称 (子元素名称*)>
声明出现0/1次的元素
<!ELEMENT 元素名称 (子元素名称?)>
声明“非.../既...”类型的内容
- 可能出现子元素2/子元素3
<!ELEMENT 元素名称(子元素名称1,(子元素名称2|子元素名称3))>
声明混合类型的内容
例子
<!ELEMENT note (#PCDATA|to|from|header|message)*>
"note" 元素可包含出现零次或多次的 PCDATA、"to"、"from"、"header" 或者 "message"。
声明属性
<!ATTLIST 元素名称 属性名称 属性类型 默认值>
属性类型的选项
类型 描述 CDATA 值为字符数据 (character data) (en1\\ en2\\ ..) 此值是枚举列表中的一个值 ID 值为唯一的 id IDREF 值为另外一个元素的 id IDREFS 值为其他 id 的列表 NMTOKEN 值为合法的 XML 名称 NMTOKENS 值为合法的 XML 名称的列表 ENTITY 值是一个实体 ENTITIES 值是一个实体列表 NOTATION 此值是符号的名称 xml: 值是一个预定义的 XML 值 默认值参数可使用下列值,或者直接写默认值
值 解释 值 属性的默认值 #REQUIRED 属性值是必需的,若没写该属性则非法 #IMPLIED 属性不是必需的 #FIXED value 属性值是固定的 例子:
<!ELEMENT square EMPTY> <!ATTLIST square width CDATA "0">
<!ATTLIST person number CDATA #REQUIRED>
若写成:<person number = "5677"/>合法,但是写成:<person />非法,因为#REQUIRED为必须属性
<!ATTLIST payment type (check|cash) "cash">
该属性的值由固定值列表check|cash获取
实体声明
- 定义引用普通文本或特殊字符的快捷方式的变量
- 内部/外部声明
- 构成:&、实体名称、分号(;)
内部声明:
语法:
<!ENTITY 实体名称 “实体值">
例子
<!ENTITY writer "Bill Gates"> <author>&writer;</author>
外部声明
语法
<!ENTITY 实体名称 SYSTEM “URI/URL">
例子
<!ENTITY 实体名称 SYSTEM "https://www.w3school.com.cn/dtd/entities.dtd"> <author>&writer;</author>
以上是关于html之DTD基础知识的主要内容,如果未能解决你的问题,请参考以下文章