生活随笔
收集整理的這篇文章主要介紹了
【风马一族_xml】xmlp之dtd1
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
什么是XML約束? 在xml技術里,可以編寫一個文檔來約束一個xml文檔的寫法,這稱之為xml約束
2. 為什么要使用xml約束?
參看提示欄
3. xml約束的作用?
約束xml的寫法對xml進行校驗 4. 常見的xml約束技術
xml? dtdxml? Schema-------------------------------------------------------------------------
DTD 約束快速入門
dtd ( document type definition ) ,全稱為文檔類型定義示例 1 ------------------沒有給xml設置約束--------------------------------
2 -------------------------------book.xml---------------------------
3
4 <?xml version="1.0" encoding="utf-8"?>
5 <書架>
6 <書>
7 <書名>Java程序設計</書名>
8 <價格>¥59</價格>
9 <作者>風馬一族</作者>
10 </書>
11 <書>
12 <書名>C++程序設計</書名>
13 <價格>¥49</價格>
14 <作者>風馬一族</作者>
15 </書>
16 </書架>
17
18 ---------使用DTD技術,給xml設置約束,使xml內容出現錯誤的示例-----
19 -----------------------book.xml------------book.dtd-----------------------
20 <?xml version="1.0" encoding="utf-8"?>
21 <!DOCTYPE 書架 SYSTEM "book.dtd">
22 <書架>
23 <書>
24 <書名>Java程序設計</書名>
25 <價格>¥59</價格>
26 <作者>風馬一族</作者>
27 </書>
28 <書>
29 <書名>C++程序設計</書名>
30 <價格>¥49</價格>
31 <作者>風馬一族</作者>
32 </書>
33 </書架>
34
35 <!ELEMENT 書架(書+)>
36 <!ELEMENT 書(書名,作者,售價)>
37 <!ELEMENT 書名(#PCDATA)>
38 <!ELEMENT 作者(#PCDATA)>
39 <!ELEMENT 售價(#PCDATA)>
40
41
42 ---------使用DTD技術,給xml設置約束,使xml內容按照約束寫法的示例-----
43 -----------------------book.xml------------book.dtd-----------------------
44
45 <?xml version="1.0" encoding="utf-8"?>
46 <!DOCTYPE 書架 SYSTEM "book.dtd">
47 <書架>
48 <書>
49 <書名>Java程序設計</書名>
50 <作者>風馬一族</作者>
51 <售價>¥59</售價>
52 </書>
53 <書>
54 <書名>C++程序設計</書名>
55 <作者>風馬一族</作者>
56 <售價>¥59</售價>
57 </書>
58 </書架>
59
60 <!ELEMENT 書架 (書+)>
61 <!ELEMENT 書 (書名,作者,售價)>
62 <!ELEMENT 書名 (#PCDATA)>
63 <!ELEMENT 作者 (#PCDATA)>
64 <!ELEMENT 售價 (#PCDATA)> xml的DTD技術約束 -------------------------------------------------------------------------
?
1.編程校驗xml文檔正確性
1.默認的情況下IE瀏覽器內置的xml解析器的約束校驗器是被關閉了的。所以我們需要使用JavaScript手動創建解析器對象。打開約束校驗功能,對xml進行約束校驗。 ? 2.創建xml文檔解析器對象
1.var xmldoc=new ActiveXObject("Microsoft.XMLDOM");
3.開啟xml校驗
1.xmldoc.validateOnParse="true";
4.裝載xml文檔
1.xmldoc.load("book.xml");
5.獲取錯誤信息
1.xmldoc.parseError.reason;
2.xmldoc.parseError.line
------------------------------------
因為IE默認不打開DTD校驗器,因此可以使用兩種方式,解決這個問題,一是使用TDE、二是編寫一段JS
1 <html>
2 <head>
3 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
4 <title>無標題文檔
</title>
5 </head>
6
7 <body>
8 行號:
<div id="l"></div><br />
9 原因:
<div id="r"></div>
10 </body>
11 </html>
12
13 <script>
14 var xmldoc=new ActiveXObject("Microsoft.XMLDOM"); //使用javaScript創建一個瀏覽器內置的xml解析器
15 xmldoc.validateOnParse=true;//將xml解析器的dtd校驗打開
16 xmldoc.load("book.xml");
17 var line=xmldoc.parseError.line;
18 var reason=xmldoc.parseError.reason;
19 document.getElementById("l").innerHTML=line;
20 document.getElementById("r").innerHTML=reason;
21 </script> 使用js 來打開DTD解析器 ?
------------------------------------
示例
------------book.xml-------------
1 <?xml version="1.0" encoding="utf-8"?>
2 <!DOCTYPE 書架 SYSTEM "book.dtd">
3 <書架>
4 <書>
5 <書名>Java程序設計
</書名>
6 <作者>風馬一族
</作者>
7 <售價>¥59
</售價>
8 </書>
9 <書>
10 <書名>C++程序設計
</書名>
11 <作者>風馬一族
</作者>
12 <售價>¥59
</售價>
13 </書> df
14 </書架> book.xml ?
------------book.dtd-------------
1 <!ELEMENT 書架 (書+)>
2 <!ELEMENT 書 (書名,作者,售價)>
3 <!ELEMENT 書名 (#PCDATA)>
4 <!ELEMENT 作者 (#PCDATA)>
5 <!ELEMENT 售價 (#PCDATA)> book.dtd ?
?
------------check.html------------
1 <html>
2 <head>
3 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
4 <title>無標題文檔
</title>
5 </head>
6
7 <body>
8 行號:
<div id="l"></div><br />
9 原因:
<div id="r"></div>
10 </body>
11 </html>
12
13 <script>
14 var xmldoc=new ActiveXObject("Microsoft.XMLDOM"); //使用javaScript創建一個瀏覽器內置的xml解析器
15 xmldoc.validateOnParse=true;//將xml解析器的dtd校驗打開
16 xmldoc.load("book.xml");
17 var line=xmldoc.parseError.line;
18 var reason=xmldoc.parseError.reason;
19 document.getElementById("l").innerHTML=line;
20 document.getElementById("r").innerHTML=reason;
21 </script> check.html ?
結果:
?
?
-----------------------------------------------------------------------------------
二、dtd語法
1,如何在xml中引入dtd
外部引入
可以將dtd的約束內容寫在外置的dtd文件中,這個文件后綴必須為.dtd而文件保存時必須用UTf-8來保存。再在xml文件中使用<!DOCTYPE 根元素名稱 SYSTEM? 文件的位置> 如果寫的是SYSTEM表明當前引入的dtd在當前文件系統中,后面制定的文件位置是當前硬盤中的位置再在xml文件中使用<!DOCTYPE 根元素名稱 PUBLIC? 文件的位置> 如果寫的是PUBLIC表明當前引入的dtd在網絡公共位置中,后面要指明dtd的名字和dtd所在網絡位置URL地址示例:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">內部引入直接在xml中書寫dtd <!DOCTYPE 根元素名稱[dtd約束]> dtd語法元素?<!ELEMENT 元素名稱? 元素約束>元素約束:存放類型:ANY/EMPTY元素約束:子元素的列表,將可以包含的子元素用小括號括起來子元素之間可以使用逗號進行分割,表明子元素必須按照順序出現子元素之間可以使用豎線進行分割,表明子元素出現其中之一#PCDATA 表明包含標簽體+ 表示一次或多次*? 0次或多次? 0次或一次也可以使用小括號進行組的操作屬性<!ATTLIST 元素名屬性名???? 屬性類型?? 屬性約束屬性名2 ?? 屬性類型?? 屬性約束.......................> 示例:
1 <?xml version="1.0" encoding="utf-8"?>
2 <!DOCTYPE 書架[
3 <!ELEMENT 書架 (書+)>
4 <!ELEMENT 書 (書名,作者,售價)>
5 <!ELEMENT 書名 (#PCDATA)>
6 <!ELEMENT 作者 (#PCDATA)>
7 <!ELEMENT 售價 (#PCDATA)>
8
9 ]>
10 <書架>
11 <書>
12 <書名>Java程序設計</書名>
13 <作者>風馬一族</作者>
14 <售價>¥59</售價>
15 </書>
16 <書>
17
18 <書名>C++程序設計</書名>
19 <作者>風馬一族</作者>
20 <售價>¥59</售價>
21 </書>
22 </書架> 不用dtd,直接在xml編寫dtd約束 屬性類型:? 屬性的可以是一組取值的列表,在xml文件中設置的屬性值
CDATA : 表示屬性的值是一個普通字符串ENUMERATED:屬性的值是一個枚舉列表中的值ID: 表明屬性的值必須在整個文檔中都是唯一的,如果有重復的id則校驗不通過,ID屬性的值只能由字母,下劃線開始,不能使用數字,不能出現空白字符屬性約束:#REQUIRED?? --- 表明當前屬性是一個必須存在的屬性,如果這樣的屬性不存在則在校驗時會報錯#IMPLIED --- 表明當前屬性是一個可選的屬性,可以有也可以沒有#FIXED '固定值'? --- 表明當前屬性具有一個固定值,這樣的屬性不需要進行賦值,自動就會取這個固定值為值,如果 ’默認值‘? --- 表明當前屬性具有一個默認值,如果給了其他的值就用其他值,如果沒有給值則取這個默認值 ENTITY(實體)<!ENTITY> 就是對一大段內容的引用,可以簡化代碼的復用 引用實體:在xml中引用的實體叫做引用實體<!ENTITY % 實體名稱 “實體內容”>&實體名稱;參數實體:在dtd中引用的實體叫做參數實體<!ENTITY % 實體名稱 “實體內容”>&實體名稱; ?
轉載于:https://www.cnblogs.com/sows/p/5865838.html
總結
以上是生活随笔為你收集整理的【风马一族_xml】xmlp之dtd1的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。