您好,登錄后才能下訂單哦!
小編給大家分享一下XML文件約束DTD的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
我們編寫文檔來約束一個XML文檔的書寫規范,這稱之為XML約束。
常用的約束技術有:
XML DTD
XML Schema
DTD的基本概念:
document type definition 文檔類型定義
DTD文件一般和XML文件配合使用,主要是為了約束XML文件。
XML文件引入DTD文件,這樣XML可以自定義標簽,但又受到DTD文件的約束。比如上一節使用XML描述一個班級的信息,如果我們給每一個學生定義一個<面積>
標簽,語法上也是沒有錯誤的,但是不符合語義,學生怎么能夠用面積來描述呢?這時候我們就需要用到DTD文件來約束這個XML。
<?xml version="1.0" encoding="gb2312"?><class> <stu id="001"> <name>楊過</name> <sex>男</sex> <age>20</age> <面積>100</面積> </stu></class>
基本語法:
<!ELEMENT 元素名 類型>
我們還以班級為例,編寫如下DTD文件,myClass.dtd:
<!ELEMENT 班級 (學生+)><!ELEMENT 學生 (名字,年齡,介紹)><!ELEMENT 名字 (#PCDATA)><!ELEMENT 年齡 (#PCDATA)><!ELEMENT 介紹 (#PCDATA)>
第一行表示根元素為班級,并且有學生這個子元素,子元素為1或者多個。
第二行表示學生的子元素為名字,年齡,介紹
名字下面沒有子元素了,那么#PCDATA表示名字里面可以放任意文本。
年齡和介紹也是類似。
編寫myClass.xml文件并引入DTD文件如下:
<?xml version="1.0" encoding="utf-8"?><!--引入dtd文件,約束這個xml--><!DOCTYPE 班級 SYSTEM "myClass.dtd"><班級> <學生> <名字>周小星</名字> <年齡>23</年齡> <介紹>學習刻苦</介紹> </學生> <學生> <名字>林曉</名字> <年齡>25</年齡> <介紹>是一個好學生</介紹> </學生> </班級>
引入中寫的:SYSTEM,表示當前的DTD文件是本地的
如果寫的是PUBLIC,則表示引入的DTD文件是來自于網絡的.
這時候引入的DTD文件是沒有產生作用的,如果我們在學生元素中添加子元素<面積>
,打開這個XML文件,瀏覽器依然不會報錯。
<?xml version="1.0" encoding="utf-8"?><!--引入dtd文件,約束這個xml--><!DOCTYPE 班級 SYSTEM "myClass.dtd"><班級> <學生> <名字>周小星</名字> <年齡>23</年齡> <介紹>學習刻苦</介紹> <面積>100平米</面積> </學生> <學生> <名字>林曉</名字> <年齡>25</年齡> <介紹>是一個好學生</介紹> </學生> </班級>
我們需要編程校驗XML文檔的正確性。
IE5以上的瀏覽器內置了XML解析工具:Microsoft.XMLDOM,開發人員可以編寫JavaScript代碼,利用這個解析工具裝載XML文件,并對XML文件進行DTD驗證。
我們編寫myXmlTools.html來對這個XML進行校驗,如下:
<html> <head> <!--自己編寫一個簡單的解析工具,去解析XML DTD是否配套--> <script language="javascript"> // 創建xml文檔解析器對象 var xmldoc = new ActiveXObject("Microsoft.XMLDOM"); // 開啟xml校驗 xmldoc.validateOnParse = "true"; // 裝載xml文檔,即指定校驗哪個XML文件 xmldoc.load("myClass.xml"); document.writeln("錯誤信息:"+xmldoc.parseError.reason+"<br>"); document.writeln("錯誤行號:"+xmldoc.parseError.line); </script> </head> <body> </body></html>
用IE瀏覽器打開這個html文件,可以看到運行結果:
可以看到第9行正是我們添加的<面積>
這一行。
1.內部DTD文檔
<!DOCTYPE 根元素 [定義內容]>
2.外部DTD文檔
引入外部的DTD文檔分為兩種:
(1)當引用的DTD文件是本地文件的時候,用SYSTEM標識,并寫上”DTD的文件路徑”,如下:
<!DOCTYPE 根元素 SYSTEM "DTD文件路徑">
(2)如果引用的DTD文件是一個公共的文件時,采用PUBLIC標識,如下方式:
<!DOCTYPE 根元素 PUBLIC "DTD名稱" "DTD文件的URL">
比如下例:
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems,Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<!ELEMENT NAME CONTENT>
其中:
- ELEMENT是關鍵字,是不能修改的
- NAME表示元素名稱
- CONTENT是元素類型,必須要大寫!CONTENT的內容有三種寫法:
(1)EMPTY——表示該元素不能包含子元素和文本,但可以有屬性。
(2)ANY——表示該元素可以包含任何在該DTD中定義的元素內容
(3)#PCDATA——可以包含任何字符數據,但是不能在其中包含任何子元素
DTD中這樣規定:
<!ELEMENT 家庭(人+,家電*)>
這個DTD規定了家庭元素中可以有1到多個”人”這個子元素,也可以有0到多個”家電”這個子元素。其中的加號”+”和星號”*”的含義與正則表達式中的含義一致。
XML這樣寫:
<家庭> <人 名字="張曉明" 性別="男" 年齡="25"/> <人 名字="李小鋼" 性別="男" 年齡="36" 愛好="作個教育家和偉人"/> <家電 名稱="彩電" 數量="3"/></家庭>
關于組合類型,有下述的的修飾符可以使用:
符號 | 用途 | 示例 | 示例說明 |
---|---|---|---|
() | 用來給元素分組 | (古龍|金庸),(王朔|余杰) | 分成兩組 |
| | 在列出的對象中選擇一個 | (男人|女人) | 表示男人或者女人必須出現,兩者至少選其一 |
+ | 該對象必須出現一次或者多次 | (成員+) | 表示成員必須出現,而卻可以出現多個成員 |
* | 該對象允許出現0次或者多次 | (愛好*) | 愛好可以出現兩次到多次 |
? | 該對象必須出現0次或者1次 | (菜鳥?) | 菜鳥可以出現,也可以不出現,如果出現的話,最多只能出現一次 |
, | 對象必須按指定的順序出現 | (西瓜,蘋果,香蕉) | 表示西瓜、蘋果、香蕉必須出現,并且按這個順序出現 |
DTD中屬性的定義是這樣的:
<!ATTLIST 元素名稱 屬性名稱 類型 屬性特點 屬性名稱 類型 屬性特點...... >
其中,屬性的類型有下面5種:
(1) CDATA
(2) ID
(3) IDREF/IDREFS
(4) Enumerated
(5) ENTITY/ENTITIES
屬性的特點有如下4種:
(1) #REQUIRED,表示這個屬性必須給,不給就報錯
(2) #IMPLIED,表示這個屬性可以給也可以不給
(3) #FIXED value,表示這個屬性必須給一個固定的value值
(4) Default value,表示這個屬性如果沒有值,就分配一個默認的value值
比如,我們想在學生這個子元素上加上地址這個屬性,而且這個屬性是必須的,示例如下:
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE 班級 SYSTEM "myClass.dtd"><班級> <學生 地址="香港"> <名字>周小星</名字> <年齡>23</年齡> <介紹>學習刻苦</介紹> </學生> <學生 地址="澳門"> <名字>林曉</名字> <年齡>25</年齡> <介紹>是一個好學生</介紹> </學生> </班級>
這個時候相應的DTD文件也要更新,不然就會報錯,如下:
<!ELEMENT 班級 (學生+)><!ELEMENT 學生 (名字,年齡,介紹)><!ATTLIST 學生 地址 CDATA #REQUIRED><!ELEMENT 名字 (#PCDATA)><!ELEMENT 年齡 (#PCDATA)><!ELEMENT 介紹 (#PCDATA)>
(1)屬性類型-CDATA,表示屬性值可以是任何字符(包括中文和數字)
<!ATTLIST 木偶 姓名 CDATA #REQUIRED>
<木偶 姓名="匹諾曹"/><木偶 姓名="PiNuocao"/><木偶 姓名="123"/>
(2)屬性類型-ID,表明該屬性的取值必須是唯一的,但是屬性的值不能是以數字開頭!
<!ELEMENT 公司職員 ANY><!ATTLIST 公司職員 編號 ID #REQUIRED 姓名 CDATA #REQUIRED>
<公司職員 編號="Z001" 姓名="張三"/><公司職員 編號="Z002" 姓名="李思"/>
(3)屬性類型-IDREF/IDREFS
- IDREF屬性的值指向文檔中其它地方聲明的ID類型的值
- IDREFS同IDREF,但是可以具有由空格分開的多個引用。
<!ELEMENT 家庭(人+)><!ELEMENT 人 EMPTY><!ATTLIST 人 relID ID #REQUIRED paraentID IDREFS #IMPLIED name CDATA #REQUIRED>
<家庭> <人 relID="P_1" name="爸爸"/> <人 relID="P_2" name="媽媽"/> <人 relID="P_3" parentID="P_1 P_2" name="兒子"/></家庭>
(4)屬性類型-Enumerated,事先定義好一些值,屬性的值必須在所列出的值的范圍內。
<!ATTLIST person 婚姻狀態 (single|married|porced|widowed) #IMPLIED><!ATTLIST person 性別 (男|女) #REQUIRED>
(5)屬性類型-ENTITY,實體
實體定義:
- 實體用于為一段內容創建一個別名,以后在XML文檔中就可以使用別名引用這段內容了。
- 在DTD定義中,一條!ENTITY語句用于定義一個實體。
- 實體可分為兩種類型:引用實體和參數實體。引用實體是被XML文檔應用的,而參數實體是被DTD文件本身應用的。
①引用實體:
引用實體主要在XML文檔中被應用
語法格式如下,引用實體的定義內容最好放在DTD文件的最后。
<!ENTITY 實體名稱 "實體內容">
引用方式:&實體名稱; 末尾要帶上分號,這個引用將直接轉變成實體內容
舉例如下:
<!ENTITY copyright "I am a programmer">.... ©right;
②參數實體:
參數實體被DTD文件自身使用
語法格式為:
<!ENTITY % 實體名稱 "實體內容">
引用方式為:%實體名稱
舉例:
<!ENTITY % TAG_NAME "姓名|EMAIL|電話|地址"><!ELEMENT 個人信息 (%TAG_NAME;|生日)><!ELEMENT 客戶信息 (%TAG_NAME;|公司名)>
學習DTD的目標在于:
(1)要求我們能夠看得懂DTD文件,
(2)我們可以根據給出的DTD寫出對應的XML文件
下面我們看一個案例,下述的DTD文件是從W3School在線教程中的DTD案例中拿過來的,細看每一行,我們都應該能夠看得懂。
<!ENTITY AUTHOR "John Doe"><!ENTITY COMPANY "JD Power Tools, Inc."><!ENTITY EMAIL "jd@jd-tools.com"><!ELEMENT CATALOG (PRODUCT+)> <!ELEMENT PRODUCT(SPECIFICATIONS+,OPTIONS?,PRICE+,NOTES?)><!ATTLIST PRODUCTNAME CDATA #IMPLIEDCATEGORY (HandTool|Table|Shop-Professional) "HandTool"PARTNUM CDATA #IMPLIEDPLANT (Pittsburgh|Milwaukee|Chicago) "Chicago"INVENTORY (InStock|Backordered|Discontinued) "InStock"> <!ELEMENT SPECIFICATIONS (#PCDATA)><!ATTLIST SPECIFICATIONSWEIGHT CDATA #IMPLIEDPOWER CDATA #IMPLIED><!ELEMENT OPTIONS (#PCDATA)> <!ATTLIST OPTIONSFINISH (Metal|Polished|Matte) "Matte" ADAPTER (Included|Optional|NotApplicable) "Included"CASE (HardShell|Soft|NotApplicable) "HardShell"><!ELEMENT PRICE (#PCDATA)> <!ATTLIST PRICEMSRP CDATA #IMPLIEDWHOLESALE CDATA #IMPLIEDSTREET CDATA #IMPLIEDSHIPPING CDATA #IMPLIED><!ELEMENT NOTES (#PCDATA)>
然后我們可以根據該DTD編寫如下最簡單的XML文件:
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE CATALOG SYSTEM "product.dtd"><CATALOG> <PRODUCT NAME="康帥傅礦泉水" CATEGORY="Table" PARTNUM="12" PLANT="Chicago"> <SPECIFICATIONS WEIGHT="20" POWER="18">這里是細節</SPECIFICATIONS> <PRICE>25</PRICE> <PRICE>28</PRICE> </PRODUCT></CATALOG>
然后我們用Microsoft.XMLDOM校驗該XML,會發現沒有任何錯誤。但是要注意編碼。
我們編寫文檔來約束一個XML文檔的書寫規范,這稱之為XML約束。
常用的約束技術有:
XML DTD
XML Schema
DTD的基本概念:
document type definition 文檔類型定義
DTD文件一般和XML文件配合使用,主要是為了約束XML文件。
XML文件引入DTD文件,這樣XML可以自定義標簽,但又受到DTD文件的約束。比如上一節使用XML描述一個班級的信息,如果我們給每一個學生定義一個<面積>
標簽,語法上也是沒有錯誤的,但是不符合語義,學生怎么能夠用面積來描述呢?這時候我們就需要用到DTD文件來約束這個XML。
<?xml version="1.0" encoding="gb2312"?><class> <stu id="001"> <name>楊過</name> <sex>男</sex> <age>20</age> <面積>100</面積> </stu></class>
基本語法:
<!ELEMENT 元素名 類型>
我們還以班級為例,編寫如下DTD文件,myClass.dtd:
<!ELEMENT 班級 (學生+)><!ELEMENT 學生 (名字,年齡,介紹)><!ELEMENT 名字 (#PCDATA)><!ELEMENT 年齡 (#PCDATA)><!ELEMENT 介紹 (#PCDATA)>
第一行表示根元素為班級,并且有學生這個子元素,子元素為1或者多個。
第二行表示學生的子元素為名字,年齡,介紹
名字下面沒有子元素了,那么#PCDATA表示名字里面可以放任意文本。
年齡和介紹也是類似。
編寫myClass.xml文件并引入DTD文件如下:
<?xml version="1.0" encoding="utf-8"?><!--引入dtd文件,約束這個xml--><!DOCTYPE 班級 SYSTEM "myClass.dtd"><班級> <學生> <名字>周小星</名字> <年齡>23</年齡> <介紹>學習刻苦</介紹> </學生> <學生> <名字>林曉</名字> <年齡>25</年齡> <介紹>是一個好學生</介紹> </學生> </班級>
引入中寫的:SYSTEM,表示當前的DTD文件是本地的
如果寫的是PUBLIC,則表示引入的DTD文件是來自于網絡的.
這時候引入的DTD文件是沒有產生作用的,如果我們在學生元素中添加子元素<面積>
,打開這個XML文件,瀏覽器依然不會報錯。
<?xml version="1.0" encoding="utf-8"?><!--引入dtd文件,約束這個xml--><!DOCTYPE 班級 SYSTEM "myClass.dtd"><班級> <學生> <名字>周小星</名字> <年齡>23</年齡> <介紹>學習刻苦</介紹> <面積>100平米</面積> </學生> <學生> <名字>林曉</名字> <年齡>25</年齡> <介紹>是一個好學生</介紹> </學生> </班級>
我們需要編程校驗XML文檔的正確性。
IE5以上的瀏覽器內置了XML解析工具:Microsoft.XMLDOM,開發人員可以編寫JavaScript代碼,利用這個解析工具裝載XML文件,并對XML文件進行DTD驗證。
我們編寫myXmlTools.html來對這個XML進行校驗,如下:
<html> <head> <!--自己編寫一個簡單的解析工具,去解析XML DTD是否配套--> <script language="javascript"> // 創建xml文檔解析器對象 var xmldoc = new ActiveXObject("Microsoft.XMLDOM"); // 開啟xml校驗 xmldoc.validateOnParse = "true"; // 裝載xml文檔,即指定校驗哪個XML文件 xmldoc.load("myClass.xml"); document.writeln("錯誤信息:"+xmldoc.parseError.reason+"<br>"); document.writeln("錯誤行號:"+xmldoc.parseError.line); </script> </head> <body> </body></html>
用IE瀏覽器打開這個html文件,可以看到運行結果:
可以看到第9行正是我們添加的<面積>
這一行。
1.內部DTD文檔
<!DOCTYPE 根元素 [定義內容]>
2.外部DTD文檔
引入外部的DTD文檔分為兩種:
(1)當引用的DTD文件是本地文件的時候,用SYSTEM標識,并寫上”DTD的文件路徑”,如下:
<!DOCTYPE 根元素 SYSTEM "DTD文件路徑">
(2)如果引用的DTD文件是一個公共的文件時,采用PUBLIC標識,如下方式:
<!DOCTYPE 根元素 PUBLIC "DTD名稱" "DTD文件的URL">
比如下例:
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems,Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<!ELEMENT NAME CONTENT>
其中:
- ELEMENT是關鍵字,是不能修改的
- NAME表示元素名稱
- CONTENT是元素類型,必須要大寫!CONTENT的內容有三種寫法:
(1)EMPTY——表示該元素不能包含子元素和文本,但可以有屬性。
(2)ANY——表示該元素可以包含任何在該DTD中定義的元素內容
(3)#PCDATA——可以包含任何字符數據,但是不能在其中包含任何子元素
DTD中這樣規定:
<!ELEMENT 家庭(人+,家電*)>
這個DTD規定了家庭元素中可以有1到多個”人”這個子元素,也可以有0到多個”家電”這個子元素。其中的加號”+”和星號”*”的含義與正則表達式中的含義一致。
XML這樣寫:
<家庭> <人 名字="張曉明" 性別="男" 年齡="25"/> <人 名字="李小鋼" 性別="男" 年齡="36" 愛好="作個教育家和偉人"/> <家電 名稱="彩電" 數量="3"/></家庭>
關于組合類型,有下述的的修飾符可以使用:
符號 | 用途 | 示例 | 示例說明 |
---|---|---|---|
() | 用來給元素分組 | (古龍|金庸),(王朔|余杰) | 分成兩組 |
| | 在列出的對象中選擇一個 | (男人|女人) | 表示男人或者女人必須出現,兩者至少選其一 |
+ | 該對象必須出現一次或者多次 | (成員+) | 表示成員必須出現,而卻可以出現多個成員 |
* | 該對象允許出現0次或者多次 | (愛好*) | 愛好可以出現兩次到多次 |
? | 該對象必須出現0次或者1次 | (菜鳥?) | 菜鳥可以出現,也可以不出現,如果出現的話,最多只能出現一次 |
, | 對象必須按指定的順序出現 | (西瓜,蘋果,香蕉) | 表示西瓜、蘋果、香蕉必須出現,并且按這個順序出現 |
DTD中屬性的定義是這樣的:
<!ATTLIST 元素名稱 屬性名稱 類型 屬性特點 屬性名稱 類型 屬性特點...... >
其中,屬性的類型有下面5種:
(1) CDATA
(2) ID
(3) IDREF/IDREFS
(4) Enumerated
(5) ENTITY/ENTITIES
屬性的特點有如下4種:
(1) #REQUIRED,表示這個屬性必須給,不給就報錯
(2) #IMPLIED,表示這個屬性可以給也可以不給
(3) #FIXED value,表示這個屬性必須給一個固定的value值
(4) Default value,表示這個屬性如果沒有值,就分配一個默認的value值
比如,我們想在學生這個子元素上加上地址這個屬性,而且這個屬性是必須的,示例如下:
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE 班級 SYSTEM "myClass.dtd"><班級> <學生 地址="香港"> <名字>周小星</名字> <年齡>23</年齡> <介紹>學習刻苦</介紹> </學生> <學生 地址="澳門"> <名字>林曉</名字> <年齡>25</年齡> <介紹>是一個好學生</介紹> </學生> </班級>
這個時候相應的DTD文件也要更新,不然就會報錯,如下:
<!ELEMENT 班級 (學生+)><!ELEMENT 學生 (名字,年齡,介紹)><!ATTLIST 學生 地址 CDATA #REQUIRED><!ELEMENT 名字 (#PCDATA)><!ELEMENT 年齡 (#PCDATA)><!ELEMENT 介紹 (#PCDATA)>
(1)屬性類型-CDATA,表示屬性值可以是任何字符(包括中文和數字)
<!ATTLIST 木偶 姓名 CDATA #REQUIRED>
<木偶 姓名="匹諾曹"/><木偶 姓名="PiNuocao"/><木偶 姓名="123"/>
(2)屬性類型-ID,表明該屬性的取值必須是唯一的,但是屬性的值不能是以數字開頭!
<!ELEMENT 公司職員 ANY><!ATTLIST 公司職員 編號 ID #REQUIRED 姓名 CDATA #REQUIRED>
<公司職員 編號="Z001" 姓名="張三"/><公司職員 編號="Z002" 姓名="李思"/>
(3)屬性類型-IDREF/IDREFS
- IDREF屬性的值指向文檔中其它地方聲明的ID類型的值
- IDREFS同IDREF,但是可以具有由空格分開的多個引用。
<!ELEMENT 家庭(人+)><!ELEMENT 人 EMPTY><!ATTLIST 人 relID ID #REQUIRED paraentID IDREFS #IMPLIED name CDATA #REQUIRED>
<家庭> <人 relID="P_1" name="爸爸"/> <人 relID="P_2" name="媽媽"/> <人 relID="P_3" parentID="P_1 P_2" name="兒子"/></家庭>
(4)屬性類型-Enumerated,事先定義好一些值,屬性的值必須在所列出的值的范圍內。
<!ATTLIST person 婚姻狀態 (single|married|porced|widowed) #IMPLIED><!ATTLIST person 性別 (男|女) #REQUIRED>
(5)屬性類型-ENTITY,實體
實體定義:
- 實體用于為一段內容創建一個別名,以后在XML文檔中就可以使用別名引用這段內容了。
- 在DTD定義中,一條!ENTITY語句用于定義一個實體。
- 實體可分為兩種類型:引用實體和參數實體。引用實體是被XML文檔應用的,而參數實體是被DTD文件本身應用的。
①引用實體:
引用實體主要在XML文檔中被應用
語法格式如下,引用實體的定義內容最好放在DTD文件的最后。
<!ENTITY 實體名稱 "實體內容">
引用方式:&實體名稱; 末尾要帶上分號,這個引用將直接轉變成實體內容
舉例如下:
<!ENTITY copyright "I am a programmer">.... ©right;
②參數實體:
參數實體被DTD文件自身使用
語法格式為:
<!ENTITY % 實體名稱 "實體內容">
引用方式為:%實體名稱
舉例:
<!ENTITY % TAG_NAME "姓名|EMAIL|電話|地址"><!ELEMENT 個人信息 (%TAG_NAME;|生日)><!ELEMENT 客戶信息 (%TAG_NAME;|公司名)>
學習DTD的目標在于:
(1)要求我們能夠看得懂DTD文件,
(2)我們可以根據給出的DTD寫出對應的XML文件
下面我們看一個案例,下述的DTD文件是從W3School在線教程中的DTD案例中拿過來的,細看每一行,我們都應該能夠看得懂。
<!ENTITY AUTHOR "John Doe"><!ENTITY COMPANY "JD Power Tools, Inc."><!ENTITY EMAIL "jd@jd-tools.com"> <!ELEMENT CATALOG (PRODUCT+)> <!ELEMENT PRODUCT(SPECIFICATIONS+,OPTIONS?,PRICE+,NOTES?)> <!ATTLIST PRODUCTNAME CDATA #IMPLIEDCATEGORY (HandTool|Table|Shop-Professional) "HandTool"PARTNUM CDATA #IMPLIEDPLANT (Pittsburgh|Milwaukee|Chicago) "Chicago"INVENTORY (InStock|Backordered|Discontinued) "InStock"> <!ELEMENT SPECIFICATIONS (#PCDATA)> <!ATTLIST SPECIFICATIONSWEIGHT CDATA #IMPLIEDPOWER CDATA #IMPLIED> <!ELEMENT OPTIONS (#PCDATA)> <!ATTLIST OPTIONSFINISH (Metal|Polished|Matte) "Matte" ADAPTER (Included|Optional|NotApplicable) "Included"CASE (HardShell|Soft|NotApplicable) "HardShell"> <!ELEMENT PRICE (#PCDATA)> <!ATTLIST PRICEMSRP CDATA #IMPLIEDWHOLESALE CDATA #IMPLIEDSTREET CDATA #IMPLIEDSHIPPING CDATA #IMPLIED> <!ELEMENT NOTES (#PCDATA)>
然后我們可以根據該DTD編寫如下最簡單的XML文件:
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE CATALOG SYSTEM "product.dtd"><CATALOG> <PRODUCT NAME="康帥傅礦泉水" CATEGORY="Table" PARTNUM="12" PLANT="Chicago"> <SPECIFICATIONS WEIGHT="20" POWER="18">這里是細節</SPECIFICATIONS> <PRICE>25</PRICE> <PRICE>28</PRICE> </PRODUCT></CATALOG>
然后我們用Microsoft.XMLDOM校驗該XML,會發現沒有任何錯誤。但是要注意編碼。
以上是“XML文件約束DTD的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。