`
Kyll
  • 浏览: 101917 次
  • 性别: Icon_minigender_1
  • 来自: 长春
社区版块
存档分类
最新评论
阅读更多
DTD (文档类型定义)的目的是用来建立合法的 XML 文档。
它定义了一个带有合法的元素和属性的列表的文档结构。

一个 DTD 可以被声明在 XML 文档内部(内联), 或者作为一个外部引用。

内部声明
如果 DTD 声明在 XML 文件内部, 必须被包装进 DOCTYPE 定义, 用以下的语法:
xml 代码
 
  1. <!DOCTYPE root-element [element-declarations]>  

例如:
xml 代码
 
  1. <?xml version="1.0"?>  
  2. <!DOCTYPE note [  
  3.   <!ELEMENT note (to,from,heading,body)>  
  4.   <!ELEMENT to      (#PCDATA)>  
  5.   <!ELEMENT from    (#PCDATA)>  
  6.   <!ELEMENT heading (#PCDATA)>  
  7.   <!ELEMENT body    (#PCDATA)>  
  8. ]>  
  9. <note>  
  10.   <to>Tove</to>  
  11.   <from>Jani</from>  
  12.   <heading>Reminder</heading>  
  13.   <body>Don't forget me this weekend</body>  
  14. </note>  

说明:
!DOCTYPE note 定义文档的根元素是 note
!ELEMENT note 定义了 note 元素包含 4 元素 to, from, heading, body
!ELEMENT to 定义 to 元素的类型是 #PCDATA
!ELEMENT from 定义 from 元素的类型是 #PCDATA
!ELEMENT heading 定义 heading 元素的类型是 #PCDATA
!ELEMENT body 定义 body 元素的类型是 #PCDATA

外部声明
如果 DTD 被声明为一个外部文件, 必须用以下的语法包装进 DOCTYPE 定义:
xml 代码
 
  1. <!DOCTYPE root-element SYSTEM "filename">  
  2. <?xml version="1.0"?>  
  3. <!DOCTYPE note SYSTEM "note.dtd">  
  4. <note>  
  5. <to>Tove</to>  
  6. <from>Jani</from>  
  7. <heading>Reminder</heading>  
  8. <body>Don't forget me this weekend!</body>  
  9. </note>  
note.dtd
xml 代码
 
  1. <!ELEMENT note (to,from,heading,body)>  
  2. <!ELEMENT to (#PCDATA)>  
  3. <!ELEMENT from (#PCDATA)>  
  4. <!ELEMENT heading (#PCDATA)>  
  5. <!ELEMENT body (#PCDATA)>  


为什么使用 DTD ?
使用 DTD, 每个 XML 可以带有自己格式的描述。
使用 DTD, 依赖于组的人们可以同意使用一个标准 DTD 说明数据。
你的应用程序使用 DTD 验证你从外部世界收到的数据是有效的。
你可以使用 DTD 验证自己的数据。

XML 文档的主要组成
Elements 元素
Attributes 属性
Entities 实体
PCDATA 解析字符数据
CDATA 字符数据

Element(元素)
XML 文档的主要部分。 元素可以包含文本, 其他元素, 或者是空的。

Attribute(属性)
提供元素的额外信息。 属性在开始标签的内部, 是“名=值”对的形式。

Entity(实体)
一些字符在 XML 文档中有特殊的含义, 比如小于号(<)定义标签的开始。
XML 中预定义的实体:
Entity References Character
&lt; <
&gt; >
&amp; &
&quot; "
&apos; '


PCDATA 意为解析字符数据。
把字符数据看作 XML 元素开始标记和结束标记之间可以找到的文本。
PCDATA 是将要被一个解析器解析的文本。 这个文本要被解析器检查为实体和标记。
标签中的文本将要作为标记和实体被处理。
但是被解析的数据不能包含任何 &, <, > 字符, 这些需要被表现为 &amp; &lt; 和 &gt; 实体。

CDATA 意为字符数据
CDATA 是不被解析器解析的文本。 标签中的文本将不被作为标记和实体处理。

声明 Element(元素)
在 DTD 中, XML 元素的声明语法:
xml 代码
 
  1. <!ELEMENT element-name category>  
或者
xml 代码
 
  1. <!ELEMENT element-name (element-content)>  

空元素
xml 代码
 
  1. <!ELEMENT element-name EMPTY>  
例如:
xml 代码
 
  1. <!ELEMENT br EMPTY>  
XML example:
xml 代码
 
  1. <br />  


PCDATA
xml 代码
 
  1. <!ELEMENT element-name (#PCDATA)>  
例如:
xml 代码
 
  1. <!ELEMENT from (#PCDATA)>  

任何内容
xml 代码
 
  1. <!ELEMENT element-name ANY>  
例如:
xml 代码
 
  1. <!ELEMENT note ANY>  


子元素(子元素声明顺序要一致)
java 代码
  1. <!ELEMENT element-name (child1)>  
或者
xml 代码
 
  1. <!ELEMENT element-name (child1,child2,...)>  
例如:
xml 代码
 
  1. <!ELEMENT note (to,from,heading,body)>  

只能出现一次的元素
xml 代码
 
  1. <!ELEMENT element-name (child-name)>  
例如:
xml 代码
 
  1. <!ELEMENT note (message)>  

至少出现一次的元素
xml 代码
 
  1. <!ELEMENT element-name (child-name+)>  
例如:
xml 代码
 
  1. <!ELEMENT note (message+)>  

出现 0 或者多次的元素
xml 代码
 
  1. <!ELEMENT element-name (child-name*)>  
例如:
xml 代码
 
  1. <!ELEMENT note (message*)>  

出现 0 或者 1 次的元素
xml 代码
 
  1. <!ELEMENT element-name (child-name?)>  
例如:
xml 代码
 
  1. <!ELEMENT note (message?)>  

声明任选一的元素
xml 代码
 
  1. <!ELEMENT note (to,from,header,(message|body))>  

声明混合元素
xml 代码
 
  1. <!ELEMENT note (#PCDATA|to|from|header|message)*>  

DTD 属性
xml 代码
 
  1. <!ATTLIST element-name attribute-name attribute-type default-value>  
例如:
xml 代码
 
  1. <!ATTLIST payment type CDATA "check">  
  2. <payment type="check" />  


属性类型
Type Description

CDATA

The value is character data

(en1|en2|..)

The value must be one from an enumerated list

ID

The value is a unique id

IDREF

The value is the id of another element

IDREFS

The value is a list of other ids

NMTOKEN

The value is a valid XML name

NMTOKENS

The value is a list of valid XML names

ENTITY

The value is an entity

ENTITIES

The value is a list of entities

NOTATION

The value is a name of a notation

xml:

The value is a predefined xml value


默认值
Value Explanation

value

The default value of the attribute

#REQUIRED

The attribute is required

#IMPLIED

The attribute is not required

#FIXED value

The attribute value is fixed

例如:
DTD:
xml 代码
 
  1. <!ELEMENT square EMPTY>  
  2. <!ATTLIST square width CDATA "0">  
Valid XML:
xml 代码
 
  1. <square width="100" />  

#REQUIRED(必须) 属性值是必须的
语法:
xml 代码
 
  1. <!ATTLIST element-name attribute_name attribute-type #REQUIRED>  
例如:
DTD:
xml 代码
 
  1. <!ATTLIST person number CDATA #REQUIRED>  
合法 XML:
xml 代码
 
  1. <person number="5677" />  
非法 XML:
xml 代码
 
  1. <person />  

#IMPLIED(隐含) 属性值可有可无, 没有默认操作
语法:
xml 代码
 
  1. <!ATTLIST element-name attribute-name attribute-type #IMPLIED>  
例如:
DTD:
xml 代码
 
  1. <!ATTLIST contact fax CDATA #IMPLIED>  
合法 XML:
xml 代码
 
  1. <contact fax="555-667788" />  
合法 XML:
xml 代码
 
  1. <contact />  

#FIXED(固定) 属性值是固定的, 不允许改变
语法:
xml 代码
 
  1. <!ATTLIST element-name attribute-name attribute-type #FIXED "value">  
例如:
DTD:
xml 代码
 
  1. <!ATTLIST sender company CDATA #FIXED "Microsoft">  
合法 XML:
xml 代码
 
  1. <sender company="Microsoft" />  
非法 XML:
xml 代码
 
  1. <sender company="W3Schools" />  

枚举属性值
语法:
xml 代码
 
  1. <!ATTLIST element-name attribute-name (en1|en2|..) default-value>  
例如:
DTD:
xml 代码
 
  1. <!ATTLIST payment type (check|cash) "cash">  
XML example:
xml 代码
 
  1. <payment type="check" />  
或者
xml 代码
 
  1. <payment type="cash" />  

在 XML 中, 什么时候用属性, 什么时候用子元素, 没有一个固定的规则。 (尽量用子元素表现数据)
数据可以被存贮为属性或者子元素。
例如:
java 代码
 
  1. <person sex="female">  
  2.   <firstname>Anna</firstname>  
  3.   <lastname>Smith</lastname>  
  4. </person>  
  5. <person>  
  6.   <sex>female</sex>  
  7.   <firstname>Anna</firstname>  
  8.   <lastname>Smith</lastname>  
  9. </person>  

声明实体(注意: 实体包含 3 部分 &符号, 实体名称, 分号)
内部定义语法:
xml 代码
 
  1. <!ENTITY entity-name "entity-value">  
例如:
DTD Example:
xml 代码
 
  1. <!ENTITY writer "Donald Duck.">  
  2. <!ENTITY copyright "Copyright W3Schools.">  
XML example:
xml 代码
 
  1. <author>&writer;&copyright;</author>  

外部定义语法:
xml 代码
 
  1. <!ENTITY entity-name SYSTEM "URI/URL">  
DTD Example:
xml 代码
 
  1. <!ENTITY writer SYSTEM "http://www.w3schools.com/entities.dtd">  
  2. <!ENTITY copyright SYSTEM "http://www.w3schools.com/entities.dtd">  
XML example:
xml 代码
 
  1. <author>&writer;&copyright;</author>  

 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics