分享
 
 
 

XML初学进阶学习笔记(1)

王朝other·作者佚名  2008-05-21
窄屏简体版  字體: |||超大  

简体中文码:GB2312

繁体中文码:BIG5

西欧字符:UTF-8

1、一般实体

我们前面说到的那个信件署名就是一般实体。定义一般实体的格式如下:

<!ENTITY实体名"文本内容"〉

关于刚才的信件署名的实体定义如下:

<!ENTITYlettersign

"张三

某网络公司销售部门

北京市海淀区中关村88号,100000"〉

另外,你也可以指定一个实体代替一个外部文件的内容,此时要使用SYSTEM这个关键字。例如:

<!ENTITYlettersign

SYSTEM"http://www.mydomain.com/lettersign.xml"〉

在这个例子中,XML处理器将用指定文件的内容来替换实体指示。

2、参数实体

与一般实体相同,参数实体既可以是内部的也可以是外部的。不过,参数实体只用在DTD中。

参数实体的格式与一般实体很类似,只不过中间要加上“%”符。

<!ENTITY%实体名"文本内容"〉

3、实体的使用包括两部分:实体声明和实体引用。

4、实体声明

对于实体的声明应该放在文件类型DOCTYPE中。DOCTYPE一般放在文件头(即XML声明和DTD)之后,

XML元素之前。这样一来,XML文件就变为下面的形式:

<?xmlversion="1.0"?>

<!DOCTYPE文件根元素名[

实体声明部分

]>

<文件根元素名>

具体数据内容

</文件根元素名>

5、实体引用

说到实体引用,大家可能想起前面我们曾用“<”代表字符“〈”。不错,这就是一个实体引用。

简而言之,实体引用指的是引用一个在实体声明中已经声明过的一个实体。实体引用的形式很简单:

&实体名;

6、实体引用有以下几点规则一定要注意:

在引用XML实体之前,必须已经在XML文件中对此实体进行过声明;

在实体引用中不能出现空格。也就是说,&lettersign;和&letterhead;的用法都会引起错误。

尽管在一个实体中可以再引用其它实体,但是不能出现循环引用。也就是说,一个实体不能引用它自己;

同样,也不能出现实体A引用实体B,然后实体B再反过来引用实体A的情况。

实体引用不能在DOCTYPE声明中出现。

实体引用的文本必须是形式良好的XML。

同样,参数实体的引用与一般实体的引用大同小异,只是要把实体前的符号&换为%就可以了,形式是:

%实体名;

7、实体引用不仅可以出现在字符数据中,还可以出现在标记的属性中。例如下面这个例子:

<联系人公司=“B公司”地址=“&B公司地址;”>

如果在属性中出现实体引用,不但要遵守前面所述的实体引用的种种规则,还要注意以下两点:

在标记属性中不能引用一个外部实体。

引用的文本中不能出现字符“<”,否则替换后就不再是一个“形式良好的”XML文件了。

通过这一节的讲述,想必大家已然了解:实体主要是用来代替字符数据的,它可以节省大量的录入工作。

8、使用外部DTD时,要在DOCTYPE中使用关键字SYSTEM。实际上,SYSTEM不是引用外部DTD的唯一方法,

这个关键字主要用于引用一个作者或组织所编写的众多XML文件中通用的DTD。还存在一种外部DTD,

它是一个由权威机构制订的,提供给特定行业或公众使用的DTD。因此,另一个引用外部DTD的办法是使用关键字PUBLIC,

引用这一类公开给公众使用的DTD。

当使用关键字PUBLIC进行引用时,这个外部DTD还需要得到一个标识名。引用公共DTD的形式为:

<!DOCTYPE根元素PUBLIC"DTD名称""外部DTD的URL">

9、这个DTD标识的命名规则和XML文件的命名规则稍有不同。具体地说,DTD名称只能包含字母、

数字、空格和下面的符号:_%$#@()+:=/!*;?。同时,DTD名称还必须符合一些标准的规定。

例如,ISO标准的DTD以“ISO”三个字母开头;被改进的非ISO标准的DTD以加号“+”开头;未被改进的非ISO标准的DTD以减号“-”开头。

无论是哪一种情况,开始部分后面都跟着两个斜杠“//”及DTD所有者的名称。在这个名称之后又是两个斜杠“//”,

再然后是DTD所描述的文件的类型。最后,在又一对斜杠之后是语言的种类(参见ISO639)。例如下面这个公用DTD的引用:

<!DOCTYPE联系人列表PUBLIC"-//LunaDong//ContactData//CN"

"http://www.mydomain.com/dtds/fclml.dtd">

10、除了根元素外,在定义其它元素时使用关键字ANY都是不好的习惯。一般来说,在写一个XML文件时需要严格遵循DTD的规则,

这时,一个定义明确的DTD,虽然表面上似乎充满了条条框框,但实际上会使你在书写XML文件时有规可循,

反而方便了你的工作和语法分析器的工作。相反,一个在元素定义中充满了ANY的DTD,反而可能会搞得你不知所措,一头雾水。

11、在定义元素时,ETD的顺序是无关紧要的。因此

<!ELEMENT姓名(#PCDATA)>

<!ELEMENT联系人列表ANY>

<!ELEMENT联系人(姓名)>

<!ELEMENT联系人列表ANY>

<!ELEMENT联系人(姓名)>

<!ELEMENT姓名(#PCDATA)>

所定义的文件结构是完全相同的。

12、还有一点要注意,不能对不同的元素使用相同的元素名,即便这些元素的内容、包含的子元素不同也不行,

因为它只会引起文件各个元素的混淆,使文件的可读性大打折扣。例如:

<!ELEMENT联系人列表ANY>

<!ELEMENT联系人(姓名)>

<!ELEMENT联系人(EMAIL)>

<!ELEMENT姓名(#PCDATA)>

<!ELEMENTEMAIL(#PCDATA)>

在这个例子中,对“联系人”的重复定义,会引起错误。13、最后再次强调一下元素的命名。元素名的第一个字母必须是字母、或下划线(_)、或冒号(:),

后跟字母、数字、句号(.)、冒号、下划线、连结号(-)的组合,并且不能包含空白符,不能以“xml”开头。

另外,尽管元素的第一个字母使用冒号是合法的,但最好避免这样做,因为它会引起混淆。再有需要注意的是,

尽管XML1.0标准允许使用任何长度的文件名,但是实际的XML处理器常常会限制标记名的长度。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有