【風馬一族_xml】xmlp之dtd1

  1. 什么是XML約束?

    在xml技術里,可以編寫一個文檔來約束一個xml文檔的寫法,這稱之為xml約束

  2. 為什么要使用xml約束?

    參看提示欄

  3. xml約束的作用?

    1. 約束xml的寫法
    2. 對xml進行校驗

  4. 常見的xml約束技術

    1. xml? dtd
    2. xml? Schema

-------------------------------------------------------------------------

DTD 約束快速入門

  1. dtd ( document type definition ) ,全稱為文檔類型定義
  2. 示例
    1.  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. 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

    1. 外部引入
      1. 可以將dtd的約束內容寫在外置的dtd文件中,這個文件后綴必須為.dtd而文件保存時必須用UTf-8來保存。
      2. 再在xml文件中使用<!DOCTYPE 根元素名稱 SYSTEM? 文件的位置>
        1.   如果寫的是SYSTEM表明當前引入的dtd在當前文件系統中,后面制定的文件位置是當前硬盤中的位置
      3. 再在xml文件中使用<!DOCTYPE 根元素名稱 PUBLIC? 文件的位置>
        1.   如果寫的是PUBLIC表明當前引入的dtd在網絡公共位置中,后面要指明dtd的名字和dtd所在網絡位置URL地址
        2. 示例:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    2. 內部引入
      1. 直接在xml中書寫dtd    
      2. <!DOCTYPE 根元素名稱[dtd約束]> 
  1. dtd語法
    1. 元素
      1. ?<!ELEMENT 元素名稱? 元素約束>
      2. 元素約束:
        1. 存放類型:ANY/EMPTY
        2. 元素約束:
          1. 子元素的列表,將可以包含的子元素用小括號括起來
          2. 子元素之間可以使用逗號進行分割,表明子元素必須按照順序出現
          3. 子元素之間可以使用豎線進行分割,表明子元素出現其中之一
          4. #PCDATA 表明包含標簽體
            1. + 表示一次或多次
            2. *? 0次或多次
            3. ? 0次或一次
            4. 也可以使用小括號進行組的操作
    2. 屬性
      1. <!ATTLIST 元素名
        1. 屬性名???? 屬性類型?? 屬性約束
        2. 屬性名2 ?? 屬性類型?? 屬性約束
        3. .......................
        4. >   

            示例:

          1.  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約束
      2. 屬性類型:? 屬性的可以是一組取值的列表,在xml文件中設置的屬性值 
        1. CDATA : 表示屬性的值是一個普通字符串
        2. ENUMERATED:屬性的值是一個枚舉列表中的值
        3. ID: 表明屬性的值必須在整個文檔中都是唯一的,如果有重復的id則校驗不通過,ID屬性的值只能由字母,下劃線開始,不能使用數字,不能出現空白字符
      3. 屬性約束:
        1. #REQUIRED?? --- 表明當前屬性是一個必須存在的屬性,如果這樣的屬性不存在則在校驗時會報錯
        2. #IMPLIED --- 表明當前屬性是一個可選的屬性,可以有也可以沒有
        3. #FIXED '固定值'? --- 表明當前屬性具有一個固定值,這樣的屬性不需要進行賦值,自動就會取這個固定值為值,如果  
        4. ’默認值‘? --- 表明當前屬性具有一個默認值,如果給了其他的值就用其他值,如果沒有給值則取這個默認值 
    3. ENTITY(實體)
      1. <!ENTITY> 就是對一大段內容的引用,可以簡化代碼的復用 
      2. 引用實體:
        1. 在xml中引用的實體叫做引用實體
        2. <!ENTITY % 實體名稱 “實體內容”>
        3. &實體名稱;
      3. 參數實體:
        1. 在dtd中引用的實體叫做參數實體
        2. <!ENTITY % 實體名稱 “實體內容”>
        3. &實體名稱;  

?

