1. 程式人生 > >11、XML的文件構建模組的定義

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的語法檢測就會報錯。