一、XML的两种约束DTD和Schema
摘自IBM官网一段话:“XML DTD(XML的文档类型定义)是近几年来XML技术领域所使用的最广泛的一种模式。可是由于XML DTD并不能全然满足XML自己主动化处理的要求。比如不能非常好实现应用程序不同模间的相互协调。缺乏对文档结构、属性、数据类型等约束的足够描写叙述等等。所以W3C于2001年5月正式推荐XML Schema为XML 的标准模式。显然,W3C希望以XML Schema来作为XML模式描写叙述语言的主流,并逐渐取代XML DTD”。可见Schema使用的越来越多。本文先阐述Shema约束中非常重要的概念命名空间

二、shema文件
student.xsd
<?

xml version="1.0" encoding="UTF-8"?

>
<schema
xmlns="http://www.w3.org/2001/XMLSchema" 
targetNamespace="http://www.example.org/student"
elementFormDefault="qualified">
<element name="student">
<complexType>
<sequence>
<element name="num" type="int" />
<element name="name" type="string" />
<element name="birthday" type="date" />
</sequence>
</complexType>
</element>
</schema>
student.xsd就是一个shema文件,本身也是XML格式的。也要符合一定的约束。

通过几个问题来理解xmlns和targetNamespace。

问题1怎样保证shema文件唯一性:targetNamespace
由于在引用shema文件作为xml约束时,试想若有多个shema文件同名以哪一个约束为准呢?所以shema通过命名空间的概念来确保唯一性。targetNamespace属性就是指定这个xsd的命名空间的。

通常使用url的形式作为targetNamespace的值来确保唯一性。而该url通常并不一定存在。

问题2怎样引入shema规范:xmlns
xsd全部的标签和属性也必须符合schema规范。那element、complexType、sequence等标签的规范从何而来呢?
通过xmlns属性来指定shema约束。xmlns="http://www.w3.org/2001/XMLSchema"就表示student.xsd默认不加前缀的标签和属性必须符合w3s定义的一个schema约束。若shema文件不是w3c组织定义的就须要指定shema文件的位置。

以下xml引入student.xsd约束时有介绍。

问题3elementFormDefault是什么意思
该属性是一个枚举值:qualified、unqualified。

默认是unqualified表示仅仅关联根标签student,而qualified表示关联全部标签和属性如num,name,birthday。

三、XML文件引入约束
方法1
student.xml
<?xml version="1.0" encoding="UTF-8"?

>
<student xmlns="http://www.example.org/student" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.org/student student.xsd">
<num>1000</num>
<name>xy</name>
<birthday>2000-01-01</birthday>
</student>
student.xml指定了xmlns="http://www.example.org/student"约束,就是自己定义的student.xsd。但正如问题②所说shema文件不是w3c组织定义的就须要指定shema文件的位置。

问题4怎样指定xsd位置:schemaLocation
通过schemaLocation指定shema文件位置。

但schemaLocation属性由http://www.w3.org/2001/XMLSchema-instance约束,所以须要再通过xmlns引入这个约束。但一个标签中仅仅同意一个不带前缀的xmlns标签。所以要给新的xmlns带一个前缀xsi。前缀名自己定义。以下的样例非常好的说明了前缀的使用方法:
<?xml version="1.0" encoding="UTF-8"?>
<xy:student
xmlns:xy="http://www.example.org/student"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.org/student student.xsd">
<xy:num>1000</xy:num>
<xy:name>xy</xy:name>
<xy:birthday>2000-01-01</xy:birthday>
</xy:student>

方法2
没有通过指定shema的命名空间而是xsd问位置来确定约束。
<?xml version="1.0" encoding="UTF-8"?>
<xy:student
xmlns:xy="http://www.example.org/student" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="/studnet.xsd">
<xy:num>1000</xy:num>
<xy:name>xy</xy:name>
<xy:birthday>2000-01-01</xy:birthday>
</xy:student>

首段摘自:http://www.ibm.com/developerworks/cn/xml/x-sd/

转载于:https://www.cnblogs.com/xfgnongmin/p/10857564.html

