【风马一族_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 库是专门用于开发…

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

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

自定义动画属性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, …

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;有许多从…

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…

bandizip最后一个无广告版本_如果非要选择一款压缩软件的话——Bandizip

全世界只有不到0.00~1 % 的人关注了我们得到你的关注是小帮的幸运压缩解压软件是电脑一个必备软甲&#xff0c;前面的文章介绍了一款开源小巧无广告的压缩解压软件windows工具软件选择之压缩软件——7-Zip&#xff0c;如果有人用不惯的话可以试试今天的这款。Bandizip 是一款来…

[MVC学习笔记]1.项目结构搭建及单个类在各个层次中的实现

新人刚开始学习ASP.NET MVC&#xff0c;若有不足之处希望能得到您的指点&#xff0c;不胜感激&#xff01; 先来一张项目的层级结构图: Model&#xff1a;模型层&#xff0c;主要是各种类型、枚举以及ORM框架&#xff0c;框架完成数据库和实体类的映射。项目中选用了微软的开源…

mybatisplus代码生成器_想做时间管理大师?你可以试试Mybatis Plus代码生成器

1. 前言对于写Crud的老司机来说时间非常宝贵&#xff0c;一些样板代码写不但费时费力&#xff0c;而且枯燥无味。经常有小伙伴问我&#xff0c;胖哥你怎么天天那么有时间去搞新东西&#xff0c;透露一下秘诀呗。好吧&#xff0c;今天就把Mybatis-plus的代码生成器分享出来&…

c++ websocket客户端_websocket使用

websocket使用一、介绍在项目开发过程中&#xff0c;很多时候&#xff0c;我们不可避免的需要实现的一个功能&#xff1a; 服务端实时发送信息给客户端。比如实时公告、实时订单通知、实时报警推送等等&#xff0c;登录后的客户端需要知道与它相关的实时信息&#xff0c;以便进…

在cordova中使用HTML5的多文件上传

2019独角兽企业重金招聘Python工程师标准>>> 我们先看看linkface给开放的接口&#xff1a; 字段类型必需描述api_idstring是API 账户api_secretstring是API 密钥selfie_filefile见下方注释需上传的图片文件 1&#xff0c;上传本地图片进行检测时选取此参数selfie_ur…

linux常用命令和配置

2019独角兽企业重金招聘Python工程师标准>>> 启动php&#xff1a; /etc/init.d/php-fpm restart 查看PHP运行目录&#xff1a; which php /usr/bin/php 查看php-fpm进程数&#xff1a; ps aux | grep -c php-fpm 查看运行内存 /usr/bin/php -i|grep mem iptables如…

centos7时间同步_centos 8.x系统配置chrony时间同步服务

centos 8.x系统配置chrony时间同步服务CentOS 7.x默认使用的时间同步服务为ntp服务&#xff0c;但是CentOS 8开始在官方的仓库中移除了ntp软件&#xff0c;换成默认的chrony进行时间同步的服务&#xff0c;chrony既可以作为客户端向其他时间服务器发送时间同步请求&#xff0c;…

ICWAI和ICWA的完整形式是什么?

ICWAI / ICWA&#xff1a;印度成本与工程会计师协会/印度儿童福利法 (ICWAI / ICWA: Institute of Cost and Works Accountants of India / Indian Child Welfare Act) 1)ICWAI&#xff1a;印度成本与工程会计师协会 (1) ICWAI: Institute of Cost and Works Accountants of In…