dtd用于校验XML的语法。
dtd步骤:
1、看XML中有多少个元素,有几个元素,在dtd文件中写几个<!ELEMENT>
2、判断元素是简单元素还是复杂元素
-复杂元素:有子元素的元素
<!ELEMENT 元素名称 (子元素)>
-简单元素:没有子元素
<!ELEMENT 元素名称 (#PCDATA)>
3、需要在XML文件中引入dtd文件
<!DOCTYPE 根元素名称 SYSTEM "dtd文件的路径">

dtd的三种引入方式:
1、引入外部的dtd文件
<!DOCTYPE 根元素名称 SYSTEM "dtd路径">
2、使用内部的dtd文件
-<!ELEMENT 根元素名称[
<!ELEMENT 根元素名称(子元素1,子元素2)>
<!ELEMENT 子元素1 (#PCDATA)>
<!ELEMENT 子元素2 (#PCDATA)>
]>
-<!ELEMENT person[
<!ELEMENT person(name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
]>
3、使用外部的dtd文件(网络上的dtd文件)
-<!DOCTYPE 根元素 PUBLIC "DTD名称" "DTD文档的URL">
-框架Struts2使用的是外部的dtd文件

使用dtd定义元素
语法:<!ELEMENT 元素名 约束>
简单元素:没有子元素的元素
约束简单元素
(#PCDATA):约束子元素是字符串类型
EMPTY:元素为空(不能有内容)
ANY:任意类型
复杂元素:
<!ELEMENT person (name,age)>
<!ELEMENT 根元素名称 (子元素1,子元素2)>
-子元素只能出现一次
-表示子元素出现的次数
+:表示一次或者多次 例:<!ELEMENT person (name+,age)>
?:0次或者一次 例:<!ELEMENT person (name,age?)>
*:0次或者多次 例:<!ELEMENT person (name,age*)>
-子元素直接使用逗号进行隔开
表示元素出现的顺序 例:<!ELEMENT person (name,age)>
-子元素直接使用竖线进行隔开
表示元素只能出现其中一个 例:<!ELEMENT person (name|age)>

使用dtd定义属性
语法:在子元素上面加属性约束:<!ATTLIST 元素名称
属性名称 属性类型 属性的约束
>
属性类型:
-CDATA:字符串
例: <!ATTLIST name
ID2 CDATA #REQUIRED
>
-枚举:表示只能在一定的范围内出现值,但是只能每次出现其中的一个
例:<!ELEMENT person[
<!ELEMENT person(name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>

<!ATTLIST age
ID1 (AA|BB|CC) #REQUIRED
>
]>
<person>
<name>zhangsan</name>
<age ID1="AA" >20</age>
</person>
-ID:表示属性只能是字母或者下划线开头
例: <!ATTLIST name
ID1 ID #REQUIRED
>
-属性的约束:
-#REQUIRED:表示属性必须出现
-#IMPLIED:表示属性可有可无
-#FIXED:表示一个固定值 #FIXED “ABC”;
-直接值: 不写属性,使用直接值
写属性值,使用设置那个值
例:<!ATTLIST name
ID1 CDATA "aaa";
>

定义引用实体
语法:<!ENTITY 实体名称 "实体的值">
使用实体 &实体名称;区分大小写 例:&TEST;

注意:
定义实体需要写在内部dtd里面;
如果写在外部的dtd里面,有某些浏览器,内容得不到

xml的解析简介(写到Java代码)
-xml是标记型文档
-js使用dom解析标记型文档?
-根据html的层级结构,在内存中分配一个树形结构,把html的标签,属性和文本都封装成对象
-document对象、element对象、属性对象、文本对象、Node节点对象

-xml的解析方式(技术):dom和sax(重点中重点)
-使用dom解析:根据xml的层级结构在内存中分配一个树形结构,把xml的标签,属性和文本都封装成对象。
优点:很方便实现增删改操作
缺点:如果文件过大,造成内存溢出
-sax解析:采用事件驱动,边读边解析从上到下,一行一行的解析,解析到某一个对象,把对象名称返回
优点:如果文件过大不会造成内存溢出,方便查询操作
缺点:不能实现增删改操作

解析xml,首先需要解析器
-不同的公司和组织提供了 针对dom和sax方式的解析器,通过API方式提供
--sun公司提供了针对dom和sax解析器 jaxp
--dom4j组织,针对dom和sax解析器 dom4j(--实际开发中---)
--jdom组织,针对dom和sax解析器 jdom

jaxp的API的查看(JDK API 1.6.0帮助文档)
jaxp是javase的一部分
javax.xml.parsers包中,
四个类:分别是针对dom和sax解析使用的类
dom:DocumentBuilder:解析器类
这个类是一个抽象类,不能new
可以使用DocumentBuilderFactory.newDocumentBuilder()方法获取

一个方法,可以解析xml parse("xml路径") 返回是Document整个文档
返回的document是一个接口,父节点是Node,如果在document里面找不到想要的方法,到Node里面去找
在document里面方法

DocumentBuilderFactory:解析器工厂
newInstance()获取,DocumentBuilderFactory的实例。

sax:
SAXParser:解析器类
SAXParser

xml的简介
extensible Markup Language:可扩展标记型语言
-标记型语言:html是标记型语言
-也是使用标签来操作
-可扩展:
-html里面的标签是固定,每个标签都有特定的含义<h1><br/>
-标签可以自己定义,可以写中文的标签<person></person>、<猫></猫>
xml用途
-html是用于显示数据,xml也可以显示数据(不是主要功能)
-xml主要功能,为了存储数据
xml是w3c组织发布的技术
xml有两个版本 1.0 1.1
-使用都是1.0版本(1.1版本不能向下兼容)
xml的应用
不同的系统之间传输数据
-qq之间数据的传输
用来表示生活中有关系的数据 例:国家和城市
经常用在文件配置
-比如现在链接数据库 肯定知道数据库的用户名和密码,数据名称

xml的语法
1、xml的文档声明
-创建一个文件,后缀名是.xml
-如果写xml,第一步 必须有一个文档声明(写了文档声明之后,表示写XML文件的内容)
-<?xml version="1.0" encoding="gbk">
-文档声明必须写在第一行第一列

-属性
-version:xml的版本1.0
-encoding:xml编码 gbk utf-8 ISO8859-1(不包含中文)
-standalone:是否需要依赖其他文件 yes/no

-xml的中文乱码问题解决
-保存时候的编码和设置打开时候的编码一致,不会出现乱码
2、定义元素(标签)
3、定义属性
4、注释
5、特殊字符
6、CDATA区
7、PI指令

xml的元素定义
-标签定义
-标签定义有开始必须要有结束:<person></person>
-标签没有内容,可以在标签内结束<aa/>
-标签可以嵌套,必须要合理嵌套
-合理嵌套<aa><bb></bb></aa>
-一个xml中,只能有一个根标签,其他标签都是这个标签下面的标签

-在xml中 把空格和换行都当成内容来解析
-下面这两段代码含义是不一样的,把空格原样输出
<aa>111</aa>
<aa>
111
</aa>
-xml标签可以是中文
-xml中标签的名称规则
1)xml代码区分大小写
<a><A>:这两个标签是不一样的
2)xml标签不能以数字和下划线(_)开头
3)xml的标签不能以xml、XML、Xml等开头
4)xml的标签不能包含空格和冒号

xml中属性的定义
-html是标记型文档,可以由属性
-xml也是标记型文档,可以有属性

属性定义的要求
!)一个标签上可以有多个属性
2)属性名称不能相同
3)属性名称和属性值之间使用= ,属性值使用引号包起来(单引号,双引号都可以)
4)xml属性的名称规范和元素的名称规范一致

