DTD学习笔记

DTD学习笔记

引言:DTD的作用是定义XML文档的合法构建模块,DTD可被成行的声明于XML文档中,也可作为一个外部引用

示例:

<!DOCTYPE NEWSPAPER [
<!ELEMENT NEWSPAPER (ARTICLE+)>
<!ELEMENT ARTICLE (HEADLINE,BYLINE,LEAD,BODY,NOTES)>
<!ELEMENT HEADLINE (#PCDATA)>
<!ELEMENT BYLINE (#PCDATA)>
<!ELEMENT LEAD (#PCDATA)>
<!ELEMENT BODY (#PCDATA)>
<!ELEMENT NOTES (#PCDATA)> 

<!ATTLIST ARTICLE AUTHOR CDATA #REQUIRED>
<!ATTLIST ARTICLE EDITOR CDATA #IMPLIED>
<!ATTLIST ARTICLE DATE CDATA #IMPLIED>
<!ATTLIST ARTICLE EDITION CDATA #IMPLIED>

]>

一、DTD简介

1、内部的DOCTYPE声明

假如DTD被包含在XML源文件中,语法如下:

<!DOCTYPE root-element [element-declarations]>

示例:

<?xml version="1.0"?>
<!DOCTYPE note [							//定义此文档是note类型的文档
<!ELEMENT note (to,from,heading,body)>		  //note元素有四个子元素:to,from,heading,body	  
<!ELEMENT to (#PCDATA)>						//to元素为#PCDATA类型
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend</body>
</note>

2、外部的文档声明

语法格式:

 <!DOCTYPE root-element SYSTEM "filename">

3、为什么使用DTD

通过DTD,可使得每个XML文件均可携带一个有关自身格式的描述

使独立的团体可以使用同一格式来交换数据

方便接受数据(同上)

二、DTD构建模块

1、元素和属性: 元素也是HTML 和XMl的主要构建模块 (即标签)

2、实体:是用来定义普通文本的变量。 如:

&lt; &gt; &amp; &qout; &apos;

3、PCDATA

4、CDATA

三、元素

1、声明一个元素

在DTD中,元素须通过元素声明来声明。语法如下:

<!ELEMENT element-name category><!ELEMENT element-name (element-content)>

空元素:

<!ELEMENT element-name EMPTY>

只有PCDATA的元素

<!ELEMENT element-name (#PCDATA)>

示例:
<!ELEMENT from (#PCDATA)

带有任何内容的元素

<!ELEMENT element-name ANY>

示例:
<!ELEMENT note ANY>

带有子元素(序列)的元素

<!ELEMENT element-name (child1,child2,child3)>

示例:
<!ELEMENT note (to,from,heading,body)>		//如果出现了该条声明,则被包含的子元素就必须被声明(如下四个子元素)
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>

声明只出现一次的元素

<!ELEMENT element-name (Child-name)>

示例:
<!ELEMENT note (message)>			//子元素message必须出现且只出现一次
<!ELEMENT message (#PCDATA)>

声明最少出现一次的元素

<!ELEMENT element-name (child-name+)>

示例:
<!ELEMENT note (message+)>			//子元素message至少出现一次,出现次数不限
<!ELEMENT message (#PCDATA)>

声明出现0次或多次的元素

<!ELEMENT element-name (child-name*)>

示例:
<!ELEMENT note (message*)>		//子元素message可以出现0次或多次

声明出现0次或一次的元素

<!ELEMENT element-name (child-name?)>

示例
<!ELEMENT note (message?)>		//message可出现0次或一次,不能超过一次

声明"(非。。。|即。。。)"类型的内容

示例:
<!ELEMENT note (to,from,heading,body,(message|body))		//message和body元素二选一,可以是message也可以是body

声明混合型的内容

<!ELEMENT note (#PCDATA|to|from|header|message)*>	//"note" 元素可包含出现零次或多次的 PCDATA、"to"、"from"、"header" 或者 "message"。

2、属性

声明属性

​ 语法:

<!ATTLIST element-name attribute-name attribute-type attribute-value>

DTD示例:
<!ATTLIST payment type CDATA "check">
XML示例:
<payment type="check" />

属性类型选项


类型					描述
CDATA				值为字符数据 (character data)
(en1|en2|..)		此值是枚举列表中的一个值
ID					值为唯一的 id
IDREF				值为另外一个元素的 id
IDREFS				值为其他 id 的列表
NMTOKEN				值为合法的 XML 名称
NMTOKENS			值为合法的 XML 名称的列表
ENTITY				值是一个实体
ENTITIES			值是一个实体列表
NOTATION			此值是符号的名称
xml:				值是一个预定义的 XML 值

默认属性值

			
值				解释
值			   属性的默认值
#REQUIRED		属性值是必需的
#IMPLIED		属性不是必需的
#FIXED value	属性值是固定的

3、实体

实体是用于定义引用普通文本或特殊字符的快捷方式的变量

一个实体的内部声明

语法:

<!ENTITY entity-name "entity-value"

实例:

DTD 实例:

<!ENTITY writer "Donald Duck.">
<!ENTITY copyright "Copyright runoob.com">

XML 实例:

<author>&writer;&copyright;</author>

注意: 一个实体由三部分构成: 一个和号 (&), 一个实体名称, 以及一个分号 (😉。


一个实体的外部声明

语法:

<!ENTITY entity-name SYSTEM "URI/URL"

实例:

DTD 实例:

<!ENTITY writer SYSTEM "http://www.runoob.com/entities.dtd">
<!ENTITY copyright SYSTEM "http://www.runoob.com/entities.dtd">

XML example:

<author>&writer;&copyright;</author>

语法:

<!ENTITY entity-name SYSTEM "URI/URL"

实例:

DTD 实例:

<!ENTITY writer SYSTEM "http://www.runoob.com/entities.dtd">
<!ENTITY copyright SYSTEM "http://www.runoob.com/entities.dtd">

XML example:

<author>&writer;&copyright;</author>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值