DTD与XML
来源:互联网 发布:dvwa sql injection 编辑:程序博客网 时间:2024/05/16 14:37
DTD与XML
XML作为一门标记语言,它就需要一种文档(即文档类型定义DTD)来定义,DTD可以看作是一类XML文档的模板。它定义了文档的逻辑结构,规定了 XML文档中所使用的元素,实体,元素的属性,元素与实体之间的关系。它使得数据交流与共享得以正常进行,验证了数据的有效性。
一、XML文档的构造块
所有的XML文档(包括HTML文档)是以下几种简单的构造块构成的:
Elements
Attributes
Entities
PCDATA
CDATA
以下是对每个构造块的简要的解释:
1、Elements(元素)
元素是主要的XML和HTML文档的构造块。
在HTML中常见的有"body","table";而在XML中,元素可能是“action”,“forword”。
元素可以包含文本,其他元素或者为空。例如空的HTML元素有hr,br和img。
例如:<body>body text in between</body>
<action path="/error"forword="/error.jsp"></action>
2、Attribute(属性)
属性为元素提供了额外的信息。
属性总是被放置在一个元素的起始标记中,以名值对的方式出现。下面是一个包含图片来源的img元素的例子:<imgsrc="computer.gif" />。
元素名是“img”,属性名是“src”,值是“computer.gif”。
3、Entities (实体)
实体是用来定义通用文本的变量。
你最有可能知道的HTML实体引用是“ ”,这是用在HTML中的“不换行的空格”实体。
以下是XML中预定义的实体:
实体引用
代表字符
<
<
>
>
&
&
"
"
'
'
4、PCDATA
PCDATA的意思是可解析的字符数据。
可以把“字符数据”看成是在一个XML元素的开始标签和结束标签之间的文本。
PCDATA是将会被一个解析器解析的文本。在这个文本中的标签会被当作标记和实体而继续被展开。
5、CDATA
CDATA的意思是字符数据。
CDATA是不会被解析器解析的文本。
二、DTD元素
1、声明一个元素
在DTD中,XML元素使用“element”声明的。一个element声明有以下两中方式的语法声明:
<!ELEMENTelement-name 类型>
或者
<!ELEMENTelement-name (元素内容)>
1.1空元素
空元素可以用关键字“EMPTY”作为其类型,例如:
<!ELEMENT element-name EMPTY>
1.2只包含字符的元素
只包含字符的元素是用包含在圆括号里的“#PCDATA”来声明的:
<!ELEMENTelement-name (#PCDATA)>
1.3包含任意内容的元素
是以关键字“ANY”作为其类型来声明的,可以包含任何可解析的数据。
<!ELEMENT element-name ANY>
1.4包含子元素的元素
包含子元素的元素是以在圆括号中包含所有子元素的形式定义的:
<!ELEMENT element-name (child-element-name)>
或者
<!ELEMENT element-name (child-element-name,child-element-name,.....)>
一旦在圆括号中定义了子元素,那么XML文档中的子元素必须以声明的顺序出现。
1.5声明只能出现一次的子元素。语法:
<!ELEMENT element-name (child-name)>
1.6声明出现至少一次的子元素。语法:
<!ELEMENT element-name (child-name+)>
例子:
<!ELEMENT action (forword)+>
“+”号表示子元素“forword”在“action”元素必须至少出现一次。
1.7声明出现零次或多次的子元素。语法:
<!ELEMENTelement-name (child-name*)>
例子:
<!ELEMENTaction (forword)*>
"*"号表示子元素“forword”在“action”元素中可以不出现或者出现多次。
1.8声明出现零次或一次的子元素。语法:
<!ELEMENT element-name (child-name?)>
例子:
<!ELEMENTaction (forword)?>
"?"号表示子元素“forword”在“action”元素中可以不出现或者出现一次。
1.9声明多种选择中取其一的内容,例子:
<!ELEMENT note (to,from,header,(message|body))>
上面的例子声明:note元素必须包含一个“to”元素,一个“from”元素,一个“header”元素。还有一个message或者body元素(二者只能取其一)。
1.10声明混合内容。例子:
<!ELEMENT note (#PCDATA|to|from|header|message)*>
上面的例子说明,note元素可以包含零个或者多个的可解析字符串或to元素或from元素或header元素或message元素(这五种取一)。
三、DTD属性
在一个DTD当中,属性都是用一个ATTLIST描述来进行表述的。
属性描述:
一个属性描述通过以下语句:
<!ATTLIST element-name attribute-name attribute-typedefault-value>
例子:
DTD 例子:
<!ATTLIST payment type CDATA "check">
XML 例子:
<payment type="check" />
一个attribute-type可以被赋予以下值:
值
注解
CDATA
这个值是字符数据。
(en1|en2|..)
这个值来自列举清单中。
ID
这个值是唯一的ID。
IDREF
这个值是另外的元素的ID。
IDREFS
这些值是其他ID中的一列。
NMTOKEN
这个值是个有效的XML名称。
NMTOKENS
这些值是有效的XML名称中的一列。
ENTITY
这个值是个实值。
ENTITIES
这些值是实值中的一列。
NOTATION
这个值是一个注释的名称。
xml:
这个值是一个提前被定义的XML值。
default-value可以有以下几种:
值
注解
value
是某属性下的默认值。
#REQUIRED
这个属性值必须被包含在这个元素中。
#IMPLIED
这个属性不是必须被包括。
#FIXED value
这个属性值是固定的。
1、#IMPLIED非必须的。语法:
<!ATTLIST element-name attribute-name attribute-type #IMPLIED>
2、#REQUIRED必须的。语法:
<!ATTLIST element-name attribute_name attribute-type#REQUIRED>
3、#FIXED固定的。语法:
<!ATTLIST element-name attribute-name attribute-type #FIXED"value">
四、实体
实体就是指向通用文本的变量名。
实体可以在内部或者外部定义:
1、内部实体声明,语法:
<!ENTITY entity-name "entity-value">
DTD例子:
<!ENTITY writer "Donald Duck.">
<!ENTITY copyright "Copyright W3Schools.">
XML例子:
<author>&writer;©right;</author>
2、外部实体声明,语法:
<!ENTITYentity-name SYSTEM "URI/URL">
DTD例子:
<!ENTITY writer SYSTEM "http://www.w3schools.com/dtd/entities.dtd">
<!ENTITY copyright SYSTEM "http://www.w3schools.com/dtd/entities.dtd">
XML 例子:
<author>&writer;©right;</author>
DTD可以是一个完全独立的文件,也可以在XML文件中直接设定。所以,DTD分为外部DTD声明(在XML文件中调用另外已经编辑好的DTD)和内部DTD声明(在XML文件中直接设定 DTD)两种。
一、内部声明方式
如果要把DTD包含在你的XML的内部,需要以以下的语法包含一个“DOCTYPE”声明:
<!DOCTYPE 根元素 [子元素声明]>
下面是一个包含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>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”。
以此类推… …
二、外部声明方式
如果DTD是在XML源文件的外部,就需要在XML文件内用以下的语法声明:
<!DOCTYPE 根元素 SYSTEM "文件名">
以下是一个使用外部声明方式的XML例子:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don'tforget me this weekend!</body>
</note>
以下是note.dtd文件的内容:
<?xml version="1.0"encoding="UTF-8"?>
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
- XML与DTD
- xml 与 dtd
- DTD与XML
- DTD 与 XML
- XML DTD 与XSD
- XML与DTD约束
- XML与DTD
- XML与DTD
- XML与DTD初识
- XML与DTD
- XML DTD与Schema约束
- XML Schema与DTD比较
- XML中的Schema与DTD
- XML DTD与Schema约束
- DTD与XML的区别
- 【XML】标准化DTD与Schema
- XML , DTD 与 XML Schema简述
- XML与DTD约束的例子- 电视节目表DTD
- 用jk整合Apache和tomcat实现负载均衡
- ASP视频播放器大全
- 考研!!!
- 深入探讨:如何理解.Net的三层架构
- java异常使用解析——经典文章
- DTD与XML
- java程序员面试必备的32个要点
- 像绘画那样写代码
- Apache的优化
- 学习C语言并精通C语言
- 日记090508
- Java开发编程规范
- Linux系统下USB摄像头驱动开发
- 成为java高手的八大条件