首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

XML 約束技術:DTD 與 Schema 入門指南

     編輯:Java 綜合教學

XML 約束技術:DTD 與 Schema 入門指南

XML 約束定義了 XML 文件的合法結構、元素、屬性與資料型別。主流有兩種:DTD(Document Type Definition) 與 XML Schema(XSD)。本文聚焦 DTD 基礎語法與引入方式。

DTD 簡介

DTD 使用簡潔的宣告語法定義元素巢狀關係、出現次序、屬性清單等。雖功能較 Schema 弱(不支援命名空間、資料型別有限),但輕量且廣泛用於舊系統與簡單場景。

DTD 引入方式

1. 內部 DTD(內嵌於 XML 文件)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note [
  <!ELEMENT note (to,from,heading,body)>
  <!ELEMENT to (#PCDATA)>
  <!ELEMENT from (#PCDATA)>
  <!ELEMENT heading (#PCDATA)>
  <!ELEMENT body (#PCDATA)>
]>
<note>
  <to>Tom</to>
  <from>Jerry</from>
  <heading>Reminder</heading>
  <body>Meeting at 3pm</body>
</note>

2. 外部 DTD(獨立 .dtd 檔案)

系統公共識別符(Public ID):

<!DOCTYPE note PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
  "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

系統識別符(System ID,本地或 URL):

<!DOCTYPE note SYSTEM "note.dtd">

核心 DTD 宣告語法

宣告類型語法範例說明
元素<!ELEMENT name (child1, child2*)>定義子元素順序與出現次數:?(0/1) *(0+) +(1+) 無符號(1)
屬性<!ATTLIST elem attr CDATA #REQUIRED>型別:CDATA/ID/IDREF/ENTITY/NMTOKEN 等;限制:#REQUIRED/#IMPLIED/#FIXED
實體<!ENTITY name "value">定義可重用文字片段,支援參數實體 %name;
符號<!NOTATION name SYSTEM "url">宣告非 XML 資料格式(如圖片)

實體引用與現代瀏覽器限制

外部實體引用(&entityName;)在現代瀏覽器中常被安全策略阻擋。若需顯示實體內容,建議改用內部 DTD或伺服器端解析後再輸出。

DTD vs XML Schema 快速比較

  • DTD:語法簡潔、檔案小、不支援命名空間、型別弱、無法限制文字內容格式(如日期、數字範圍)。
  • XSD:XML 語法、支援命名空間、豐富資料型別(內建 44 種)、可自訂型別、支援繼承與複雜約束,企業級應用首選。

學習建議

初學者先掌握 DTD 核心語法(元素、屬性、實體),理解「良構」與「合法」XML 的差別,再進階學習 XSD 複雜型別、命名空間與驗證 API(javax.xml.validation)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved