zoukankan      html  css  js  c++  java
  • 【风马一族_xml】xmlp之dtd1

    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 元素名
          1. 属性名     属性类型   属性约束
          2. 属性名2    属性类型   属性约束
          3. .......................
          4. >   

              示例:

            1.  1 <?xml version="1.0" encoding="utf-8"?>
               2 <!DOCTYPE 书架[
               3     <!ELEMENT 书架 (书+)>
               4     <!ELEMENT 书 (书名,作者,售价)>
               5     <!ELEMENT 书名 (#PCDATA)>
               6     <!ELEMENT 作者 (#PCDATA)>
               7     <!ELEMENT 售价 (#PCDATA)>
               8 
               9 ]>
              10 <书架>
              11     <>
              12         <书名>Java程序设计</书名>
              13         <作者>风马一族</作者>
              14         <售价>¥59</售价>        
              15     </>
              16     <>
              17         
              18         <书名>C++程序设计</书名>
              19         <作者>风马一族</作者>
              20         <售价>¥59</售价>
              21     </>    
              22 </书架>
              不用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. &实体名称;  
  • 相关阅读:
    python__基础数据类型
    python基础之迭代器生成装饰器
    cat命令查看文件显示行号
    VM虚拟机安装ESD版Win10
    CentOS 8修改系统语言为中文且立即生效
    CentOS 8下yum安装LAMP环境
    完美解决CentOS8 yum安装AppStream报错,更新yum后无法makecache的问题
    鬼灭之刃高清电脑桌面壁纸
    记CentOS 8 yum 报AppStream Error排错
    CentOS 8 重启网卡命令
  • 原文地址:https://www.cnblogs.com/sows/p/5865838.html
Copyright © 2011-2022 走看看