Java Web程式設計------XML、約束
2.1XML基礎
在實際開發中,不通語言專案之間資料的傳輸的格式 有可能不相容,為解決此問題w3c推出一種新的資料交換標準——XML,它是一種通用的資料交換格式,輕鬆使資料在各種程式之間交換。
2.1.2 XML概述
1.什麼是XML
現實中各種事物之間存在一定關聯關係,例如中國有很多省份,每個省份又有很多城市,這種關係可以構成樹狀圖來描述,而對於程式來說解析圖片有點困難,所以可以用XML來描述這種樹狀層次結構。
XML是extensible marking language的縮寫,類似於HTML的標記語言,成為可擴充套件標記語言,所謂可擴充套件就是——使用者可以按XML標準自定義標記。
<?xml version="1.0" encoding="UFT-8"?>
<中國>
<山西>
<城市>太原</城市>
<城市>大同</城市>
</山西>
<河北>
<城市>石家莊</城市>
<城市>張家口</城市>
</河北>
</中國>
2.XML與HTML的比較
都是標記語言,在結構上大體上相同,但有本質區別。
(1)HTML用來格式化顯示資料,XML用來傳輸和儲存資料。
(2)HTML不區分大小寫,XML嚴格區分大小寫。
(3)HTML可以有多個根元素,良好格式的XML只能有一個根元素。
(4)HTML中空格自動過濾,XML中空格不會自動刪除。
(5)HTML中的標記都是預定義的,XML中標記可以自定義並可擴充套件。
總之XML不是HTML的升級,也不是替代品。XHTML——XML應用被重新定義的HTML。
2.1.2XML的語法
1.文件宣告
XML文件中必須有一個宣告,且在第一行。
<?xml version="xml版本" encoding="編碼方式" standalone="是否為獨立文件yes/no"?>
2.元素自定義
主題都是有元素構成,元素由開始標記、屬性、元素內容、結束標記構成。
若一個元素沒有被其他元素套嵌則為根元素,若一個元素沒有 套嵌任何元素則為空元素,這時不需要使用結束標籤,在開始標籤後加/。
3.屬性定義
XML文件中可以為元素自定義屬性,屬性是對元素的進一步描述和說明。
<售價 單位="元">68</售價>
4.註釋資訊
<!-- 註釋內容 -->
2.1.3 DTD約束
1.什麼是約束
在書寫XML文件時,內容必須滿足一些條件的限制,如 <書>標籤中不能出現兩個<價格>標籤,這樣就很難區分哪個是普通價格和會員價格。在對XML文件進行約束時,同樣需要遵守一系列的語法規則,這種語法就形成的XML約束語言。最常見的兩種約束語言DTD約束和Schema約束。
2.DTD約束
book.dtd檔案:
<!ELEMENT 書架 (書+)> <!--表示書在書架元素中出現1次或多次-->
<!ELEMENT 書 (書名,作者,售價) > <!--表示書元素有三個子元素,且要按照順序出現-->
<!ELEMENT 書名 (#PCDATA)> <!--表示書名元素套嵌的內容是普通的文字字元-->
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 售價 (#PCDATA)>
3.DTD的引入方式
(1)引用本地的的dtd檔案 可以為一個絕對值地址和相對地址 此時standalone屬性不能設為yes
<!DOCTYPE 根元素名稱 SYSTEM ".dtd檔案的url">
(2)引用公共的dtd檔案 地址為Internet上的一個絕對url地址
<!DOCTYPE 根元素名稱 PUBLIC "DTD名稱" ".dtd檔案的url">
(3)內嵌方式 standalone可以為yes
<!DOCTYPE 根元素名稱[
<!ELEMENT 書架 (書+)>
<!ELEMENT 書 (書名,作者,售價) >
<!ELEMENT 書名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 售價 (#PCDATA)>
]>
多個XML文件可共享一個DTD檔案
4.DTD語法
(1)元素定義<!ELEMENT>用於定義一個元素。
<!ELEMENT 元素名稱 元素內容>
元素內容有5中內容:
- <!ELEMENT 書名 (#PCDATA)> 表示書名為普通的文字字串
- <!ELEMENT 書(作者,單價,書名)> 表示套嵌的子元素
- <!ELEMENT 書(#PCDATA|書名)*> 表示前兩種的混合
- <!ELEMENT br EMPTY> 表示br為沒有內容的空元素
- <!ELEMENT ANY> 表示可以包含任何元素,避免使用
符號:?1次或0次 *0次或多次 +1次或多次 | 列出的物件選一個 ,必須按順序出現 ()給元素分組
(2)屬性定義
<!ATTLIST 元素名
屬性名1 屬性型別 屬性說明
屬性名2 屬性型別 屬性說明
>
1)屬性說明中有四種設定:
- #REQUIREN 表示元素的該屬性是必須的
- #IMPLIED 表示元素可以包含該屬性
- #FIXED 表示一個屬性的預設值,不能將元素設為其他值 需要提供一個預設值當不包含該屬性時自動設定為dtd中的預設值
- 預設值 如果不包含該屬性自動設為預設值 與#FIXED不同的是該預設值可以被改變
2)屬性型別:
有10中屬性型別,常見的有
- CDATA 表示屬性型別為字元型別,與元素內容中的#PCDATA是一樣的,屬性值設定中的特殊字元也需要使用轉義字元來表示,&表示&,&it表示<。
- Enumerated 列舉型別
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE 購物籃[
<!ELEMENT 購物籃 ANY>
<!ELEMENT 肉 EMPTY>
<!ATTLIST 肉 品種(雞肉|牛肉|豬肉) "雞肉">
]>
<購物籃>
<肉 品種="雞肉"/>
<肉 品種="豬肉"/>
</購物籃>
品種為Enumerated型別,其值只能為列出來的值,預設值為雞肉
- ID一個id型別的屬性用來唯一標示xml文件中的一個元素,id必須設定為#IMPLIED或#REQUIRED,因為對id設定預設值無意義。
<?xml versiong"1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE 聯絡人列表[
<!ELEMENT 聯絡人列表ANY>
<!ELEMENT 聯絡人 (姓名, EMAIL)>
<!ELEMENT 姓名 (#PCDATA) >
<!ELEMENT EMAIL (#PCDATA) >
<!ATtlist 聯絡人 編號 ID #REQUIRED>
]>
<聯絡人列者>
<聯絡人 編號="id1">
<姓名>張三</姓名>
<EMAIL>[email protected] cn</ EMAIL>
</聯絡人>
<聯絡人 編號="id2">
<姓名>李四<7姓名>
<EMAIL>[email protected]</ EMAIL>
</聯絡人>
</聯絡人列表>
- IDREF 表示不同id之間的聯絡 在兩個元素之間建立一對一的關係
<?xml version="1.0" encoding= "UTF-8” standalone="yes"?>
<!DOCTYPE聯絡人列表[
<!ELEMENT 聯絡人列表 ANY>
<!ELEMENT 聯絡人(姓名, EMAIL)>
<!ELEMENT 姓名(#PCDATA)>
<!ELEMENT EMAIL (#PCDATA) >
<!ATTLIST聯絡人
編號 ID #REQUIRED
上司 IDREF #IMPLIED>
]>
<聯絡人列表>
<聯絡人 編號="id1">
<姓名>張三</姓名>
<EMAIL> [email protected] .org</EMAIL>
</聯絡人>
<聯絡八 編號= "id2"上司="id1">
<姓名>李四</姓名>
<EMAIL>[email protected] .org</EMAIL>
</聯絡人>
</聯絡人列表>
- IDREFS 建立一對多的關係
<!ATTLIST person borrowed REFS # REQUIRED>
<books>
<book bookid="b0101">
<title>Java就業培訓教材</title>
</book>
<book bookid="b0102">
<title>Java Web 開發內幕</title>
</book>
<book bookid="b0103">
<title>Java開發寶典</title>
</book>
</books>
<records>
<item>
<data>2013-03-13</data>
<person name="張三”borrowed="b0101 b0103" />
</item>
<item>
<data>2013-05-23</data>
<person name="李四”borrowed="b0101 b0102 b0103" />
</item>
</records>
2.1.4Schema約束
1. Schema約束
是DTD約束的升級,他的出現克服了dtd的侷限性。
- Schema本身採用XML語法格式,本身也是一種XML文件,更好理解。DTD採用非XML語法格式。
- Schema採用與XML文件相同的合法性檢驗機制,與DTD的直譯器不同。
- Schema對名稱空間的支援非常好,DTD就不支援。
- Schema比DTD支援的資料型別更多,包括自定義資料型別。
- Schema約束能力更強大、細緻。
2.名稱空間
可以近似的看作物件呼叫該類的屬性。
使用名稱空間前應先宣告。宣告名稱空間就是在XML例項文件中為某個模式文件的名稱空間指定一個臨時的簡寫名稱。以xmlns或xmlns:作為字首。
3.引入Schema文件
(1)使用名稱空間引入XML Schema文件
<?xml version="1.0" encoding="UTF-8"?>
<書架 xmlns="http://www.it315.org/xmlbook/schema" <!--規定預設空間-->
xmlns: xsi="http://www.w3.org/2001/XMLSchema-instance" <!---->
xsi:schemaLocation="http://www. it315.org/xmlbook/schema <!--名稱空間-->
http://www. it315.org/xmlbook.xsd" > <!--Schema檔案的url-->
<書>
<書名>JavaScript網頁開發</書名>
<作者>張孝祥</作者>
<售價>28.00元</售價>
</書>
</書架>
xsi:schemaLocation屬性在標準名稱空間"http://www. w3.org/2001/XMLSchema-instance"中定義的,
(2)不使用名稱空間來引入XML Schema文件
還可以通過xsi:noNamespaceSchemalocation屬性引屬性直接指定,noNamespaceSchemalocation屬性也是在標準名稱空間"http://www. w3.org/2001/XMLSchema-instance"的,它用於定義指定文件的位置。
<?xml version="1.0" encoding="UTF-8"?>
<書架 xmlns:xsi="http:/ /www. w3. org/2001/XMLSchema- instance"
xsi :noNamespaceSchemaLocation=" xmlbook.xsd">
<書>
<書名>JavaScript網頁開發</書名>
<作者>張孝祥</作者>
<售價>28.00元</售價>
</書>
</書架>
4.Schema語法
(1)元素定義
宣告一個元素
<xs:element name="xxx" type="xxx">
type指元素型別:
- xs:string 字串
- xs:decimal 小數
- xs:integer 整數
- xs:boolean 布林型別
- xs:date 日期型別
- xs:time 時間型別
<lastname> Smith</lastname>
<age>28</age>
<dateborn>1980-03-27</dateborn>
<xs:element name="lastname" type="xs:string"/>
<xs:element name="age" type="xs: integer"/>
<xs:element name="dateborn" type="xs :date"/>
(2)屬性的定義
<xs:attribute name="xxx" type="xxx">
<lastname lang="En"> Smith</lastname>
<xs: attribute name="lang" type="xs:string">
(3)簡單型別
1 ) xs:minInclusive和xs:maxInclusive元素對值的限定
<xs:element name="age">
<xs:simpleType>
<xs:restriction base="xs :integer">
<xs:minInclusive value="18" />
<xs:maxInclusive value="58" />
</xs:restriction>
</xs:simpleType>
</xs:element>
2) xs.enumeration元素對組值的限定(列舉列出取值範圍)
<xs:element name="car">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Audi"/>
<xs:enumeration value="Golf"/>
<xs:enumeration value="BMW"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
3) XS:pattern元素對一系列值的限定
<xs:element name="letter">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[a-z]"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
4) xstestriction元素對空白字元的限定
在XML文件中,空白字元比較特殊,如果需要對空白字元(Witepaice Caraces)進行處理,可以使用WhiteSpace元素。whiteSpace 元素有3個屬性值可以設定,分別是preserve、replace和collapse。其中,preserve 表示不對元素中的任何空白字元進行處理,replace 表示移除所有的空白字元, collapse表示將所有的空白字元縮減為一個單一字元。
<xs:element name="address">
<xs:simpleType>
<xs:restriction base= "xs:string">
<xs:whiteSpace value="preserve"/>
</xs:restriction>
</xssimpleType>
</xs:element>
(4)複雜型別
<xs:complexType></xs:complexType>
1)空元素<xs:complexType></xs:complexType>
2)包含其他元素的元素<xs:complexType><sequence></sequence></xs:complexType>
3)僅包含文字的元素
4)包含元素和文字的元素<xs:complexType mixed="ture"><sequence></sequence></xs:complexType>