1. 什么是XML约束?

    在xml技术里,可以编写一个文档来约束一个xml文档的写法,这称之为xml约束

  2. 为什么要使用xml约束?

    参看提示栏

  3. xml约束的作用?

    1. 约束xml的写法
    2. 对xml进行校验

  4. 常见的xml约束技术

    1. xml  dtd
    2. xml  Schema

-------------------------------------------------------------------------

DTD 约束快速入门

  1. dtd ( document type definition ) ,全称为文档类型定义
  2. 示例
    1.  ------------------没有给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. 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

    1. 外部引入
      1. 可以将dtd的约束内容写在外置的dtd文件中,这个文件后缀必须为.dtd而文件保存时必须用UTf-8来保存。
      2. 再在xml文件中使用<!DOCTYPE 根元素名称 SYSTEM  文件的位置>
        1.   如果写的是SYSTEM表明当前引入的dtd在当前文件系统中,后面制定的文件位置是当前硬盘中的位置
      3. 再在xml文件中使用<!DOCTYPE 根元素名称 PUBLIC  文件的位置>
        1.   如果写的是PUBLIC表明当前引入的dtd在网络公共位置中,后面要指明dtd的名字和dtd所在网络位置URL地址
        2. 示例:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    2. 内部引入
      1. 直接在xml中书写dtd    
      2. <!DOCTYPE 根元素名称[dtd约束]> 
  1. dtd语法
    1. 元素
      1. <!ELEMENT 元素名称  元素约束>
      2. 元素约束:
        1. 存放类型:ANY/EMPTY
        2. 元素约束:
          1. 子元素的列表,将可以包含的子元素用小括号括起来
          2. 子元素之间可以使用逗号进行分割,表明子元素必须按照顺序出现
          3. 子元素之间可以使用竖线进行分割,表明子元素出现其中之一
          4. #PCDATA 表明包含标签体
            1. + 表示一次或多次
            2. *  0次或多次
            3. ? 0次或一次
            4. 也可以使用小括号进行组的操作
    2. 属性
      1. <!ATTLIST 元素名
        1. 属性名     属性类型   属性约束
        2. 属性名2    属性类型   属性约束
        3. .......................
        4. >   

            示例:

          1.  <?xml version="1.0" encoding="utf-8"?>
            <!DOCTYPE 书架[
            <!ELEMENT 书架 (书+)>
            <!ELEMENT 书 (书名,作者,售价)>
            <!ELEMENT 书名 (#PCDATA)>
            <!ELEMENT 作者 (#PCDATA)>
            <!ELEMENT 售价 (#PCDATA)> ]>
            <书架>
            <书>
            <书名>Java程序设计</书名>
            <作者>风马一族</作者>
            <售价>¥59</售价>
            </书>
            <书> <书名>C++程序设计</书名>
            <作者>风马一族</作者>
            <售价>¥59</售价>
            </书>
            </书架>

            不用dtd,直接在xml编写dtd约束

      2. 属性类型:  属性的可以是一组取值的列表,在xml文件中设置的属性值 
        1. CDATA : 表示属性的值是一个普通字符串
        2. ENUMERATED:属性的值是一个枚举列表中的值
        3. ID: 表明属性的值必须在整个文档中都是唯一的,如果有重复的id则校验不通过,ID属性的值只能由字母,下划线开始,不能使用数字,不能出现空白字符
      3. 属性约束:
        1. #REQUIRED   --- 表明当前属性是一个必须存在的属性,如果这样的属性不存在则在校验时会报错
        2. #IMPLIED --- 表明当前属性是一个可选的属性,可以有也可以没有
        3. #FIXED '固定值'  --- 表明当前属性具有一个固定值,这样的属性不需要进行赋值,自动就会取这个固定值为值,如果  
        4. ’默认值‘  --- 表明当前属性具有一个默认值,如果给了其他的值就用其他值,如果没有给值则取这个默认值 
    3. ENTITY(实体)
      1. <!ENTITY> 就是对一大段内容的引用,可以简化代码的复用 
      2. 引用实体:
        1. 在xml中引用的实体叫做引用实体
        2. <!ENTITY % 实体名称 “实体内容”>
        3. &实体名称;
      3. 参数实体:
        1. 在dtd中引用的实体叫做参数实体
        2. <!ENTITY % 实体名称 “实体内容”>
        3. &实体名称;  

【风马一族_xml】xmlp之dtd1的更多相关文章

  1. 【风马一族_xml】Schema--- xml的约束技术

    Schema 是xml的约束技术,出现的目的是为了替代dtd 本身也是一个xml,非常方便使用xml的解析引擎进行解析 对名称空间有非常好的支持 支持更多的数据类型,并且支持用户自定义数据类型 可以进 ...

  2. 【风马一族_xml】xml编程

    xml编程:利用java程序支增删改查(CRUD)XML中的数据 解析思想: dom解析 sax解析 基于这两种解析思想市面上就有了很多的解析api sun jaxp (比较弱)既有dom方式也有sa ...

  3. 【风马一族_xml】xml的两种解析思想

    xml的解析思想 dom解析 将整个xml使用类似树的结构保存在内存中,再进行对其操作 是woc组织推荐的处理xml的一种方式 需要等到xml完全加载进内存才可以进行操作 耗费内存.当解析超大的xml ...

  4. 【风马一族_xml】xml语法

    xml语法 文档声明 用来声明xml的属性,用来指挥解析引擎如何去解析当前xml 通常一个xml都要包含并且只能包含一个文档声明 xml的文档必须在整个xml的最前面,在文档声明之前不能有任何内容 & ...

  5. 【风马一族_xml】xml的基本讲解笔记

    xml是如何保存数据的 在xml语言中,它允许用户自定义标签.每个标签用于描述一段数据; 一个标签可以分为开始标签和结束标签,在开始标签和结束标签之间又可以嵌套其它标签,利用标签间的嵌套其它标签,利用 ...

  6. 【风马一族_php】NO1_用php发出一声 Hi

    原文来自:http://www.cnblogs.com/sows/p/5990157.html  (博客园的)风马一族 侵犯版本,后果自负 第一步 安装WEB服务器 http://www.cnblog ...

  7. 【风马一族_php】NO0_搭建web服务器

    原文来自:http://www.cnblogs.com/sows/p/5977996.html  (博客园的)风马一族 侵犯版本,后果自负 安装apache apache是一种B/S结构的软件,apa ...

  8. 【风马一族_Android】通过菜单的点击,跳转到不同界面

    ---恢复内容开始--- 布局的代码:activity_main.xml <?xml version="1.0" encoding="utf-8"?> ...

  9. 【风马一族_git_github】使用Github搭建个人网站

    个人网站 访问 https://用户名.github.io  ( 风马一族的Github网站 ) 搭建步骤 1)创建个人站点-->新建仓库(注:仓库名必须是[用户名.github.io]) 2) ...

随机推荐

  1. 表ADT

    表一般不用简单数组来实现,通常将其实现为链表.在链表中要不要使用表头则属于个人兴趣问题.在下面的例程中我们都使用表头. 按照C的约定,作为类型的List(表)和Position(位置)以及函数的原型都 ...

  2. 一款基于jQuery的仿百度首页滑动选项卡

    今天给大家分享一款基于jQuery的仿百度首页滑动选项卡.这款选项卡适用浏览器:IE8.360.FireFox.Chrome.Safari.Opera.傲游.搜狗.世界之窗.效果图如下: 在线预览   ...

  3. python编码encode和decode

    计算机里面,编码方法有很多种,英文的一般用ascii,而中文有unicode,utf-8,gbk,utf-16等等. unicode是 utf-8,gbk,utf-16这些的父编码,这些子编码都能转换 ...

  4. kafka java客户端编程

    kafka_2.10-0.8.1.1 maven <dependencies> <dependency> <groupId>org.apache.kafka< ...

  5. Enterprise Library深入解析与灵活应用(2): 通过SqlDependency实现Cache和Database的同步

    对于一个真正的企业级的应用来说,Caching肯定是一个不得不考虑的因素,合理.有效地利用Caching对于增强应用的Performance(减少对基于Persistent storage的IO操作) ...

  6. 1.4.2 solr字段类型--(1.4.2.3)使用货币和汇率

    1.4.2 solr字段类型 (1.4.2.1) 字段类型定义和字段类型属性. (1.4.2.2) solr附带的字段类型 (1.4.2.3) 使用货币和汇率 (1.4.2.4) 使用Dates(日期 ...

  7. 日本电商Rakuten:最凶猛的国际扩张者

    这是普及社(puji-she)第五篇关于电商开放平台的文章,今天关注日本的Rakuten,它是一家综合性的企业,核心业务包括电子商务.旅游.信用 及支付.金融证券.新闻门户等.本文关注Rakuten的 ...

  8. tcpdump常用命令

    1. 只抓syn包 tcpdump -i eth1 'tcp[tcpflags] = tcp-syn' 2. 只抓ack包 tcpdump -nni xgbe1 dst host 191.168.10 ...

  9. Java基础知识强化之IO流笔记82:NIO之 Pipe(管道)

    1. Java NIO 管道是2个线程之间的单向数据连接.Pipe有一个source通道和一个sink通道.数据会被写到sink通道,从source通道读取. 这里是Pipe原理的图示: 2. Pip ...

  10. Uva 10305 - Ordering Tasks 拓扑排序基础水题 队列和dfs实现

    今天刚学的拓扑排序,大概搞懂后发现这题是赤裸裸的水题. 于是按自己想法敲了一遍,用queue做的,也就是Kahn算法,复杂度o(V+E),调完交上去,WA了... 于是检查了一遍又交了一发,还是WA. ...