码迷,mamicode.com
首页 > 其他好文 > 详细

【xml】xmlp之dtd1

时间:2016-09-12 20:22:34      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:

  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. 技术分享
       1 ------------------没有给xml设置约束--------------------------------
       2 -------------------------------book.xml---------------------------
       3 
       4 <?xml version="1.0" encoding="utf-8"?>
       5 <书架>
       6     <>
       7         <书名>Java程序设计</书名>
       8         <价格>¥59</价格>
       9         <作者>风马一族</作者>
      10     </>
      11     <>
      12         <书名>C++程序设计</书名>
      13         <价格>¥49</价格>
      14         <作者>风马一族</作者>
      15     </>    
      16 </书架>
      17 
      18 ---------使用DTD技术,给xml设置约束,使xml内容出现错误的示例-----
      19 -----------------------book.xml------------book.dtd-----------------------
      20 <?xml version="1.0" encoding="utf-8"?>
      21 <!DOCTYPE 书架 SYSTEM "book.dtd">
      22 <书架>
      23     <>
      24         <书名>Java程序设计</书名>
      25         <价格>¥59</价格>
      26         <作者>风马一族</作者>
      27     </>
      28     <>
      29         <书名>C++程序设计</书名>
      30         <价格>¥49</价格>
      31         <作者>风马一族</作者>
      32     </>    
      33 </书架>
      34 
      35 <!ELEMENT 书架(书+)>
      36 <!ELEMENT 书(书名,作者,售价)>
      37 <!ELEMENT 书名(#PCDATA)>
      38 <!ELEMENT 作者(#PCDATA)>
      39 <!ELEMENT 售价(#PCDATA)>
      40 
      41 
      42 ---------使用DTD技术,给xml设置约束,使xml内容按照约束写法的示例-----
      43 -----------------------book.xml------------book.dtd-----------------------
      44 
      45 <?xml version="1.0" encoding="utf-8"?>
      46 <!DOCTYPE 书架 SYSTEM "book.dtd">
      47 <书架>
      48     <>
      49         <书名>Java程序设计</书名>
      50         <作者>风马一族</作者>
      51         <售价>¥59</售价>        
      52     </>
      53     <>
      54         <书名>C++程序设计</书名>
      55         <作者>风马一族</作者>
      56         <售价>¥59</售价>
      57     </>    
      58 </书架>
      59 
      60 <!ELEMENT 书架 (书+)>
      61 <!ELEMENT 书 (书名,作者,售价)>
      62 <!ELEMENT 书名 (#PCDATA)>
      63 <!ELEMENT 作者 (#PCDATA)>
      64 <!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  

技术分享
 1 <html>
 2 <head>
 3 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 4 <title>无标题文档</title>    
 5 </head>
 6 
 7 <body>
 8     行号: <div id="l"></div><br />
 9     原因: <div id="r"></div>
10 </body>
11 </html>
12 
13 <script>
14         var xmldoc=new ActiveXObject("Microsoft.XMLDOM"); //使用javaScript创建一个浏览器内置的xml解析器
15         xmldoc.validateOnParse=true;//将xml解析器的dtd校验打开
16         xmldoc.load("book.xml");
17         var line=xmldoc.parseError.line;
18         var reason=xmldoc.parseError.reason;
19         document.getElementById("l").innerHTML=line;
20         document.getElementById("r").innerHTML=reason;        
21 </script>
使用js 来打开DTD解析器

 

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

示例

------------book.xml-------------

技术分享
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <!DOCTYPE 书架 SYSTEM "book.dtd">
 3 <书架>
 4     <>
 5         <书名>Java程序设计</书名>
 6         <作者>风马一族</作者>
 7         <售价>¥59</售价>        
 8     </>
 9     <>
10         <书名>C++程序设计</书名>
11         <作者>风马一族</作者>
12         <售价>¥59</售价>
13     </>    df
14 </书架>
book.xml

 

------------book.dtd-------------

技术分享
1 <!ELEMENT 书架 (书+)>
2 <!ELEMENT 书 (书名,作者,售价)>
3 <!ELEMENT 书名 (#PCDATA)>
4 <!ELEMENT 作者 (#PCDATA)>
5 <!ELEMENT 售价 (#PCDATA)>
book.dtd

 

 

------------check.html------------

技术分享
 1 <html>
 2 <head>
 3 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 4 <title>无标题文档</title>    
 5 </head>
 6 
 7 <body>
 8     行号: <div id="l"></div><br />
 9     原因: <div id="r"></div>
10 </body>
11 </html>
12 
13 <script>
14         var xmldoc=new ActiveXObject("Microsoft.XMLDOM"); //使用javaScript创建一个浏览器内置的xml解析器
15         xmldoc.validateOnParse=true;//将xml解析器的dtd校验打开
16         xmldoc.load("book.xml");
17         var line=xmldoc.parseError.line;
18         var reason=xmldoc.parseError.reason;
19         document.getElementById("l").innerHTML=line;
20         document.getElementById("r").innerHTML=reason;        
21 </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 元素名
      2.          属性名     属性类型   属性约束
      3.      属性名2    属性类型   属性约束
      4.          .......................
      5. >   
      6. 属性类型:
      7. 属性约束:
        1. #REQUTRED   --- 表明当前属性是一个必须存在的属性,如果这样的属性不存在则在校验时会报错
        2. #IMPLIED --- 表明当前属性是一个可选的属性,可以有也可以没有
        3. 3  
      8.      

【xml】xmlp之dtd1

标签:

原文地址:http://www.cnblogs.com/sows/p/5865838.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!