找回密码
 注册
搜索
热搜: 回贴
  • 前程无忧官网首页 有什么好的平台可以
  • 最新的销售平台 互联网营销的平台有哪
  • 制作网页的基本流程 网页制作和网页设
  • 【帝国CMS】输出带序号的列表(数字排
  • 网站建设公司 三一,中联,极东泵车的
  • 织梦 建站 织梦网站模版后台怎么更改
  • 云服务官网 哪些网站有免费的简历模板
  • 如何建网站要什么条件 建网站要用什么
  • 吉林市移动公司电话 吉林省退休人员网
  • 设计类毕业论文 网站设计与实现毕业论
查看: 10990|回复: 3

XML 3

[复制链接]
发表于 2009-11-28 02:21:01 | 显示全部楼层 |阅读模式 IP:江苏扬州
宣告参数外部已解析实体

     参数外部已解析实体的宣告拥有下列的一般格式:

     这里的EntityName 是实体的名称。你可以选用任何遵守前面章节中介绍的参数实体命名规则的名称。
     SystemLiteral 是一个描述包含实体数据文件位置的系统literal。这个系统literal 可以使用单引号(')或双引号(")来包围,而且它可以包含任何字符,除了被用作包围的引号字符外。
     系统literal 指定了包含参数实体数据文件的URI,URI 在本质上与标准因特网的统一资源定位器(URL)是相同的。你可以使用完整的URL,例如:
SYSTEM "http://bogus.com/documents/Declarations.dtd">
     或者,你可以使用部分的URI,该URL 指定了一个相对于包含XML 文件位置的相对位置,例如:

     如同稍早提到的,在XML 文件中相对的URI 的运作就像HTML 网页中的URL 一样。想获得更多URI 的信息,请参阅第五章中的 <仅仅使用外部的DTD 子集> 。
     参数外部实体的档案必须包含DTD 中允许型态的有效卷标宣告。特别是,它可以包含元素型态宣告、属性列表宣告、实体宣告、标记宣告、处理指令或批注。(第五章的<建构一个DTD>中已描述过这些卷标宣告的型态。)你也可以包含参数实体参照与IGNORE 与INCLUDE 区段(第五章的<外部DTD 子集中的条件式忽略区段>中亦介绍过IGNORE 与INCLUDE 区段。)你可以使用参数外部已解析实体来储存相关宣告的群组。举个例子来说,假设你的企业是贩卖书籍、CD、邮票等。你可以将每一种项目的宣告放在个别档案。你被允许用不同的方式来结合这些宣告的群组。例如,你可能想要建立一份只描述书籍与CD 库存的XML 文件。要做到这点,你可以藉由使用参数外部已解析实体,将书籍与CD 宣告包含在文件的DTD 中,就像这个范例XML 文件中所示:

[



%book_decls;
%cd_decls;
]
>


The Marble Faun
Nathaniel Hawthorne
473


Concerti Grossi Opus 3
Handel
72 minutes


Leaves of Grass
Walt Whitman
462



这里是实体档案Book.dtd 的内容:




     而这里是实体档案CD.dtd 的内容:




     注意,参数外部已解析实体的运作模式非常类似外部DTD 的子集。然而,参数外部实体较具弹性-它们允许你包含数个外部宣告档案并将之依顺序含括。(外部DTD子集总是在整个内部DTD子集已经被处理过之后才会被处理)。

加入实体参照

     如同你所学到的,你借着使用实体参照来将实体的内容(替换文字)插入文件中。你已经看到少部分实体参照的范例。要复习并作个总结,一般的实体是以下面的方式被参照:
&EntityName ;
     而参数实体则是以下面方式被参照:
%EntityName ;
     其中EntityName 是在宣告区中指定给实体的名称。例外的情况是一般外部未解析实体,你不能借着使用参照来将实体加入文件中。要使用这类实体的唯一方法就是将实体的名称指定到拥有ENTITY 或ENTITIES 型态的属性中。(参阅第五章中的 <设定Tokenized 型态> 。)
     实体的宣告必须放在实体被参照之前。对于每一种实体型态,下面的表格提供了实体参照的格式,并列出加入实体参照的位置。在每一个插入位置叙述的尾端,表格提供了在本章中被参考的区段,你可以在范例中找到这些区段。本章稍后将讨论字符参照,此表中先包括字符参照的叙述以求完整性。
实体型式实体参照的格式其中EntityName 是实体的名称你可以加入实体参照(范例)的位置
一般内部已解析&EntityName;在元素的内容中(参阅 <宣告一般内部解析实体> )
在属性的值中(在属性宣告中,或元素的起始卷标中当作默认值)(参阅 <实体参照范例1> )
在内部实体宣告的值中(参阅 <实体参照范例2> )
一般外部已解析&EntityName;在元素的内容中(参阅 <宣告一般外部已解析实体> )
在内部实体宣告的值中(参阅 <实体参照范例2> )
一般内部未解析EntAttr='EntityName 其中EntAttr 是ENTITY 或ENTITIES 型态的属性你不能加入任何参照到这类型的实体,但是你可以将实体的名称指定ENTITIES 型态的 到拥有NTITY 或属性中(参阅 <宣告一般外部未解析实体> )
参数内部已解析%EntityName;在标签宣告可以发生的DTD 中,而不是在标签宣告中(有关例外的部分,请参阅http://www.w3.org/TR/ REC-xml 的XML 规格的第四部分)(参考 <宣告参数内部已解析实体> )
参数内部未解析%EntityName;在标签宣告可以发生的DTD 中,而不是在标签宣告中(有关例外的部分,请参阅 http://www.w3.org/TR/REC-xml 的XML规格的第四部分)(参考 <宣告参数外部已解析实体> )
字符参照& #9; 或 & #xh; 其中9 是字符在元素的内容中(参阅 <加入字符参照> )
以十进制表示的数值码而h是字符以十六进制表示的数值码在属性值中(在属性列表宣告中或元素的起始卷标中当作默认值)(参阅 <加入字符参照> )
在内部实体宣告的值中(参阅 <加入字符参照> )

实体参照范例1

     下面的XML 文件宣告了两个一般内部已解析实体,am 与en。这份文件使用对am 的参照来为Nationality 属性指定值,并且利用对en 的参照来指定值给AUTHOR 元素中的Nationality 属性。这里使用实体的好处是借着简单地编辑实体的定义(例如,将en 的值从"English"改变成"British"),你可以改变遍布整个文章中的值(假设文章拥有许多个元素)。
[







]
>



Charles Dickens




实体参照范例2

     下面的DTD 定义了一个一般内部已解析实体(int_entity)与一般外部已解析实体(ext_entity)。接着它会定义另一个一般内部已解析实体,combo_entity,并将前面两个属性加入到combo_entity 属性的值中。
[


"value composed of &ext_entity;plus &int_entity;">

]
>

加入字符参照

     你可以使用字符参照来加入不在键盘上的字符(例如,a),或者是那种加到目前文字中可能会造成违法的字符(例如,在元素字符数据中的「<」或「&」字符)。你不需要定义任何东西便能使用字符参照-你可以简单地将它加到你需要的地方。
     字符参照拥有两种不同的格式。第一种格式是:
& #9;
     其中9 是一个或多个十进制数(0 到9),代表字符在ISO/IEC 10646 字符集中的数值码。
     第二种字符参照的格式是:
& #xh;
     其中h 是一个或多个十六进制数字(0 到f 或F),它也代表字符在ISO/IEC 10646 字符集中的数值码。例如,& #65;与& #x41;都是加入大写字母A。(在十进制中A 的数值码是65,在十六进制中则是41。)
     ISO/IEC 10646 是一种为了表达几乎属于任何程序语言的字符而设定的国际字符集。(ISO 是国际标准组织,而IEC 则是国际电子委员会。)前128 的字符码与众所皆知用在大多数计算机的的ASCII 字符相同。下图显示了在ISO/IEC 10646 字符集的前256 的字符。图中的每一个项目,初始的数字(1:、2:、3:等等)是字符的十进制码,而接在字段后面的字符则是真正的字符-若有的话-如Microsoft Internet Explorer 5 显示。


     例如,你可以看到在图中 ? 的十进制数值码是228。因此借着输入下面的字符参照,你可以将这个字符加入到你的文件中:
& #228;
注意
     参阅前面章节 <加入实体参照> 中的表格,内含你可以将字符参照加到文件位置的列表。每一个位置的后面接着一个范例。
     在下面的元素中,借着使用字符参照& #60;(60 是「<」的十进制字符码),「<」字符被加入元素字符数据。如前所述,将「<」照字面直接加入字符数据是不合法的。
   
     在下面的元素中,& #228;字符参照被用来加入 ? (该字符你无法以普通的键盘输入)到属性值中:
Mike Young
     最后,在下面DTD 中一般内部已解析实体的宣告里,& #37;字符参照被用来加入百分比(%)字符(37 是「%」的十进制码),该字符不能照字面直接被输入到内部实体的值中:


使用预先定义的实体

     在XML 文件中,你可以使用预先定义实体的参照,将列在下面表格中五个字符的任何一个,加到某个这类字符被加入时可能会造成违法的位置。
预先定义 实体加入的字符 相等的字符参照
& amp;    &                & #38;
& lt;    <                 & #60;
& gt;    >                 & #62;
& apos; '                 & #39;
& quot; "                 & #34;
     加入这些预先定义实体的参照相当于加入相对应字符的参照。当你在文件中看到预先定义实体的参照,将更容易记忆与了解。这些预先定义的实体就像其它一般内部已解析实体,除了你可以使用对这些实体的参照而不必定义实体-你还可以将它们加入相同的位置,如同这种型态的实体,即:
     在元素的内容中
     在属性的值中(当作属性宣告或元素起始卷标的默认值)
     在内部实体宣告的值中
     在下面的三个范例中,预先定义实体的参照被用来加入某些字符,这些字符若照字面加入可能会造成不合法的情况。
     在这个范例中,& lt;被用来加入「<」字符到元素的内容中:

     在第二个范例中,& amp;被用来加入(&)符号到属性值中:
3/4" T fitting<
     在第三个范例中,& quot;被用来加入一个双引号(")到实体的值中(照字面直接加入可能造成不合法,因为双引号字符是用来包围字符串的):


独立的文件宣告

     如同你在第三章中学到的,你可以随意地含括一个位于XML 文件中的独立文件宣告。这个独立的宣告会告诉处理器是否需要外部宣告以处理文件。
     如果XML 文件拥有外部标签宣告(可能是在外部的DTD 子集中或在参数外部已解析实体中),但是没有一个宣告能够影响从XML 处理器传送到应用程序的文件内容,你可以将standalone 设定成'yes'或"yes",如下面的文件宣告一样:

     将standalone 设定成"yes"可能防止对外部档案的不必要处理。将standalone 设定成'no'或"no",或省略standalone 宣告,会告诉处理器它必须处理文件的外部标签宣告,因为它们之中一个或多个标签的宣告将会影响到文件的内容。
     会影响文件内容的外部卷标型态的列表(因此禁止将standalone 设定成"yes"),请参阅 http://www.w3.org/TR/REC-xml 的XML 规格的第2.9 节。

加入实体到文件中

     在下面的练习中,你将借着加入数个一般实体到第五章所建立的 Inventory Valid.xml 范例文件中,得到某些使用实体的经验。

将实体加到范例文件中

     1. 在你的文字编辑器中,开启你在第五章的 <将格式正确的文件转换成完整有效的文件> 中所建立的 Inventory Valid.xml 文件。(可在列表5-1 以及随书光盘中找到该程序代码。)
     2. 在文件的DTD 的起始部分(在靠近文件的顶端以[ ]字符包围的文字区块),加入下面的实体与卷标宣告:
3.
4.
5.
6.
7.
8.
9.
10.
11.
12. 13. SYSTEM "Review Leaves of Grass.doc"
14. NDATA DOC>
15. 16. SYSTEM "Review 01 of The Marble Faun.doc"
17. NDATA DOC>
18. 19. SYSTEM "Review 02 of The Marble Faun.txt"
20. NDATA TXT>
21.
22. 23. SYSTEM "Review of The Turn of the Screw.txt"
NDATA TXT>
     前三个实体是一般内部已解析实体,让你可以加入BINDING 元素而不是输入真正的连结叙述到每一个元素中。使用实体可以帮助你确定给定链接型态的叙述在书籍与书籍之间是一致的。同时,实体让修改叙述变得更容易。(例如,你只需借着简单地编辑hard 属性,即可在每一个BINDING 元素中将「hardcover」 改成「hardback」。)接下来的(也是最后的)四个实体都是一般外部未解析实体,允许你将包含书籍评论的外部档案附加到BOOK 元素中。
     24. 为BOOK 元素加入Reviews 属性到属性列表宣告中,在DTD 后面部分中,它看起来像这样:
25.
     Reviews 是一个选择性属性(#IMPLIED),你可以将一个或多个一般外部未解析实体的名称指定到Reviews 属性中。(Reviews 拥有ENTITIES 型态)。
     26. 在每一个BINDING 元素中,利用相对的实体参照来替换连结叙述。例如,你可以为The Adventures of Huckleberry Finn 改变BINDING 元素,从
mass market paperback
     变成
&mass;
     27. 将Reviews 属性加入BOOK 元素中,如下所示:
     对Leaves of Grass 来说:

     对The Marble Faun 来说:

     对The Turn of the Screw 来说:

     28. 为了反应出你指定的新档名,将位于文件起始部分的批注从

     改成

     29. 使用文字编辑器的 另存新文件 指令将修改过的文件储存为 Inventory Valid Entity.xml 。列表6-1 显示完整的XML 文件。(你可以在随书光盘的 Inventory Valid Entity.xml 档案中找到。)
Inventory Valid Entity.xml


[








SYSTEM "Review Leaves of Grass.doc"
NDATA DOC>
SYSTEM "Review 01 of The Marble Faun.doc"
NDATA DOC>
SYSTEM "Review 02 of The Marble Faun.txt"
NDATA TXT>
SYSTEM "Review of The Turn of the Screw.txt"
NDATA TXT>


Reviews ENTITIES
#IMPLIED>






]
]
>



Mark Twain
& mass;
298
$5.49



Walt Whitman
& hard;
462
$7.75



Washington Irving
& mass;
98
$2.95



Nathaniel
Hawthorne
?
473
$10.95



Herman Melville
&hard;
724
$9.95



Henry James
& mass;
256
$4.95



Nathaniel Hawthorne
& trade;
253
$4.25



Henry James
& trade;
384
$3.35


     30. 如果你想测试这份XML 文件,请使用第九章 <检查XML 文件的有效性> 中所介绍的XML 有效性验证script。
发表于 2010-2-23 01:05:07 | 显示全部楼层 IP:上海大学
我十目一行也还是看不懂啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-30 03:35 , Processed in 0.119067 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表