第3章 文档类型定义DTD DTD与XML文档 定义元素及其后代 定义元素的属性.

Slides:



Advertisements
Similar presentations
數位典藏聯合目錄計畫 執行經驗談 主講人:范紀文.
Advertisements

以XML可延伸式標注語言建立文章標誌系統研究- 以蘇軾詩為範圍
第六 章数据库访问页 6.1 数据访问页视图 6.2 创建数据访问页 6.3 编辑数据访问页 6.4 查看数据访问页 退出.
快乐猜猜猜 “旧四大件”? (缝纫机、自行车、手表、收音机) 改革开放 “新四大件”? (彩电、冰箱、洗衣机、空调)
10-1 資料庫管理系統簡介 10-2 關聯式資料模式和查詢語言 10-3 Access 簡介 10-4 XML 簡介
XML语法 XML文档结构 1 XML文档的元素 2 XML名称空间 3 正确的XML文档 4.
通訊科技教育改進計畫 「網路應用與服務組」 行動電子商務課程 XML之簡介.
第三章 数据类型和数据操作 对海量数据进行有效的处理、存储和管理 3.1 数据类型 数据源 数据量 数据结构
常用逻辑用语复习课 李娟.
Oracle数据库 Oracle 子程序.
XML实用教程 第9讲 计算机与电子系—顾兵.
第14章 c++中的代码重用.
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
数据访问页.
在PHP和MYSQL中实现完美的中文显示
Android开发入门 -----Android 开发“Ready go!” 主讲:李晓蕾
学习前的准备工作 讲师:burning.
第八章 菜单设计 §8.1 Visual FoxPro 系统菜单 §8.2 为自己的程序添加菜单 §8.3 创建快捷菜单.
管理信息结构SMI.
SQL Injection.
第十二课 XML操作 主讲:刘杨. 第十二课 XML操作 主讲:刘杨 本章知识点和教学要求 熟悉和了解SML 了解XML基础知识 了解如何使用DOM接口读写XML 了解如何使用SAX接口读写XML.
第十章 IDL访问数据库 10.1 数据库与数据库访问 1、数据库 数据库中数据的组织由低到高分为四级:字段、记录、表、数据库四种。
XML Scheam 也是用來驗證XML文件的驗證語法.
以ISI平台为例,为您演示一下如何在Endnote文献中查看该文献的References
第17章 网站发布.
2019/1/12 GDP设计协同 超级管理员操作手册 GDP项目组.
第二章 Java语言基础.
XML基礎課程 5 數位芝麻網路公司 XML講師:蔡斐婷.
中国科学技术大学计算机系 陈香兰(0551- ) Spring 2009
YMSM D-PACK 安装手册 作成者:D-PACK维护组(YMSLx) 作成日:
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
此簡報可能會牽涉到聽眾的討論活動,也就是所謂的執行項目。因此在進行簡報時﹐可充份利用 PowerPoint 來記錄這些執行項目:
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
SOA – Experiment 2: Query Classification Web Service
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
第二章 登录UNIX操作系统.
C语言程序设计 主讲教师:陆幼利.
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
张孝祥IT课堂 -深入体验Java Web开发内幕
顺序表的删除.
VB与Access数据库的连接.
计算机网络与网页制作 Chapter 07:Dreamweaver CS5入门
项目二:HTML语言基础.
实体描述呈现方法的研究 实验评估 2019/5/1.
ES 索引入门
第4章 Excel电子表格制作软件 4.4 函数(一).
第九节 赋值运算符和赋值表达式.
iSIGHT 基本培训 使用 Excel的栅栏问题
§6.7 子空间的直和 一、直和的定义 二、直和的判定 三、多个子空间的直和.
JoVE实验视频期刊用户指南.
3.16 枚举算法及其程序实现 ——数组的作用.
数据集的抽取式摘要 程龚, 徐丹云.
本节内容 结构体 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第六章 素材的加工与处理 第13讲 用GoldWave进行音频的截取、合并、淡入淡出操作
本节内容 文件系统 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
SpringerLink数据库使用说明 上海师范大学图书馆
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
Python 环境搭建 基于Anaconda和VSCode.
本节内容 结构体.
基于列存储的RDF数据管理 朱敏
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第8章 创建与使用图块 将一个或多个单一的实体对象整合为一个对象,这个对象就是图块。图块中的各实体可以具有各自的图层、线性、颜色等特征。在应用时,图块作为一个独立的、完整的对象进行操作,可以根据需要按一定比例和角度将图块插入到需要的位置。 2019/6/30.
第四章 UNIX文件系统.
创建、启动和关闭Activity 本讲大纲: 1、创建Activity 2、配置Activity 3、启动和关闭Activity
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
§4.5 最大公因式的矩阵求法( Ⅱ ).
§2 自由代数 定义19.7:设X是集合,G是一个T-代数,为X到G的函数,若对每个T-代数A和X到A的函数,都存在唯一的G到A的同态映射,使得=,则称G(更严格的说是(G,))是生成集X上的自由T-代数。X中的元素称为生成元。 A变, 变 变, 也变 对给定的 和A,是唯一的.
学习目标 1、什么是列类型 2、列类型之数值类型.
JUDDI安装手册.
百万行、千万行数据查询教程 老黄牛.
Presentation transcript:

