XML Schema学习小结

因为学习Sematic Web的原因接触RDF,RDF的学习又涉及到了XML Schema,因此这里复习了一下XML Schema。

-- 引入目的是克服XML DTD的局限性,并且XML Schema是W3C的正式标准


特点:
1)XML Schema本身也是一种XML文档
2)由于特点(1),XML Schema可以用DOM\SAX\JDOM等XML API来解析其中的内容
3)XML Schema对名称空间支持的非常好

4)XML Schema支持自定义数据类型

先引入一段XML文档 xmlbook.xml,代码如下

<?xml version="1.0" encoding="utf-8" >?
<bookshelf xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:noNamespaceSchemaLocation="xmlbook.xsd">
	<book>
		<bookName>XML</bookName>
		<author>Well_SUN</author>
		<price>28</price>
	</book>
</bookshelf>

在此基础上引入一个XML Schema的约束文档进行进一步的解释

<?xml version="1.0" encoding="utf-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
	<xs:element name="bookshelf">
		<xs:complexType>
			<xs:sequence maxOccurs="unbounded">
				<xs:element name="book">
					<xs:complexType>
						<xs:sequence>
							<xs:element name="bookName" type="xs:string" />
							<xs:element name="author" type="xs:string" />
							<xs:element name="price" type="xs:string" />
						</xs:sequence>
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
</xs:schema>

下面说一下一些标签的使用说明:

(1)<schema>元素为XML Schema文档的根元素,用于声明该文档为XML Schema文档
(2)xmlns:xs="http://www.w3.org/2001/XMLSchema" 表明文档的名称空间(所有的词汇来自于这个文档),并将该名称空间定义成使用xs前缀名来代表,所以所有有关元素前都增加了xs前缀
(3)<element>用于定义实例文档各种的一个元素,通过 type 来指定类型
(4)若一个元素具有子元素或属性,则该元素需要定义为 复杂类型 。使用<complexType>来嵌套在相关的<element>元素中,子元素必须嵌套在<sequence>标签内
(5)<xs:sequence maxOccurs="unbounded"> 该属性设置表示嵌套在<sequence>元素中的子元素定义可以在XML实例文档中出现多次


此外,值得说明的是 name space的作用:
1)使用名称空间来区分每个约束模式文档,每个名称空间使用唯一的URI表示
2)通过在元素名前加前缀的方式来表明该元素所属于的模式文档的名称空间

URI, Uniform Resource Locator, 统一资源定位符,更注重资源而不太注重位置
“前缀部分:本地部分” 的形式来作为元素或属性的完整名称

名称空间声明:
xmlns:PREFIX_NAME="URI" , 其中 PREFIX_NAME 为名称空间的一个临时缩写

在任何元素中声明的名称空间,只对该元素及其中嵌套的所有子孙元素有效

默认名称空间:--- pdf 38
xmlns="uri" 即省略前缀部分,以这种方式声明的名称空间将作为其作用域内的所有元素的默认名称空间

属性的名称空间:

xml:space 和 xml:lang 属性 --- pdf 39

xml:space 告诉下游应用程序如何处理解析器传递的空格等字符
xml:lang 用于设置国家地区的语言格式,解决国际化问题

最后,关于引入XML Schema文档的问题:

1)使用名称空间引入XML Schema文档
声明名称空间,并指定该名称空间所对应的XML Schema文档的存储位置, 通过schemaLocation属性来指定

2)不使用名称空间引入XML Schema文档
但它只可以引入一个XML Schema文件对其进行约束。XML Schema文档的位置通过noNamespaceSchemaLocation属性直接指定,noNamespaceSchemaLocation属性也是在标准命名空间“http://www.w3.org/2001/XMLSchema-instance”中定义的


节前的几天会对RDF进行系统的回顾。

[实验目的] 1、学习如何使用XMLSPY集成开发环境完成XML Schema相关的开发工作。 2、掌握XML Schema与DTD之间的区别,能够完成两者之间的转换;掌握在XML Schema中如何定义元素和属性,如何使用限制、列表和合并派生自己的简单数据类型,如何定义复杂数据类型,全局/局部元素和数据类型之间的区别;如何将XML Schema文档关联到XML实例数据文档,并完成文档的有效性验证。 3、掌握如何准确定义数据之间的参照完整性约束,如何在模式中使用多态性支持,如何在文档中定义空值等等。 [实验内容和步骤] 1、使用XMLSPY集成开发环境,新建XML Schema文档,在各种不同的编辑视图中尝试采用不同的方式完成XML Schema文档的编辑和查看;并使用XMLSPY提供的便利,建立XMLSchema两者之间的关联,进行XML文档的良构以及有效性验证。 2、严格按照下图给出的文档模型,在XML Schema编辑环境的Schema视图中完成book.xsd的编写(不要使用Text视图进行编写): 在上图中,没有指定简单类型元素和属性的数据类型,请根据合理的情况,完成数据类型的创建(至少使用到限制方式中的三种以上的限制方面),请在IDE的Details视图->type和Facets中完成上述任务。 在上图中,有三个title元素分别表示book、section和figure的标题,请定义下述类型: titleType:1-100个字符的文本; bookTitleType:titleType类型限制派生的子类型,要求取枚举值“Data On the Web”、“TCP/IP Illustrated”等; sectionTitleType:titleType类型限制派生的子类型,要求必须形如“1.xxxx”、“1-1.xxxx”等等(表示第一节、第一节下面的第一节等等,注意section是递归的形式); figureTitleType:titleType类型限制派生的子类型,要求必须形如“1-1.xxxx” 、“1-1-1.xxxx”(表示第一节中的第一个图、第一节下面的第一节的第一个图等等); 然后编写book.xml,并使用多态性(即所有title的类型均为titleType,而数据实例中指明具体类型),请确保通过文档有效性验证。 3、在上次的DTD实验中,我们编写了SpyBase1.xml、SpyBase2.xml、以及SpyBase1.dtd和SpyBase2.dtd,这次需要完成SpyBase1.xsd和SpyBase2.xsd,建立模式与数据之间的关联,并进行文档有效性验证。在编写的XSD文档SpyBase1.xsd中,要求使用key/keyref描述数据的实体完整性以及数据之间的参照完整性(SpyBase2.xml不需要,因为已经使用嵌套消除了参照关系)。 [实验思考] 与ID/IDREF相比,key/keyref有哪些优点,在使用上有何不同? 假设SpyBase1.xml中的alias、mission、spy来自不同的命名空间中,如何在Schema中对其进行限定,请在XMLSPY中完成相应的xsd文档?修改SpyBase1.xml,并验证新的SpyBase1_2.xsd是否正确? [提交时间及内容] 最后提交时间 2013年?月?日 提交内容 提交book.xsd、book.xml(使用多态)。 提交SpyBase1. xsd、SpyBase2. xsd。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值