2013-03-13 2013-05-23

例4中,将元素中属性名为bookid的属性设置为ID类型,元素中名为borrowed的属性设置为IDREFS类型。从Library.xml文档中可以看出,张三借阅了《Java就业培训教材》和《Java开发宝典》这两本书,而李四则借阅了《Java就业培训教材》、《Java Web开发内幕》和《Java开发宝典》这三本书。

5)NMTOKEN和NMTOKENS

NMTOKEN是Name Token的简写,它表示由一个或者多个字母、数字、句点(.)、连字号(-)或下划线(_)所组成的一个名称。NMTOKENS关键字表示一种列表类型。一个元素的NMOTOKENS类型的属性设置值可以是同一个XML文件中的另外多个NMTOKEN类型的属性的设置值,每个NMTOKEN属性值之间用空格分隔。具体示例如下:




在上面的示例中,元素<用户>的“姓名”属性指定为NMTOKEN类型,元素<数据>的“授权用户”属性指定为NMTOKENS,与这段DTD定义语句对应的XML具体如下:

<用户 姓名="张三">

<用户 姓名="李四">

<数据 授权用户="张三 李四">

     这里是一些授权访问的数据

6)NOTATION

现实世界中存在很多无法或不易用XML格式组织的数据,例如图像、声音、影像等等。对于这些数据,XML应用程序常常并不提供直接的应用支持,但可以通过设置NOTATION类型的属性来让一个外部应用程序进行处理。在DTD文件中,NOTATION定义语句分为两种情况,具体如下:

第一种情况:
第二种情况:

在上述定义语句中,第一种情况指定数据的MIME类型,第二种情况指定处理程序的URL路径。当使用NOTATION类型作为属性的类型时,首先要在DTD中使用语句定义相应的notation,接下来通过一个例来演示NOTATION属性的使用,如例5所示。

例5 notation.xml



     
     
     
     
     <文件>
          <电影 演示设备=”mp”/>
     <文件>

在例5中,元素<电影>指定了两种可选的演示设备,一种是movPlayer.exe,一种是用来绘制GIF图像的应用程序。

7)ENTITY和ENTITYS

ENTITY对应的中文意思为实体(关于实体定义的细节,将在后面进行介绍)。当某个属性的类型设置为ENTITY时,表明其属性值必须为在DTD中使用语句定义的一个实体(entity)的引用。接下来看一段DTD定义的语句,具体如下:



与这段DTD定义语句对应的XML数据片断如下:

<电影 来源="&itcast;" />

需要注意的是,只有引用实体才可以作为ENTITY类型属性的设置值,参数实体不能用作ENTITY类型的属性的设置值。关于参数实体和引用实体的相关讲解,将在实体定义中进行详细讲解。

ENTITYS关键字用于表示一种列表类型,一个元素的ENTITYS类型的属性设置值可以是多个实体的引用,每个实体的引用之间用空格分隔,具体示例如下:



根据上面的DTD语句,如果想通过src属性引用两幅图像,则对应的XML数据如下所示:

三、实体定义

有时候需要在多个文档中调用同样的内容,比如公司名称,版权声明等,为了避免重复输入这些内容,可以通过语句定义一个表示这些内容的实体,然后在各个文档中引用实体名替代它所表示的内容。实体可分为两种类型,分别是引用实体和参数实体,接下来,针对这两种实体类型进行详细地讲解。

1)引用实体

引用实体的语法定义格式有两种:

(1)
(2)

引用实体用于解决XML文档中内容重复的问题,其引用方式方法为:

&实体名称;

了解了引用实体的语法格式及其在XML文档中的引用方式,接下来通过一个案例来学习,如例6和例7所示。

例6 book.dtd






 

例7 book.xml

 
 
 <书架>
    <书>
        <书名>Java就业培训教程
        <作者>&itcast;
        <售价>39.9
    
    <书>
        <书名>EJB3.0入门经典
        <作者>黎活明
        <售价>39.00元
    
  

用IE9.0以下的浏览器打开book.xml文件,浏览器显示的结果如图1所示。

1609225008024_01.jpg

图1提示的错误信息是“文本内容中发现无效字符。”这是因为book.dtd文件使用的是本地字符集编码,即GB2312编码,而DTD文件应该使用utf-8或者Unicode编码。需要注意的是,IE9以上版本的浏览器也不会提示错误。

接下来我们将book.dtd按照utf-8编码方式进行重新保存,保存方式如图2所示。

1609225020940_02.jpg

按照图2的方式完成编码保存后,用IE浏览器重新打开book.xml文件或者单击图1-10工具栏中的“刷新”按钮,浏览器显示的结果如图3所示。

1609225035134_03.jpg

从图1、3中可以看出,book.xml文件中的“&itcast;”被显示成“澳门大阳城APP入口官网,www.itcast.cn”。

2)参数实体

参数实体只能被DTD文件自身使用,它的语法格式为:

需要注意的是,在声明参数实体时,ENTITY、%、实体名和“实体内容”之间各有一个空格。

引用参数实体的方式是:

%实体名称;

了解了参数实体的语法格式和引用方式,接下来通过一段示例代码来演示参数实体的定义,具体如下:




在上面的示例中,DTD中定义了两个元素,分别是“个人信息”和“客户信息”,这两个元素的定义中都包含了“姓名| EMAIL|电话|地址”这一相同的部分,因此,可以将相同的部分定义为一个TAG_NAMES的参数实体,然后将“个人信息”和“客户信息”这两个元素的定义规则中的“姓名 | EMAIL | 电话 | 地址”部分替换成对TAG_NAMES这个参数实体的引用即可。

参数实体不仅可以简化元素中定义的相同内容,还可以简化属性的定义,具体示例如下:








在上面的示例中,由于多个元素都具有id和account这两个属性的相同定义,因此,可以将这两个属性的文本内容定义为一个名称为common.attributes的参数实体。当定义元素的属性时,通过引用common.attributes 这个参数实体,将该参数实体转换为id和account 这两个属性所定义的文本内容了。

值得一提的是,当DTD的元素和属性定义中要出现大量相同内容时,参数实体是一种非常不错的选择。因为如果需要修改DTD中相同的部分,只需要在参数实体的定义中修改即可。

猜你喜欢:

什么是CAS?有什么特性?

JSTL标签是什么?常用的有哪些?

什么是负载均衡?负载均衡原理详解

网络通信协议有哪些?

大阳城app官网入口java培训课程

最新资讯

相关阅读

0 分享到:

Java高级软件工程师课程javaee

Python大数据课程python

web前端课程全薪升级V8.5web

AI+设计课程design

大数据培训班cloud

软件测试培训课程test

c

新媒体运营培训课程netmarket

产品经理培训课程pm

linux培训班Linux

影视制作培训movies

智能机器人开发robot

电商视觉设计uids

人工智能培训课程Python

集成电路应用开发(嵌入式)培训课程jdbc

北京校区

    在线咨询 我要报名
    和我们在线交谈!
    Baidu
    sogou