轉載于:https://www.cnblogs.com/sows/p/5865838.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/542592.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/542592.shtml
英文地址,請注明出處:http://en.pswp.cn/news/542592.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java ssm框架 緩存_SSM框架之MyBatis3專題4:查詢緩存

查詢緩存的使用&#xff0c;主要是為了提高查詢訪問速度。將用戶對同一數據的重復查詢過程簡化&#xff0c;不再每次均從數據庫中查詢獲取結果數據&#xff0c;從而提高訪問速度。MyBatis的查詢緩存機制&#xff0c;根據緩存區的作用域(聲明周期)可劃分為兩種&#xff1a;一級查…

matplotlib畫圖_漂亮,超詳細的matplotlib畫圖基礎

來自 | 逐夢erhttps://zhumenger.blog.csdn.net/article/details/106530281本文僅作技術交流&#xff0c;如有侵權&#xff0c;請聯系后臺刪除。數據可視化非常重要&#xff0c;因為錯誤或不充分的數據表示方法可能會毀掉原本很出色的數據分析工作。matplotlib 庫是專門用于開發…

c# 2維數組 取一維_C#| 不同類型的一維數組聲明

c# 2維數組 取一維In the below example, we are declaring an integer array (one dimensional) with following styles: 在下面的示例中&#xff0c;我們聲明具有以下樣式的整數數組(一維) &#xff1a; 1) One dimensional Array declaration with initialization (without…

Java編程經典10道_Java經典編程題50道之十二

企業發放的獎金根據利潤提成&#xff1a;利潤(I)低于或等于10萬元時&#xff0c;獎金可提10%&#xff1b;利潤高于10萬元&#xff0c;低于20萬元時&#xff0c;低于10萬元的部分按10%提成&#xff0c; 高于10萬元的部分 &#xff0c;可提成7.5%&#xff1b;20萬到40萬之間時&am…

RHEL7 單獨安裝圖形 X11

RHEL7 默認是最小化安裝&#xff08;Minimal Install&#xff09;&#xff0c;沒有圖形界面&#xff0c; 我們應該選擇Server with GUI。若已錯過此步驟&#xff0c;我們采用以下方式補充安裝GUI界面。 先配置yum源可以參考我的這篇文章http://blog.itpub.net/27771627/viewspa…

android recycleview長按多選_UI設計中Android和IOS設計差異總結

由于設計師、產品經理使用的移動設備大部分是iPhone&#xff0c;所以在做設計時&#xff0c;容易忽略Android和iOS的差異&#xff0c;按照iOS的規范進行設計&#xff0c;兩端只做一套。只做一套的會存在兩個問題&#xff1a;1、安卓用戶的使用習慣不太適應iOS的設計&#xff0c…

Kotlin程序用于打印JVM版本的Kotlin(打印Java屬性)

Here, we will create a Kotlin program to print Kotlin, JVM version (printing Java properties). As Kotlin can be seen as an upgrade of Java, so we will get all versions of java (JVM) using Kotlin also. 在這里&#xff0c;我們將創建一個Kotlin程序以打印JVM版本…

自定義動畫屬性java_創建酷炫動畫效果的10個JavaScript庫

原標題&#xff1a;創建酷炫動畫效果的10個JavaScript庫1) Dynamics.jsDynamics.js是設計基于物理規律的動畫的重要Java庫。它可以賦予生命給所有包含CSS 和SVG屬性的DOM(文本對象模型)元素&#xff0c;換句話說&#xff0c;Dynamics.js適用于所有Java對象以及一系列其它的元素…

php xlsx里插入圖片_常見的 PHP 面試題和答案分享

如何直接將輸出顯示給瀏覽器&#xff1f;將輸出直接顯示給瀏覽器&#xff0c;我們必須使用特殊標記 <&#xff1f;and&#xff1f;>。PHP 是否支持多重繼承&#xff1f;PHP 只支持單繼承。PHP 的類使用關鍵字 extends 繼承另一個類獲取圖片屬性&#xff08;size, width, …

java調用構造函數中某一個值_Java如何在枚舉的構造函數中調用另一個枚舉值

