Home >Web Front-end >HTML Tutorial >XML study notes 2??DTD_html/css_WEB-ITnose
In the previous note, when classifying document types, we used to distinguish them into well-formed XML and valid XML based on whether the document uses and complies with DTD or Schema. So what are DTD and Schema? Both DTD and Schema are used to standardize XML documents and impose semantic constraints on XML documents. DTD is simple and easy to use, while Schema is powerful. In this note, first learn about DTD (Document Type Definition, document type definition).
1. How to use DTD in XML documents
Import method | Syntax format | Instructions | ||||||||||||
Internal DTD |
<!ATTLIST 属性所属的元素名称 属性名称 属性类型 [元素对属性的约束] [默认值]>
| Place the DTD definition inside the XML document, followed by After the XML declaration and processing instructions such as: 3f9eccbb7b73ab489cc811a6990bcfd1 ]>
| ||||||||||||
External DTD | <!ATTLIST 属性所属的元素 属性名 NOTATION (值1|值2|...) 约束 默认值>
| Define the DTD separately in a file within, and then import the DTD through the keyword SYSTEM For example: 504d691339281458492a370ec63f11d0
| Public DTD |
| Public DTD. This DTD is generally designated by an authoritative organization for specific purposes. For industry or public use, import through the keyword PUBLIC such as: 6caf63d6ff196f22499795ffd86a9110
|
The DTD document itself is not XML document, but only a document that defines semantic constraints for XML. The syntax of a DTD document is very simple and has the following structure:
元素类型 | 定义格式 | 说明 |
任意类型 | 77d63f1dc9a0bd4ad2afeec104fec4b0 | 元素可以是字符串,可以是空元素,也可以包含子元素 |
字符串值 | ffdc992a76c23f35b8741b4e36196f36 | 元素值只能是字符串,不可以是空元素,也不能包含子元素 |
空元素 | 3a8419cd20340b2d5be4d3b6cf82745f | |
包含子元素 | 比较复杂,需要详细定义子元素之间的顺序以及子元素出现的次数等 | |
混合类型 | 2248f8c379b94ec0b25049a00813b747 | 指定值只能是几个确定的类型,比任意类型有更强的约束,但功能相当,应尽量使用混合类型 |
(1) The first line is the declaration of the DTD document, and the syntax is the same as the declaration of XML
(2) 0 to multiple comment parts, DTD comments have the same syntax as XML comments
(3) 0 to multiple bbfe022067457a4b49db0fef48244a91 definitions, each 88491ca02fcc7c852ee8db3633523b65 Define an XML element
(4) 0 to multiple 9dc71515bfc0e797ceea2f5a6fdad63f definitions, each 9dc71515bfc0e797ceea2f5a6fdad63f defines one XML element Attributes
(5) 0 to multiple 9c5fa95a5e92eb0e81a8a2fb61d4e35a definitions, each 9c5fa95a5e92eb0e81a8a2fb61d4e35a defines an entity
定义子元素的语法 | 说明 | 子元素的出现频率修饰词 | 说明 |
(子元素1,子元素2,...) | 使用英文逗号定义有序的子元素 | 默认(没有修饰词) | 出现一次,且只能出现一次 |
(子元素1|子元素2|...) | 使用竖线定义互斥的子元素 | ? | 出现0或1次 |
((子元素1,子元素2)|(子元素3,子元素4)) | 使用括号将子元素分组 | 出现1或多次 | |
(子元素1|子元素2|...) | 使用竖线互斥,然后使用频率修饰实现定义无序的子元素 | * | 出现0或多次 |
4、定义属性
在XML中,属性不能单独存在,因此定义属性时必须指定属于哪个元素。定义属性的语法格式如下:
<!ATTLIST 属性所属的元素名称 属性名称 属性类型 [元素对属性的约束] [默认值]>
(1)属性类型
类型 | 说明 |
CDATA | 该属性值只能是字符串数据 |
(en1|en2|en3) | 该属性值必须是一系列枚举值之一 |
ID | 该属性值必须是有些的标识符,且该属性值可用于标识该元素,因此必须在此XML文档中唯一 |
IDREF | 该属性值必须是引用另一个已有的ID类型的属性值 |
IDREFS | 该属性值必须是引用已有的一个或多个ID类型的属性值,多个ID类型的属性值之间使用空格分隔 |
NMTOKEN | 该属性值必须是合法的XML名称,必须是字符串数据,比CDATA约束更强,只能由字母、数字、下划线、中划线,点号和冒号组成 |
NMTOKENS | 该属性值必须是一个或多个NMTOKEN类型的属性值,多个使用空格分隔 |
ENTITY | 该属性值是一个外部实体,比如图片 |
ENTITIES | 该属性值是一个或多个ENTITY类型的属性值,多个使用空格分隔 |
NOTATION | 该属性值是在DTD中声明过的符号(NOTATION),这是个将要过期的规范,尽量避免使用 |
xml: | 该属性值是一个预定义的XML值 |
(2)元素对属性的约束与默认值的关系
元素对属性的约束 | 说明 | 默认值 |
未指定 | 必须指定默认值 | |
#REQUIRED | 必须的属性,必须为相应元素提供该属性 | 不能指定默认值 |
#IMPLIED | 该属性可有可无 | 不能指定默认值 |
#FIXED | 该属性值是固定的,定义时必须指定固定值 | 必须指定默认值 |
5、定义实体
实体引用就是用一个字符串代替另一个字符串,类似于C语言中的宏,上一篇笔记中已经提到过XML中内置的5个实体引用,在这里接着看看怎么自定义实体引用。
实体类型 | 使用场所 | 定义语法 | 使用语法 | 说明 |
普通实体 | XML | f6701d43a6602d2b1bddd3314888121a | &实体名; | |
参数实体 | DTD | 33765f3db4a4f87a0ce377e07b6ef9a9 | %实体名; | 必须在使用前先定义 |
外部实体 | XML | 45223d92d67a471d8aa418c07c553844 | &实体名; | 这里外部文件必须是满足XML文档结构的文本文档 |
公用外部实体 | XML | 6aac85f33d84c658fd3542675d8fdda5 | &实体名; | |
外部参数实体 | DTD | 364efaa3ef353d39e6fdfd5f1874fb78 | %实体名; | |
公用外部参数实体 | DTD | 91c2898167f83894552848e9fe14aac7 | %实体名; | |
未解析实体 | XML | 076f232aa9e658c37746fe037adbd428 | 需要通过ENTITY等类型的属性调用 | 未解析实体不能由XML文档解析,而需要根据相应的符号名去解析 |
公用未解析实体 | XML | 16f7b8c015db549d96c6a7ff75c506e7 |
6、定义符号
定义符号也有两种语法格式,分别定义普通符号和公用符号:
符号类型 | 定义语法 |
普通符号 | 87305a241d10ab5f20e6b60def27653b |
公用符号 | 7d246b2c0dae669d0773fab845ef04ed |
符号值通常有两种形式:
(1)MIME:通用MIME类型的文件总是由相应的程序负责处理
(2)外部程序所在路径:直接指定某个外部程序负责处理XML文档中的外部数据
符号通常有两种用途:
(1)如上,符号可以用来定义未解析实体
(2)符号可以作为ENTITY或ENTITIES类型的属性值
(3)符号还可以作为NOTATION类型的属性的值,定义NOTATION类型的属性时,语法如下:
<!ATTLIST 属性所属的元素 属性名 NOTATION (值1|值2|...) 约束 默认值>
比一般的属性定义多一个值的列表。