首页 >> 读书频道 >> 电脑 >> 第二部分 文档类型定义 第9章 实体和外部DTD子集 9.5 外部参数实体
 
· 读写INI文件的四个函数
· 第二部分 文档类型定义
· 源代码数据库(Sourc
· 第二部分 文档类型定义
· 第二部分 文档类型定义
· 第二部分 文档类型定义
· 第二部分 文档类型定义
· 第二部分 文档类型定义
· ASP 的新功能
· 第二部分 文档类型定义
· 第二部分 文档类型定义
· 第二部分 文档类型定义
 
· 电视剧《刁蛮公主》下载和
· 美容养颜手册
· 加油金顺剧情分集介绍完整
· 红楼梦:120回全本[清
· 素质教育在美国
· 全唐诗卷四十六
· 韩剧《布拉格恋人》剧情介
· 夜航船[作者:明·张岱]
· 局外人[作者:韩·可爱淘
· 现场流行病学
· 源氏物语[日本:紫式部]
· 武林寓言故事
 
· (出租)中动商场部分及写
· (出租)中动动漫基地&#
· 喜剧学院
· 《善德女王》剧情介绍
· 魔女18号 剧情
· 丑女无敌剧情介绍
· 魔女幼熙剧情介绍
· 龙游天下剧情介绍
· 震撼世界的七日剧情介绍
· 静静的白桦林剧情介绍
· 心情日记—老公今天我想对
· 旗舰剧情介绍
欢迎来到月影社区!如果您觉得这里不错,请推荐给您的朋友们。月影社区:http://wf66.com/

第二部分 文档类型定义 第9章 实体和外部DTD子集 9.5 外部参数实体


查看有无更新版本

关键字:XML 2006-9-17

 

前述例子中使用单一的DTD,用于定义文档中所有的元素。然而文档越长,这种技术应用越少。此外通常希望将DTD中的部分内容用于许多不同的地方。例如,对描述很少发生变化的邮件地址DTD来说,地址定义非常普遍,且可很方便地应用在不同的上下文中。类似地,清单9-2中列出的预定义实体引用可用于大部分XML文档中,但并不想总是对此清单进行拷贝和复制的操作。可用外部参数实体把较小的DTD组成大型的DTD。也就是说,一个外部DTD可以链接到另一外部DTD,第二个DTD引入第一个DTD中声明的元素和实体。尽管严禁使用循环——若DTD2引用DTD1,则DTD1不能引用DTD2��但嵌套的DTD也会大型化和复杂化。同时,将DTD分解为小的、更便于管理的组块,使得对DTD的分析处理更加简便。由于一个实体文档和完整的DTD存储在单一的文件中,在前几章中的许多例子都过于庞大。若文档和文档的DTD分割为几个独立的文件,就变得更加易于理解。此外,描述一组元素的DTD中采用较小的、模块化的结构,使得不同的人或组织创建的DTD之间的组合和匹配更加简便。例如,在写一篇关于高温超导的文章,可能会用到描述其中分子的分子科学DTD、记录公式的数学DTD、描述图形的向量DTD和处理解释性文本的HTML DTD。特殊情况下,可使用Peter Murray-Rust的 Chemical Markup Language中的mol.dtd DTD、W3C的Mathematical Markup Language 中的MathML DTD、W3C的 Scalable Vector Graphics中的SVG DTD和W3C的 XHTML DTD。我们还可以想出许多混合或者匹配来自不同领域的概念(也就是标记)的例子。人类的想法不会局限在狭窄的定义范围内,总是试图遍及所有领域。所编写的文档就反映了这种思想。让我们研究如何把棒球比赛统计表组织为几个不同的DTD的联合体。本例的层次非常分明。一个可能的分割方法是为PLAYER、TEAM和SEASON分别编写一个DTD。分割DTD为更便于管理的方法远不止一种,但这也不失为一个很好的例子。清单9-5显示的是只为PALYER建立的单独的DTD,保存在player.dtd文件中。清单9-5:PLAYER元素和它的子元素的DTD(player.dtd)<!-Player Info -><!ELEMENT PLAYER (GIVEN _N AME, SURNAME, P, G, GS, AB?, R?, H?, D?, ?, HR?, RBI?, SB?, CS?, SH?, SF?, E?, BB?, S?, HBP?, W?, L?, SV?, CG?, SO?, ERA?,IP?, HRA?, RA?, ER?, HB?, WP?, B?, WB?, K?)> <!-Player s last name -><!ELEMENT SURNAME (#PCDATA)><!-Player s first name -><!ELEMENT GIVE _ NAME (#PCDATA)><!-Position -><!ELEMENT P (#PCDATA)><!-Games Played -><!ELEMENT G (#PCDATA)> <!桮ames Started -><!ELEMENT GS (#PCDATA)><!-======================= -><!-Batting Statistics -><!-At Bats -><!ELEMENT AB (#PCDATA)><!-Runs -><!ELEMENT R (#PCDATA)><!-Hits -><!ELEMENT H (#PCDATA)><!-Doubles -><!ELEMENT D (#PCDATA)><!-Triples -><!ELEMENT T (#PCDATA)><!-Home Runs -><!ELEMENT HR (#PCDATA)><!-Runs Batted In -><!ELEMENT RBI (#PCDATA)><!-Stolen Bases -><!ELEMENT SB (#PCDATA)><!-Caught Stealing -><!ELEMENT CS (#PCDATA)><!-Sacrifice Hits -><!ELEMENT SH (#PCDATA)><!-Sacrifice Flies -><!ELEMENT SF (#PCDATA)><!-Errors -><!ELEMENT E (#PCDATA)><!-Walks (Base on Balls) -><!ELEMENT BB (#PCDATA)><!-Struck Out -> <!ELEMENT S (#PCDATA)><!-Hit By Pitch -><!ELEMENT HBP (#PCDATA)><!-======================= -><!-Pitching Statistics -><!-Complete Games -><!ELEMENT CG (#PCDATA)><!-Wins -><!ELEMENT W (#PCDATA)><!-Losses -><!ELEMENT L (#PCDATA)><!-Saves -><!ELEMENT SV (#PCDATA)><!-Shutouts -><!ELEMENT SO (#PCDATA)><!-ERA -><!ELEMENT ERA (#PCDATA)><!-Innings Pitched -><!ELEMENT IP (#PCDATA)><!-Home Runs hit Against -><!ELEMENT HRA (#PCDATA)><!-Runs hit Against -><!ELEMENT RA (#PCDATA)><!-Earned Runs -><!ELEMENT ER (#PCDATA)><!-Hit Batter -> <!ELEMENT HB (#PCDATA)><!-Wild Pitches -><!ELEMENT WP (#PCDATA)><!-Balk -><!ELEMENT B (#PCDATA)><!-Walked Batter -><!ELEMENT WB (#PCDATA)><!-Struck Out Batter -><!ELEMENT K (#PCDATA)><!-======================= -><!-Fielding Statistics -><!-Not yet supported ->当时用这个文件,这个DTD还无法让你创建非常有趣的文档,清单9-6显示的是仅使用清单9-5中PLAYER DTD的简洁有效的文件。从这来说,这简单的文件并不重要;然而,可在这些较小的部分外创建更加复杂的文件。清单9-6:使用PLAYER DTD的有效文档<?xml version="1.0" standalone="no"><!DOCTYPE PLAYER SYSTEM "Player.dtd"><PLAYER><GIVEN_NAME>Chris</GIVEN_NAME><SURNAME>Hoiles</SURNAME><P>Catcher</P><G>97</G><GS>81</GS><AB>267</AB><R>36</R><H>70</H><D>12</D><T>0</T><HR>15</HR><RBI>56</RBI><SB>0</SB><CS>1</CS><SH>5</SH><SF>4</SF><E>3</E><BB>38</BB><S>50</S><HBP>4</HBP></PLAYER>文档的哪部分可拥有自己的DTD?这是显而易见的,TEAM就是其中的主要部分,可按如下方式书写它的DTD:<!ELEMENT TEAM ( EAM_CITY, EAM_NAME, PLAYER*)><!ELEMENT TEAM_CITY (#PCDATA)><!ELEMENT TEAM_NAME (#PCDATA)>然而作仔细的检查之后,就会注意到遗漏了某些东西:PLAYER元素的定义。该定义位于player.dtd独立文件中,需要连接到这个DTD中。可通过外部参数实体引用连接DTD。对私有的DTD,可按下列格式进行连接:<!ENTITY % name SYSTEM "URI">%name;例如:<! ENTITY % player SYSTEM "Player.dtd">%player;本例中使用了相对的URL(player.dtd),且假定player.dtd文件所在位置与进行链接的DTD的位置相同。若非这种情况,可使用完整的URL如下:<! ENTITY % player SYSTEM"http://metalab.unc.edu/xml/dtds/player.dtd">%player;清单9-7显示的是包含了对PLAYER DTD引用的完整TEAM DTD:清单9-7:TEAM DTD(team.dtd)<!ELEMENT EAM ( EAM_CITY, EAM_ NAME, PLAYER*)><!ELEMENT EAM_CITY (#PCDATA)><!ELEMENT EAM_ NAME (#PCDATA)><!ENTITY % player SYSTEM "Player.dtd">%player;SEASON包含LEAGUE、DIVISION和TEAM元素。尽管LEAGUE和DIVISION元素可拥有自己的DTD,也没有必要过分追求使用各自独立的DTD。除非希望拥有包含LEAGUE或DIVISION元素的文档,该文档不是SEASON的一部分,在这种情况下,才可在同一DTD中引用所有三个DTD。如清单9-8中说明了这种情况。清单9-8:SEASON DTD(seasom.dtd)<!ELEMENT YEAR (#PCDATA)><!ELEMENT LEAGUE (LEAGUE_NAME, DIVISION, DIVISION, DIVISION )><!-NAMErican or National -><!ELEMENT LEAGUE_ NAME (#PCDATA)><!-East, West, or Central -><!ELEMENT DIVISION_ NAME (#PCDATA)><!ELEMENT DIVISION (DIVISIO _ NAME, EAM+)><!ELEMENT SEASON (YEAR, LEAGUE, LEAGUE)><!ENTITY % team SYSTEM "team.dtd">%team;

第二部分 文档类型定义 第9章 实体和外部DTD子集 9.5 外部参数实体

[ 1 ]
第二部分 文档类型定义 第9章 实体和外部DTD子集 9.5 外部参数实体 num

打印本页 关闭

关于我们版权声明本站导航友情连结作品演示 TOP↑