【风马一族_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. &实体名称;  

 

转载于:https://www.cnblogs.com/sows/p/5865838.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/542592.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java ssm框架 缓存_SSM框架之MyBatis3专题4:查询缓存

查询缓存的使用&#xff0c;主要是为了提高查询访问速度。将用户对同一数据的重复查询过程简化&#xff0c;不再每次均从数据库中查询获取结果数据&#xff0c;从而提高访问速度。MyBatis的查询缓存机制&#xff0c;根据缓存区的作用域(声明周期)可划分为两种&#xff1a;一级查…

matplotlib画图_漂亮,超详细的matplotlib画图基础

来自 | 逐梦erhttps://zhumenger.blog.csdn.net/article/details/106530281本文仅作技术交流&#xff0c;如有侵权&#xff0c;请联系后台删除。数据可视化非常重要&#xff0c;因为错误或不充分的数据表示方法可能会毁掉原本很出色的数据分析工作。matplotlib 库是专门用于开发…

c# 2维数组 取一维_C#| 不同类型的一维数组声明

c# 2维数组 取一维In the below example, we are declaring an integer array (one dimensional) with following styles: 在下面的示例中&#xff0c;我们声明具有以下样式的整数数组(一维) &#xff1a; 1) One dimensional Array declaration with initialization (without…

Java编程经典10道_Java经典编程题50道之十二

企业发放的奖金根据利润提成&#xff1a;利润(I)低于或等于10万元时&#xff0c;奖金可提10%&#xff1b;利润高于10万元&#xff0c;低于20万元时&#xff0c;低于10万元的部分按10%提成&#xff0c; 高于10万元的部分 &#xff0c;可提成7.5%&#xff1b;20万到40万之间时&am…

RHEL7 单独安装图形 X11

RHEL7 默认是最小化安装&#xff08;Minimal Install&#xff09;&#xff0c;没有图形界面&#xff0c; 我们应该选择Server with GUI。若已错过此步骤&#xff0c;我们采用以下方式补充安装GUI界面。 先配置yum源可以参考我的这篇文章http://blog.itpub.net/27771627/viewspa…

android recycleview长按多选_UI设计中Android和IOS设计差异总结

由于设计师、产品经理使用的移动设备大部分是iPhone&#xff0c;所以在做设计时&#xff0c;容易忽略Android和iOS的差异&#xff0c;按照iOS的规范进行设计&#xff0c;两端只做一套。只做一套的会存在两个问题&#xff1a;1、安卓用户的使用习惯不太适应iOS的设计&#xff0c…

Kotlin程序用于打印JVM版本的Kotlin(打印Java属性)

Here, we will create a Kotlin program to print Kotlin, JVM version (printing Java properties). As Kotlin can be seen as an upgrade of Java, so we will get all versions of java (JVM) using Kotlin also. 在这里&#xff0c;我们将创建一个Kotlin程序以打印JVM版本…

自定义动画属性java_创建酷炫动画效果的10个JavaScript库

原标题&#xff1a;创建酷炫动画效果的10个JavaScript库1) Dynamics.jsDynamics.js是设计基于物理规律的动画的重要Java库。它可以赋予生命给所有包含CSS 和SVG属性的DOM(文本对象模型)元素&#xff0c;换句话说&#xff0c;Dynamics.js适用于所有Java对象以及一系列其它的元素…

php xlsx里插入图片_常见的 PHP 面试题和答案分享

如何直接将输出显示给浏览器&#xff1f;将输出直接显示给浏览器&#xff0c;我们必须使用特殊标记 <&#xff1f;and&#xff1f;>。PHP 是否支持多重继承&#xff1f;PHP 只支持单继承。PHP 的类使用关键字 extends 继承另一个类获取图片属性&#xff08;size, width, …

java调用构造函数中某一个值_Java如何在枚举的构造函数中调用另一个枚举值

Java中的枚举(enum)是一种存储一组常量值的数据类型。您可以使用枚举来存储固定值&#xff0c;例如一周中的天&#xff0c;一年中的月等。您可以使用关键字 enum定义枚举&#xff0c;后跟枚举的名称为-enum Days {SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATUR…

python 示例_Python日历类| yeardatescalendar()方法与示例

python 示例Python Calendar.yeardatescalendar()方法 (Python Calendar.yeardatescalendar() Method) Calendar.yeardatescalendar() method is an inbuilt method of the Calendar class of calendar module in Python. It uses an instance of this class and returns a lis…

js:插入节点appendChild insertBefore使用方法

首先 从定义来理解 这两个方法&#xff1a; appendChild() 方法&#xff1a;可向节点的子节点列表的末尾添加新的子节点。语法&#xff1a;appendChild(newchild) insertBefore() 方法&#xff1a;可在已有的子节点前插入一个新的子节点。语法 &#xff1a;insertBefore(newchi…

pandas concat_pandas-数据合并-concat(最全参数解释,含代码和实例)

pandas中的concat的功能&#xff1a;假设你现在需要将多个数据合并&#xff0c;前提是&#xff1a;这几个文件列名都一致&#xff0c;也就是说这几个文件格式完全一样&#xff0c;只是数据不太一样&#xff0c;类似于合并多个文件这种&#xff0c;实际数据分析中也会遇到这种情…

java中的de是什么_【转】java中main函数解析

源地址&#xff1a;http://www.cnblogs.com/xwdreamer/archive/2012/04/09/2438845.html从写java至今&#xff0c;写的最多的可能就是主函数public static void main(String[] args) {}但是以前一直都没有问自己&#xff0c;为什么要这么写&#xff0c;因为在c语言中就没有这样…

JAVA多线程(一)线程安全问题产生的原因

JAVA线程内存与主存间映射示意图Java内存模型中规定了所有的变量都存储在主内存中&#xff0c;每条线程还有自己的工作内存&#xff0c;线程的工作内存中保存了该线程使用的变量到主内存副本拷贝&#xff0c;线程对变量的所有操作&#xff08;读取、赋值&#xff09;都必须在工…

两顶点的路径长度为k_计算两个顶点之间的所有可能路径

两顶点的路径长度为kWhat to Learn? 学什么&#xff1f; How to count all possible paths between two vertices? 如何计算两个顶点之间的所有可能路径&#xff1f; In the graph there are many alternative paths from vertex 0 to vertex 4 在图中&#xff0c;有许多从…

php debug_print_backtrace,php中debug_backtrace、debug_print_backtrace和匿名函数用法实例

本文实例讲述了php中debug_backtrace、debug_print_backtrace和匿名函数用法。分享给大家供大家参考。具体分析如下&#xff1a;debug_print_backtrace() 是一个很低调的函数,很少有人注意过它.不过当我们对着一个对象调用另一个对象再调用其它的对象和文件中的一个函数出错时,…

covariance matrix r语言_时间序列分析|ARIMAX模型分步骤详解和R中实践

这是关于时间序列的第N篇文章&#xff0c;本文将介绍ARIMAX模型&#xff0c;简单来说就是在ARIMA的基础上增加一个外生变量。ARIMAX和ARIMA相比在理论上没有太多新的内容&#xff0c;所以本文直接介绍在R里怎么一步一步跑ARIMAX。在阅读这篇文章前&#xff0c;需要对ARIMA有一定…

linux系统编程之文件与I/O(六):fcntl 函数与文件锁

2013-05-14 11:26 8290人阅读 评论(2) 收藏 举报分类&#xff1a;linux系统编程&#xff08;19&#xff09; 版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 一、fcntl函数 功能&#xff1a;操纵文件描述符&#xff0c;改变已打开的文件的属性 int…