XML(1)——shema约束之命名空间

简介:
一、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/

目录
相关文章
|
3月前
|
XML Java 数据格式
javaweb实训第五天下午——xml配置文件约束报错问题
问题描述: 如果电脑连不上网,或者网速不好可能会造成Spring框架中xml配置文件出现错误。但是这个错误不影响项目的运行的;
20 0
|
10月前
|
XML 程序员 数据格式
|
10月前
|
XML 存储 JavaScript
xml基本组成+约束+解析
xml基本组成+约束+解析
|
XML 存储 Java
Spring 源码阅读 10:Spring 中自定义的 EntityResolver 是如何获取 Spring XML 配置文件需要的约束文件的
这篇是为了填 [Spring 源码阅读 07:加载 BeanDefinition 的过程(资源加载阶段)]中留的一个坑
88 0
Spring 源码阅读 10:Spring 中自定义的 EntityResolver 是如何获取 Spring XML 配置文件需要的约束文件的
|
XML 数据格式 开发者
|
XML 数据格式
|
XML 数据格式 C++
XMLSchema.xsd 文件约束xml文档格式内容
XMLSchema.xsd 文件,用来约束xml内容格式的。 ...
915 0
|
2天前
|
XML Java 数据库连接
mybatis中在xml文件中通用查询结果列如何使用
mybatis中在xml文件中通用查询结果列如何使用
6 0
|
4天前
|
XML JavaScript 前端开发
xml文件使用及解析
xml文件使用及解析
|
22天前
|
XML C# 数据格式
使用C#操作XML文件
使用C#操作XML文件
11 0