11、XML的文档构建模块的定义

学习目标:

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文件如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

<?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、生成代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

<?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的语法检测就会报错。

猜你喜欢

转载自blog.csdn.net/liubao616311/article/details/83832761
今日推荐