XML & DTD 學習筆記

XML:Extensible Markup Language,可擴展標記語言。目前一般使用的是W3C組織2000年發佈的1.0版本,現在最新的版本是1.1版,不過1.0應用範圍相對更廣一些。一般應用於自定義標記、異構系統整合、配置文件和存儲數據等。


DTD:Document Type Definition,文檔類型定義,用於約束XML中標籤的使用(如何出現、如何嵌套以及如何定義屬性等)。
XML Schema:也稱爲XML Schema Definition(XSD),使用xml定義,定義了比DTD更復雜的規則來約束xml,如使用了xmlns來定義命名空間等。

 

XML語法:
1.通常使用<?xml version="1.0"?>聲明語句開頭,可以不聲明這一句,如果聲明後必須在開頭的地方(前面不能有註釋)。version後面可以加入encoding和standalone屬性(可有其一或其二),如<?xml version="1.0" encoding="gbk" standalone="yes"?>,該聲明語句的encoding屬性默認值爲utf-8,如果需要處理中文字符需要聲明爲gbk或者gb2312。standalone屬性代表這個xml文檔是否獨立存在,如果爲yes表示這個文檔是獨立存在的,如果文檔有引用外部文件將會出現錯誤。如果爲no的話則可以引用外部文件,默認值爲no。


2.大小寫敏感、標籤不可以嵌套,標籤名不能以數字或"_"(下劃線)開頭,不能以xml/XML/Xml開頭,不能包含空格,名稱中間一般不要使用:(一般在命名空間中使用,參看XML Schema)。


3.xml文件一般包含如下幾部分:
文檔聲明:(<?xml version="1.0"?>部分)
元素:(如根元素,每個well-form(格式良好的xml文件)只能定義一個根元素,也可以稱爲節點)
屬性:(在元素標籤中使用,用於對元素進行屬性說明)
註釋:跟HTML的註釋類型,<!--註釋內容-->
CDATA塊:即字符數據(Character Data),xml解析器不會對該部分語言進行解析,對應於PCDATA,Parsed Character Data,xml解析器會對該部分語言進行解析。
使用方法:<![CDATA[需要直接顯示的內容]]>
特殊字符:<(&lt;) >(&gt;) &(&amp;) "(&quot;) '(&apos;)
處理指令:PI,Processing instruction,用於指揮解析引擎如何解析xml文檔內容,必須以"<?"開頭,"?>"結尾,如<?xml version="1.0"?>

DTD文檔定義,例student.dtd:
<!ELEMENT students (student+)>
<!ELEMENT student (name,age,sex)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (male|female)>
<!ATTLIST student id ID #REQUIRED>

該dtd文件約束的xml可如下定義:
<?xml version="1.0" encoding="gbk"?>
<!DOCTYPE students SYSTEM "student.dtd"> <!--students是根元素名字,SYSTEM代表該文件是在本地或非PUBLIC的,後面是文件的名字-->
<students>
   <student id="s001">
      <name>張三</name>
      <age>23</age>
      <sex>male</sex>
   </student>
</students>

dtd文件也可以直接在xml文件內部定義,如:
<?xml version="1.0" encoding="gbk"?>
<!DOCTYPE students [
<!ELEMENT students (student+)>
<!ELEMENT student (name,age,sex)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (male|female)>
<!ATTLIST student id ID #REQUIRED>
]>
<students>
   <student id="s001">
      <name>張三</name>
      <age>23</age>
      <sex>male</sex>
   </student>
</students>

 

xml校驗(Validation):
IE5以上的瀏覽器內置了xml的解析工具Microsoft.XMLDOM,但是IE的xml校驗默認是關閉的,所以默認情況IE只會對xml文件進行格式檢查(是否爲well-form的xml文件),而不會檢查dtd文件並用它約束xml的內容。如果需要對xml文件進行dtd驗證,可以編寫javascript代碼進行驗證。例:
<script type="text/javascript">
//創建IE瀏覽器的xml文檔解析器
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
//開啓驗證,默認是關閉的
xmlDoc.validateOnParse="true";
//加載xml文件
xmlDoc.load("students.xml");
//顯示錯誤信息
document.write("錯誤的原因:"+xmlDoc.parseError.reason+"</br>");
document.write("錯誤的行號:"+xmlDoc.parseError.line);
</script>

 

其他編輯/校驗xml的開發工具:
Eclipse:使用Eclipse編寫xml文檔是可以對xml文檔進行well-form檢查和dtd校驗的,只需對選中xml文件,右鍵-Validation就可以對xml文件進行驗證。
MyEclipse:同Eclipse,MyEclipse也是可以對xml進行well-form和dtd檢查的,但是因爲MyEclipse內置的MyEclipse Web Browser是IE的,所以直接用它查看的話還是不可以對文檔進行dtd校驗的。
XML Spy:專業的XML開發工具,不過是商用的,可以很方便對文檔進行dtd驗證,而且直接用內置的Web Browser查看時也會先對文檔進行well-form和dtd驗證的。

 

<!ELEMENT studnet (name,age,sex)>:name、age、sex只能出現一次,且出現的次序必須跟聲明時的順序一樣
<!ELEMENT studnet (name|age|sex)>:name、age、sex只能出現其中一個元素
<!ELEMENT studnet (name age sex)>:name、age、sex出現的次序可以隨意只能出現--網上有些類似的介紹,其實此方法是錯誤的,因爲內容名出現空格xml解釋器會報錯,如果要次序隨意出現的話只能改成如下格式:<!ELEMENT studnet (name|age|sex)*>

?:出現0或1次,如<!ELEMENT students (student?)>表示student只能出現0或1次
+:出現1次到多次,如<!ELEMENT students (student+)>表示student可以出現1次到多次
*:出現0次到多次,如<!ELEMENT students (student*)>表示student可以出現0次或多次

實體定義和引用:
<!ENTITY author "Bill Gates">
<!ENTITY copyright "&#169;Copyright 2011
www.microsoft.com"><!--其中&#169;爲UCS中©符號的引用位置-->
引用方法:&copyright;&author;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章