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/

本文转自IT徐胖子的专栏博客51CTO博客,原文链接http://blog.51cto.com/woshixy/1416824如需转载请自行联系原作者


woshixuye111

相关文章
|
4月前
|
XML Java 数据格式
Spring5源码(17)-Spring解析xml默认命名空间
Spring5源码(17)-Spring解析xml默认命名空间
22 0
|
4月前
|
XML Java 数据库连接
Mybatis之简介、使用操作(安装、XML、SqlSession、映射的SQL语句、命名空间、作用域和生命周期)
【1月更文挑战第2天】 MyBatis 是一款优秀的持久层框架 MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的过程 MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 实体类 【Plain Old Java Objects,普通的 Java对象】映射成数据库中的记录。
113 2
Mybatis之简介、使用操作(安装、XML、SqlSession、映射的SQL语句、命名空间、作用域和生命周期)
|
XML 数据格式
XML 解析默认去掉命名空间和注释
原文:XML 解析默认去掉命名空间和注释         注:最近在写xml操作这块东西,中间遇到了一些坑 其中就包含下面一个 遇到xml文件包含 命名空间或者注释 这时反序列化 会报错。下面就是解决方案 1 //创建xml文档 2 Xm...
1052 0
|
XML C# 数据格式
C#查询XML解决“需要命名空间管理器”问题
  在查询xml时有时会遇到带有前缀的xml,例如:“”   这时像往常一样查询就会报错,类似于“需要命名空间管理器或 XsltContext。此查询具有前缀、变量或用户定义的函数”这样的错误。   所以需要引入命名空间管理器,代码如下 XmlDocument document = new XmlDocument(); document.
1508 0
|
XML 数据格式 .NET
Linq to xml 操作带命名空间的xml
昨天需要操作用代码操作csproj文件,实现不同vs版本的切换。 在用XElement读取了csproj文件以后怎么也获取不到想要的对象。 反反复复试验了好多次都不得要领:先看下csproj文件的内容: Debug AnyCPU {EC...
1055 0
|
22天前
|
XML 数据格式
小米备份descript.xml文件
小米备份descript.xml文件
21 0