Java中的枚舉(enum)是一種存儲一組常量值的數據類型。您可以使用枚舉來存儲固定值&#xff0c;例如一周中的天&#xff0c;一年中的月等。您可以使用關鍵字 enum定義枚舉&#xff0c;后跟枚舉的名稱為-enum Days {SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATUR…

python 示例_Python日歷類| yeardatescalendar()方法與示例

python 示例Python Calendar.yeardatescalendar()方法 (Python Calendar.yeardatescalendar() Method) Calendar.yeardatescalendar() method is an inbuilt method of the Calendar class of calendar module in Python. It uses an instance of this class and returns a lis…

js:插入節點appendChild insertBefore使用方法

首先 從定義來理解 這兩個方法&#xff1a; appendChild() 方法&#xff1a;可向節點的子節點列表的末尾添加新的子節點。語法&#xff1a;appendChild(newchild) insertBefore() 方法&#xff1a;可在已有的子節點前插入一個新的子節點。語法 &#xff1a;insertBefore(newchi…

pandas concat_pandas-數據合并-concat(最全參數解釋,含代碼和實例)

pandas中的concat的功能&#xff1a;假設你現在需要將多個數據合并&#xff0c;前提是&#xff1a;這幾個文件列名都一致&#xff0c;也就是說這幾個文件格式完全一樣&#xff0c;只是數據不太一樣&#xff0c;類似于合并多個文件這種&#xff0c;實際數據分析中也會遇到這種情…

java中的de是什么_【轉】java中main函數解析

源地址&#xff1a;http://www.cnblogs.com/xwdreamer/archive/2012/04/09/2438845.html從寫java至今&#xff0c;寫的最多的可能就是主函數public static void main(String[] args) {}但是以前一直都沒有問自己&#xff0c;為什么要這么寫&#xff0c;因為在c語言中就沒有這樣…

JAVA多線程(一)線程安全問題產生的原因

JAVA線程內存與主存間映射示意圖Java內存模型中規定了所有的變量都存儲在主內存中&#xff0c;每條線程還有自己的工作內存&#xff0c;線程的工作內存中保存了該線程使用的變量到主內存副本拷貝&#xff0c;線程對變量的所有操作&#xff08;讀取、賦值&#xff09;都必須在工…

兩頂點的路徑長度為k_計算兩個頂點之間的所有可能路徑

兩頂點的路徑長度為kWhat to Learn? 學什么&#xff1f; How to count all possible paths between two vertices? 如何計算兩個頂點之間的所有可能路徑&#xff1f; In the graph there are many alternative paths from vertex 0 to vertex 4 在圖中&#xff0c;有許多從…

php debug_print_backtrace,php中debug_backtrace、debug_print_backtrace和匿名函數用法實例

本文實例講述了php中debug_backtrace、debug_print_backtrace和匿名函數用法。分享給大家供大家參考。具體分析如下&#xff1a;debug_print_backtrace() 是一個很低調的函數,很少有人注意過它.不過當我們對著一個對象調用另一個對象再調用其它的對象和文件中的一個函數出錯時,…

covariance matrix r語言_時間序列分析|ARIMAX模型分步驟詳解和R中實踐

這是關于時間序列的第N篇文章&#xff0c;本文將介紹ARIMAX模型&#xff0c;簡單來說就是在ARIMA的基礎上增加一個外生變量。ARIMAX和ARIMA相比在理論上沒有太多新的內容&#xff0c;所以本文直接介紹在R里怎么一步一步跑ARIMAX。在閱讀這篇文章前&#xff0c;需要對ARIMA有一定…

linux系統編程之文件與I/O(六):fcntl 函數與文件鎖

2013-05-14 11:26 8290人閱讀 評論(2) 收藏 舉報分類&#xff1a;linux系統編程&#xff08;19&#xff09; 版權聲明&#xff1a;本文為博主原創文章&#xff0c;未經博主允許不得轉載。 一、fcntl函數 功能&#xff1a;操縱文件描述符&#xff0c;改變已打開的文件的屬性 int…