加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

XML之DTD

发布时间:2020-12-16 05:48:24 所属栏目:百科 来源:网络整理
导读:DTD定义了数据是如何格式化的。它必须为XML文档定义每个允许使用的元素和属性,可能接受的属性值,每个元素的嵌套和出现的方式,以及任何的外部实体。DTD还可以指定XML文档其他方面,但是这些基本内容是我们要重点关注的。 DTD语义 元素 DTD 多数是由 ELEMEN

DTD定义了数据是如何格式化的。它必须为XML文档定义每个允许使用的元素和属性,可能接受的属性值,每个元素的嵌套和出现的方式,以及任何的外部实体。DTD还可以指定XML文档其他方面,但是这些基本内容是我们要重点关注的。

DTD语义

元素

DTD多数是由ELEMENT定义和ATTRIBUTE定义组成的。元素的定义是以ELEMENT关键字开头,跟在标准DTD标签的起始标记“<!”之后。后面是这个元素的名称,在紧接着元素名称之后是这个元素的内容模式。内容模式一般放在圆括号内,用来定义什么内容可以包含在元素中。以item元素来举例说明:

<!ELEMENTitem(title|link|description)*>

这是针对任何item元素而言,它可能还有title元素,link元素,或者description元素嵌套在item元素内。“or”关系是由“|”符号表示的,可以表示一组元素的关联关系,并用圆括号来标识。也就是说,对于这个组(title | link|description),title,link,description这三个元素只能从这三者之中选择其一。这个组后面的 符号表示重复零次或多次,下表列出了表示DTD元素重复的操作符号:

操作符号
描述
[默认]
只能出现一次(1)
?
出现零次或一次(0 .. 1)
+
出现一次或多次(1 .. N)
*
出现零次或多次(0 .. N)

因此,再次访问item元素时,在item元素中定义的title,link,或者description可能会出现,且这组元素可以出现多次,也就意味着在item元素中可以存在任意数目的title,link,或者description元素,而且这个XML文档仍然是合法的。

举一个重复应用元素的实例,看下面skipHours元素的定义:

<!ELEMENTskipHours(hour+)>

在skipHours元素中必须至少有一个hour元素,但是没有最大数量的限制。

你可以使用逗号,)操作符进行排序

<!ELEMENTsubscribers(url,email,comment*)>

在subscribers内,只能有一个(有且仅有一个)url元素,后面跟着是一个email元素,最后是零个或多个comment元素。

如果元素内包含字符数据,使用#PCDATA关键字作为它的内容模式:

<!ELEMENTtitle(#PCDATA)>

如果元素内不包含任何内容,使用EMPTY关键字:

<!ELEMENTtopicEMPTY>

属性

一旦处理元素的定义,就会想到需要定义属性。属性都是通过关键字ATTLIST来定义的。第一个是元素的名称,然后是多种属性的定义。这些属性定义要包含属性的名称属性的类型[即属性是必须包含,还是可选的(意指该属性不是必须的)]属性值是文本的属性可以简单地使用CDATA表示属性类型即可。如下所示:

<!ATTLISTrssversionCDATA#REQUIRED>

你也可以为属性指定一系列的值,在进行文档分析时这些属性值都应该是合法的(下面范例是描述技术书的DTD):

<!ATTLISTtitleseries(C|Java|Linux|Oracle|Perl|Web|Windows)#REQUIRED>

实体

你可以在DTD中使用ENTITY关键字指定实体引用。这与DOCTYPE引用类似:

<!ENTITYOReillyCopyrightSYSTEM"http://www.oreilly.com/copyright.xml">

这就是在指定的URL地址上装载copyright.xml文件,作为O'Reilly copyright实体引用的值,在下面的范例中使用到了这个引用 :

<legal>
<legal-notice>$OReillyCopyright;</legal-notice>
</legal>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读