1、先搞清楚为啥要对xml编写进行约束?

<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet type="text/css" href="a.css" ?><users><user id="zhangsan"><name>张三</name><age>21</age><gender>男</gender><gender>女</gender></user></users>

从以上代码段可以看出,没有对xml文档编写进行约束的话,出现了两个性别gender标签,那这到底是男还是女,可以发现没有约束的话xml编写还是有点松散了,这就违反了xml严格的原则。

为此,在XML文档中,定义了一套规则来对XML文档中的内容作出限制约束,这套约束称为XML约束。目前最常用的两种约束就是DTD和Schema约束。

2、言归正传,如何导入约束呢?

2.1、DTD约束

<?xml version="1.0" encoding="UTF-8" ?>
<!--方式一:外部dtd文件-->
<!DOCTYPE students SYSTEM "D:\Idea-workspace1\JavaWeb\06_xml\src\com\lin\dtd\student.dtd"><!--方式二:内部dtd约束文档-->
<!--<!DOCTYPE students [<!ELEMENT students (student+) ><!ELEMENT student (name,age,sex)><!ELEMENT name (#PCDATA)><!ELEMENT age (#PCDATA)><!ELEMENT sex (#PCDATA)><!ATTLIST student number ID #REQUIRED>]>--><students><student number="s001"><name>张三</name><age>23</age><sex>男</sex></student><student number="s002"><name>张三</name><age>23</age><sex>男</sex></student>
</students>

* 内部dtd:将约束规则定义在xml文档中(用的较少,复用性差)
* 外部dtd:将约束的规则定义在外部的dtd文件中
           * 如果dtd文件在本地:<!DOCTYPE 根标签名 SYSTEM "dtd文件本地的位置">
            *如果dtd文件在 网络:<!DOCTYPE 根标签名 PUBLIC "dtd文件名字" "dtd文件URL">

2.2、Schema约束

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE students SYSTEM "D:\Idea-workspace1\JavaWeb\06_xml\src\com\lin\dtd\student.dtd"><students><student number="s001"><name>张三</name><age>10000</age><sex>男</sex></student></students>

由于dtd约束无法对标签体的内容进行约束等原因,如上代码中年龄10000岁,显然是不合理的,所以引入了约束力更强的Schema约束。

<?xml version="1.0" encoding="UTF-8" ?><!--导入Schema约束:--><students   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.itcast.cn/xml  student.xsd"xmlns="http://www.itcast.cn/xml"><student number="heima_0001"><name>tom</name><age>18</age><sex>male</sex></student><student number="heima_0002"><name>jane</name><age>22</age><sex>female</sex></student></students>

导入Schema约束步骤解析:

 <students   xmlns="http://www.itcast.cn/xml"></students>

查看Schema约束文件,找到根标签students并在xml中写出,然后定义xmlns[:命名空间前缀]="名称空间"

xmlns:XML Name Space xml名称空间,名称空间在约束文件中查看,targetNamespace的值就是。在schema中, 每个约束文档都被赋予一个唯一的使用URI标识的名称空间, XML文件引用schema约束的时候, 便是通过这个名称空间来声明来自哪个shema约束文档的,这个名称空间是为了方便XML解析器区分标签是来自哪个约束文件。

 <students   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.itcast.cn/xml  student.xsd"></students>

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 表示以xsi为前缀的名称空间,前缀就是为了更好的代表这个URI:http://www.w3.org/2001/XMLSchema-instance,就像你的名字。 xsi 已经成为了一个业界默认的用于代表全部 XSD文件的名称空间,记住就行。而 XSD 文件(也常常称为 Schema约束文件)是用来定义约束XML文档的。

xsi:schemaLocation="http://www.itcast.cn/xml student.xsd" 这个表示当前XML文件中使用的具体Schema约束文件的位置location,前面http://www.itcast.cn/xml是具体xsd约束文件的名称空间,后面student.xsd则是具体xsd文件的位置地址。

总的说就是前面是定于全部XSD的名称空间,而后面则是定义具体要用的XSD文件。一个抽象,一个具体。

<?xml version="1.0" encoding="UTF-8" ?><!--导入Schema约束:--><a:students   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.itcast.cn/xml  student.xsdhttp://www.itcast.cn/xml2  D:\...\student.xsd"xmlns:a="http://www.itcast.cn/xml"xmlns:a="http://www.itcast.cn/xml2"><a:student number="heima_0001"><a:name>tom</a:name><a:age>18</a:age><a:sex>male</a:sex></a:student><b:student number="heima_0002"><b:name>jane</b:name><b:age>22</b:age><b:sex>female</b:sex></b:student></a:students>

以上代码,说明本XML文件中,引入了两个XSD约束文件:

http://www.itcast.cn/xml  student.xsd             (使用相对路径)
                    http://www.itcast.cn/xml2  D:\...\student.xsd" (使用绝对路径)

给http://www.itcast.cn/xml名称空间声明一个前缀a,

给http://www.itcast.cn/xml2名称空间声明一个前缀b,

这样在标签前加上前缀,就代表此标签元素是来自哪个约束文件了,就不会搞不清相同元素到底是来自哪里了。

如何在xml文件中引入约束【带解析】相关推荐

  1. xml文件中引入xsd文件问题解决

    今天在学习log4j2的时候,在进行配置文件编写的时候出现了个小问题,在引入xsd文件后时,eclipse没有提示信息,于是又在网上查阅了一些资料,最后顺利解决 (1)在要编写的xml文件中,首先要写 ...

  2. 如何在vue文件中引入heyui组件库

    1.npm 下载 npm install heyui 2. 此处我选择以js的形式引入main.js // css引用 import (less) "~heyui/themes/index. ...

  3. java生成xml 换行符_如何在XML文件中添加换行符(换行符)?

    甲换行符(又名行中断或结束时的线,EOL)是标记文本行的末尾特殊字符或字符序列.所使用的确切代码因操作系统而异:LF:    Unix CR:    Mac OS up to version 9 CR ...

  4. mysql模糊查询xml_在userMapper.xml文件中模糊查询的常用的3种方法

    在userMapper.xml文件中新建映射sql的标签 select from users name like "%"#{name}"%" and phone ...

  5. mybatis在关联映射中,引入外部xml文件中定义的对象

    2019独角兽企业重金招聘Python工程师标准>>> association标签 在mybatis中,关联映射是通过association标签实现的. Lottery2Rule对象 ...

  6. 如何在xaml文件中操作用户在后台代码定义的类(1)

    本文主要示例如何在xaml文件中操作用户使用C#代码自定义的类.主要步骤如下: 1.在VS2008中创建一个新项目CustomTypesInXaml,在此项目下我们新建两个类,一个是Client类,一 ...

  7. web.xml文件中的web-app元素

    [转载]web.xml文件中的web-app元素 (2012-05-24 13:35:57) 转载▼ 标签: 转载 分类: java 挺全 的 呵呵呵 转了 原文地址:web.xml文件中的web-a ...

  8. java pdf添加透明水印_如何在PDF文件中添加透明水印

    原标题:如何在PDF文件中添加透明水印 有些文件添加水印,但是又不想水印影响文件的使用有时候会设置透明水印,那么PDF怎么设置透明水印呢,应该有很多的小伙伴们都很好奇应该怎么做吧,接下来就为大家分享一 ...

  9. laravel mysql视图,在 Laravel 视图文件中引入 bootstrap

    如何在 Laravel 视图文件中引入 bootstrap?对于从来没有接触过 PHP 开发框架的菜鸟来说,这确实是个问题. 在我们这些菜鸟传统的认知里,要在一个 html/php 文件里引入一个外部 ...

最新文章

  1. java jsch_java使用JSCH实现SFTP文件管理
  2. java修改动态视频,直播视频app源码,动态修改cron
  3. 《大道至简》第一章伪代码
  4. 如何通过Rultor将Maven工件部署到CloudRepo
  5. python获取绝对路径_Python 获取文件路径及文件目录
  6. 【原】linux下tar解压缩问题:time stamp in the future
  7. linux fastboot工具,Linux下使用Fastboot给手机刷机
  8. mt6573芯片资料汇总
  9. 中国科学院计算机博士范,范习之 博士
  10. java如何读取 回车_java文本框中读取回车
  11. MySQL 打开视图 1449_Mysql查询视图:ERROR 1449 (HY000)解决办法
  12. 使用Xamarin实现跨平台移动应用开发(转载)
  13. python爬虫——利用超级鹰识别验证码并进行古诗网进行模拟登录
  14. Flutter图片添加水印功能,Flutter保存Widget为图片
  15. Java 下载excle模板问题记录
  16. 编程实战——电影管理器之界面UI及动画切换
  17. 整机压力测试_app的压力测试怎么做呢?
  18. 鸿蒙天钟壁纸,时间数字罗盘屏保
  19. 商城业务-nginx-搭建域名访问环境一(反向代理配置)
  20. JVM笔记 -- 即时编译(JIT)

热门文章

  1. Linux的ipv6不监听端口,netstat查看服务端口监听在ipv6但是通过ipv4地址可正常访问...
  2. 快捷查话费,套餐的Android小应用--移动话费速查,新增联通版话费速查
  3. ElasticSearch是什么?和Solr有什么区别?
  4. 公路曲线及匝道多线路正、反算综合程序四(4.3修改版)
  5. Multi-Object Tracking with Multiple Cues and Switcher-Aware Classification多目标跟踪论文
  6. html 图片比例 js,js自动等比例设置图片尺寸大小
  7. 物联网终端的信息保护
  8. 为什么无法显示其他计算机,为什么网上邻居中看不到同一局域网的其他电脑?...
  9. html输入框传给服务器,如何将浏览器上的数据,提交到服务器?
  10. 计算1000以内能被5和7整除的最大整数