微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

xml之dtd约束

DTD:Document Type DeFinition 文档定类型定义。

作用:是用来约束XML的书写规范。

写法:

内部声明:

假如 DTD 被包含在您的 XML 源文件中,它应当通过下面的语法包装在一个 !DOCTYPE 声明中:<!DOCTYPE根元素 [元素声明]>

外部声明:

本地:

<!DOCTYPE 根元素 SYstem "dtd文件名">

外地(网上):

<!DOCTYPE 根元素 PUBLIC “dtd的名称” “dtd的路径”>


DTD语法:

<!ELEMENT 元素名称 使用规则>

使用规则:

  1. (#PCDATA):指示元素的主体内容只能是普通的文本.(Parsed Character Data)

  2. EMPTY:用于指示元素的主体为空。比如<br/>

  3. ANY:用于指示元素的主体内容为任意类型。

  4. (子元素):指示元素中包含的子元素

定义子元素及描述它们的关系:

  1. 如果子元素用逗号分开,说明必须按照声明顺序去编写XML文档。

    如: <!ELEMENT FILE (TITLE,AUTHOR,EMAIL)>

  2. 如果子元素用“|”分开,说明任选其一。

    如:<!ELEMENT FILE (TITLE|AUTHOR|EMAIL)>

  3. 用+、*、?来表示元素出现的次数


    • 如果元素后面没有+*?:表示必须且只能出现一次

    • +:表示至少出现一次,一次或多次

    • *:表示可有可无,零次、一次或多次

    • ?:表示可以有也可以无,有的话只能有一次。零次或一次

如: <!ELEMENT MYFILE ((TITLE*,AUTHOR?,EMAIL)* | COMMENT)>

定义属性:在DTD文档中使用ATTLIST关键字来为一个元素声明属性

语法:

<!ATTLIST元素名
		属性名1属性值类型设置说明
		属性名2属性值类型设置说明
		…
>
如:
<!ATTLIST商品
		类别CDATA#required
		颜色CDATA#IMPLIED
>
对应的XML为:<商品类别=“服装”颜色=“***”/>

属性值类型:

设置说明:

CDATA:表示属性的取值为普通的文本字符串

ENUMERATED (DTD没有此关键字):表示枚举,只能从枚举列表中任选其一,如(鸡肉|牛肉|猪肉|鱼肉)

ID:表示属性的取值不能重复

#required:表示该属性必须出现

#IMPLIED:表示该属性可有可无

#FIXED:表示属性的取值为一个固定值。语法:#FIXED "固定值"

直接值:表示属性的取值为该认值

定义实体:

为一段内容指定一个名称,使用时通过这个名称就可以引用其所代表的内容

在DTD文档中使用ENTITY关键字来声明一个实体。

实体可分为:引用实体和参数实体,两者的语法不同

引用实体语法:<!ENTITY 实体名称 “实体内容”>

在XML中引用方式:&实体名称

参数实体语法:<!ENTITY % 实体名称 “实体内容”>

在DTD中引用方式:%实体名称

示例(网上搜的):

<?xmlversion="1.0"?>
<!DOCTYPEnote[
<!ELEMENTnote(to,from,heading,body)>
<!ELEMENTto(#PCDATA)>
<!ELEMENTfrom(#PCDATA)>
<!ELEMENTheading(#PCDATA)>
<!ELEMENTbody(#PCDATA)>
]>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don'tforgetmethisweekend</body>
</note>

!DOCTYPE note (第二行)定义此文档是 note 类型的文档。

!ELEMENT note (第三行)定义 note 元素有四个元素:"to、from、heading,、body"

!ELEMENT to (第四行)定义 to 元素为 "#PCDATA" 类型

!ELEMENT from (第五行)定义 from 元素为 "#PCDATA" 类型

!ELEMENT heading (第六行)定义 heading 元素为 "#PCDATA" 类型

!ELEMENT body (第七行)定义 body 元素为 "#PCDATA" 类型


备注:用的时候具体看W3School的DTD教程,地址:http://www.w3school.com.cn/dtd/index.asp

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。