博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
XML(1)——shema约束之命名空间
阅读量:5288 次
发布时间:2019-06-14

本文共 2723 字,大约阅读时间需要 9 分钟。

一、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

你可能感兴趣的文章
animate.css的使用
查看>>
Struts2 注释类型
查看>>
JSP中EL表达式语言不能使用的解决方法
查看>>
做XH2.54杜邦线材料-导线
查看>>
如何刻录cd音乐
查看>>
Codeforces Round #318(Div 1) 573A, 573B,573C
查看>>
51Nod 1091 线段重叠 贪心 区间重叠
查看>>
[翻译] NimbusKit
查看>>
POJ 2196
查看>>
熟悉下 mysql 的数据库导入导出
查看>>
5个数组Array方法: indexOf、filter、forEach、map、reduce使用实例(转)
查看>>
Machine Learning for hackers读书笔记(七)优化:密码破译
查看>>
Python基础第24天
查看>>
使用NPOI 做Excel导出
查看>>
L0/L1/L2范数(转载)
查看>>
[deviceone开发]-数据绑定示例
查看>>
CSU - 1770 按钮控制彩灯实验
查看>>
使用函数处理数据
查看>>
C语言函数返回数组
查看>>
动态对象(dynamic)的用法
查看>>