DTD语法 (元素、属性、实体声明)

注:学习DTD不推荐仅靠记忆,本文给出一些实例来帮助DTD语法的学习,复现实例能够对理解有所帮助。

元素

元素是XML的核心与灵魂。
DTD中使用 <!ELEMENT element-name element-definition>
来声明所有文档元素

元素类型

1.any
该元素可以包含任何在DTD中定义的元素内容

<!ELEMENT 元素名 ANY>

2.empty
该元素在XML文件中使用空元素标记,即元素中没有内容

<!ELEMENT 元素名 EMPTY>

3.#PCDATA
纯文本元素或称简单元素
可以包含任意字符数据,但是不能包含任何子元素
4.父元素类型
只包含子元素,并且除了子元素外没有文本,通过正则表达式规定子元素出现的顺序和次数,语法分析器将这些正则表达式与XML文档中的数据模式相匹配,判别出一个文档是否是Validating XML

符号用途
*允许出现任意多次
+该对象至少出现一次
该对象可以出现一次或零次
*允许出现任意多次
对象必须按照指定的顺序出现

5.混合元素类型
请参考其它文章,不推荐使用
实例1——仅定义了元素的DTD文档:

<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT PRODUCTDATA (PRODUCT)+><!--PRODUCTDATA是根节点,子节点是PRODUCT并且它最少要出现一次-->
<!ELEMENT PRODUCT (PRODUCTNAME,DESCRIPTION,PRICE,QUANTITY)>
<!--PRODUCT下又有四个子节点,必须按照给定顺序出现-->
<!--这三个节点都是#PCDATA类型并且可以包含任何字符数据,不能包含任何子元素-->
<!ELEMENT PRODUCTNAME (#PCDATA)>
<!ELEMENT DESCRIPTION (#PCDATA)>
<!ELEMENT PRICE (#PCDATA)>
<!--QUANTITY is an empty element-->
<!ELEMENT QUANTITY EMPTY>

属性

属性是对元素的补充和修饰,它额能够将一些简单的特性和元素相关联。

四种特点的属性

1.#REQUIRED
必须赋值的属性 【required】
说明方式:

<!ATTLIST 元素名 属性名 属性类型 #REQUIRED>

2.#IMPLIED
属性值可有可无的属性,不要求给该属性赋值,无需在DTD中提供默认值 【implied】
说明方式:

<!ATTLIST 元素名 属性名 属性类型 #IMPLIED>

3.#FIXED value
固定取值的属性,需要为一个特定的属性提供一个默认值,并且不希望在XML文档中替换掉这个默认值 【fixed value(固定的值)】
说明方式:

<!ATTLIST 元素名 属性名 属性类型 #FIXED "默认值">

4.Default value
事先定义了默认值的属性,需要在DTD中提供一个默认值,可以被XML文档中的属性值替换掉
说明方式:

<!ATTLIST 元素名 属性名 属性类型 "默认值">
属性类型

CDATA
纯文本/字符串
实例2——仅使用CDATA类型的XML文档
注意:该实例使用了内部DTD格式

<?xml version="1.0" encoding="GB2312"?>
<!--一个内部DTD的示例,首先写根元素“家庭”-->
<!--包含两个元素,人至少出现一次,家电可以出现人一次,这两个元素都被定义为空类型-->
<!DOCTYPE 家庭[
<!ELEMENT 家庭 (人+,家电*)>
<!ELEMENT  EMPTY>
<!ELEMENT 家电 EMPTY>
<!--开始定义属性-->
<!ATTLIST 
名字 CDATA #REQUIRED 
年龄 CDATA #REQUIRED
爱好 CDATA #IMPLIED
>
<!ATTLIST 家电
名称 CDATA #REQUIRED 
数量 CDATA #REQUIRED
说明 CDATA #IMPLIED
>
]>
<!--DTD部分结束-->
<家庭>
< 名字="张三" 年龄="25"/>
< 名字="李四" 年龄="38" 爱好="踢足球"/>
<家电 名称="彩电" 数量="" />
</家庭>

Enumerated
列举的,类似于数组,在()内被指定
ID
以属性值的方式被文档中某个元素定义唯一的标识,用以区分具有相同结构和相同属性值的不同元素
实例3
DTD

<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT 公司 ANY>
<!ELEMENT 公司职员 (#PCDATA)>
<!ATTLIST 公司职员
	编号 ID #REQUIRED
	姓名 CDATA #REQUIRED
>

XML

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE 公司 SYSTEM "D:\我的文档\Documents\Altova\XMLSpy2014\Examples\Stduy_XML_example\DTD\example_2.dtd">
<!--编号被定义为ID,因此是不可重复的-->
<公司>
<公司职员 姓名="张三" 编号="Z001"/>
<公司职员 姓名="李四" 编号="Z002"/>
</公司>

IDREF/IDREFS
属性值引用已经定义的ID值,方法是把那个元素的ID标识符作为该元素的取值
不同的引用之间用空格分开
实例:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE 家庭[
<!ELEMENT 家庭 (人+)>
<!ELEMENT  EMPTY>
<!ATTLIST 
relID ID #REQUIRED
parentID IDREFS #IMPLIED
name CDATA #REQUIRED
>
]>
<家庭>
< relID="P_1" name="爸爸"/>
< relID="P_2" name="妈妈"/>
< relID="P_3" parentID="P_1 P_2" name="儿子"/>
</家庭>

ENTITY
取值为一个已定义的实体
ENTITYS
该属性值包含多个外部的entity,不同的entity之间用空格分开
NMTOKEN
属性值只能由字母、数字、下划线…构成
本例仍然使用内部DTD

<?xml version="1.0" encoding="GB2312"?>
<!--一个内部DTD的示例,首先写根元素“poems”-->
<!DOCTYPE poems [
	<!ELEMENT poems (title,content)>
	<!ELEMENT title (#PCDATA)>
	<!--定义属性,nmtoken说明该属性只能由数字、字母、下划线构成,当encoding编码是中文码时,可以使用中文-->
	<!ATTLIST title author NMTOKEN #REQUIRED>
	<!ELEMENT content (#PCDATA)>
]>
<!--DTD部分结束-->
<poems>
<title author="杜甫">八阵图</title>
<content>
功盖三分国,名成八阵图。
江流石不转,遗恨失吞吴。
</content>
</poems>

NUTOKEN
属性值能由多个nmtoken构成,每个nmtoken之间用空格隔开
NOTATION
取值为一个DTD声明中的符号,这个类型对于非XML格式的类型非常有用

预定义实体

XML和HTML都保留了一些字符用于自身格式的定义
引用时,参考下表:
预定义实体·特殊字符的引用
这就是预定义实体。
XML还提供了另外一种引用方法:

字符实体引用
<&lt
>&gt
&&amp
&apos
"&quot

自定义实体

定义方法:

<!ENTITY entity-name "entity-content">

实例:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE COMPANY [
	<!ELEMENT COMPANY (NAME, ADDRESS)>
	<!ELEMENT NAME (#PCDATA)>
	<!ELEMENT ADDRESS (#PCDATA)>
	<!ENTITY name "青岛">
	<!ENTITY address "宁夏路">
]>
<COMPANY>
	<NAME>&name; </NAME>
	<ADDRESS>&address; </ADDRESS>
</COMPANY>

显示在浏览器中:
在这里插入图片描述

  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值