XML的文档构建模块的定义

发表时间:2017-05-10 14:05:07 浏览量( 25 ) 留言数( 0 )

学习目标:

1、了解Java的历史

2、为什么要学习Java语言

3、端正学习态度


学习过程:

由上一节可知,只要符合XML的文档定义格式,在一个XML文档中,我们可以任意定制标签,但是当我们将XML文档交给别人使用时,他怎么才能知道你所提交的文档中元素与元素之间、元素与属性之间的关系,以及属性的取值是正确的呢?还有我们在定义XML时候有如果属性名称拼写错误等等,这些问题如何解决呢?

XML的强大是灵活,可以任意定义,但是问题也就在这里,就是过于灵活了,我们需要为XML添加一些约束。

XML文件一般分为三种,上一节我们学习只是其中一种。三种简介如下:

  1. 标准XML文档:以.xml为文件的后缀名,作用就是数据的结构化和作为数据的载体。

  2. 语法结构规范Schema文档:以.xsd为文件的后缀名,定义XML文件的结构规范和一些约束条件。

  3. 样式文档:以.xsl为文件的后缀名,XML的样式表,可以做到样式和数据分离,但目前使用得并不多。

下面我们主要学习一下Schema文档的定义和使用

一、什么是 XML Schema?

XML Schema 的作用是定义 XML 文档的合法构建模块,类似 DTD。Schema具体的元素描述这里我就不做太多的介绍了。具体大家可以参考一下W3C的学习网:

http://www.w3school.com.cn/schema/schema_intro.asp

XML Schema的作用如下:

  • 定义可出现在文档中的元素

  • 定义可出现在文档中的属性

  • 定义哪个元素是子元素

  • 定义子元素的次序

  • 定义子元素的数目

  • 定义元素是否为空,或者是否可包含文本

  • 定义元素和属性的数据类型

  • 定义元素和属性的默认值以及固定值

二、在MyEclipse中定义Schema

MyEclipse提供了一种可视化的操作定义Schema文件,操作非常简单。下载我们再看看上一节课的例子,还有一些约束是没有添加的。如:“每一个学生和老师都有一个Id一个学生只能有一个姓名, 年龄,地址可以有多个”。下面我们就通过Schema的定义XML文件的属性名称、属性值类型和约束条件。

1、新建一个Schema文件。选择New>other>XML,选中XML Schema,点击下一步。

attcontent/7065e12f-a2b0-4cb6-a12d-2c48a4685cd5.png

输入Schema文件的文件名称,点击完成就可以了。

attcontent/1711770c-d2f8-430f-8ccd-bfb8d28ce0c9.png

2、添加元素。

attcontent/3a9bf10a-d4d3-48b6-8b16-6b40a3ddfd89.png

修改元素的名称,由于根元素的内容并不是一个简单类型,需要添加一个复合类型(Complex Type),点击SetType》New。

attcontent/9918aac8-4325-48e6-a8e4-c5c55a201bab.png

选中Complex Type,修改类型名称,点击OK即可

attcontent/a23ca6cb-dd4d-4d71-be1f-b043bd307ff4.png

3、添加子元素。

attcontent/5730a1b7-448b-4183-94f1-133874615c71.png

右键机选添加子元素。

attcontent/9a2d35e2-a685-4902-bce1-11aedbccb0cc.png

同样,这两个元素的类型也不是基本类型,需要修改为新建一个复合类型。

同理,继续定义这些类型的子元素,最终完成如下:


attcontent/ff91042c-4d5f-47cd-91cd-83aa5aac955f.png


4、添加属性。

attcontent/fc5632be-b1fb-4d32-9cb8-ef1f77d2ddfb.png


5、添加约束元素个数。

  • 选项1..1(Required)必须项,有且只有一个,而且必须有一个。

  • 选项0..1(Optional)可选项,可以没有这个元素,但是最多也只能有一个。

  • 选项0..*(Zero or more)0个或者多个,可以没有这个元素,也可以有多个。

  • 选项1..*(Oneor more)1个或者多个,至少有一个,可以有多个。

attcontent/8c14a055-e850-4bc7-85d5-9cd1a8e37dbb.png

6、最终完成如下图所示:

attcontent/a2a84db2-d227-407f-9fef-5a31ea8790a6.png

7、生成对应的XML文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" 
targetNamespace="http://www.example.org/RoomSchema"
	xmlns:tns="http://www.example.org/RoomSchema" 
	elementFormDefault="qualified">
	<element name="room" type="tns:RoomType"></element>

	<complexType name="RoomType">
		<sequence>
		   <element name="teacher" type="tns:teacherType" maxOccurs="1"
				minOccurs="1"></element>
		   <element name="student" type="tns:studentType" maxOccurs="unbounded"
				minOccurs="1"></element>
		</sequence>
	</complexType>

	<complexType name="teacherType">
		<sequence>
			<element name="name" type="string" maxOccurs="1" minOccurs="1">
			</element>
			<element name="source" type="string" maxOccurs="1" minOccurs="1">
			</element>
		</sequence>
		<attribute name="id" type="string"></attribute>
	</complexType>

	<complexType name="studentType">
		<sequence>
			<element name="name" type="string" maxOccurs="1" minOccurs="1">
			</element>
			<element name="age" type="int" maxOccurs="1" minOccurs="1">
			</element>
			<element name="address" type="tns:addressType" m
			axOccurs="unbounded" minOccurs="1">
			</element>
		</sequence>
		<attribute name="id" type="string"></attribute>
	</complexType>


	<complexType name="addressType">
		<sequence>
			<element name="province" type="string" maxOccurs="1"
				minOccurs="1"></element>
			<element name="city" type="string" maxOccurs="1" minOccurs="1">
			</element>
		</sequence>
	</complexType>
</schema>

三、在MyEclipse中使用Schema

1、新建一个XML文件

attcontent/1f4e5b30-c25f-40d9-9744-863b1c55e9dc.png

2、输入文件名称后,点击Next。

attcontent/3a7ce46b-0e82-48c3-b5d9-cac7c2bf3ae1.png

选中Create Xml file from XML scheam file

attcontent/06a5893a-6a7d-46d6-816f-37ff388db905.png

选中刚才定义的Schema文件

attcontent/cf9539ea-c333-41b0-b42b-eae49876654e.png

暂时不需要这个命名空间了。

attcontent/f9ac644a-b3cf-4aa0-a35c-a6ee1815997d.png

attcontent/268a3870-9bd8-42f9-af18-91d9261ed382.png

点击Finish完成即可。

attcontent/c1bc222a-c3ef-48db-baea-c742f2ecd837.png

2、生成代码

<?xml version="1.0" encoding="UTF-8"?>
<room xmlns="http://www.example.org/RoomSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.example.org/RoomSchema RoomSchema.xsd ">
	<teacher>
		<name>name</name>
		<source>source</source>
	</teacher>
	<student>
		<name>name</name>
		<age>0</age>
		<address>
			<province>province</province>
			<city>city</city>
		</address>
	</student>
</room>

3、测试。

你可以测试一下,现在所有的元素名称都已经得到规范了,如:教师的元素名称必须是teacher,学生的元素名称必须是student。整个room元素中有且只能有一个teacher元素,这些你都可以自己做一下测试。如果你添加两个teacher元素,MyEclipse的语法检测就会报错。