XML与Schema,Schema的复用

在XML中使用Schema

Schema概述

与DTD相比Schema的优势如下:
XML Schema是基于XML进行编写
XML Schema支持数据类型
XML Schema支持命名空间

XML Schema建议规范中有两个基础的命名空间:
一个是用于Schema文档的Schema URI,即http://www.w3.org/2001/XMLSchema。通常使用xs来代表该命名空间。
另一个用于XML文档,即http://www.w3.org/2001/XMLSchema-instance,通常使用xsi来代表该命名空间。

Schema作用
XML Schema即模式。文档通常以单独的文件形式存在,文件扩展名为.xsd。其主要作用如下:
定义可出现在文档中的元素
定义可出现在文档中的属性
定义哪个元素是子元素
定义子元素的次序
定义子元素的数目
定义元素是否为空,或者是否可包含文本
定义元素和属性的数据类型
定义元素和属性的默认值以及固定值

Schema的引用方法

当XML引入Schema时,根据XML文档的元素是否属于某个特定命名空间的,可以按照如下两种方式引入:
不属于特定的命名空间
通过属性xsi:noNamespaceSchemaLocation引入
属于某个特定的命名空间
通过属性xsi:shemaLocation引入

如果Schema文件要约束的XML文件中的元素不属于任何特定命名空间,使用xsi:noNamespaceSchemaLocation属性引入。具体语法如下:

<根元素名称 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="Schema文件路径">

xsi:noNamespaceSchemaLocation :属性值为一个Schema文件的URI。
该属性值只能是一个Schema文件URI,即只能使用一个Schema文件。
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 是固定的。

如果被引入的Schema文件需要约束XML文件中属于某个任何特定的命名空间元素,则通过xsi:schemaLocation属性引入。具体语法如下:

<根元素名称 
[xmlns[:prefix]="命名空间URI"]+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="[命名空间URI  Schema文件路径]+">
+代表可以写多个的意思

[xmlns[:prefix]="命名空间URI"]+ : 可选项。可以同时引入多个命名空间。
但必须是引用的Schema定义过的命名空间。另外可以给命名空间指明多个前缀。

xsi:schemaLocation=[命名空间URI  Schema文件路径]+:该属性值可以引入Schema文件。
Schema的引入需要一个命名空间URI和Schema文件路径,
命名空间URI和Schema文件路径中间使用空格间隔。
命名空间URI需要与Schema文件中TargetNamespace定义的一样。

Schema的语法结构

Schema是扩展名为”.xsd”的文本文件,使用XML语法编写。
运行.xsd的文件路径有中文可能会出错。

<?xml version="1.0"?>
<xs:schema xmlns:xs=http://www.w3.org/2001/XMLSchema
targetNamespace="命名空间的URL"
[xmlns[:prefix]= "命名空间的URL"]
[elementFormDefault="qualified | unqualified"]
[attributeFormDefault="qualified | unqualified"]>
     元素、属性、注释、数据类型、schema的复用等的定义
</xs:schema>
schema是每一个 XML Schema 的根元素。

xmlns:xs=http://www.w3.org/2001/XMLSchema表示schema文档中用到的元素来自该命名空间。
同时它还规定了元素应该使用前缀 xs:。比如<xs:element><xs:attribute>。

targetNamespace定义被此schema定义的XML文档的元素和属性的命名空间。

xmlns[:prefix]= "命名空间的URL",若要引用Schema文档中的元素,必须声明命名空间,
且URL为targetNamespace定义的命名空间。在该Schema文档中和引用该Schema文档的XML文档中,
给命名空间指定的前缀是独立的。
全局元素和局部元素以及全局属性和局部属性是根据元素或属性定义的位置决定的。

在schema中,定义在schema元素下的元素或属性称为全局元素或全局属性(即schema元素的子元素)。
		全局元素可以被引用,全局属性必须被引用。

在schema中,定义在复杂类型中的元素或者属性,称之为局部元素或局部属性。
		局部元素或局部属性仅能在定义该元素或属性的外部元素中使用。

elementFormDefault: 属性值是qualified或unqualified,
					用于指定XML使用Schema中定义的局部元素是否使用命名空间限定。
					默认值为unqualified,表示不使用命名空间限定。
					
attributeFormDefault: 属性值是qualified或unqualified,
					用于指定XML使用Schema中定义的局部属性时是否用命名空间限定。
					默认值为unqualified,表示不使用命名空间限定。
					
当elementFormDefault的值为unqualified时,且在Schema中同时定义了不是引用全局元素的局部元素,
那么引用该Schema的XML文档的命名空间必须要有前缀。

注释

注释的具体方法包括两种:
1. XML语法中的注释<!-- 被注释的内容-->2. 通过标记<annotation>来增加注释,该方式具有更好的可读性。
<annotation>:用于说明该Schema组件的作用。
			内部可以出现多个<documentation><appinfo>而且顺序和次数没有限制。
<documentation> :该子元素的注释主要供人来阅读使用。
<appinfo>:该子元素的注释主要供其它程序来使用。

Schema中定义元素的语法主要包括以下三类:

语法1<xs:elem
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ReflectMirroring

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值