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. matlab整型和浮点的区别,技术帖 | 心理学MATLAB初学者教程--简单数据类型介绍(逻辑型数据,整型/浮点型数据,字符型)......
  2. Python使用numpy包编写自定义函数计算均方误差(MSE、mean squared error)、评估回归模型和时间序列模型、解读MSE评估指标
  3. jenkins同平台发布
  4. 落地华东总部、上线创新云、签约AIoT产业基金……京东云南京“新动作”...
  5. android 上滑隐藏view,Android CoordinatorLayout + AppBarLayout(向上滚动隐藏指定的View)
  6. spring + angular 实现导出excel
  7. window bat
  8. HDU - 3488 Tour(二分图最小权匹配+KM)
  9. angularjs html5模式,Angularjs $location html5mode浅析
  10. 面向对象三大特性: 封装
  11. scrapy框架架构
  12. 如何部署Windows Server 2016 中的Storage Spaces Direct超聚合解决方案
  13. 下拉框系统甄选火星推荐_微博下拉框技术选择5火星
  14. Linux perf 事件调度算法
  15. oracle 11 ora 12514,oracle 11g ORA 12514错误,我的解决办法
  16. 计算机快捷键如何移动到桌面,如何设置显示桌面快捷键 设置显示桌面快捷键方法【图文】...
  17. 栈的初始化,入栈和出栈
  18. 微信小程序 位置定位position详解,相对定位relative,绝对定位absolute相关问题
  19. linux中解压rar文件
  20. MATLAB利用均值滤波的方法去除图像的噪声,将滤除噪声前后的图像输出。

热门文章

  1. python在哪里写代码-python代码在哪里编写
  2. jieba分词的源码解析,并从零实现自己的分词器
  3. javase基础持续更新
  4. STC15系列PWM相关功能寄存器介绍
  5. 【数据结构】树的逻辑结构
  6. 【探花交友DAY 09】最近访客和FastDFS实现小视频功能
  7. 电脑监控专家-专业的电脑监控软件
  8. MFC CPropertySheet 多页面切换 事例
  9. 假设用于通信的电文仅由8个字母组成,字母在电文中出现的频率分别为0.07, 0.19, 0.02, 0.06, 0.32, 0.03, 0.21, 0.10. 试为这8个字母设计赫夫曼编码.
  10. 软件项目如何做需求确定?