DTD 教程
程序员文章站
2022-05-30 13:15:45
...
DTD 教程
--------------
文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。
DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。
1
在XML内部定义文档结构
2
在XML中引用一个外部的DTD文件
<!DOCTYPE 根元素 SYSTEM "文件名">
note.dtd
refdtd.xml
3
DTD 的构建模块:
元素
属性
实体: 即变量, 可通过解析实体引用(&entity)获取实体值. 如实体引用 会被解析成空格.实体有作用域.
PCDATA : 被解析器解析的文本, 会解析文本变量为文本.
CDATA : 不解析实体引用,不解析实体
4
常见实体引用:
< <
> >
& &
" "
' '
5
元素声明
<!ELEMENT 元素名称 类别>
或
<!ELEMENT 元素名称 (元素内容)>
<!ELEMENT br EMPTY>
<!ELEMENT 元素名称 (#PCDATA)>
(#PCDATA): 表示元素内容为解析字符串.
<!ELEMENT sqlMapConfig (properties?, settings?, typeAlias*, typeHandler*, transactionManager?, sqlMap+)+>
表示元素内容为子元素序列.
5
声明只出现一次的子元素
<!ELEMENT 元素名称 (子元素名称)>
声明最少出现一次的子元素
<!ELEMENT 元素名称 (子元素名称+)>
声明出现零次或多次的子元素
<!ELEMENT 元素名称 (子元素名称*)>
声明出现零次或一次的子元素
<!ELEMENT 元素名称 (子元素名称?)>
声明“必选其中之一”类型的子元素
<!ELEMENT note (message|body)>
声明混合型的内容
<!ELEMENT note (#PCDATA|to|from|header|message)*>
表示:
"note" 元素可包含出现零次或多次的 PCDATA、"to"、"from"、"header" 或者 "message"。
6
声明属性
<!ATTLIST 元素名称 属性名称 属性类型 默认值>
7
属性类型
8
属性默认值
8
实体
9
通过JS验证DTD
--------------
文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。
DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。
1
在XML内部定义文档结构
<?xml version="1.0"?>
<!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>
2
在XML中引用一个外部的DTD文件
<!DOCTYPE 根元素 SYSTEM "文件名">
note.dtd
<?xml version="1.0"?>
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
refdtd.xml
<!DOCTYPE note SYSTEM "note.dtd">
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
3
DTD 的构建模块:
元素
属性
实体: 即变量, 可通过解析实体引用(&entity)获取实体值. 如实体引用 会被解析成空格.实体有作用域.
PCDATA : 被解析器解析的文本, 会解析文本变量为文本.
CDATA : 不解析实体引用,不解析实体
4
常见实体引用:
< <
> >
& &
" "
' '
5
元素声明
<!ELEMENT 元素名称 类别>
或
<!ELEMENT 元素名称 (元素内容)>
<!ELEMENT br EMPTY>
<!ELEMENT 元素名称 (#PCDATA)>
(#PCDATA): 表示元素内容为解析字符串.
<!ELEMENT sqlMapConfig (properties?, settings?, typeAlias*, typeHandler*, transactionManager?, sqlMap+)+>
表示元素内容为子元素序列.
5
声明只出现一次的子元素
<!ELEMENT 元素名称 (子元素名称)>
声明最少出现一次的子元素
<!ELEMENT 元素名称 (子元素名称+)>
声明出现零次或多次的子元素
<!ELEMENT 元素名称 (子元素名称*)>
声明出现零次或一次的子元素
<!ELEMENT 元素名称 (子元素名称?)>
声明“必选其中之一”类型的子元素
<!ELEMENT note (message|body)>
声明混合型的内容
<!ELEMENT note (#PCDATA|to|from|header|message)*>
表示:
"note" 元素可包含出现零次或多次的 PCDATA、"to"、"from"、"header" 或者 "message"。
EMPTY: 表示元素没有内容
ANY:表示元素任何内容
* 0次或多次
+ 1次或多次
? 0次或1次
| 选择其中之一
6
声明属性
<!ATTLIST 元素名称 属性名称 属性类型 默认值>
7
属性类型
CDATA 值为字符数据 (character data)
(en1|en2|..) 此值是枚举列表中的一个值
ID 值为唯一的 id
IDREF 值为另外一个元素的 id
IDREFS 值为其他 id 的列表
NMTOKEN 值为合法的 XML 名称
NMTOKENS 值为合法的 XML 名称的列表
ENTITY 值是一个实体
ENTITIES 值是一个实体列表
NOTATION 此值是符号的名称
xml: 值是一个预定义的 XML 值
8
属性默认值
值 属性的默认值
#REQUIRED 属性值是必需的
#IMPLIED 属性不是必需的
#FIXED value 属性值是固定的
8
实体
一个内部实体声明
语法:
<!ENTITY 实体名称 "实体的值">
例子:
DTD 例子:
<!ENTITY writer "Bill Gates">
<!ENTITY copyright "Copyright W3School.com.cn">
XML 例子:
<author>&writer;©right;</author>
注释: 一个实体由三部分构成: 一个和号 (&), 一个实体名称, 以及一个分号 (;)。
一个外部实体声明
语法:
<!ENTITY 实体名称 SYSTEM "URI/URL">
例子:
DTD 例子:
<!ENTITY writer SYSTEM "http://www.w3school.com.cn/dtd/entities.dtd">
<!ENTITY copyright SYSTEM "http://www.w3school.com.cn/dtd/entities.dtd">
XML 例子:
<author>&writer;©right;</author>
9
通过JS验证DTD
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")
xmlDoc.async="false"
xmlDoc.validateOnParse="false"
xmlDoc.load("note_dtd_error.xml")
document.write("<br>Error Code: ")
document.write(xmlDoc.parseError.errorCode)
document.write("<br>Error Reason: ")
document.write(xmlDoc.parseError.reason)
document.write("<br>Error Line: ")
document.write(xmlDoc.parseError.line)
上一篇: Mysql DDL操作,简单的增删改查。
下一篇: XMLdtd简介及元素,属性定义
推荐阅读
-
Win8.1系统笔记本电脑关机后还在耗电的原因分析及解决方法图文教程
-
Linux中关于别名与二进制的使用教程
-
ThinkPHP 连接Oracle数据库的详细教程[全]_PHP
-
qq群收费功能设置方法(QQ群收费日赚千元教程)
-
完美解决phpdoc导出文档中@package的warning及Error的错误,_PHP教程
-
PHP中函数内引用全局变量的方法_PHP教程
-
50个非常有用的PHP工具,50有用PHP工具_PHP教程
-
【PHP代码审计实例教程】SQL注入-4.全局防护Bypass之二次注入
-
PHP批量上传图片的具体实现方式_PHP教程
-
Bentley SACS怎么破解?Bentley SACS安装+破解详细图文教程