DTD和Schema約束
一、DTD
1、什麼是DTD
DTD (Document Type Definition ),文件型別定義,用來約束XML文件。規定XML文件中元素的名稱,子元素的名稱及順序,元素的屬性等。
2、DTD重點要求
開發中,我們很少自己編寫DTD約束文件,通常情況我們都是通過框架提供的DTD約束文件,編寫對應的XML文件。常見框架使用DTD約束有:struts2, hibernate等。
通過提供的DTD"web-app_2_3.dtd "編寫XML
<?xml version="1.0" encoding="UTF-8"?> <!-- 模擬servlet2.3規範,如果開發人員需要在xml使用當前DTD約束,必須包括DOCTYPE。 格式如下: <!DOCTYPE web-app SYSTEM "web-app_2_3.dtd"> --> <!ELEMENT web-app (servlet*,servlet-mapping* , welcome-file-list?) > <!ELEMENT servlet (servlet-name,description?,(servlet-class|jsp-file))> <!ELEMENT servlet-mapping (servlet-name,url-pattern+) > <!ELEMENT servlet-name (#PCDATA)> <!ELEMENT servlet-class (#PCDATA)> <!ELEMENT url-pattern (#PCDATA)> <!ELEMENT description (#PCDATA)> <!ELEMENT jsp-file (#PCDATA)> <!ELEMENT welcome-file-list (welcome-file+)> <!ELEMENT welcome-file (#PCDATA)> <!ATTLIST web-app version CDATA #IMPLIED>
3、DTD語法
1)內部DTD,在XML文件內部嵌入DTD,只對當前XML有效。
<?xml version="1.0" encoding="UTF-8"? standalone="yes" ?> <!DOCTYPE web-app [ ...//具體語法 ]> <web-app> </web-app>
2.)外部DTD——本地DTD,DTD文件在本地系統上,公司內部自己專案使用。
3.)外部DTD——公共DTD,DTD文件在網路上,一般都有框架提供。
4、元素宣告
定義元素語法
元素名:自定義
元素描述包括 : 符號和資料型別
常見符號: ? * + () | ,
常見型別:#PCDATA表示內容是文字,不能是子標籤
符號 |
符號型別 |
描述 |
示例 |
? |
問號 |
表示該物件可以出現,但只能出現一次 |
(菜鳥?) |
* |
星號 |
表示該物件允許出現任意多次,也可以是零次 |
(愛好*) |
+ |
加號 |
表示該物件最少出現一次,可以出現多次 |
(成員+) |
() |
括號 |
用來給元素分組 |
(古龍|金庸|梁羽生), (王朔|餘傑),毛毛 |
| |
豎條 |
表明在列出的物件中選擇一個 |
(男人|女人) |
, |
逗號 |
表示物件必須按指定的順序出現 |
(西瓜,蘋果,香蕉) |
<!ELEMENT web-app(servlet*,servlet-mapping*,welcome-file-list?)> web-app包括3個標籤,且必須順序出現。 servlet子標籤個數任意 servlet-mapping子標籤個數任意 welcome-file-list子標籤最多隻能出現一次 <!ELEMENT servlet(servlet-name,description?,(servlet-class|jsp-file))> servlet有3個子標籤,且必須順序出現 servlet-name,必須有,且只能出現1次 description,可選1次 servlet-class和jsp-file二選一,且只能出現一次 <!ELEMENT servlet-name(#PCDATA)> servlet-name的標籤體必須是文字 <!ELEMENT welcome-file-list (welcome-file+)> welcome-file-list至少有1個子標籤welcome-file
5、屬性宣告
二、Schema約束
1、什麼是Schema
Schema是新的XML文件約束:
Schema要比DTD強大很多,是DTD替代者;
Schema本身也是XML文件,但Schema文件的副檔名為xsd,而不是xml .
Schema功能更強大,資料型別更完善
Schema支援名稱空間
2、Schema重點要求
與DTD一樣,要求可以通過schema約束文件編寫xml文件。常見框架使用schema的有:Spring等通過提供”web-app_ 2_ 5.xsd"編寫xml文件
<?xml version="1.0" encoding="UTF-8"?> <!-- 模擬servlet2.5規範,如果開發人員需要在xml使用當前Schema約束,必須包括指定名稱空間。 格式如下: <web-app xmlns="http://www.example.org/web-app_2_5" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.org/web-app_2_5 web-app_2_5.xsd" version="2.5"> --> <xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/web-app_2_5" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://www.example.org/web-app_2_5" elementFormDefault="qualified"> <xsd:element name="web-app"> <xsd:complexType> <xsd:choice minOccurs="0" maxOccurs="unbounded"> <xsd:element name="servlet"> <xsd:complexType> <xsd:sequence> <xsd:element name="servlet-name"></xsd:element> <xsd:element name="servlet-class"></xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="servlet-mapping"> <xsd:complexType> <xsd:sequence> <xsd:element name="servlet-name"></xsd:element> <xsd:element name="url-pattern" maxOccurs="unbounded"></xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="welcome-file-list"> <xsd:complexType> <xsd:sequence> <xsd:element name="welcome-file" maxOccurs="unbounded"></xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:choice> <xsd:attribute name="version" type="double" use="optional"></xsd:attribute> </xsd:complexType> </xsd:element> </xsd:schema>