【风马一族_xml】xmlp之dtd1
- 什么是XML约束?
在xml技术里,可以编写一个文档来约束一个xml文档的写法,这称之为xml约束
2. 为什么要使用xml约束?
参看提示栏
3. xml约束的作用?
- 约束xml的写法
- 对xml进行校验
4. 常见的xml约束技术
- xml dtd
- xml Schema
-------------------------------------------------------------------------
DTD 约束快速入门
- dtd ( document type definition ) ,全称为文档类型定义
- 示例
------------------没有给xml设置约束--------------------------------
-------------------------------book.xml--------------------------- <?xml version="1.0" encoding="utf-8"?>
<书架>
<书>
<书名>Java程序设计</书名>
<价格>¥59</价格>
<作者>风马一族</作者>
</书>
<书>
<书名>C++程序设计</书名>
<价格>¥49</价格>
<作者>风马一族</作者>
</书>
</书架> ---------使用DTD技术,给xml设置约束,使xml内容出现错误的示例-----
-----------------------book.xml------------book.dtd-----------------------
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE 书架 SYSTEM "book.dtd">
<书架>
<书>
<书名>Java程序设计</书名>
<价格>¥59</价格>
<作者>风马一族</作者>
</书>
<书>
<书名>C++程序设计</书名>
<价格>¥49</价格>
<作者>风马一族</作者>
</书>
</书架> <!ELEMENT 书架(书+)>
<!ELEMENT 书(书名,作者,售价)>
<!ELEMENT 书名(#PCDATA)>
<!ELEMENT 作者(#PCDATA)>
<!ELEMENT 售价(#PCDATA)> ---------使用DTD技术,给xml设置约束,使xml内容按照约束写法的示例-----
-----------------------book.xml------------book.dtd----------------------- <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE 书架 SYSTEM "book.dtd">
<书架>
<书>
<书名>Java程序设计</书名>
<作者>风马一族</作者>
<售价>¥59</售价>
</书>
<书>
<书名>C++程序设计</书名>
<作者>风马一族</作者>
<售价>¥59</售价>
</书>
</书架> <!ELEMENT 书架 (书+)>
<!ELEMENT 书 (书名,作者,售价)>
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 售价 (#PCDATA)>xml的DTD技术约束
-------------------------------------------------------------------------
1.编程校验xml文档正确性
- 1.默认的情况下IE浏览器内置的xml解析器的约束校验器是被关闭了的。所以我们需要使用JavaScript手动创建解析器对象。打开约束校验功能,对xml进行约束校验。
2.创建xml文档解析器对象
1.var xmldoc=new ActiveXObject("Microsoft.XMLDOM");
3.开启xml校验
1.xmldoc.validateOnParse="true";
4.装载xml文档
1.xmldoc.load("book.xml");
5.获取错误信息
1.xmldoc.parseError.reason;
2.xmldoc.parseError.line
------------------------------------
因为IE默认不打开DTD校验器,因此可以使用两种方式,解决这个问题,一是使用TDE、二是编写一段JS
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>
</head> <body>
行号: <div id="l"></div><br />
原因: <div id="r"></div>
</body>
</html> <script>
var xmldoc=new ActiveXObject("Microsoft.XMLDOM"); //使用javaScript创建一个浏览器内置的xml解析器
xmldoc.validateOnParse=true;//将xml解析器的dtd校验打开
xmldoc.load("book.xml");
var line=xmldoc.parseError.line;
var reason=xmldoc.parseError.reason;
document.getElementById("l").innerHTML=line;
document.getElementById("r").innerHTML=reason;
</script>
使用js 来打开DTD解析器
------------------------------------
示例
------------book.xml-------------
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE 书架 SYSTEM "book.dtd">
<书架>
<书>
<书名>Java程序设计</书名>
<作者>风马一族</作者>
<售价>¥59</售价>
</书>
<书>
<书名>C++程序设计</书名>
<作者>风马一族</作者>
<售价>¥59</售价>
</书> df
</书架>
book.xml
------------book.dtd-------------
<!ELEMENT 书架 (书+)>
<!ELEMENT 书 (书名,作者,售价)>
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 售价 (#PCDATA)>
book.dtd
------------check.html------------
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>
</head> <body>
行号: <div id="l"></div><br />
原因: <div id="r"></div>
</body>
</html> <script>
var xmldoc=new ActiveXObject("Microsoft.XMLDOM"); //使用javaScript创建一个浏览器内置的xml解析器
xmldoc.validateOnParse=true;//将xml解析器的dtd校验打开
xmldoc.load("book.xml");
var line=xmldoc.parseError.line;
var reason=xmldoc.parseError.reason;
document.getElementById("l").innerHTML=line;
document.getElementById("r").innerHTML=reason;
</script>
check.html
结果:

-----------------------------------------------------------------------------------
二、dtd语法
1,如何在xml中引入dtd
- 外部引入
- 可以将dtd的约束内容写在外置的dtd文件中,这个文件后缀必须为.dtd而文件保存时必须用UTf-8来保存。
- 再在xml文件中使用<!DOCTYPE 根元素名称 SYSTEM 文件的位置>
- 如果写的是SYSTEM表明当前引入的dtd在当前文件系统中,后面制定的文件位置是当前硬盘中的位置
- 再在xml文件中使用<!DOCTYPE 根元素名称 PUBLIC 文件的位置>
- 如果写的是PUBLIC表明当前引入的dtd在网络公共位置中,后面要指明dtd的名字和dtd所在网络位置URL地址
- 示例:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- 内部引入
- 直接在xml中书写dtd
- <!DOCTYPE 根元素名称[dtd约束]>
- 外部引入
- dtd语法
- 元素
- <!ELEMENT 元素名称 元素约束>
- 元素约束:
- 存放类型:ANY/EMPTY
- 元素约束:
- 子元素的列表,将可以包含的子元素用小括号括起来
- 子元素之间可以使用逗号进行分割,表明子元素必须按照顺序出现
- 子元素之间可以使用竖线进行分割,表明子元素出现其中之一
- #PCDATA 表明包含标签体
- + 表示一次或多次
- * 0次或多次
- ? 0次或一次
- 也可以使用小括号进行组的操作
- 属性
- <!ATTLIST 元素名
- 属性名 属性类型 属性约束
- 属性名2 属性类型 属性约束
- .......................
- >
示例:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE 书架[
<!ELEMENT 书架 (书+)>
<!ELEMENT 书 (书名,作者,售价)>
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 售价 (#PCDATA)> ]>
<书架>
<书>
<书名>Java程序设计</书名>
<作者>风马一族</作者>
<售价>¥59</售价>
</书>
<书> <书名>C++程序设计</书名>
<作者>风马一族</作者>
<售价>¥59</售价>
</书>
</书架>不用dtd,直接在xml编写dtd约束
- 属性类型: 属性的可以是一组取值的列表,在xml文件中设置的属性值
- CDATA : 表示属性的值是一个普通字符串
- ENUMERATED:属性的值是一个枚举列表中的值
- ID: 表明属性的值必须在整个文档中都是唯一的,如果有重复的id则校验不通过,ID属性的值只能由字母,下划线开始,不能使用数字,不能出现空白字符
- 属性约束:
- #REQUIRED --- 表明当前属性是一个必须存在的属性,如果这样的属性不存在则在校验时会报错
- #IMPLIED --- 表明当前属性是一个可选的属性,可以有也可以没有
- #FIXED '固定值' --- 表明当前属性具有一个固定值,这样的属性不需要进行赋值,自动就会取这个固定值为值,如果
- ’默认值‘ --- 表明当前属性具有一个默认值,如果给了其他的值就用其他值,如果没有给值则取这个默认值
- <!ATTLIST 元素名
- ENTITY(实体)
- <!ENTITY> 就是对一大段内容的引用,可以简化代码的复用
- 引用实体:
- 在xml中引用的实体叫做引用实体
- <!ENTITY % 实体名称 “实体内容”>
- &实体名称;
- 参数实体:
- 在dtd中引用的实体叫做参数实体
- <!ENTITY % 实体名称 “实体内容”>
- &实体名称;
- 元素
【风马一族_xml】xmlp之dtd1的更多相关文章
- 【风马一族_xml】Schema--- xml的约束技术
Schema 是xml的约束技术,出现的目的是为了替代dtd 本身也是一个xml,非常方便使用xml的解析引擎进行解析 对名称空间有非常好的支持 支持更多的数据类型,并且支持用户自定义数据类型 可以进 ...
- 【风马一族_xml】xml编程
xml编程:利用java程序支增删改查(CRUD)XML中的数据 解析思想: dom解析 sax解析 基于这两种解析思想市面上就有了很多的解析api sun jaxp (比较弱)既有dom方式也有sa ...
- 【风马一族_xml】xml的两种解析思想
xml的解析思想 dom解析 将整个xml使用类似树的结构保存在内存中,再进行对其操作 是woc组织推荐的处理xml的一种方式 需要等到xml完全加载进内存才可以进行操作 耗费内存.当解析超大的xml ...
- 【风马一族_xml】xml语法
xml语法 文档声明 用来声明xml的属性,用来指挥解析引擎如何去解析当前xml 通常一个xml都要包含并且只能包含一个文档声明 xml的文档必须在整个xml的最前面,在文档声明之前不能有任何内容 & ...
- 【风马一族_xml】xml的基本讲解笔记
xml是如何保存数据的 在xml语言中,它允许用户自定义标签.每个标签用于描述一段数据; 一个标签可以分为开始标签和结束标签,在开始标签和结束标签之间又可以嵌套其它标签,利用标签间的嵌套其它标签,利用 ...
- 【风马一族_php】NO1_用php发出一声 Hi
原文来自:http://www.cnblogs.com/sows/p/5990157.html (博客园的)风马一族 侵犯版本,后果自负 第一步 安装WEB服务器 http://www.cnblog ...
- 【风马一族_php】NO0_搭建web服务器
原文来自:http://www.cnblogs.com/sows/p/5977996.html (博客园的)风马一族 侵犯版本,后果自负 安装apache apache是一种B/S结构的软件,apa ...
- 【风马一族_Android】通过菜单的点击,跳转到不同界面
---恢复内容开始--- 布局的代码:activity_main.xml <?xml version="1.0" encoding="utf-8"?> ...
- 【风马一族_git_github】使用Github搭建个人网站
个人网站 访问 https://用户名.github.io ( 风马一族的Github网站 ) 搭建步骤 1)创建个人站点-->新建仓库(注:仓库名必须是[用户名.github.io]) 2) ...
随机推荐
- cocos2d-x在android下的编译
$(call import-add-path,E:/cocos2d-2.0-x-2.0.3) include $(BUILD_SHARED_LIBRARY) http://www.cnblogs.co ...
- UIButton设置了UIControlStateSelected和UIControlStateHighlighted状态的图片点击会闪烁的解决方案
[btn setBackgroundImage:img1 forState:UIControlStateSelected|UIControlStateHighlighted]; [btn setIma ...
- 读懂IL代码就这么简单
原文地址:http://www.cnblogs.com/zery/p/3366175.html 一前言 感谢 @冰麟轻武 指出文章的错误之处,现已更正 对于IL代码没了解之前总感觉很神奇,初一看完全不 ...
- 为什么Wireshark无法解密HTTPS数据
为什么Wireshark无法解密HTTPS数据 导读 由于需要定位一个问题,在服务器上tcpdump抓取https数据包,然后下载到本地打开wireshark分析.然后我们下载域名私钥配置到wires ...
- Java SimpleDateFormat 函数
一.SimpleDateFormat函数例子: SimpleDateFormat format=new SimpleDateFormat("MM-dd HH:mm:ss E"); ...
- flume监控之ganglia
对于日志来说,我觉得监控意义不大,因为写的速度一般不会特别快,但是如果是spooldir source,里面一小时放入十几G的数据让flume解析,特别是在结合kafka或者其他框架的话,监控就显得重 ...
- Design Mode 之 结构模式
这里我们主要介绍7种结构型模式:适配器模式.装饰模式.代理模式.外观模式.桥接模式.组合模式.享元模式.其中对象的适配器模式是各种模式的起源,我们看下面的图: B1.适配器模式(Adapter) 模式 ...
- JavaScript 编写线程代码引用Concurrent.Thread.js
马上来下载和使用源码吧!假定你已经将下载的源码保存到一个名为Concurrent.Thread.js的文件夹里,在进行任何操作之前,先运行如下程序,这是一个很简单的功能实现: <script t ...
- 关于如何用sql语句查询出连续的一串数字
在数据库操作中,经常有一些这样的操作:插入诺干条测试数据.查询这个月的登录情况(没有登录的日期不能不存在,要显示数量为0),获取诺干条guid. 这些的基础都是怎么生成连续的一串数字 1 2 3 ...
- WingIde的快捷键
tab:自动补全 Alt+1:打开所有折叠 Alt+2:折叠所有classes Alt+3:折叠所有函数和类 Alt+Backspace:删除光标所在单词的光标前的部分 ...