XML(1)——shema约束之命名空间相关推荐

  1. XML shema 约束入门 (2 ) 约束文件加入与说明

    复合元素 book.xsd <?xml version="1.0" encoding="UTF-8" ?> <schema xmlns=&qu ...

  2. Schama —— Xml文档约束技术 学习笔记

    本文查阅方法:     1.查阅目录 -- 查阅本文目录,确定想要查阅的目录标题     2.快捷"查找" -- 在当前浏览器页面,按键 "Ctrl+F" 按键 ...

  3. xml教程之约束schema

    1.简介 XML Schema 也是一种用于定义和描述 XML 文档结构与内容的模式语言,其出现是为了克服 DTD 的局限性 XML Schema VS DTD: XML Schema符合XML语法结 ...

  4. XML的DTD约束和Schema约束

    ajax是什么? 如图: XML是什么? 可扩展标记语言,标记数据,定义数据类型 允许用户对自己的标记语言进行定义的源语言 xml详细介绍:(http://www.w3school.com.cn/xm ...

  5. xml之schema约束

    前言 schema约束的定义 将dtd文件引入到xml文档中 前言 在这里我们介绍了xml之tdt约束,但是这种约束没法约束属性的值,比如age属性我想限制只能是数字,那就不行了,所以我们这里介绍sc ...

  6. Android自定义XML属性以及遇到的命名空间的问题

    转载请注明出处:http://www.cnblogs.com/kross/p/3458068.html 最近在做一些UI,很蠢很蠢的重复写了很多代码,比如一个自定义的UI Tab,由一个ImageVi ...

  7. XML内部DTD约束 Day24

    <?xml version="1.0" encoding="UTF-8"?> <!-- 内部DTD --> <!-- XML:ex ...

  8. java dom获取命名空间属性_java – 如何在XML DOM对象中添加命名空间前缀?

    我正在尝试使用特定的命名空间来构建一个 XML文档.我想要生成的最终文档应该是这样的: token token token 这是我到目前为止. Document document = Document ...

  9. JAVA XML 之 DTD约束

    什么是约束? 约束是用来限定xml文件中可使用的标签以及属性. 也就是告诉程序员,xml该怎么写. 约束分为DTD约束和Schema约束 DTD语法规则 复杂元素也就是有子元素的元素. 简单元素则是没 ...

最新文章

  1. python拟合求参_机器学习作业(四)神经网络参数的拟合——Python(numpy)实现
  2. 第 3 章 镜像 - 010 - base 镜像
  3. 交?叉?验?证?(?分?类?器?性?能?)
  4. rust大油井频率怎么用_90%的人都不会用电吹风!用不好危害大!1分钟告诉你到底怎么用...
  5. 工作是工作,爱好是爱好,理想是另外一回事
  6. python 词频统计
  7. SpringBoot使用Quartz定时器实现Email信息轰炸
  8. package.json文件^和~区别
  9. C#使用List.Clear()方法可以让GC回收内存吗?
  10. ARM嵌入式体系架构(理论篇)
  11. 什么是promise,promise的使用及实现
  12. @5-1 CCF 2019-12-1 报数
  13. 心田花开:二年级语文阅读《黄山奇石》附答案解析
  14. 《Java 后端面试经》Java 基础篇
  15. 致远SPM解决方案之招标管理
  16. 高等数学---行列式,矩阵
  17. 计算机三维机械设计基础答案,计算机三维机械设计基础 2013年版
  18. 从零开始学习音视频编程技术(42) AAC数据解析
  19. 《网络是怎么连接的》
  20. Mac电脑设置hosts

热门文章

  1. SpringBoot整合Quartz==适用于单任务多任务
  2. 【微信小程序】之自定义顶部导航页签
  3. TPT又一次重量级更新——TPT16使嵌入式测试变得更加轻松
  4. 一对同居男女同一天的日记对比
  5. jfreechart折线图+柱状图、柱状图(堆叠)+折线图、饼状图、环形图
  6. 大话西游2同一个账号同一个服务器,大话西游2:一个服务器的火爆程度究竟是由什么决定...
  7. python 【面向对象实例2】
  8. 类图 顺序图 活动图 状态图 用法和比较
  9. 化工企业双重预防体系数字化综合管理系统
  10. 计算机基础技能都有点什么,计算机基础技能学习材料.ppt