前端之家收集整理的这篇文章主要介绍了
XML - DTD,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
DTD简述
全称 Document type Definition 文档类型定义
DTD作用
DTD是XML的一部分,描述XML文档结构,效验XML文档格式是否正确
DTD文档包含
元素的定义规则
元素之间的关系
属性的定义规则
可使用的实体或者符号规则
DTD与XML的关系
DTD是抽象的,XML是具体的
一个DTD可以生成多个XML,就像一个类可以生成多个对象
DTD局限性
不能扩展
@R_301_472@命名空间
只提供了有限的数据类型,用户无法自定义类型
不使用XML语法(写XML文档实例的时候用一种语法,写DTD用另一种语法)
CDATA和PCDATA
CDATA
character data 字符数据
使用在属性上面,表示属性的值是一般的字符串
PCDATA
parsed character data 被解析的字符数据
使用在元素上面,表示元素中间的内容是普通的字符串
声明元素
<!ELEMENT 元素名称 元素类型>
元素类型可取值
EMPTY:不能包含子元素和文本,但可以有属性(空元素)
示例:<!ELEMENT people EMPTY>
ANY:该元素包含DTD中定义的任何元素内容
示例:<!ELEMENT book ANY>
需要注意的是将根元素设置为ANY类型后,元素出现的次数和顺序不受限制
#PCDATA:只能是普通字符串,不能包括子元素
示例:<!ELEMENT name (#PCDATA)>
带有子元素(序列)的元素
示例:<!ELEMENT book (name,author,price)>
XML引用DTD两种方式
外部引用
book.dtd
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT book (name,price)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT price (#PCDATA)>
book.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book SYSTEM "book.dtd">
<book>
<name>Java</name>
<author>John</author>
<price>99</price>
</book>
内部引用
book.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book [
<!ELEMENT book (name,price)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT price (#PCDATA)>
]>
<book>
<name>Java</name>
<author>John</author>
<price>99</price>
</book>
DTD修饰符号
() 来用给元素分组
示例:(古龙|金庸),毛毛
| 多个选择一个
示例:(古龙|金庸),毛毛,必须按照指定顺序出现
示例:(古龙|金庸),毛毛
声明只出现1次的元素:
示例:<!ELEMENT book (name)>
声明出现大于等于1次的元素:
示例:<!ELEMENT book (name+)>
声明出现0或多次的元素:
示例:<!ELEMENT book (name*)>
声明出现0或1次的元素:
示例:<!ELEMENT book (name?)>
<!ATTLIST 元素名称 属性名称 属性类型 属性特点>
示例:<!ATTLIST name width CDATA "20">
属性类型的选项
CDATA:属性值可以是任何字符(包括数字和中文)
示例:<!ATTLIST name width CDATA "20">
NMTOKEN/NMTOKENS都是CDATA的子集
NMTOKEN表示属性值不能是含有空格
示例:<!ATTLIST name width NMTOKEN #REOUIRED>
NMTOKENS表示属性值允许有空格
示例:<!ATTLIST name width NMTOKENS #REOUIRED>
ID:表示该属性的取值必须是唯一的
示例:<!ELEMENT 公司职员 ANY>
<!ATTLIST 公司职员 编号 ID #REOUIRED 姓名 CDATA #REOUIRED>
正确
<公司职员 编号="Z001" 姓名="张三">
<公司职员 编号="Z002" 姓名="张三">
错误
<公司职员 编号="Z001" 姓名="张三">
<公司职员 编号="Z001" 姓名="张三">
IDREF/IDREFS
IDREF属性的值指向文档中其他地方声明的ID类型的值
IDREFS同IDREF,但可以具有由空格分开的多个引用
Enumerated:事先定义好的一些值,属性的值必须在所列出的值中一个
示例:<!ATTLIST name sex (boy|girl) #REOUIRED>
属性特点的选项
#required 属性值是必需的
#IMPLIED 属性不是必需的
#FIXED value 属性值是固定的
Default value 属性值的默认值
#required
示例:<!ATTLIST name width CDATA #required>
标签name的width属性必须有
#IMPLIED
示例:<!ATTLIST name width CDATA #IMPLIED>
标签name的width属性有没有都可以
#FIXED
示例:<!ATTLIST name width CDATA #FIXED "20">
标签name的width属性值是固定的20,不等于20就是非法的
案例
book.dtd
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT book (name,price)>
<!ELEMENT name (#PCDATA)>
<!ATTLIST name id CDATA #required>
<!ELEMENT author (#PCDATA)>
<!ATTLIST author name CDATA #IMPLIED>
<!ELEMENT price (#PCDATA)>
<!ATTLIST price width CDATA #FIXED "20">
book.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book SYSTEM "book.dtd">
<book>
<!-- name元素id属性是必须的 -->
<name id="name">Java</name>
<!-- author元素name属性是可有可无 -->
<author name="author">John</author>
<!-- price元素width属性的值只能等于20 -->
<price width="20">99</price>
</book>
DTD实体
实体相当一个变量,引用已经定义好的值
内部语法
语法
<!ENTITY 实体名 "实体值">
DTD示例
<!ENTITY writer "writerContent">
<!ENTITY copyright "copyrightContent">
XML示例
<author>&writer;©right;</author>
外部声明
语法
<!ENTITY 实体名称 SYSTEM "URI/URL">
DTD示例
<!ENTITY copyright SYSTEM "http://www.baidu.com">
XML示例
<author>©right;</author>
实体类型分类
普通实体
使用场合
用在XML文档中
内部声明方式
<!ENTITY 实体名 "实体值">
外部声明方式
<!ENTITY 实体名称 SYSTEM "URI/URL">
引用方法
&实体名称;
参数实体
使用场合
用在DTD中元素和属性声明中
内部声明方式
<!ENTITY %实体名 "实体值">
外部声明方式
<!ENTITY %实体名称 SYSTEM "URI/URL">
引用方法
%实体名称;
更多内容请查看
点击打开链接