DTD 教程

DTD教程

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

文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。

DTD可被成行地声明于XML文档中,也可作为一个外部引用。

1

在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>George</to>
  <from>John</from>
  <heading>Reminder</heading>
  <body>Don't forget the meeting!</body>
</note>

2

在XML中引用一个外部的DTD文件

<!DOCTYPE根元素SYSTEM"文件名">

note.dtd

<?xml version="1.0"?>
<!DOCTYPE note [
  <!ELEMENT note (to,from,heading,body)>
  <!ELEMENT to      (#PCDATA)>
  <!ELEMENT from    (#PCDATA)>
  <!ELEMENT heading (#PCDATA)>
  <!ELEMENT body    (#PCDATA)>
]>

refdtd.xml

<!DOCTYPE note SYSTEM "note.dtd">
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

3

DTD的构建模块:

元素

属性

实体:即变量,可通过解析实体引用(&entity)获取实体值.如实体引用&nbsp;会被解析成空格.实体有作用域.

PCDATA:被解析器解析的文本,会解析文本变量为文本.

CDATA:不解析实体引用,不解析实体

4

常见实体引用:

&lt;<

&gt;>

&amp;&

&quot;"

&apos;'

5

元素声明

<!ELEMENT元素名称类别>

<!ELEMENT元素名称(元素内容)>

<!ELEMENTbrEMPTY>

<!ELEMENT元素名称(#PCDATA)>

(#PCDATA):表示元素内容为解析字符串.

<!ELEMENTsqlMapConfig(properties?,settings?,typeAlias*,typeHandler*,transactionManager?,sqlMap+)+>

表示元素内容为子元素序列.

5

声明只出现一次的子元素

<!ELEMENT元素名称(子元素名称)>

声明最少出现一次的子元素

<!ELEMENT元素名称(子元素名称+)>

声明出现零次或多次的子元素

<!ELEMENT元素名称(子元素名称*)>

声明出现零次或一次的子元素

<!ELEMENT元素名称(子元素名称?)>

声明“必选其中之一”类型的子元素

<!ELEMENTnote(message|body)>

声明混合型的内容

<!ELEMENTnote(#PCDATA|to|from|header|message)*>

表示:

"note"元素可包含出现零次或多次的PCDATA、"to"、"from"、"header"或者"message"。

EMPTY: 表示元素没有内容
ANY:表示元素任何内容

* 0次或多次
+ 1次或多次
? 0次或1次
| 选择其中之一

6

声明属性

<!ATTLIST元素名称属性名称属性类型默认值>

7

属性类型

CDATA	值为字符数据 (character data)
(en1|en2|..)	此值是枚举列表中的一个值
ID	值为唯一的 id
IDREF	值为另外一个元素的 id
IDREFS	值为其他 id 的列表
NMTOKEN	值为合法的 XML 名称
NMTOKENS	值为合法的 XML 名称的列表
ENTITY	值是一个实体
ENTITIES	值是一个实体列表
NOTATION	此值是符号的名称
xml:	值是一个预定义的 XML 值

8

属性默认值

值	属性的默认值
#REQUIRED	属性值是必需的
#IMPLIED	属性不是必需的
#FIXED value	属性值是固定的

8

实体

一个内部实体声明
语法:
<!ENTITY 实体名称 "实体的值">
例子:
DTD 例子:
<!ENTITY writer "Bill Gates">
<!ENTITY copyright "Copyright W3School.com.cn">
XML 例子:
<author>&writer;&copyright;</author>
注释: 一个实体由三部分构成: 一个和号 (&), 一个实体名称, 以及一个分号 (;)。
一个外部实体声明
语法:
<!ENTITY 实体名称 SYSTEM "URI/URL">
例子:
DTD 例子:
<!ENTITY writer SYSTEM "http://www.w3school.com.cn/dtd/entities.dtd">
<!ENTITY copyright SYSTEM "http://www.w3school.com.cn/dtd/entities.dtd">
XML 例子:
<author>&writer;&copyright;</author>

9

通过JS验证DTD

var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")
xmlDoc.async="false"
xmlDoc.validateOnParse="false"
xmlDoc.load("note_dtd_error.xml")

document.write("<br>Error Code: ")
document.write(xmlDoc.parseError.errorCode)
document.write("<br>Error Reason: ")
document.write(xmlDoc.parseError.reason)
document.write("<br>Error Line: ")
document.write(xmlDoc.parseError.line)

相关推荐