第3章 文档类型定义DTD DTD与XML文档 定义元素及其后代 定义元素的属性

1 DTD与XML文档(1) 为什么需要文档类型定义(DTD) ? XML文档的基本要求是必须满足格式良好(Well Formed)的要求。格式良好的XML文档是非常简单的。如何根据需要对XML文档进行限制? 如何公布一个XML文档的结构? 如何重用XML文档的数据? 为了解决这些问题,就得需要DTD来解决。 什么是文档类型定义(DTD) ? DTD描述了一个标记语言的语法和词汇表,也就是定义了可以在XML文档中出现的元素、这些元素出现的次序、它们可以如何相互嵌套以及XML文档结构的其它详细信息。 DTD引入有效的XML文档 一个“有效的(Valid)” XML文档既是“格式良好”的,又必须遵守文档类型描述DTD中定义的种种规定。 DTD = Document Type Definition

1 DTD与XML文档(2) 内部DTD: 最简单的使用DTD的方法是在XML文档的内部分加入一个DTD描述。加入的位置是紧接在XML处理指示之后。 <?xml version = “1.0” encoding=“GB2312“ standalone=”yes”?> <!DOCTYPE 根元素名[     元素描述     ]> <根元素名> XML数据 </根元素名> 这样,我们就定义了一个文件,它以DOCTYPE中规定的根元素名作为其根元素的名字。 例3-1:内部DTD

