四、XML语言学习(2)
XML约束之DTD
1、XML都是用户自定义标签,若出现小小的错误,软件程序将不能正确地获取文件中的内容而报错。
XML技术中,可以编写一个文档来约束一个XML的书写规范,这个文档称之为约束
格式良好的XML:遵循XML语法的XML
有效的XML:遵循约束文档的XML
2、在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束
常用的约束技术
XML DTD
XML Schema
3、DTD约束
DTD(Document Type Definition),全称为文档类型定义
文件清单:book.xml
<?xml version="1.0" ?>
<!DOCTYPE 书架 SYSTEM "book.dtd">
<书架>
<书>
<书名>葵花宝典</书名>
<作者>东方不败</作者>
<售价>59.00元</售价>
</书>
<书>
<书名>九阳神功</书名>
<作者>张无忌</作者>
<售价>57.00元</售价>
</书>
</书架>
文件清单:book.dtd
<!ELEMENT 书架 (书+)>
<!ELEMENT 书 (书名,作者,售价)>
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 售价 (#PCDATA)>
DTD文件应使用UTF-8或Unicode
4、将DTD与XML文档关联三种方式
DTD约束即可以作为一个单独的文件编写,也可以在XML文件内编写
使用内部DTD
使用外部DTD
使用公共DTD
5、在xml文件内编写DTD
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE 书架 [
<!ELEMENT 书架 (书+)>
<!ELEMENT 书 (书名,作者,售价)>
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 售价 (#PCDATA)>
]>
<书架>
<书>
<书名>Java就业培训教程</书名>
<作者>张孝祥</作者>
<售价>39.00元</售价>
</书>
...
</书架>
6、引入外部DTD文档
ML使用DOCTYPE声明语句来指明它所遵循的DTD文档,有两种形式:
当引用的DTD文档在本地时,采用如下方式:
<!DOCTYPE 根元素 SYSTEM “DTD文档路径”>
如:<!DOCTYPE 书架 SYSTEM “book.dtd”>
当引用的DTD文档在公共网络上时,采用如下方式:
<!DOCTYPE 根元素 PUBLIC “DTD名称” “DTD文档的URL”>
如:<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
7、DTD约束语法细节
元素定义
属性定义
实体定义
(1)DTD-定义元素
在DTD文档中使用ELEMENT关键字来声明一个XML元素。
语法:<!ELEMENT 元素名称 使用规则>
使用规则:
(#PCDATA):指示元素的主体内容只能是普通的文本.(Parsed Character Data)
EMPTY:用于指示元素的主体为空。比如<br/>
ANY:用于指示元素的主体内容为任意类型。
(子元素):指示元素中包含的子元素
定义子元素及描述它们的关系:
如果子元素用逗号分开,说明必须按照声明顺序去编写XML文档。
如: <!ELEMENT FILE (TITLE,AUTHOR,EMAIL)
如果子元素用“|”分开,说明任选其一。
如:<!ELEMENT FILE (TITLE|AUTHOR|EMAIL)
用+、*、?来表示元素出现的次数
+:表示至少出现一次,一次或多次
*:表示可有可无,零次、一次或多次
?:表示可以有也可以无,有的话只能有一次。零次或一次
元素内容类型
#PCDATA :表明可包含任何字符数据,但不能包含子元素
EMPTY:如果一个元素的CONTENT被声明为EMPTY,表明该元素不能包含任何子元素和文本,仅可以使用属性
ANY:表示该元素中可以包含任何在DTD中定义的元素内容
元素定义:
<!ELEMENT 元素名称 元素内容声明>
?:表示对象只能出现一次
* :表示对象可以出现任意多次
+ :表示最少出现一次,可以多次
():表示给元素分组
| :表示在列出对象中选择一个
, :表示对象按指定顺序出现
例如:
<! ELEMENT 书籍(著作+)>
<! ELEMENT 著作(书名,作者*,出版社,页数,价格)>
<! ELEMENT 书名(正书名,副书名)>
<! ELEMENT 出版社(#PCDATA)>
(2)属性(ATTLIST)定义元素
<! ATTLIST 元素名称
属性名 属性类型 约束
属性名 属性类型 约束
...
>
属性值类型:
CDATA:表示属性的取值为普通的文本字符串
ENUMERATED (DTD没有此关键字):表示枚举,只能从枚举列表中任选其一,如(鸡肉|牛肉|猪肉|鱼肉)
ID:表示属性的取值不能重复,属性的值只能由字母,下划线开始,不能出现空白字符
属性约束设置说明
#REQUIRED:表示该属性必须出现
#IMPLIED:表示该属性可有可无
#FIXED:表示属性的取值为一个固定值。语法:#FIXED "固定值"
直接值:表示属性的取值为该默认值
<!ATTLIST 页面作者
姓名 CDATA #IMPLIED
年龄 CDATA #IMPLIED
联系信息 CDATA #REQUIRED
网站职务 CDATA #FIXED "页面作者"
个人爱好 CDATA "上网"
>
(3)实体定义
体用于为一段内容创建一个别名,以后在XML文档中就可以使用别名引用这段内容了。
在DTD定义中,一条<!ENTITY …>语句用于定义一个实体。
<!ENTITY 实体名称 “实体内容”>
引用方式(注意是在XML中使用):&实体名称;
DTD中定义:
<!ENTITY copyright “传智播客版权所有”>
XML中引用:
©right;
四、XML语言学习(2)的更多相关文章
- 四、XML语言学习(1)
XML语言 1.XML是什么?XML是指可扩展标记语言XML是指可扩展标记语言(eXtensible Markup Language),它是一种标记语言,很类似HTML.它被设计的宗旨是传输数据,而非 ...
- 四、XML语言学习(3)
XML编程(CURD) 1.XML解析技术概述XML解析方式分为两种:DOM方式和SAX方式DOM:Document Object Model,文档对象模型.这种方式是W3C推荐的处理XML的一种方式 ...
- XML语言学习随笔
XML和HTML都是W3C的定制的标准,XML的诞生本身是为了替代不成熟的HTML,但是因为现实的环境,XML替代HTML并未成功.之后W3C为了代码严谨性的决心,又发布了升级版的标记语言XHTML, ...
- Go语言学习笔记四: 运算符
Go语言学习笔记四: 运算符 这章知识好无聊呀,本来想跨过去,但没准有初学者要学,还是写写吧. 运算符种类 与你预期的一样,Go的特点就是啥都有,爱用哪个用哪个,所以市面上的运算符基本都有. 算术运算 ...
- javaweb学习总结七(XML语言作用、语法)
一:XML语言的概念以及作用 1:xml概念:extensible Markup language,可扩展行标记语言,因为html的语法比较混乱,不够严谨. 用html写的系统不好维护,所以w3c组织 ...
- R语言学习 第四篇:函数和流程控制
变量用于临时存储数据,而函数用于操作数据,实现代码的重复使用.在R中,函数只是另一种数据类型的变量,可以被分配,操作,甚至把函数作为参数传递给其他函数.分支控制和循环控制,和通用编程语言的风格很相似, ...
- 获取技能的成功经验和关于C语言学习的调查 2015528
内容提要 你有什么技能比大多人(超过90%以上)更好?针对这个技能的获取你有什么成功的经验?与老师博客中的学习经验有什么共通之处? 有关C语言学习的调查 你是怎么学习C语言的?(作业,实验,教材,其他 ...
- 技能获取与C语言学习情况
你有什么技能比大多人(超过90%以上)更好? 仔细回想了一下自己到目前为止的学习生涯,好像真的没有什么技能能够比90%以上的人好. 初中高中学过很多东西,但是能够算得上专精的却着实没有.小学参加过计算 ...
- 5332盛照宗 如何获取新技能+c语言学习调查
如何获取新技能+c语言学习调查 你有什么技能比大多人(超过90%以上)更好? 如果问我有没有什么技能比大多数人,并且是90%的人好,我还真不敢说有,因为世界上有70亿人,要比63亿人做的好才行啊.我也 ...
随机推荐
- hql里面union和union all的区别
union和union all的区别是,union会自动压缩多个结果集合中的重复结果,而union all则将所有的结果全部显示出来,不管是不是重复. 注意,原来表里面的重复行也会被压缩. Union ...
- Navicat for MySQL 64位破解版
注册码:NAVH-WK6A-DMVK-DKW3 百度网盘链接(为安装包,直接运行EXE文件即可):http://pan.baidu.com/s/1o7OwjFG
- [C#] 解决Silverlight反射安全关键(SecuritySafeCritical)时报“System.MethodAccessException: 安全透明方法 XXX 无法使用反射访问”的问题
作者: zyl910 一.缘由 在Silverlight中使用反射动态访问时,经常遇到"System.MethodAccessException: 安全透明方法 XXX 无法使用反射访问-- ...
- Emacs 不将M-Del删除的单词加入粘贴板
原文:https://jblevins.org/log/clipboard I use a clipboard manager called Copied that syncs previously ...
- Form 组件的学习
学习链接:http://www.cnblogs.com/haiyan123/p/7778888.html Form组件可以做的几件事情: 1.用户请求数据验证 2.自动生成错误信息 3.打包用户提交的 ...
- atitit 各分公司ceo cao行政经理职责.docx
1.1. 人员招募--分公司高层人员招募(每月招募四五人吧,每周一人平均) 1 1.2. 组织架构优化 1 1.3. 制度建设 健全并完善分公司内部管理机构设置,优化分公司业务管理流程: 1 1.4 ...
- re.S、 re.M
re.S是代表.可以匹配\n以及“ re.M是多行 code import re a = '''asdfsafhellopass: 234455 worldafdsf ''' b = re.fi ...
- 2018铁三测评题write以及一些想送给你们的话
一..前言 此文献给实验室的萌新们,以及刚刚接触CTF的同学们,希望能对你们的成长起到一些帮助. 二.关于CTF 可能你已经接触过CTF或者对它有所了解,这里我再简单介绍一下. 1.什么是CTF? C ...
- Zookeeper —— 初识
什么是 Zookeeper Zookeeper 是一个开放源代码的分布式协调服务,由雅虎创建,是 Google Chubby 的开源实现: Zookeeper 是典型的分布式数据一致性的解决方案,分布 ...
- Codeforces Round #313 (Div. 2) C. Gerald's Hexagon(补大三角形)
C. Gerald's Hexagon time limit per test 2 seconds memory limit per test 256 megabytes input standard ...