`
liuwei_blog
  • 浏览: 94350 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

DTD语法

阅读更多

                                                                                              DTD语法
一 简介
 文档类型定义(DTD)是用来定义一段合法的XML文档块。它用来验证你的XML文档是以一系列合法的元素构成的。
 DTD可以在XML文档内部定义,也可以在通过外部文件的方式引入
 1 内部声明方式
 如果要把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>
The DTD above is interpreted like this:
以上的DTD声明解释如下:
第二行!DOCTYPE note声明这是一个note类型的文档
第三行!ELEMENT note声明note元素包含四个子元素:to,from,heading,body
第四行的!ELEMENT to声明to元素的类型是“#PCDATA”
第五行的!ELEMENT from声明from元素的类型是“#PCDATA”
以此类推... ...
2 外部DOCTYPE声明
If the DTD is external to your XML source file, it should be wrapped in a DOCTYPE definition with the following syntax:
如果DTD是在XML源文件的外部,就需要在XML文件内用以下的语法声明DOCTYPE
<!DOCTYPE 根元素 SYSTEM "文件名">
以下是一个使用外部DOCTYPE声明的XML例子
<?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> 
以下是note.dtd 文件的内容:
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
3 为什么要使用DTD
With DTD, each of your XML files can carry a description of its own format with it.
使用DTD,有以下好处:
1,你的每一个XML文件可以描述自身的结构
2,使不相关的人对于某种用于交流的数据达成统一的共识
3,你的应用程序可以通过一个标准(DTD)对来自于外部的数据(XML文件)进行有效性验证。当然你也可以用它来验证你自己的数据

二,DTD-XML构造块
The main building blocks of both XML and HTML documents are tags like <body>....</body>.
XML和HTML文档的主要构造块都是像“<body>....</body>”这样的标签
1,XML文档的构造块
Seen from a DTD point of view, all XML documents (and HTML documents) are made up by the following simple building blocks:
从一个DTD的视角出发,所有的XML文档(包括HTML文档)是以下几种简单的构造块构成的:
Elements
Attributes
Entities
PCDATA
CDATA
以下是对每个构造块的简要的解释:
1,Elements(元素)
Elements are the main building blocks of both XML and HTML documents.
元素是主要的XML和HTML文档的构造块
在HTML中常见的有"body","table";而在XML中,元素可能是“note”,“message”。
元素可以包含文本,其他元素或者为空。例如空的HTML元素有hr,br和img;
例子:
<body>body text in between</body><message>some message in between</message>
2,Attribute(属性)
属性为元素提供了额外的信息
属性总是被放置在一个元素的起始标记中,以名值对的方式出现。下面是一个包含图片来源的img元素的例子
<img src="computer.gif" />
元素名是“img”,属性名是“src”,值是“computer.gif”.
3,Entities (实体)
实体是用来定义通用文本的变量。实体引用是对实体的引用(译者注:好废的话啊,原文是“Entity references are references to entities.”)
你最有可能知道的HTML实体引用是“&nbsp;”,这是用在HTML中的“不换行的空格”实体。
以下是XML中预定义的实体:
实体引用  代表字符
&lt;         <
&gt;         >
&amp;        &
&quot;       "
&apos;       '
4,PCDATA
PCDATA的意思是可解析的字符数据。
可以把“字符数据”看成是在一个XML元素的开始标签和结束标签之间的文本。
PCDATA是将会被一个解析器解析的文本。在这个文本中的标签会被当作标记和实体而继续被展开(译者注:就是说如果文本中包含有tag,解析器将会递归的解析下去)
5,CDATA
CDATA also means character data.
CDATA的意思是字符数据。
CDATA是不会被解析器解析的文本。在text中的标签将不会被认为是标记和实体而展开 

三 DTD-元素

1,声明一个元素
在DTD中,XML元素使用“element”声明的。一个element声明有以下两中方式的语法声明:
<!ELEMENT element-name 类型>
 或者
<!ELEMENT element-name (元素内容)>
 空元素
空元素可以用关键字“EMPTY”作为其类型
例子:
<!ELEMENT element-name EMPTY>
example:<!ELEMENT br EMPTY>XML example:<br />
只包含字符的元素

只包含字符的元素是用包含在圆括号里的“#PCDATA”来声明的:
<!ELEMENT element-name (#PCDATA)>
例子:
<!ELEMENT from (#PCDATA)>
包含任意内容的元素
是以关键字“ANY”作为其类型来声明的,可以包含任何可解析的数据。
<!ELEMENT element-name ANY>
例子
<!ELEMENT note ANY>

包含子元素的元素
包含子元素的元素是以在圆括号中包含所有子元素的形式定义的:
<!ELEMENT element-name
 (child-element-name)>
或者
<!ELEMENT element-name
 (child-element-name,child-element-name,.....)>
 例子:
<!ELEMENT note (to,from,heading,body)>
一旦在圆括号中定义了子元素,那么XML文档中的子元素必须以声明的顺序出现
“note”元素的完整声明如下:
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to      (#PCDATA)>
<!ELEMENT from    (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body    (#PCDATA)>

声明只能出现一次的子元素。语法:
<!ELEMENT element-name (child-name)>
例子:
<!ELEMENT note (message)>

上面例子演示了子元素必须出现,并且只能出现在“note”元素里面一次。


声明出现至少一次的子元素。语法:
<!ELEMENT element-name (child-name+)>
例子:
<!ELEMENT note (message+)>

“+”号表示子元素在“note”元素必须至少出现一次

声明出现零次或多次的子元素。语法:
<!ELEMENT element-name (child-name*)>
例子:
<!ELEMENT note (message*)>

"*"号表示子元素在“note”元素中可以不出现或者出现多次。

声明出现零次或一次的子元素。语法:
<!ELEMENT element-name (child-name?)>
例子:
<!ELEMENT note (message?)>

"*"号表示子元素"message"在“note”元素中可以不出现或者出现一次。


声明多种选择中取其一的内容,例子:
<!ELEMENT note (to,from,header,(message|body))>
上面的例子声明:note元素必须包含一个“to”元素,一个“from”元素,一个“header”元素。还有一个message或者body元素(二者只能取其一)


声明混合内容。例子:
<!ELEMENT note (#PCDATA|to|from|header|message)*>
上面的例子说明,note元素可以包含零个或者多个的可解析字符串或to元素或from元素或header元素或message元素(这五种取一)

 

DTD – 属性
在一个 DTD 当中,属性都是用一个 ATTLIST 描述来进行表述的。
属性描述:
 
 一个属性描述通过以下语句:
 
<!ATTLIST element-name attribute-name 
 attribute-type default-value>
example:
DTD example:
<!ATTLIST payment type CDATA "check">
 
XML example:
<payment type="check" />
一个attribute-type 可以被赋予以下值:

 

注解
CDATA
The value is character data 这个值是字符数据
(en1|en2|..)
The value must be one from an enumerated list 这个值来自列举清单中
ID
The value is a unique id 这个值是唯一的 ID
IDREF
The value is the id of another element 这个值是另外的元素的 ID
IDREFS
The value is a list of other ids 这些值是其他 ID 中的一列
NMTOKEN
The value is a valid XML name 这个值是个有效的 XML 名称
NMTOKENS
The value is a list of valid XML names 这些值是有效的 XML 名称中的一列
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 这个值是一个提前被定义的 XML

 

default-value 可以有以下几种:

 

注解
value
The default value of the attribute 是某属性下的默认值
#REQUIRED
The attribute value must be included in the element 这个属性值必须被包含在这个元素中
#IMPLIED
The attribute does not have to be included 这个属性不是必须被包括
#FIXED value
The attribute value is fixed 这个属性值是固定的

 

一个默认的属性值的例子:
DTD:
<!ELEMENT square EMPTY>
<!ATTLIST square width CDATA "0">
Valid XML:
 "square"
<square width="100" />
在以上这个例子当中,”square”这个元素就通过CDATA类别下面的”wdith”属性被定义为一个空的元素,如果没有用width这个属性来进行明确说明,就会产生一个默认值”0”。
 
#IMPLIED 非必须的
语法
<!ATTLIST element-name attribute-name 
attribute-type #IMPLIED>
 
例子
DTD:
<!ATTLIST contact fax CDATA #IMPLIED>
合法的
XML:
<contact fax="555-667788" />
合法的
 XML:
<contact />
 
如果你不想强制作者使用一个属性,而你毫无选择余地的得到一个默认值,那么就使用#IMPLIED 这个关键词
 
#REQUIRED 必须的
语法
<!ATTLIST element-name attribute_name 
attribute-type #REQUIRED>
 
例子
DTD:
<!ATTLIST person number CDATA #REQUIRED>
合法的
 XML:
<person number="5677" />
非法的
 XML:
<person />
如果你需要作者必须给出一个属性的值,那么就使用#REQUIRED 这个关键词。
 
#FIXED 固定的
语法
<!ATTLIST element-name attribute-name 
attribute-type #FIXED "value">
 
例子
DTD:
<!ATTLIST sender company CDATA #FIXED "Microsoft">
合法的
 XML:
<sender company="Microsoft" />
非法的
 XML:
<sender company="W3Schools" />
 
当你想要有使用一个不允许作者修改的固定的值,那么可以使用#FIXED 关键词。如果作者输入别的值,则 XML 解析器将会返回一个 error
 
列举属性值
Syntax:
<!ATTLIST element-name 
 attribute-name (en1|en2|..) default-value>
DTD example:
<!ATTLIST payment type (check|cash) "cash">
 
XML example:
<payment type="check" />
or
<payment type="cash" />
 

当你想要那些属性值成为固定的一系列逻辑值之一时,可以使用列举属性值
 五 实体
实体就是指向通用文本的变量名
-实体可以在内部或者外部定义
--------------------------------------------------------------------------------

内部实体声明,语法:
<!ENTITY entity-name "entity-value">
DTD Example:
<!ENTITY writer "Donald Duck.">
<!ENTITY copyright "Copyright W3Schools.">
XML example:
<author>&writer;&copyright;</author>
 
--------------------------------------------------------------------------------
外部实体声明,语法:
<!ENTITY entity-name SYSTEM "URI/URL">
DTD Example:
<!ENTITY writer   
 SYSTEM "http://www.w3schools.com/dtd/entities.dtd ">
<!ENTITY copyright
 SYSTEM "http://www.w3schools.com/dtd/entities.dtd ">
 XML example:<author>&writer;&copyright;</author>

 

分享到:
评论

相关推荐

    Ant DTD语法检查

    编写ant的时候提示语法所用的dtd,因为ant自带不带有必须要生成,比较麻烦。

    DTD的CHM帮助文档

    2. **DTD语法**:详细阐述DTD的语法元素,如元素声明、属性声明、实体声明、注释以及选择性声明等。这包括元素的类型(如空元素、混合内容元素等)、属性约束和默认值设定。 3. **实体与符号引用**:介绍如何使用...

    XML学习 DTD

    2. 使用DTD语法编写规则,定义元素的层级、属性和约束。 3. 在XML文档顶部添加`&lt;!DOCTYPE&gt;`声明,引用刚才创建的DTD文件。 4. 使用XML解析器或验证工具检查XML文档是否符合DTD的规则。 通过这样的实践,可以深入...

    DTD实用教程之教学课件

    #### 四、DTD语法详解 1. **声明元素** - **空元素**:用于声明没有子元素的元素,使用`EMPTY`关键字。 ```xml &lt;!ELEMENT br EMPTY&gt; ``` - **仅包含PCDATA**:用于声明只包含文本内容的元素,使用`#PCDATA`。...

    xml语法检验DTD文件

    为了确保XML文档结构的正确性,我们可以使用DTD(Document Type Definition),它是XML 1.0规范的一部分,用于定义XML文档的结构和规则。 **DTD的基本概念** DTD是用来定义XML文档元素架构、元素标记、属性以及它们...

    计算机xm编程文档类型应用

    DTD语法** - **元素类型**:`#PCDATA`表示元素可以包含纯文本数据,而`CDATA`区域则指示该部分内容不应被XML解析器解析。 - **实体声明**:允许创建引用,如`&lt;!ENTITY name "value"&gt;`,用于重用文本或引入外部资源...

    XML内容验证

    这些声明使用特定的DTD语法,如`&lt;!ELEMENT book (title, author, publication_date)&gt;`表示`book`元素包含一个`title`元素、一个`author`元素和一个`publication_date`元素。 2. **引用DTD**:在XML文档的开头,通过...

    使用DTD实现文档结构定义

    1.掌握DTD基本语法规范 2.掌握DTD对元素的声明 实验内容: 1.改正以下message.xml文档的语法错误,并将内部DTD改为外部DTD,并要求验证文档有效性。 &lt;!DOCTYPE myMessage [ &lt;!ELEMENT myMessage (message)&gt; &lt;!...

    mybatis-3-config.dtd mybatis-3-mapper.dtd

    在实际应用中,`mybatis-3-config.dtd` 和 `mybatis-3-mapper.dtd` 通过引入机制被引用到XML配置文件中,确保解析器能够理解并验证配置文件的语法。例如: ```xml &lt;!DOCTYPE configuration PUBLIC "-//mybatis.org...

    DTD验证XML详解

    - **XML Schema (XSD)**:提供了更复杂的数据类型和更强的验证能力,但语法比DTD复杂。 - **Relax NG**:一种更灵活的XML模式语言,支持混合内容模型和更简洁的语法。 了解并熟练运用DTD验证XML对于开发和维护高...

    xml与DTD,xml与DTD

    ### XML与DTD详解 #### 一、XML简介 XML(Extensible Markup Language)是一种非常重要的数据交换标准,它被广泛应用于互联网数据交换场景之中。XML的设计初衷是为了传输和存储数据,其灵活性允许用户自定义标签,...

    XML文件格式语法及DTD

    ### XML文件格式语法及DTD详解 #### XML简介 XML(Extensible Markup Language,可扩展标记语言)是一种用于标记数据、定义数据类型、便于结构化存储和传输数据的标记语言。与HTML(主要用于显示数据)不同,XML更...

    Ajax模拟面试试题

    7. XML Schema与DTD:两者都定义XML文档结构,XML Schema支持数据类型和命名空间,可扩展,功能更强大,基于XML编写,而DTD语法相对简单。 8. XML Schema指示器:all表示子元素可以任意顺序出现且必须出现一次,...

    xml知识总结

    - **DTD语法**:定义元素、属性和实体。 - 定义元素:如`&lt;!ELEMENT 元素名称 使用规则&gt;`,`使用规则`可以是`#PCDATA`、`EMPTY`、`ANY`或其他元素组合。 - 定义属性:`&lt;!ATTLIST 元素名称 属性名 属性值类型 设置...

    javaEE servlet 学习笔记

    - DTD语法包括`&lt;!ELEMENT&gt;`定义元素的结构,`&lt;!ATTLIST&gt;`定义元素的属性,`(#PCDATA)`表示元素内容为纯文本,`EMPTY`表示元素为空,`ANY`表示元素可以包含任何内容,`+`、`*`和`?`分别表示元素出现的次数。 Schema...

    sql-map-2.dtd和sql-map-config-2.dtd

    引入sql-map-config-2.dtd后,开发者可以确保配置文件的语法正确,避免因格式错误导致的运行时问题。 在实际应用中,这两个DTD文件通常会被引用到对应的XML配置文件顶部,如下所示: ```xml &lt;!DOCTYPE sqlMap ...

Global site tag (gtag.js) - Google Analytics