1 DTD与XML文档(3) <?xml version = "1.0" encoding="GB2312" standalone = "no"?> <!DOCTYPE 联系人列表[ <!ELEMENT 联系人列表 (联系人)*> <!ELEMENT 联系人 (姓名,ID,公司,EMAIL,电话,地址)> <!ELEMENT 地址 (街道,城市,省份)> <!ELEMENT 姓名 (#PCDATA)> <!ELEMENT ID (#PCDATA)> <!ELEMENT 公司 (#PCDATA)> <!ELEMENT EMAIL (#PCDATA)> <!ELEMENT 电话 (#PCDATA)> <!ELEMENT 街道 (#PCDATA)> <!ELEMENT 城市 (#PCDATA)> <!ELEMENT 省份 (#PCDATA)> ]> <联系人列表> <联系人> <姓名>张三</姓名> <ID>001</ID> <公司>A公司</公司> <EMAIL>zhang@aaa.com</EMAIL> <电话>(010)62345678</电话> <地址> <街道>五街1234号</街道> <城市>北京市</城市> <省份>北京</省份> </地址> </联系人> <姓名>李四</姓名> <ID>002</ID> <公司>B公司</公司> <EMAIL>li@bbb.org</EMAIL> <电话>(021)87654321</电话> <街道>南京路9876号</街道> <城市>上海</城市> <省份>上海</省份> </联系人列表>

1 DTD与XML文档(4) 外部DTD: 将DTD置于XML文档之外的文件中。主要用于引用一个作者或组织所编写的众多XML文件中通用的DTD。 <?xml version="1.0“ encoding="GB2312" standalone="no"?> <!DOCTYPE 根元素名 SYSTEM "外部DTD文件的URL"> <根元素名> XML数据 </根元素名> 例3-2:外部DTD

1 DTD与XML文档(5) <!DOCTYPE 联系人列表 SYSTEM "fclml.dtd"> fclml.dtd: <?xml version="1.0" encoding="GB2312"?> <!ELEMENT 联系人列表 (联系人)*> <!ELEMENT 联系人 (姓名,ID,公司,EMAIL,电话,地址)> <!ELEMENT 地址 (街道,城市,省份)> <!ELEMENT 姓名 (#PCDATA)> <!ELEMENT ID (#PCDATA)> <!ELEMENT 公司 (#PCDATA)> <!ELEMENT EMAIL (#PCDATA)> <!ELEMENT 电话 (#PCDATA)> <!ELEMENT 街道 (#PCDATA)> <!ELEMENT 城市 (#PCDATA)> <!ELEMENT 省份 (#PCDATA)> <?xml version = "1.0" encoding="GB2312" standalone = "no"?> <!DOCTYPE 联系人列表 SYSTEM "fclml.dtd"> <联系人列表> <联系人> <姓名>张三</姓名> <ID>001</ID> <公司>A公司</公司> <EMAIL>zhang@aaa.com</EMAIL> <电话>(010)62345678</电话> <地址> <街道>五街1234号</街道> <城市>北京市</城市> <省份>北京</省份> </地址> </联系人> <姓名>李四</姓名> <ID>002</ID> <公司>B公司</公司> <EMAIL>li@bbb.org</EMAIL> <电话>(021)87654321</电话> <街道>南京路9876号</街道> <城市>上海</城市> <省份>上海</省份> </联系人列表>

1 DTD与XML文档(6) 公用DTD: 它是一个由权威机构制订的,提供给特定行业或公众使用的外部DTD。引用公共DTD的形式为: <!DOCTYPE 根元素 PUBLIC “DTD标识名" "外部DTD的URL"> 例:<!DOCTYPE DOCUMENT PUBLIC “-//W3C//DTD HTML 4.0//EN” “http://www.w3.org/TR/REC-html/strict.dtd”> 这个“DTD标识名”的命名规则和XML文件的命名规则稍有不同。 ISO的以ISO开头,改进的非ISO以+开头,未改进的非ISO的以-开头。 后面由多个双斜线组成://所有者//类型描述//语言//版本。 例:“-//W3C//DTD HTML 4.0//EN”; “-//IETF//ENTITIES Latin 1//EN”; “-//W3C//DTD HTML//EN//4.1”

1 DTD与XML文档(7) IE XML TOOL是微软的IE插件,其功能是在IE中对XML文档进行有效性检查和浏览XSLT输出的代码。 从下面的网址下载 iexmltls.exe: http://www.microsoft.com/downloads/details.aspx?FamilyId=D23C1D2C-1571-4D61-BDA8-ADF9F6849DF9&displaylang=en 点击iexmltlx.exe解压到一个文件夹中 鼠标右键点击上述文件夹中的.inf的文件进行安装 使用iexmltls: 用IE打开XML文档 在打开的IE窗口上点击鼠标右键弹出下拉菜单 选择其中的 “Validate XML”

2 定义元素及其后代(1) 元素的声明: 元素声明不但说明了每个XML文件中可能存在的元素,给出了元素的名字,而且给出了元素的具体类型。一个XML元素可以为空,也可以是一段纯文本,还可以有若干个子元素,而这些子元素同时又可以有它们的子元素。DTD正是通过元素之间的父子关系,描述了整个文件的结构关系。 元素的声明形式为: <!ELEMENT 元素名 元素内容描述> 元素内容可分为如下的3个类型: 简单型:元素内容是可解析的字符数据(Parsed Character Data, PCDATA),即不含有子元素的文本。 复合型:元素的内容含有其它元素,既有子元素。 混合型:元素的内容既有文本数据又有子元素。

2 定义元素及其后代(2) 简单型元素的声明: <!ELEMENT 元素名 (#PCDATA)> 空元素的声明: <!ELEMENT 元素名 EMPTY> 例如:     <!ELEMENT HR EMPTY> 不限定元素内容的声明: (不推荐使用) <!ELEMENT 元素名 ANY>

2 定义元素及其后代(3) 例: <?xml version = "1.0" encoding="GB2312" standalone = “yes"?> <!DOCTYPE 联系人 [ <!ELEMENT 联系人 ANY> <!ELEMENT 姓名 (#PCDATA)> <!ELEMENT ID (#PCDATA)> <!ELEMENT 公司 (#PCDATA)> <!ELEMENT 电话 (#PCDATA)> <!ELEMENT EMAIL (#PCDATA)> ]> <联系人> <姓名>张三</姓名> <ID>001</ID> <公司>A公司</公司> <电话>(010)62345678</电话> <EMAIL>zhang@aaa.com</EMAIL> </联系人>

2 定义元素及其后代(4) 复合型元素的声明,即定义元素及其子元素: DTD尽管要求严格,但也有它的灵活性。使用正则表达式,我们就可以描述父元素与子元素之间非常复杂的关系。下面就是描述子元素的正则式: 元 字 符 含    义 + 出现一次或多次 * 出现零次或多次 ? 不出现或出现一次 () 一组要共同匹配的表达式 | OR,或 , AND,要求严格遵从顺序要求

2 定义元素及其后代(5) 要求顺序的子元素 DTD定义(,:有序) <!ELEMENT 联系人(姓名, EMAIL)> <!ELEMENT 姓名(#PCDATA)> <!ELEMENT EMAIL(#PCDATA)> 下面的XML片断是有效的: <联系人> <姓名>张三</姓名> <EMAIL>zhang@aaa.com</EMAIL> </联系人> 而下面这个XML片断不是有效的: <联系人> <EMAIL>zhang@aaa.com</EMAIL> <姓名>张三</姓名> </联系人>

2 定义元素及其后代(6) 重复元素 DTD定义(+:至少出现一次) <!ELEMENT 联系人(姓名,EMAIL+)> <!ELEMENT 姓名(#PCDATA)> <!ELEMENT EMAIL(#PCDATA)> 下面的XML片断是有效的: <联系人>     <姓名>张三</姓名>     <EMAIL>zhang@aaa.com</EMAIL>     <EMAIL>zhang@hotmail.com</EMAIL>     <EMAIL>zhang@yahoo.com</EMAIL> </联系人> 而下面这个XML片断不是有效的: <联系人> <姓名>张三</姓名> </联系人>

2 定义元素及其后代(7) DTD定义(*:出现任意次) <!ELEMENT 联系人(姓名,EMAIL*)> <!ELEMENT 姓名(#PCDATA)> <!ELEMENT EMAIL(#PCDATA)> 成组元素:一组元素放在括号内 DTD定义(元素组) <!ELEMENT 联系人 (姓名,EMAIL)+> <!ELEMENT 姓名 (#PCDATA)> <!ELEMENT EMAIL (#PCDATA)> 符合这个DTD的XML片断可以是: <联系人>     <姓名>张三</姓名>     <EMAIL>zhang@aaa.com</EMAIL>     <姓名>李四</姓名>     <EMAIL>li@bbb.org</EMAIL>     <姓名>王五</姓名>     <EMAIL>wang@ccc.org</EMAIL>    </联系人>

2 定义元素及其后代(8) OR或:符号“|”描述了一个OR操作。 <!ELEMENT 联系人 (姓名,(电话|EMAIL))> <!ELEMENT 姓名 (#PCDATA)> <!ELEMENT 电话 (#PCDATA)> <!ELEMENT EMAIL (#PCDATA)> “联系人”元素应该有一个“姓名”子元素,在此之后还应该有一个“电话”或一个“EMAIL”元素,但不能同时有“电话”和“EMAIL”。 下面都是无效的XML片段 <联系人>     <姓名>张三</姓名> </联系人> <联系人>     <姓名>张三</姓名>     <电话>12345678</电话>     <EMAIL>zhang@yahoo.com</EMAIL> </联系人> <联系人>     <EMAIL>zhang@aaa.com</EMAIL>     <姓名>张三</姓名> </联系人>

2 定义元素及其后代(9) 符合上述DTD定义的有效的XML片段应该是: <联系人>     <姓名>张三</姓名>     <电话>12345678</电话> </联系人> 或者是: <联系人>     <姓名>张三</姓名>     <EMAIL>zhang@yahoo.com</EMAIL> </联系人> 注意:在一个组中,只允许使用一种连接符(例如“,”或“|”)。 下面这样定义的DTD是不合法的: <!ELEMENT 联系人(姓名,电话|EMAIL)>

2 定义元素及其后代(10) 可选子元素:字符“?”说明一个子元素是可选的,可出现,也可不出现。     <!ELEMENT 联系人 (姓名,(电话|EMAIL),地址?)> <!ELEMENT 姓名 (#PCDATA)> <!ELEMENT 电话 (#PCDATA)> <!ELEMENT EMAIL (#PCDATA)> <!ELEMENT 地址 (街道,城市,省份)> <!ELEMENT 街道 (#PCDATA)> <!ELEMENT 城市 (#PCDATA)> <!ELEMENT 省份 (#PCDATA)> 下面的XML片段是“有效的”: <联系人>     <姓名>张三</姓名>    <EMAIL>zhang@aaa.com</EMAIL>     <地址>         <街道>五街1234号</街道>         <城市>北京市</城市>         <省份>北京</省份>     </地址> </联系人> <联系人>     <姓名>张三</姓名>     <EMAIL>zhang@aaa.com</EMAIL> </联系人>

2 定义元素及其后代(11) 混合内容: <!ELEMENT 元素名 (#PCDATA|子元素1|子元素2…)*>    在一个元素中可能包含子元素,也可能包含纯文本。把这种元素称为混合内容的元素。在下面的例子中,“联系人”就是一个混合元素。(不推荐使用) <?xml version = "1.0" encoding="GB2312" standalone = "yes"?> <!DOCTYPE 联系人列表 [     <!ELEMENT 联系人列表 ANY>        <!ELEMENT 联系人 (#PCDATA|姓名|电话|EMAIL)*>     <!ELEMENT 姓名 (#PCDATA)>     <!ELEMENT 电话 (#PCDATA)>     <!ELEMENT EMAIL (#PCDATA)>     ]> <联系人列表> <联系人>         <姓名>张三</姓名>         <电话>(010)62345678</电话>         <EMAIL>zhang@aaa.com</EMAIL>         这是关于张三的信息        </联系人> </联系人列表>

3 定义元素的属性(1) 在DTD中定义属性时,使用下面的格式: <!ATTLIST 元素名 (属性名 属性类型 缺省值)*> 其中: 元素名是属性所属的元素的名字; 属性名是属性的命名; 属性类型是用来指定该属性是属于十个有效属性类型中的哪种类型。 缺省值是在没有特别说明属性时的取值,可定义也可不定义; 注意:ATTLIST是一个属性的列表,它可以包含很多属性的定义。 例: <!ATTLIST 商品     类型 CDATA #REQUIRED     颜色 CDATA #IMPLIED > <商品 类型 = “服装” 颜色 = "黄色">

3 定义元素的属性(2) 属性缺省值 在DTD中定义的属性的缺省值可以分为以下四类: 必须赋值的属性 关键字REQUIRED说明XML文件中必须为这个属性给出一个属性值。 属性值可有可无的属性 当使用IMPLIED关键字时,不强行要求在XML文件中给该属性赋值,也无须在DTD中为该属性提供缺省值。 固定取值的属性 还有一种特殊情况,你需要为一个特定的属性提供一个缺省值,并且不希望XML文件的编写者把你的缺省值替代掉。这时候,就应该使用FIXED关键字,同时为该属性提供一个缺省值。 定义缺省值的属性 如果不使用上面任何一种关键字的话,就需要在DTD中为它提供一个缺省值。在XML文件中可以为该属性给出新的属性值来覆盖事先定义的缺省值,也可以不另外给出属性值,默认为采用DTD中给出的缺省值。

3 定义元素的属性(3) 下面给出一个具体的例子: <!ATTLIST 页面作者         姓名 CDATA #IMPLIED         年龄 CDATA #IMPLIED         联系信息 CDATA #REQUIRED         网站职务 CDATA #FIXED "页面作者"         个人爱好 CDATA "上网"> 属性类型 一个元素的属性可以为以下八种类型中的任意一种: 1.CDATA 6.ENTITY 2.Enumerated 7.NMTOKEN 3.ID 8.NMTOKENS 4.IDREF 5.IDREFS

3 定义元素的属性(4) CDATA类型    CDATA指的是纯文本,即由字符、符号“&”、小于号“<”和引号“””组成的字符串。当然,应该使用实体&代替“&”,<代替“<”,&quot代替“””。 请看下面这个关于剧本的例子: <?xml version = "1.0" encoding="GB2312"       standalone = "yes"?> <!DOCTYPE 剧本 [     <!ELEMENT 剧本 ANY>     <!ELEMENT 对话 (#PCDATA)>     <!ATTLIST 对话 演员 CDATA #REQUIRED>     ]> <剧本>     <对话 演员="某甲">我可不这么认为!</对话>     <对话 演员="某乙">为什么呢?</对话> </剧本>

3 定义元素的属性(5) 枚举类型ENUMERATED    属性也可以被描述为一组可接受的取值的列表,XML文件中对属性的赋值将从这个列表中选取一个值。这类属性属于枚举类型ENUMERATED,不过,关键字ENUMERATED是不出现在DTD定义中的。 例:<?xml version = “1.0” encoding=“GB2312”       standalone = “yes”?> <!DOCTYPE 购物篮 [     <!ELEMENT 购物篮 ANY>     <!ELEMENT 肉 EMPTY>     <!ATTLIST 肉 种类 ( 鸡肉 | 牛肉 | 猪肉 | 鱼肉 ) “鸡肉”>     ]> <购物篮>     <肉 种类= “鱼肉”/>     <肉 种类= "牛肉"/>     <肉/> </购物篮> 注意,在上面这个例子中,给属性“种类”定义的缺省值是“鸡肉”,所以“购物篮”中的第三个元素的“种类”属性取值为“鸡肉”。

3 定义元素的属性(6) ID类型 ID是用属性值的方式为文件中的某个元素定义唯一标识的方法。ID的值必须是一个有效的XML名称,不要给ID类型的属性事先指定缺省值,更不能使用FIXED型的缺省值。 <?xml version = "1.0" encoding="GB2312" standalone = "yes"?> <!DOCTYPE 联系人列表[     <!ELEMENT 联系人列表 ANY>     <!ELEMENT 联系人(姓名,EMAIL)>     <!ELEMENT 姓名(#PCDATA)>     <!ELEMENT EMAIL(#PCDATA)>     <!ATTLIST 联系人 编号 ID #REQUIRED>     ]> <联系人列表>     <联系人 编号=“a1">         <姓名>张三</姓名>         <EMAIL>zhang@aaa.com</EMAIL>     </联系人>     <联系人 编号=“a2">         <姓名>李四</姓名>         <EMAIL>li@bbb.org</EMAIL>     </联系人> </联系人列表>

3 定义元素的属性(7) IDREF类型 IDREF类型允许一个元素的属性使用文件中的另一个元素的ID标识值作为该属性的取值。例如下面的例子: <?xml version = "1.0" encoding="GB2312" standalone = "yes"?> <!DOCTYPE 联系人列表[     <!ELEMENT 联系人列表 ANY>     <!ELEMENT 联系人(姓名,EMAIL)>     <!ELEMENT 姓名(#PCDATA)>     <!ELEMENT EMAIL(#PCDATA)>     <!ATTLIST 联系人 编号 ID #REQUIRED>     <!ATTLIST 联系人 上司 IDREF #IMPLIED>     ]> <联系人列表>     <联系人 编号=“a2">         <姓名>张三</姓名>         <EMAIL>zhang@aaa.com</EMAIL>     </联系人>     <联系人 编号=“a1" 上司=“a2">         <姓名>李四</姓名>         <EMAIL>li@aaa.com</EMAIL>      </联系人> </联系人列表>

3 定义元素的属性(8) NMTOKEN 和 NMTOKENS:名称记号 类型 NMTOKEN 和 NMTOKENS 是诸多属性类型中面向处理程序的又一个类型。这两个类型用于指示一个有效的XML名称。例如可以通过NMTOKEN 类型的属性来访问一个JAVA类等等。 关于元素的定义: <!ELEMENT 数据(#PCDATA)> <!ATTLIST 数据     安全性 ( ON | OFF ) "OFF">     授权用户 NMTOKENS #IMPLIED > XML片段: <数据 安全性="ON" 授权用户="IggieeB SelenaS GuntherB"> blah blah blah </数据>

4 实体(1) 实体(ENTITY):是XML中用来指代其它复杂结构的机制。一个简单的实体可以代表一大段文本内容。 实体可分为内部实体和外部实体。 实体声明: 内部实体:<!ENTITY 实体名 “文本内容”> 外部实体:<!ENTITY 实体名 SYSTEM “URI”> 实体引用:&实体名; 其实像”&gt;”、”&lt;”等特殊实体就是一种内部预定义的实体.

4 实体(2):内部实体 <?xml version="1.0" encoding="gb2312" ?> <!DOCTYPE 联系人列表 [ <!ELEMENT 联系人列表 (联系人*)> <!ELEMENT 联系人 (姓名, 公司, 地址)> <!ELEMENT 姓名 (#PCDATA)> <!ELEMENT 公司 (#PCDATA)> <!ELEMENT 地址 (#PCDATA)> <!ENTITY A公司地址 "北京市五街1234号"> <!ENTITY B公司地址 "上海南京路9876号"> ]> <联系人列表> <联系人> <姓名>张三</姓名> <公司>A公司</公司> <地址>&A公司地址;</地址> </联系人> <姓名>李四</姓名> <公司>B公司</公司> <地址>&B公司地址;</地址> <姓名>王五</姓名> </联系人列表>

4 实体(3):外部实体 Fclml.dtd: <?xml version="1.0" encoding="GB2312"?> <!DOCTYPE 联系人列表 SYSTEM "FCLML.DTD"> <联系人列表> <联系人> <姓名>张三</姓名> <公司>A公司</公司> <地址>&A公司地址;</地址> </联系人> <姓名>李四</姓名> <公司>B公司</公司> <地址>&B公司地址;</地址> <姓名>王五</姓名> </联系人列表> Fclml.dtd: <?xml version="1.0" encoding="GB2312"?> <!ELEMENT 联系人列表 (联系人*)> <!ELEMENT 联系人 (姓名,公司,地址)> <!ELEMENT 地址 (#PCDATA)> <!ELEMENT 姓名 (#PCDATA)> <!ELEMENT 公司 (#PCDATA)> <!ENTITY A公司地址 SYSTEM "北京市五街1234号"> <!ENTITY B公司地址 SYSTEM "上海南京路9876号"> 查看实例

5 DTD中声明的类型小结 DTD格式: <!DOCTYPE 根元素名[ 元素描述 ]> 元素声明: <!ELEMENT 元素名 元素内容> 属性声明: <!ATTLIST 元素名 属性名 类型 缺省值> 属性类型: 1.CDATA 6.ENTITY 2.Enumerated 7. NMTOKEN 3.ID 8. NMTOKENS 4.IDREF 5.IDREFS