xml-Schema约束(精简篇)

本文介绍了XML Schema约束的基本概念和使用方法,包括快速入门、命名空间的理解与应用、如何引入Schema约束文档,以及在XML Schema文档中声明命名空间。通过示例详细阐述了schemaLocation属性的使用以及如何处理默认和显式命名空间。同时讨论了不使用名称空间引入XML Schema的情况,并解释了targetNamespace和elementFormDefault属性的作用。

一、Schema约束快速入门

 

  1.  XML Schema文件自身就是一个XML文件,但它的扩展名通常为.xsd
  2. 一个XML Schema文档通常称之为模式文档(约束文档),遵循这个文档写的xml文件称之为实例文档。
  3. 和XML文件一样,一个XML Schema文档也必须有一个根节点,但这个根节点的名称为Schema。
  4. 编写了一个XML Schema约束文档后,通常需要把这个文件中的声明的元素绑定到一个URI地址上,在XML Schema技术中有一个专业属于来描述这个过程,即把XML Schema文档声明的元素绑定到一个名称空间上,以后XML文件姐可以通过这个URI(即名称空间)来告诉解析引擎,xml文档中编写的元素来自那里,被谁约束。

Schema约束文档:book.xsd文件:

<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" //表示当前xml文件是一个约束文件(固定的值),且为该引用取了别名xs
targetNamespace="http://www.efeel.top" elementFormDefault="qualified">

<xs:element name='书架' >
<xs:complexType>
<xs:sequence maxOccurs='unbounded' >
<xs:element name='书' >
<xs:complexType>
<xs:sequence>
<xs:element name='书名' type='xs:string' />
<xs:element name='作者' type='xs:string' />
<xs:element name='售价' type='xs:string' />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>

</xs:element> </xs:schema>


引入Schema约束文档的book.xml文件:
xmlns与xmlns:nsd、xmlns:tns称为对命名空间的引用,
xmlns称为默认命名空间,
xmlns:前缀 称为显式命名空间,这两个有什么区别?
如果使用的是xmlns中定义的元素、属性、类型等成员直接使用即可,例如:<servlet>
如果使用的是xmlns:前缀中定义的元素、属性、类型等成员则需要在前面加上前缀,(efeel 相当于对这个引用取了个别名) 例如:<efeel :书架>

<?xml version="1.0" encoding="UTF-8"?>
<efeel:书架 xmlns:efeel="http://www.efeel.top" //引入自己编写的schema文档 并取了一个别名efeel
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" //引入w3c命名空间,告知我是实例文档(固定)
xsi:schemaLocation="http://www.efeel.top http://www.efeel.top/book.xsd">

<efeel:书>
<efeel:书名>java核心技术</efeel:书名>
<efeel:作者>sx</efeel:作者>
<efeel:售价>28.00元</efeel:售价>
</efeel:书>

</efeel:书架>

二、命名空间的概念


1、在XML Schema中,每个约束模式文档都可以被赋以一个唯一的名称空间,

命名空间用一个唯一的URI(Uniform Resource Identifier),在XML文件中书写标签时,

可以通过名称空间声明(xmlns),来声明当前编写的标签来自哪个Schema约束文档。如:

<efeel:书架 xmlns:efeel="http://www.efeel.top">
<efeel:书>……</efeel:书>
</efeel:书架>

此处使用efeel来指向声明的名称,以便后面对命名空间的引用。

2、注意:命名空间的名字语法容易让人混淆,尽管以http://开始,那个URI并不只想一个包含模式定义的文件。事实上,这个URI:http://www.efeel.top根本没有指向任何文件,只是一个分配的名字。


三、使用命名空间引入Schema
1、为了在一个XML文档中声明它所遵循的Schema文件的具体位置,通常需要在XML文档中的根节点中使用schemaLocation属性来指定。(引用约束地址 形式:xsi:schemaLocation=“命名空间 约束地址.xsd ” )

<efeel:书架 xmlns:efeel="http://www.efeel.top"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.efeel.top http://www.efeel.top/book.xsd">

2、schemaLocation次属性有两个值。
第一个值是需要使用的命名空间。
第二个值是供命名空间使用的XML Schema的位置,两者之间用空格分隔
3、注意:在使用schemaLocation属性时,也需要指定该属性来自哪里。

四、使用默认命名空间
1、基本格式:xsi:schemaLocation=“命名空间 约束地址.xsd ”
2、举例:

<书架 xmlns="http://www.efeel.top"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.efeel.top/book.xsd">
<书>
<书名>java核心技术</书名>
<作者>sx</作者>
<售价>28.00元</售价>
</书>
<书架>

五、使用命名空间引入多个XML Schema文档
文件清单:book.xml
 

<?xml version="1.0" encoding="UTF-8"?>
//xmlns称为默认命名空间,没有前缀形式 用其中定义的标签时 无需 特别指明所属哪个引用
<书架 xmlns="http://www.efeel.top"
xmlns:demo="http://www.efeel.top/scheam/demo"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" //引入w3c命名空间,告知我是实例文档

//引用约束地址 形式:xsi:schemaLocation= "命名空间 约束地址.xsd" 
xsi:schemaLocation="http://www.efeel.top http://www.efeel.top/book.xsd 
http://www.efeel.top/scheam/demo http://www.efeel.top/demo.xsd">
<书>
<书名>java核心技术</书名>
<作者>sx</作者>
<售价 demo:币种=”人民币”>28.00元</售价>
</书>
</书架>

六、不使用名称空间引入XML Schema文档
文件清单:book.xml

<?xml version="1.0" encoding="UTF-8"?>
<书架 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:noNamespaceSchemaLocation="book.xsd">
<书>
<书名>java核心技术</书名>
<作者>sx</作者>
<售价>28.00元</售价>
</书>
</书架>


七、在XML Schema文档中声明命名空间

//表示当前xml文件是一个约束文件(固定的值),且为该引用取了别名xs
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
targetNamespace="http://www.efeel.top" elementFormDefault="qualified">
<xs:schema>

1、 targetNameSpace元素用于指定Schema文档中声明的元素属于那个名称空间。
2、elementFormDefault属性与命名空间相关,其值可设置为qualified或unqualified

如果设置为qualified:在XML文档中使用局部元素时,必须使用限定短名作为前缀
如果设置为unqualified:在XML文档中使用局部元素时,可以省略限定短名

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值