2.xml约束技术----------dtd约束
1.xml的约束
(1)为什么需要定义约束了
比如现在定义一个person的xml文件,只想要这个文件里面保存人的信息,比如name age等,但是如果在xml文件中写了一个元素<猫>,发现可以正常显示,因为符合语法规范。但是猫肯定不是人的信息,xml的元素时自定义的,需要技术来规定xml中只能出现的元素,这个时候就需要约束了
xml的约束的技术:dtd约束 和 schema约束
2.dtd的编写使用步骤(注意语法的格式,该打空格就打空格)
(1)创建一个文件,后缀名为.dtd
(2)在文件中写入约束
a.看xml中有多少个元素,有几个元素那么就在dtd文件中写几个<!ELEMENT>(大写)
b.判断元素时简单元素还是复杂元素
- 复杂元素:由子元素( 语法:<!ELEMENT 元素名字 (子元素1,子元素2...)> )
- 简单元素:没有子元素( 语法:<!ELEMENT 元素名字 (#PCDATA)> )
c.在xml文件中引入dtd文件
语法: <!DOCTYPE 根元素名称 SYSTEM "dtd文件的路径">
(3)注意
浏览器只负责检验xml的语法,不负责校验约束(责校约束,我们需要以来工具,比如Eclipse MyEclipse)
实例一:按照dtd约束进行定义xml元素
dtd约束代码如下:
<!ELEMENT persion (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
xml文件代码如下(按照dtd约束)
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE persion SYSTEM "Demo1.dtd">
<persion>
<name>张三</name>
<age>123</age>
</persion>
浏览器显示

实例二:不按照dtd约束定义xml元素
如果我们不按照dtd约束,那么Eclipse会提示错误,但是在浏览器中运行却可以显示

但浏览器正常显示

3.dtd的三种引入方式
(1)使用外部的dtd文件(例如上面的实例就是使用这个方式)
语法:<!DOCTYPE 根元素名字 SYSTEM "dtd路径">
(2)在xml里面使用dtd文件
语法:<!DOCTYPE 根元素名字 [
<!ELEMENT persion (name,age)>
<!ELEMENT name (#CPDATA)>
<!ELEMENT age (#PCDATA)>
]>
例如代码如下:
<?xml version="1.0" encoding="gbk"?>
<!DOCTYPE persion [
<!ELEMENT persion (name,age,profession)><!--这个可写也可不写(最好还是写上)-->
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT profession (student)>
<!ELEMENT student (#PCDATA)>
]> <persion>
<name>张三</name>
<age>18</age>
<profession>
<student>学生</student>
</profession>
</persion>
(3)使用网络上面的dtd文件(别人已经定义好了的)
语法:<!DOCTYPE 根元素 PUBLIC "dtd名字" "dtd文档的URL">
框架struts2就会使用配置文件,并且使用的是网络上面的dtd文件
4.使用dtd约束定义元素
(1)语法:<!ELEMENT 元素名 约束>
(2)简单元素:没有子元素的元素
<!ELEMENT name (#PCDATA)>
- (#PCDATA) :表示该元素可以包含字符串数据,但是不能包含子元素
- EMPTY:表示为空(就是没有内容,例如<a></a>)
- ANY :表示可以包含任意类型数据
(2)复杂元素:
<!ELEMENT persion (name,age)> 表示子元素只能出现一次
<!ELEMENT persion (name+,age)> 表示name元素可以出现一次或则多次
符号的意义:
+ :表示一次或者多次(>=1)
?:表示零次或者一次(==0或则==1)
* :表示零次或者多次(>=0)
,:如果子元素直接用逗号分割,那么表示子元素出现的顺序
| :如果子元素用|分割,那么之元素只能出现其中一个

下面是一个例子:
<?xml version="1.0" encoding="gbk"?>
<!DOCTYPE persion [
<!ELEMENT persion (name+,age?,(profession*|aaa))><!--这个可写也可不写(最好还是写上)-->
<!ELEMENT name EMPTY>
<!ELEMENT age ANY>
<!ELEMENT profession (#PCDATA)>
]> <persion>
<name></name>
<name></name>
<!-- <age>18</age>这个因为是可以定义0次也可以1次,所以注释掉 -->
<profession>学生1</profession>
<profession>学生2</profession>
<profession>学生3</profession>
</persion>

6.使用dtd定义属性约束(就如html中class,id等一样)
(1)语法:<!ATTLIST 元素名字
属性名字 属性类型 属性约束
>
(2)属性的值的类型
a.CDATA:字符串
例如:<!ATTLIST name
ID1 CDATA #REQUIRED
>
b.枚举:表示只能在一定范围内出现的值,但是每次只能出现其中一个
例如:<!ATTLIST name
ID1 (AA|BB|CC) #REQUIRED
>
c.ID : 属性的值只能是字符或者下划线开头
例如:<!ATTLIST name
ID1 ID #REQUIRED
>
(3)属性约束
#REQUIRED : 属性必须存在
#IMPLIED : 属性可有可无
#FIXED : 表示一个固定值 #FIXED "AAA"(也就是属性的值必须是AAA,不能是其他的值)
默认值:
例如:<!ATTLIST name
ID1 CDATA "WWW"
>
如果我们在xml页面中给这个属性没有赋值,那么默认就是WWW,如果赋值了,那么就是自己赋的值
(4)实体
意义:我们在写xml的时候,元素里面的值可以引用这个实体(也就是先在dtd文件中定义,再到xml文件中使用)
语法:<!ENTITY TEXT "entity">----<!ENTITY 实体名 "实体值">
调用:在元素中写 &TEXT;
注意:定义实体需要写在内部的dtd里面,如果写在外部dtd里面,某些浏览器获取不到之个值
实例代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE persion [
<!--定义元素约束-->
<!ELEMENT persion (name,age,profession,default,entity)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT profession (#PCDATA)>
<!ELEMENT default (#PCDATA)>
<!ELEMENT entity (#PCDATA)> <!--元素属性约束-->
<!--name的值只能是这几个枚举之中的一个,并且必须写-->
<!ATTLIST name
ID1 (AA|BB|CC) #REQUIRED
>
<!--表示属性的值只能是字符或者下划线开头,并且这个属性可写可不写-->
<!ATTLIST age
ID2 ID #IMPLIED
>
<!--表示这个属性的值只能是WWW-->
<!ATTLIST profession
ID3 CDATA #FIXED "WWW"
>
<!--表示这个属性的值默认是default-->
<!ATTLIST default
ID4 CDATA "default"
> <!--定义实体-->
<!ENTITY TEXT "entity">
]> <persion>
<name ID1="AA"></name>
<age ID2="_id"></age>
<profession ID3="WWW"></profession>
<default></default>
<entity>&TEXT;</entity>
</persion>

2.xml约束技术----------dtd约束的更多相关文章
- Schema约束与DTD约束
现将Schema约束与DTD约束实现的一个实例截图出来: 1.DTD 1.1 DTD文件 1.2 DTD实现 2.Schema 2.1 Schema约束 2.2 Schema实现
- xml技术DTD约束定义
XML约束 在XML技术中,可以编写一个文档来约束一个xml文档的书写规范,这称之为XML约束为什么需要XML约束? class.xml <stu><面积>?人怎么会有面积元素 ...
- xml语法、DTD约束xml、Schema约束xml、DOM解析xml
今日大纲 1.什么是xml.xml的作用 2.xml的语法 3.DTD约束xml 4.Schema约束xml 5.DOM解析xml 1.什么是xml.xml的作用 1.1.xml介绍 在前面学习的ht ...
- xml的应用与dtd约束
1.xml的应用 *不同的系统之间的传输数据(qq消息传输) *用来表示生活中有关系的数据(省市区的包含关系) *经常用在文件配置 **比如现在连接数据库,肯定知道数据库的名称和密码及用户名. ...
- DTD约束与schema约束的不同
本篇笔记了解------Schema约束的语法 ------可以参考W3school之Schema教程. Schema:是基于 XML 的 DTD 替代者,用于描述XML文档结构.支持XML 命名空间 ...
- DTD约束和Schema约束
DTD约束 什么是DTD? DTD(Document Type Definition),文档类型定义,用来约束XML文档.规定XML文档中元素的名称,子元素的名称及顺序,元素的属性等. DTD约束长什 ...
- xml约束技术之dtd
DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块.这篇文章作简单介绍下DTD的用法.想学习完整的请点击下面w3c的教程. 1.DTD官方教程 ##2.xml约束技术: DTD约束:语法相 ...
- 【JAVA与XML、dtd约束、Schema约束】
一.XML. (1)XML:Extensible Markup Language (2)XML是一种标记语言. (3)XML的设计宗旨是传输数据,而不是显示数据. (4)XML标签没有被预定义,即使用 ...
- XML约束——DTD约束
参考: 方立勋老师的讲课视频. 什么是XML约束 •在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束. 为什么需要XML约束 常用的约束技术 •XML DTD • ...
随机推荐
- Java并发指南14:JUC中常用的Unsafe和Locksupport
本文转自网络,侵删 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutoria ...
- Jmeter 上传下载文件
最近很多同学都在问jmeter上传.下载文件的脚本怎么做,要压测上传.下载文件的功能,脚本怎么做,网上查了都说的很含糊,这次呢,咱们就好好的把jmeter的上传下载文件好好缕缕,都整明白了,怎么个过程 ...
- 【转】时间序列分析——基于R,王燕
<时间序列分析——基于R>王燕,读书笔记 笔记: 一.检验: 1.平稳性检验: 图检验方法: 时序图检验:该序列有明显的趋势性或周期性,则不是平稳序列 自相关图检验:(ac ...
- pandas 增删改查
原文链接:https://blog.csdn.net/zhangchuang601/article/details/79583551 准备工作:增.删.改.查的方法有很多很多种,这里只展示出常用的几种 ...
- javascript获取select 的id与值
javascript获取select 的id与值 <script type="text/javascript"> function showOptionId () { ...
- no suitable ctr exists to convert from 'int' to 'std::basic_string<char,std::char_traits<char>,std::allocator<char> >
int xfun(int *a,int n) { int x = *a;//a的类型是int *,a+1跳动一个int的长度 ; pa < a + n; pa++)//指向同一个类型的指针比较大 ...
- vue构造器注册UI组件
import ConfirmComponent from '../../components/confirm/index' import { mergeOptions } from '../plugi ...
- hive拉链表以及退链例子笔记
拉链表设计: 在企业中,由于有些流水表每日有几千万条记录,数据仓库保存5年数据的话很容易不堪重负,因此可以使用拉链表的算法来节省存储空间. 例子: -- 用户信息表; 采集当日全量数据存储到 (当日 ...
- luoguP3369[模板]普通平衡树(Treap/SBT) 题解
链接一下题目:luoguP3369[模板]普通平衡树(Treap/SBT) 平衡树解析 #include<iostream> #include<cstdlib> #includ ...
- python学习第二天标准输入输出和注释用法
任何编程语言都有输入输出和用打交道,python也不例外,输入input(),输出print() 玖乐网络(http://www.96net.com.cn/)分享自己的心得 1,input()用法实例 ...