xml技術DTD約束定義

XML約束javascript

  在XML技術中,能夠編寫一個文檔來約束一個xml文檔的書寫規範,這稱之爲XML約束
爲何須要XML約束?html

  class.xml <stu><面積>?人怎麼會有面積元素?java

  xml 文件標籤能夠隨便寫,dtd能夠對其有所要求按照合理的需求寫程序員

xml文件約束--dtd瀏覽器

  document type definition 文檔類型定義
做用:工具

  定義xml標籤約束,使開發者按照定義書寫,也能夠約束html文件測試

使用:
在項目中如須要一個xml文件,項目經理 可定義一個dtd文件,要求全部程序員按照此規範書寫xml文件ui

掌握要求:
可根據別人提供的dtd文件,寫出對應的xml文件即編碼

備註:dtd文件也必須使用utf-8編碼和文件保持一致
引入dtd
  格式:url

  <!DOCTYPE 根元素名 SYSTEM "dtd路徑">  本地使用SYSTEM
備註:默認狀況下瀏覽器不檢測處理dtd約束,須要本身寫代碼測試或藉助工具

文件1
checkDTD.html
此只針對ie5 支持 別的瀏覽器不支持
<html>
<head>
<title>測試dtd</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
<script language="javascript">
//建立一個xml解析器
var xmldoc=new ActiveXObject("Microsoft.XMLDOM");
//開啓校驗功能
xmldoc.validateOnParse=true;
//指定對那個xml文件校驗
xmldoc.load("class.xml");
//若是錯誤,輸出錯誤信息
document.write("錯誤信息="+xmldoc.parseError.reason+"<br/>");
document.write("錯誤行號="+xmldoc.parseError.line);
</script>
</head>
</html>

class.xml文件
<?xml version="1.0" encoding="utf-8"?>
<!--必定保證文件的保存編碼方式爲utf-8-->
<!DOCTYPE class SYSTEM "class.dtd">
<class>
<student ><!--優秀學生-->
<name>杜傑</name>
<sex>boy</sex>
<age>28</age>
<MT>12312</MT>
</student>
</class>

xml.dtd文件
<!ELEMENT class (student+)>
<!ELEMENT student(name,age,des)> 學生標籤下可有 名字,年齡,介紹三個元素
<!ELEMENT name(#PCDATA)> 對名字進行說明
<!ELEMENT age(#PCDATA)>
<!ELEMENT des(#PCDATA)>

DTD文檔聲明和引用  等同於CSS
--內部DTD文檔
  <!DOCTYPE 根元素 [定義內容]>
--外部DTD文檔
  <!DOCTYPE 根元素 SYSTEM "DTD文件路徑">
--內外部DTD文檔結合
  <!DOCTYPE 根元素 SYSTEM "DTD文件路徑"[定義內容]>

引用DTD約束
  XML文件應用DOCTYPE 聲明語句來指明它所遵循的DTD文件,DOCTYPE聲明語句有兩種形式
@ 引用文件爲本地
  <!DOCTYPE 文檔根節點 SYSTEM "dtd文件路徑">
@ 引用文件時一個公共的文件時
  <!DOCTYPE 文檔根節點 PUBLIC "DTD名稱" "DTD文件url">
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

DTD文件定義
<!ELEMENT NAME CONTENT>
<!ELEMENT des(#PCDATA)>
  ELEMENT 關鍵字
  NAME 元素名
  CONTENT 元素類型(大寫)
CONTENT類型分析:
  EMPTY    該元素不能包含子元素和文本,但能夠有屬性(空元素)
  ANY      該元素能夠包含任何在DTD中定義的元素內容
  #PCDATA   能夠包含任何字符數據,可是不能在其中包含子標籤 需用 ( ) 括起來

組合類型
  <!ELEMENT 家庭 (人+,家電*)>
  +    元素  一到多個
  *    元素  0到多個
       元素  0到1次
  |        元素  在列出的對象中選擇一個 man|women 至少出現一個
  ()      元素  分組
  ,        對象必須按指定的順序出現(name,age,sex) name,age,sex必須出現而且按定義順序出現


<!ELEMENT 家庭 (人+,家電)>
  若是去掉* 則含義是定義時必須有家電

屬性定義
  若是dtd文件沒有定義屬性 則在xml文件里加入屬性時會報錯
<!ATTLIST 元素名稱
  屬性名稱 類型 屬性特色
  屬性名稱 類型 屬性特色...
>
類型分析:

  CDATA      屬性值能夠是任何字符(包括數字和中文)
  ID         這個屬性的值必須是惟一的(對於同此類型的標籤),而且以字母開頭
  IDREF/IDREFS  id引用
  IDREF       屬性值指向文檔中其它地方聲明的ID類型的值
  IDREFS同 IRREF 但能夠具備由空格分開的多個引用
  Enumerated   枚舉 在幾個值裏取值 性別

屬性特色
  #REQUIRED   該屬性必須有
  #IMPLIED    該屬性無關緊要
  #FIXED value    該屬性的值必須爲此固定值
  Defalut value     不給則取默認值

寫法:  就近原則 對元素指定屬性
<!ELEMENT class (student+)>
<!ATTLIST student
address CDATA #REQUIRED
>

<!ATTLIST person sex(boy|girl) #REQUIRED>


ENTITY/ENTITIES 實體定義

  用於爲一段內容建立一個別名,之後再xml文檔中就可使用別名引用這段內容
在DTD定義中,一條<!ENTITY ...>語句用於定義一個實體
實體能夠分爲兩種類型
  引用實體參數實體
引用實體
1.在DTD中定義
  <!ENTITY 實體名 內容>
    <!ENTITY sto "我的介紹">
2.在xml引用   &實體名
  &sto; 引用符號 & 和結束分號;必須有

參數實體
1.在DTD中定義參數實體
  <!ENTITY % 實體名稱 "實體內容">

2.在DTD文件中本身使用
  %實體名;

DTD案例:
電視節目表 DTD
<!DOCTYPE TVSCHEDULE [

<!ELEMENT TVSCHEDULE (CHANNEL+)>
<!ELEMENT CHANNEL (BANNER,DAY+)>
<!ELEMENT BANNER (#PCDATA)>
<!ELEMENT DAY (DATE,(HOLIDAY|PROGRAMSLOT+)+)>
<!ELEMENT HOLIDAY (#PCDATA)>
<!ELEMENT DATE (#PCDATA)>
<!ELEMENT PROGRAMSLOT (TIME,TITLE,DESCRIPTION?)>
<!ELEMENT TIME (#PCDATA)>
<!ELEMENT TITLE (#PCDATA)>
<!ELEMENT DESCRIPTION (#PCDATA)>

<!ATTLIST TVSCHEDULE NAME CDATA #REQUIRED>
<!ATTLIST CHANNEL CHAN CDATA #REQUIRED>
<!ATTLIST PROGRAMSLOT VTR CDATA #IMPLIED>
<!ATTLIST TITLE RATING CDATA #IMPLIED>
<!ATTLIST TITLE LANGUAGE CDATA #IMPLIED>

]>根據DTD寫出相應的xml文檔

相關文章
相關標籤/搜索