XML約束

前言;在xml技術裏,能夠編寫一個文檔來約束xml文檔的書寫規範,這稱之爲xml約束。爲何咱們須要編寫xml約束呢,由於xml是可擴展的標記語言,這致使xml的編寫html

太過於自由了,這樣的話再不少狀況下是不行的url

1、DTD的定義

1.1DTD的定義

DTD是一種經常使用的約束技術,dtd文件的後綴名爲.dtd,DTD文件有本身獨立的語法規範。描述元素、屬性和其餘雜項在xml文檔中的使用規則說明spa

1.2DTD的做用

驗證xml文檔是否是一個有效的xml文檔。.net

有效:若是有個良構的xml文檔知足的dtd的聲明,那麼這個文檔是一個有效的xml文檔hibernate

有效必定良構,可是良構不必定有效code

1.3DTD的分類

dtd分爲三類,外部dtd和內部dtd還有混合的dtd。xml

1)內部的DTD:DTD和xml文檔在一個文件中,例如:htm

<?xml version="1.0" encoding="UTF-8"?>
		<!DOCTYPE students[
			<!ELEMENT students (stu+)>
			<!ELEMENT stu (id,name,age)>
			<!ELEMENT id   (#PCDATA)>
			<!ELEMENT name (#PCDATA)>
			<!ELEMENT age  (#PCDATA)>
		]>
<students>
	<stu>
		<id>1</id>
		<name>tom</name>
		<age>20</age>
	</stu>
</students>

2)外部的DTD:DTD和xml文檔不在同一個文件中。例如:對象

<?xml version="1.0" encoding="UTF-8"?>
		<!DOCTYPE students SYSTEM "../dtd/student.dtd">
		<students>
			<stu>
				<id>1</id>
				<name>tom</name>
				<age>20</age>
			</stu>
		</students>
		dtd/student.dtd文件:
		<!ELEMENT students (stu+)>
		<!ELEMENT stu (id,name,age)>
		<!ELEMENT id   (#PCDATA)>
		<!ELEMENT name (#PCDATA)>
		<!ELEMENT age  (#PCDATA)>

3)混合的DTD:既有外部DTD,又有內部DTD。例如:blog

<?xml version="1.0" encoding="UTF-8"?>
		<!DOCTYPE students SYSTEM "../dtd/student.dtd"[
			<!ELEMENT stu (id,name,age)>
			<!ELEMENT id   (#PCDATA)>
			<!ELEMENT name (#PCDATA)>
			<!ELEMENT age  (#PCDATA)>
		]>
		<students>
			<stu>
				<id>1</id>
				<name>tom</name>
				<age>20</age>
			</stu>
		</students>

		dtd/student.dtd文件:
		<!ELEMENT students (stu+)>

1.4外部DTD

引用外部dtd時分爲兩種;一種在本地和在一個公共的文件裏

SYSTEM表示引用的dtd文件在本地,例如:

<!DOCTYPE students SYSTEM".../dtd/student.dtd">

public表示引用的dtd文件是一個公共的文件,

<!DOCTYPE 根元素 public" dtd文件的描述信息" "dtd文件的url">

例如:<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

2、DTD文件對xml文檔中元素的約束

2.1元素約束

格式:<!ELEMENT 元素名(內容模式)>

內容模式:1)EMPTY:元素不能包含子元素和文本(空元素)

2)#PCDATA:能夠包含任何字符數據,可是不能在其中包含任何子元素

3)ANY:元素內容爲任意的,主要是使用在元素內容不肯定的狀況下

4)修飾符:| + * ?,默認修飾符

|在列出的元素中選擇一個

+該元素最少出現一次,能夠出現不少次(1次或n次)

*表示該元素容許出現零次到任意屢次(0次到n次)

?該元素能夠出現,但只能出現一次(0次到一次)

,對象必須按指定的順序出現

默認修飾符:就是什麼修飾符都沒有加

例如:<!ELEMENT students(stu)>

<students>

  <!-- 這裏只能出現stu元素一次-->

     <!--- stu元素不出現也驗證不一樣過-->

  <stu></stu>

<students>

2.2混合元素

子元素是任意類型,出現任意次數,而且沒有出現順序要求,元素中便可有文本數據也能夠有子元素,例如

<!ELEMENT name(#PCDATE|a|b)*>

注:優先寫#PCDATE,如(#PCDATE|a)*正確,(a|#PCDATE)錯誤。

3、屬性約束

3.1格式要求

<!ATTLIST 元素名稱

      屬性名稱   值類型  屬性特色

      屬性名稱  值類型  屬性特色

>

3.2屬性類型

1)CDATA:屬性值能夠是任何字符(可包括數字和中文),例如:

dtd文件:
				<!ELEMENT students (stu*)>
				<!ELEMENT stu (#PCDATA)>
					<!ATTLIST stu 
						id   CDATA #REQUIRED
						name CDATA #REQUIRED
					>
				xml文件:
				<students>
					<stu id="1" name="tom"></stu>
				</students>

2)ID:屬性值必須惟一,屬性值必須知足xml命名規則

3)enumerated:(枚舉值1|枚舉值2|枚舉值3....),屬性值必須在枚舉值中

3.3屬性特色

1)#REQUIRED:元素的全部實例都必須有該屬性

2)#IMPLIED:屬性能夠不出現

3)default-value:屬性能夠不出現,而且當它不出現的時候是有默認值的

4)#FIXED:屬性能夠不出現,可是若是出現的話就必定是指定的屬性值

相關文章
相關標籤/搜索