xml(可擴充套件標記語言)dtd(xml約束,文件型別定義)schema(功能比dtd更強大,用以定義xml檔案。字尾名為xsd檔案)
xml:要理解什麼是xml檔案,和html(超文字標記語言)做比較,就很清晰了。
html:是一種可在瀏覽器中顯示的檔案,主要功能是將裡面的文字內容靜態的展示出來,用於顯示資料。
html使用的標籤html語言規定好的,每個標籤都有自己特定的功能。
xml:可擴充套件標記語言,設計出來的目的是用來傳輸和儲存資料,使用者可以在檔案中自定義標籤和元素,並使用。
這門語言它沒有定義任何的標記,而標記是由使用者自己來定義,但是由於標籤名稱以及屬性名稱都由使用者自己來命名,導致別人在使用的時候很不方便。有給xml語言定義了一些約束文件,這些約束文件就專門用來約束當前這個xml中能夠書寫的具體的標籤以及屬性等資訊。
xml的首行一定要是<?xml version="1.0"?>處理指令,且”<?xml”之間不能有空白,xml元素嚴格區分大小寫,文件編碼格式預設為“UTF-8”,版本只有1.0。
xml文件宣告格式:
<?xml ?> 在這個尖括號中書寫標籤的屬性來聲明當前的xml型別限定。 屬性:版本號 字元編碼 是否是獨立存在的xml文件 <?xml version=”1.0” encoding=”編碼表” standalone=”yes|no” ?> 例如: <?xml version=”1.0” encoding=”UTF-8” ?>
DTD:用來約束XML檔案可以使用什麼標籤,標籤裡面能有什麼屬性。
一個xml檔案只能引入一個dtd約束,DTD引入方式有:
DTD可以單獨寫在檔案中,也可以直接定義在xml中,可以在xml中引入第三方的公共DTD。外部DTD的引入方式:外部DTD主要指的一個獨立的DTD檔案。 首先要書寫DTD檔案,然後在要被約束的xml檔案中引入。<!DOCTYPE 文件根結點 SYSTEM "DTD檔案的URL">
引入公共的DTD:<!DOCTYPE 文件根結點 PUBLIC "DTD名稱" "DTD檔案的URL">文件根結點 指的是當前xml中的根標籤。 PUBLIC 表示當前引入的DTD是公共的DTD
在xml中直接書寫DTD <!DOCTYPE 根標籤名 [ 具體的標籤的約束 ]>
schema:比dtd更強大,功能更全的xml約束檔案
Schema檔案本身就是使用xml檔案書寫的,同時它對需要約束的xml中的資料有嚴格的限定。
學習Schema主要來學習W3C組織定義的如何在Schema中去約束xml的標籤以及屬性,還有屬性的資料型別,以及標籤中子標籤的順序。 要定義一個Schema檔案,這時它的副檔名必須是.xsd。
定義schema檔案:
在定義Schema檔案的時候,由於這個Schema檔案本身就是xml,它也要受到別的約束。而這個約束是W3C組織提前定義好的, 在Schema檔案中需要提前引入進來在根標籤中使用屬性進行進入:
這裡要xml如何名稱空間 -xmlns屬性
名稱空間是在元素的開始標籤的xmlns屬性中定義的,語法是 xmlns:字首="uri"。
例如: xmlns:context="http://www.springframework.org/schema/context"
注意,名稱空間URI不會被解析器用於查詢資訊,其目的是賦予名稱空間一個唯一的名稱
預設的名稱空間,為元素定義預設的名稱空間可以讓我們省去在所有的字元素中使用字首的工作
例如:
<table xmlns="http://www.w3.org/TR/html4/"> <tr> <td>Apples</td> <td>Bananas</td> </tr> </table>
在xml中引入schema使用方式
在定義Schema檔案的時候,需要在<schema>根標籤中使用
targetNamespace 屬性定義當前schema定義名稱(只是一個分配的名字,根本沒有指向任何檔案),在被約束的xml檔案中先根據這個名稱引入當前的schema檔案,然後在使用
xsi:schemaLocation=”” 引入具體的schema檔案。(因為targetNamespace屬性定義的schema名稱,只是一個名稱而已,所以在xml檔案中需要通過schemaLocation來宣告指定所遵循的Schema檔案的具體位置)
(xsi:schemaLocation 使用它引入某個schema時,先要使用名稱空間, 空格 ,檔名)