博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
XML之DTD
阅读量:6855 次
发布时间:2019-06-26

本文共 1367 字,大约阅读时间需要 4 分钟。

  hot3.png

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

DTD语义

元素

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

这是针对任何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元素的定义:

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

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

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

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

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

属性

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

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

实体

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

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

    
$OReillyCopyright;

转载于:https://my.oschina.net/fhd/blog/367207

你可能感兴趣的文章
源码安装apache
查看>>
CentOS7安装MySQL5.6.27数据库
查看>>
Data Guard Broker系列之五:数据库角色转换
查看>>
第三章_JSP
查看>>
【原创】modb 功能设计之“支持部分MySQL客户端协议”-3
查看>>
Spring中你不知道的注入方式
查看>>
导航点击选中效果重构
查看>>
手机端产生本地图形验证码
查看>>
C++设计模式之1-工厂模式
查看>>
Android自定义View 画弧形,文字,并增加动画效果
查看>>
设计模式 总揽 通过这篇随笔可以访问所需要了解的设计模式
查看>>
Java HotSpot VM中的JIT编译
查看>>
敏捷软件测试--初见
查看>>
NSLayoutConstraint
查看>>
深入浅出: 大小端模式
查看>>
走在网页游戏开发的路上(十一)
查看>>
[Linux shell]查找某目录下文件是否包含某个字符串
查看>>
Java的RMI远程方法调用实现和应用
查看>>
线程间共享数据无需竞争
查看>>
记一次通宵加班
查看>>