日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

XML DTD用法【转载】

發布時間:2025/3/15 asp.net 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 XML DTD用法【转载】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡介  文檔類型定義(DTD)可定義合法的XML文檔構建模塊。它使用一系列合法的元素來定義文檔的結構。
  DTD 可被成行地聲明于 XML 文檔中,也可作為一個外部引用。
內部的 DOCTYPE 聲明
  假如 DTD 被包含在您的 XML 源文件中,它應當通過下面的語法包裝在一個 DOCTYPE 聲明中:
  *****************************************************************************
  <!DOCTYPE 根元素 [元素聲明]>
  *****************************************************************************
  帶有 DTD 的 XML 文檔實例
  *****************************************************************************
  <?xml version="1.0"?>
  <!DOCTYPE note [
  <!ELEMENT note (to,from,heading,body)>
  <!ELEMENT to (#PCDATA)>
  <!ELEMENT from (#PCDATA)>
  <!ELEMENT heading (#PCDATA)>
  <!ELEMENT body (#PCDATA)>
  ]>
  <note>
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend</body>
  </note>
  *****************************************************************************
  以上 DTD 解釋如下:
  !DOCTYPE note (第二行)定義此文檔是 note 類型的文檔。
  !ELEMENT note (第三行)定義 note 元素有四個元素:"to、from、heading,、body"
  !ELEMENT to (第四行)定義 to 元素為 "#PCDATA" 類型
  !ELEMENT from (第五行)定義 from 元素為 "#PCDATA" 類型
  !ELEMENT heading (第六行)定義 heading 元素為 "#PCDATA" 類型
  !ELEMENT body (第七行)定義 body 元素為 "#PCDATA" 類型
外部文檔聲明
  假如 DTD 位于 XML 源文件的外部,那么它應通過下面的語法被封裝在一個 DOCTYPE 定義中:
  <!DOCTYPE 根元素 SYSTEM "文件名">
  這個 XML 文檔和上面的 XML 文檔相同,但是擁有一個外部的 DTD:
  *****************************************************************************
  <?xml version="1.0"?>
  <!DOCTYPE note SYSTEM "note.dtd">
  <note>
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
  </note> 這是包含 DTD 的 "note.dtd" 文件:
  <!ELEMENT note (to,from,heading,body)>
  <!ELEMENT to (#PCDATA)>
  <!ELEMENT from (#PCDATA)>
  <!ELEMENT heading (#PCDATA)>
  <!ELEMENT body (#PCDATA)>
  *****************************************************************************
為什么使用 DTD
  通過 DTD,您的每一個 XML 文件均可攜帶一個有關其自身格式的描述。
  通過 DTD,獨立的團體可一致地使用某個標準的 DTD 來交換數據。
  而您的應用程序也可使用某個標準的 DTD 來驗證從外部接收到的數據。
  您還可以使用 DTD 來驗證您自身的數據。
模塊
  XML 以及 HTML 文檔的主要構建模塊是類似 <body>....</body> 這樣的標簽。
  XML 文檔構建模塊
  所有的 XML 文檔(以及 HTML 文檔)均由以下簡單的構建模塊構成:
  元素
  屬性
  實體
  PCDATA
  CDATA
  下面是每個構建模塊的簡要描述。
  元素
  元素是 XML 以及 HTML 文檔的主要構建模塊。
  HTML 元素的例子是 "body" 和 "table"。XML 元素的例子是 "note" 和 "message" 。元素可包含文本、其他元素或者是空的。空的 HTML 元素的例子是 "hr"、"br" 以及 "img"。
  實例:
  *********************************************************
  <body>body text in between</body>
  <message>some message in between</message>
  *********************************************************
  屬性
  屬性可提供有關元素的額外信息。
  屬性總是被置于某元素的開始標簽中。屬性總是以名稱/值的形式成對出現的。下面的 "img" 元素擁有關于源文件的額外信息:
  *********************************************************
  <img src="computer.gif" />
  *********************************************************
  元素的名稱是 "img"。屬性的名稱是 "src"。屬性的值是 "computer.gif"并且可以用樣式來控制大小等顯示效果。由于元素本身為空,它被一個 " /" 關閉。
  實體
  實體是用來定義普通文本的變量。實體引用是對實體的引用。
  大多數同學都了解這個 HTML 實體引用:" "。這個“無折行空格”實體在 HTML 中被用于在某個文檔中插入一個額外的空格。
  當文檔被 XML 解析器解析時,實體就會被展開。
  PCDATA
  PCDATA 的意思是被解析的字符數據(parsed character data)。
  可把字符數據想象為 XML 元素的開始標簽與結束標簽之間的文本。
  PDATA 是會被解析器解析的文本。這些文本將被解析器檢查實體以及標記。
  文本中的標簽會被當作標記來處理,而實體會被展開。
  不過,被解析的字符數據不應當包含任何 &、< 或者 > 字符;需要使用 &amp; 、&lt; 以及 &gt; 實體來分別替換它們。
  CDATA
  CDATA 的意思是字符數據(character data)。
  CDATA 是不會被解析器解析的文本。在這些文本中的標簽不會被當作標記來對待,其中的實體也不會被展開。
元素
  在一個 DTD 中,元素通過元素聲明來進行聲明。
  聲明一個元素
  在 DTD 中,XML 元素通過元素聲明來進行聲明。元素聲明使用下面的語法:
  <!ELEMENT 元素名稱 類別>
  或者
  <!ELEMENT 元素名稱 (元素內容)>
  空元素
  空元素通過類別關鍵詞EMPTY進行聲明:
  <!ELEMENT 元素名稱 EMPTY>
  只有 PCDATA 的元素
  只有 PCDATA 的元素通過圓括號中的 #PCDATA 進行聲明:
  <!ELEMENT 元素名稱 (#PCDATA)>
  帶有任何內容的元素
  通過類別關鍵詞 ANY 聲明的元素,可包含任何可解析數據的組合:
  <!ELEMENT 元素名稱 ANY>
  帶有子元素(序列)的元素
  帶有一個或多個子元素的元素通過圓括號中的子元素名進行聲明:
  <!ELEMENT 元素名稱 (子元素名稱 1)>
  或者
  <!ELEMENT 元素名稱 (子元素名稱 1,子元素名稱 2,.....)>
相同的元素至少出現一次的聲明
  語法格式為:
  <!ELEMENT element-name (child-name+)>
  例:
  <!ELEMENT note (message+)>
  例中的+是指子元素message必須在被包含的note元素里出現一次或者多次。
相同的元素不出現或者多次出現的聲明
  語法格式為:
  <!ELEMENT element-name (child-name*)>
  例:
  <!ELEMENT note (message*)>
  例中的*是指子元素message能夠在被包含的note元素里不出現或者出現多次。
屬性
  在 DTD 中,屬性通過 ATTLIST 聲明來進行聲明。
  聲明屬性
  屬性聲明擁使用下列語法:
  <!ATTLIST 元素名稱 屬性名稱 屬性類型 默認值>
  以下是屬性類型的選項:
  類型 描述
  CDATA 值為字符數據 (character data)
  (en1|en2|..) 此值是枚舉列表中的一個值
  ID 值為唯一的 id
  IDREF 值為另外一個元素的 id
  IDREFS 值為其他 id 的列表
  NMTOKEN 值為合法的 XML 名稱
  NMTOKENS 值為合法的 XML 名稱的列表
  ENTITY 值是一個實體
  ENTITIES 值是一個實體列表
  NOTATION 此值是符號的名稱
  xml: 值是一個預定義的 XML 值
  默認值參數可使用下列值:
  值 解釋
  值 屬性的默認值
  #REQUIRED 屬性值是必需的
  #IMPLIED 屬性不是必需的
  #FIXED value 屬性值是固定的
  規定一個默認的屬性值
  DTD:
  <!ELEMENT square EMPTY>
  <!ATTLIST square width CDATA "0">
  合法的 XML:
  <square width="100" />
  在上面的例子中,"square" 被定義為帶有 CDATA 類型的 "width" 屬性的空元素。如果寬度沒有被設定,其默認值為0 。
實體
  實體是用于定義引用普通文本或特殊字符的快捷方式的變量。
  實體引用是對實體的引用。
  實體可在內部或外部進行聲明。
一個內部實體聲明
  語法:
  <!ENTITY 實體名稱 "實體的值">
  DTD 例子:
  <!ENTITY writer "Bill Gates">
  <!ENTITY copyright "Copyright 具體的url">XML 例子:
  <author>&writer;&copyright;</author>注釋: 一個實體由三部分構成: 一個和號 (&), 一個實體名稱, 以及一個分號 (;)。
一個外部實體聲明
  語法:
  <!ENTITY 實體名稱 SYSTEM "URI/URL">
  DTD 例子:
  <!ENTITY writer SYSTEM "具體的url">
  <!ENTITY copyright SYSTEM "具體的url">XML 例子:
  <author>&writer;&copyright;</author>
實例
報紙文章 DTD
  <!DOCTYPE NEWSPAPER [
  <!ELEMENT NEWSPAPER (ARTICLE+)>
  <!ELEMENT ARTICLE (HEADLINE,BYLINE,LEAD,BODY,NOTES)>
  <!ELEMENT HEADLINE (#PCDATA)>
  <!ELEMENT BYLINE (#PCDATA)>
  <!ELEMENT LEAD (#PCDATA)>
  <!ELEMENT BODY (#PCDATA)>
  <!ELEMENT NOTES (#PCDATA)>
  <!ATTLIST ARTICLE AUTHOR CDATA #REQUIRED>
  <!ATTLIST ARTICLE EDITOR CDATA #IMPLIED>
  <!ATTLIST ARTICLE DATE CDATA #IMPLIED>
  <!ATTLIST ARTICLE EDITION CDATA #IMPLIED>
  <!ENTITY NEWSPAPER "Vervet Logic Times">
  <!ENTITY PUBLISHER "Vervet Logic Press">
  <!ENTITY COPYRIGHT "Copyright 1998 Vervet Logic Press">
  ]>
產品目錄 DTD
  <!DOCTYPE CATALOG [
  <!ENTITY AUTHOR "John Doe">
  <!ENTITY COMPANY "JD Power Tools, Inc.">
  <!ELEMENT CATALOG (PRODUCT+)>
  <!ELEMENT PRODUCT
  (SPECIFICATIONS+,OPTIONS?,PRICE+,NOTES?)>
  <!ATTLIST PRODUCT
  NAME CDATA #IMPLIED
  CATEGORY (HandTool|Table|Shop-Professional) "HandTool"
  PARTNUM CDATA #IMPLIED
  PLANT (Pittsburgh|Milwaukee|Chicago) "Chicago"
  INVENTORY (InStock|Backordered|Discontinued) "InStock">
  <!ELEMENT SPECIFICATIONS (#PCDATA)>
  <!ATTLIST SPECIFICATIONS
  WEIGHT CDATA #IMPLIED
  POWER CDATA #IMPLIED>
  <!ELEMENT OPTIONS (#PCDATA)>
  <!ATTLIST OPTIONS
  FINISH (Metal|Polished|Matte) "Matte"
  ADAPTER (Included|Optional|NotApplicable) "Included"
  CASE (HardShell|Soft|NotApplicable) "HardShell">
  <!ELEMENT PRICE (#PCDATA)>
  <!ATTLIST PRICE
  MSRP CDATA #IMPLIED
  WHOLESALE CDATA #IMPLIED
  STREET CDATA #IMPLIED
  SHIPPING CDATA #IMPLIED>
  <!ELEMENT NOTES (#PCDATA)>
  ]>
優劣
DTD的優勢
  每一個XML文檔都可攜帶一個DTD,用來對該文檔格式進行描述,測試該文檔是否為有效的XML文檔。既然DTD有外部和內部之分,當然就可以為某個獨立的團體定義一個公用的外部DTD,那么多個XML文檔就都可以共享使用該DTD,使得數據交換更為有效。甚至在某些文檔中還可以使內部DTD和外部DTD相結合。在應用程序中也可以用某個DTD來檢測接收到的數據是否符合某個標準。
  對于XML文檔而言,雖然DTD不是必須的,但它為文檔的編制帶來了方便。加強了文檔標記內參數的一致性,使XML語法分析器能夠確認文檔。如果不使用DTD來對XML文檔進行定義,那么XML語法分析器將無法對該文檔進行確認。
  元素的定義
  根元素的聲明
  每個XML文檔都只有一個根元素,其它的子元素都包含在該根元素中。因此在DTD中對根元素的聲明是必不可少的。根元素聲明的一般形式如下:
  <!DOCTYPE root[
  <!-- 子元素 --> ]>
  <!-- 文件體 -->
  DOCTYPE是“document type”(文檔類型)的簡寫,DOCTYPE聲明必須放在文檔最頂部,在所有代碼和標識之上,DOCTYPE聲明是必不可少的關鍵組成部分。DTD語法要求DOCTYPE必須要大寫,而且DOCTYPE和元素之間必須要有空格隔開。如在以上代碼中DOCTYPE和根元素root之間要有空格隔開。
DTD的缺陷
  利用DTD驗證有效性的解析器,就能夠立即對文檔的完整性進行可靠的檢查。DTD雖然比較實用,但DTD也有不少的缺陷。
  DTD有自己的特殊語法,其本身不是XML文檔;
  DTD只提供了有限的數據類型,用戶無法自定義類型;

轉載于:https://www.cnblogs.com/moondev/archive/2013/01/30/2883217.html

總結

以上是生活随笔為你收集整理的XML DTD用法【转载】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。