xml中的注释
-写法<!--xml的注释 -->
-注意的地方
-注释不能嵌套
-注释也不能放到第一行,第一行第一列必须放文档声明

xml中的特殊字符
-如果想要在xml中现在a<b,不能正常显示,因为把<当做标签
-如果就想要显示,需要对特殊字符<进行转义
< &lt;
> &gt;

CDATA区--了解
-可以解决多个字符都需要转义的操作
-if(a<b && B<c && d>f){}把这些内容放到CDATA区里面,不需要转义了
-写法:
<![CDATA [ 内容 ]>
-代码
<![CDATA [<b> if(a<b && B<c && d>f){} </b>]]>
把特殊字符,当做文本内容,而不是标签
PI指令(处理指令)--了解
-可以在xml中设置样式
-写法:<?xml-stylesheet type="text/css" href="CSS路径" ?>

xml的约束
为什么需要约束?
比如现在定义一个person的xml文件,只想要这个文件里面保存人多信息,比如name age等,但是如果在xml文件中
写了一个标签<猫>,发现可以正常显示,因为符合语法规范,但是猫肯定不是人的信息,xml的标签是自定义的,需要技术来规定xml
中只能出现的元素,这个时候需要约束。

xml的约束技术:dtd约束 和schema约束 ---看懂

xml-dtd的更多相关文章

  1. XML DTD验证

    XML DTD验证 一.什么是DTD 文档类型定义(DTD:Document Type Definition)可定义合法的XML文档构建模块.它使用一系列合法的元素来定义文档的结构. DTD 可被成行 ...

  2. JavaScripts学习日记——XML DTD Schema

    今日关键词: XML DTD Schema 1.XML 1 XML的概述 1.1 什么是XML XML全称为Extensible Markup Language,意思是可扩展的标记语言.XML语法上和 ...

  3. XML Dtd Schema

    在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束. 整体比较: XML Schema符合XML语法结构. DOM.SAX等XML API很容易解析出XML Schem ...

  4. XML DTD详解(转)

    前情提要与本文内容介绍 前面的两篇XML相关博文: 第一篇是介绍格式正规的XML: 格式正规的XML:语法 属性 实体 处理指令 样式单 CDATA节 第二篇介绍DTD,引入有效的XML的概念(符合语 ...

  5. XML——DTD

    body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...

  6. 通过实例来学习XML DTD

    使用DTD的原因: 注意:由于它自身的一些缺点,DTD终将被淘汰,但是它还是要学习的.学习完DTD后,后面继续学习XML Schema. 1,通过 DTD,您的每一个 XML 文件均可携带一个有关其自 ...

  7. XML DTD语法详解

    XML DTD详解   XML DTD详解 前情提要与本文内容介绍 前面的两篇XML相关博文: 第一篇是介绍格式正规的XML: 格式正规的XML:语法 属性 实体 处理指令 样式单 CDATA节 第二 ...

  8. XML DTD详解

    XML DTD详解 一个有效的XML文档必然是结构正规的,结构正规的XML文档不一定是有效的,即有效的是格式正规的一个子集. 本文详细介绍DTD,包括其对元素的定义,属性的定义,以及实体的定义. 元素 ...

  9. xml dtd 定义元素

    ANY 如果需要定义某个元素的值可以是任意类型,可采用如下语法 <!ELEMENT 元素名 ANY> DTD必须定义XML文档中允许出现的所有元素,所以下面这样是不行的,因为<hel ...

  10. xml dtd 内部dtd 外部DTD 公共DTD

    (一个可以用来校验xml有效性的网站:http://www.xmlvalidation.com/) (经测试 eclipse neon 对于dtd的校验并不严格,比如DOCTYPE后面的根元素名与实际 ...

随机推荐

  1. jenkins使用4----git maven工具连接

    搭建完git服务器 将jenkins服务器的的公钥传到git服务器的/home/git/.ssh的authorized_keys文件下 ssh端口2994 创建工程 配置完maven发现创建项目没有m ...

  2. 2018-2019-2 20175310实验一《Java开发环境的熟悉》实验报告

    2018-2019-2 20175310实验一<Java开发环境的熟悉>实验报告 一.实验步骤及内容 (一).Java开发环境的熟悉-1 1.建立20175310exp1的目录 2.在20 ...

  3. redis学习(五)——Set数据类型

    一.概述 在Redis中,我们可以将Set类型看作为没有排序的字符集合,和List类型一样,我们也可以在该类型的数据值上执行添加.删除或判断某一元素是否存在等操作.需要说明的是,这些操作的时间复杂度为 ...

  4. UIImageView - BNR

    继续上节UINavigationController - BNR. 打开BNRDetailViewController.xib文件,向view中添加UIImageView对象,选中该对象,通过Attr ...

  5. Windows Community Toolkit 3.0 - CameraPreview

    概述 Windows Community Toolkit 3.0 于 2018 年 6 月 2 日 Release,同时正式更名为 Windows Community Toolkit,原名为 UWP ...

  6. C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 发送通知功能改进改进

    公司有几万个用户,接近10万人,有一些紧急的通知,消息提醒,可以发个及时通知工具,这样可以快速把一些信息通知给大家,让大家快速收到信息,及时通知到系统的每个人. 自动提示信息现实状态,会在客户端自动谈 ...

  7. Python_生成器函数进阶_39

    def generator(): print(123) content = yield 1 #content接收的是send传的值 print('=======',content) print(456 ...

  8. Linux进程与线程的区别

    进程与线程的区别,早已经成为了经典问题.自线程概念诞生起,关于这个问题的讨论就没有停止过.无论是初级程序员,还是资深专家,都应该考虑过这个问题,只是层次角度不同罢了.一般程序员而言,搞清楚二者的概念, ...

  9. python_超级基础

    初识计算机 CPU 计算机的大脑.中央处理单元,主要负责数据运算及计算,是运算计算中心. 存储器 内存 临时存储数据,供CPU运算使用. 优点: 读取速度快. 缺点: 容量小,成本高,断电即消失. 硬 ...

  10. [2017BUAA软工助教]个人项目测试结果

    个人项目测试结果 标签(空格分隔): 未分类 9.29第一次测试结果 注:点击表头内相应项目可针对该项目进行排序 -c测试结果 INDEX NumberID -c 1 -c 5 -c 100 -c 5 ...