XML驗證

合法的XML和形式良好的XML ?

擁有正確語法的 XML 被稱爲「形式良好」的 XML。

  1. 第一行是 XML 聲明。它定義 XML 的版本 (1.0) 和所使用的編碼 (ISO-8859-1 = Latin-1/西歐字符集)。
  2. XML 文檔必須有根元素
  3. XML 文檔必須有關閉標籤
  4. XML 標籤對大小寫敏感
  5. XML 元素必須被正確的嵌套
  6. XML 屬性必須加引號

經過 DTD 驗證的 XML 是「合法」的 XML。

DTD

定義:DTD(文檔類型定義)的做用是定義 XML 文檔的合法構建模塊。它使用一系列的合法元素來定義文檔結構。

DTD聲明

內部的 DOCTYPE 聲明

<!DOCTYPE 根元素 [元素聲明]>
代碼示例:編碼

1 <!DOCTYPE note [
2   <!ELEMENT note (to,from,heading,body)>
3   <!ELEMENT to      (#PCDATA)>
4   <!ELEMENT from    (#PCDATA)>
5   <!ELEMENT heading (#PCDATA)>
6   <!ELEMENT body    (#PCDATA)>
7 ]>

代碼解釋:
2 此文檔是 note 類型的文檔
3 note 元素有四個元素:"to、from、heading,、body"
4 to 元素爲 "#PCDATA" 類型code

外部文檔聲明

<!DOCTYPE 根元素 SYSTEM "文件名">xml

<!DOCTYPE note SYSTEM "note.dtd">
//note.dtd
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>

爲何使用 DTD

  1. 經過 DTD,每個 XML 文件都可攜帶一個有關其自身格式的描述。
  2. 經過 DTD,獨立的團體可一致地使用某個標準的 DTD 來交換數據。
  3. 應用程序也可以使用某個標準的 DTD 來驗證從外部接收到的數據。
  4. 使用 DTD 來驗證自身的數據。

DTD構建模塊

構建模塊有以下幾種,全部的XML都是由其構成element

  • 元素
  • 屬性
  • 實體
  • PCDATA
    PCDATA 的意思是被解析的字符數據(parsed character data)。
    可把字符數據想象爲 XML 元素的開始標籤與結束標籤之間的文本。
    PCDATA 是會被解析器解析的文本。這些文本將被解析器檢查實體以及標記。文本中的標籤會被看成標記來處理,而實體會被展開。不過,被解析的字符數據不該當包含任何 &、< 或者 > 字符;須要使用 &、< 以及 > 實體來分別替換它們。
  • CDATA
    CDATA 的意思是字符數據(character data)。
    CDATA 是不會被解析器解析的文本。在這些文本中的標籤不會被看成標記來對待,其中的實體也不會被展開。

DTD元素

//聲明一個元素
//grammer
<!ELEMENT 元素名稱 類別>
<!ELEMENT 元素名稱 (元素內容)>
//聲明一個空元素
//grammer
<!ELEMENT 元素名稱 EMPTY>
//eg:
<!ELEMENT br EMPTY>
//聲明只有 PCDATA 的元素
//grammer
<!ELEMENT 元素名稱 (#PCDATA)>
//eg:
<!ELEMENT from (#PCDATA)>
//聲明帶有任何內容元素
//grammer
<!ELEMENT 元素名稱 ANY>
//eg:
<!ELEMENT note ANY>
//帶有子元素(序列)的元素
//grammer
<!ELEMENT 元素名稱 (子元素名稱 1)>
<!ELEMENT 元素名稱 (子元素名稱 1,子元素名稱 2,.....)>
//eg:
<!ELEMENT note (to,from,heading,body)>//後續子元素出現順序同樣
//聲明只出現一次的元素
//grammer
<!ELEMENT 元素名稱 (子元素名稱)>
//eg:
<!ELEMENT note (message)>
//聲明最少出現一次的元素
//grammer
<!ELEMENT 元素名稱 (子元素名稱+)>
//eg:
<!ELEMENT note (message+)>
//聲明出現零次或屢次的元素
//grammer
<!ELEMENT 元素名稱 (子元素名稱*)>
//eg:
<!ELEMENT note (message*)>
//聲明出現零次或一次的元素
//grammer
<!ELEMENT 元素名稱 (子元素名稱?)>
//eg:
<!ELEMENT note (message?)>
//聲明「非.../既...」類型的內容
//eg:
<!ELEMENT note (to,from,header,(message|body))>
//聲明混合型的內容
//eg:
<!ELEMENT note (#PCDATA|to|from|header|message)*>

DTD屬性

屬性格式

<!ATTLIST 元素名稱 屬性名稱 屬性類型 默認值>

屬性類型默認值請參考:http://www.w3school.com.cn/dtd/dtd_attributes.asp文檔

DTD實體

什麼是實體?

實體是用於定義引用普通文本或特殊字符的快捷方式的變量。
實體引用是對實體的引用。
實體可在內部或外部進行聲明。get

內部實體聲明

//grammer
<!ENTITY 實體名稱 "實體的值">
//DTD
<!ENTITY writer "Bill Gates">
<!ENTITY copyright "Copyright W3School.com.cn">
//XML
<author>&writer;&copyright;</author>

外部實體聲明

//grammer
<!ENTITY 實體名稱 SYSTEM "URI/URL">
//DTD
<!ENTITY writer SYSTEM "http://www.w3school.com.cn/dtd/entities.dtd">
<!ENTITY copyright SYSTEM "http://www.w3school.com.cn/dtd/entities.dtd">
//XML
<author>&writer;&copyright;</author>

XML Schema(XSD)

定義:是基於XML 的 DTD 替代者,描述 XML 文檔的結構。
代碼示例:string

<xs:element name="note">

<xs:complexType>
  <xs:sequence>
    <xs:element name="to"      type="xs:string"/>
    <xs:element name="from"    type="xs:string"/>
    <xs:element name="heading" type="xs:string"/>
    <xs:element name="body"    type="xs:string"/>
  </xs:sequence>
</xs:complexType>

</xs:element>
相關文章
相關標籤/搜索