XML轻松学习手册(4)XML语法

第四章 XML语法

提纲:

一.XML语法规则
二.元素的语法
三.注释的语法
四.CDATA的语法
五.Namespaces的语法
六.entity的语法
七.DTD的语法

通过前面三章的学习,我们已经对什么是XML,它的实现原理以及相关的术语有所了解。接下来我们就开始学习XML的语法规范,动手写自己的XML文档。

一.XML语法规则

XML的文档和HTML的原代码类似,也是用标识来标识内容。创建XML文档必须遵守下列重要规则:
规则1:必须有XML声明语句
这一点我们在上一章学习时已经提到过。声明是XML文档的第一句,其格式如下:

声明的作用是告诉浏览器或者其它处理程序:这个文档是XML文档。声明语句中的version表示文档遵守的XML规范的版本;standalone表示文档是否附带DTD文件,如果有,参数为no;encoding表示文档所用的语言编码,默认是UTF-8。

规则2:是否有DTD文件
如果文档是一个"有效的XML文档"(见上一章),那么文档一定要有相应DTD文件,并且严格遵守DTD文件制定的规范。DTD文件的声明语句紧跟在XML声明语句后面,格式如下:

其中:
"!DOCTYPE"是指你要定义一个DOCTYPE;
"type-of-doc"是文档类型的名称,由你自己定义,通常于DTD文件名相同;
"SYSTEM/PUBLIC"这两个参数只用其一。SYSTEM是指文档使用的私有DTD文件的网址,而PUBLIC则指文档调用一个公用的DTD文件的网址。
"dtd-name" 就是DTD文件的网址和名称。所有DTD文件的后缀名为".dtd"。
我们还是用上面的例子,应该写成这样:

规则3:注意你的大小写
在XML文档中,大小写是有区别的。

  1<p>和<p>是不同的标识。注意在写元素时,前后标识大小写要保持一样。例如:<author>ajie</author>,写成<author>ajie</author>是错误的。   
  2你最好养成一种习惯,或者全部大写,或者全部小写,或者大写第一个字母。这样可以减少因为大小写不匹配产生的文档错误。   
  3  
  4规则4:给属性值加引号   
  5在HTML代码里面,属性值可以加引号,也可以不加。例如:<font color="red">word</font>和<font color='\"red\"'>word</font>都可以被浏览器正确解释。   
  6但是在XML中则规定,所有属性值必须加引号(可以是单引号,也可以是双引号),否则将被视为错误。   
  7  
  8规则5:所有的标识必须有相应的结束标识   
  9在HTML中,标识可能不是成对出现的,比?lt;br&gt;。而在XML中规定,所有标识必须成对出现,有一个开始标识,就必须有一个结束标识。否则将被视为错误。   
 10  
 11规则6:所有的空标识也必须被关闭   
 12空标识就是标识对之间没有内容的标识。比如<br/>,<img/>等标识。在XML中,规定所有的标识必须有结束标识,针对这样的空标识,XML中处理的方法是在原标识最后加/,就可以了。例如:   
 13<br/>应写为<br>;   
 14<meta content='\"XML,' html\"="" name='\"keywords\"' sgml,=""/>应写为<meta content='\"XML,' html\"="" name='\"keywords\"' sgml,="">;   
 15<img src='\"cool.gif\"'/>应写为<img src='\"cool.gif\"'>   
 16
 17
 18第四章 XML语法   
 19  
 20二.元素的语法   
 21  
 22元素由一对标识以及其中的内容组成。就象这样:ajie。元素的名称和标识的名称是一样的。标识可以用属性来进一步描述。   
 23  
 24在XML中,没有任何保留字,所以你可以随心所欲的用任何词语来作为元素名称。但是也必须遵守下列规范:   
 25  
 261.名称中可以包含字母、数字以及其它字母;   
 27  
 282.名称不能以数字或\"_\" (下划线)开头;   
 29  
 303.名称不能以字母 xml(或 XML 或 Xml ..)开头   
 31  
 324.名称中不能包含空格   
 33  
 345.名称中间不能包含\":\"(冒号)   
 35  
 36为了使元素更容易阅读理解和操作,我们还有一些建议:   
 37  
 381.名称中不要使用\".\"。因为在很多程序语言中,\".\"是作为对象的属性,例如:font.color。同样的原因\"-\"也最好不要用,必须使用的,以\"_\"代替;   
 39  
 402.名称尽量简短。   
 41  
 423.名称的大小写尽量采用同一标准。   
 43  
 444.名称可以使用非英文字符,比如用中文。但是有些软件可能不支持。(IE5目前是支持中文元素的。)   
 45  
 46另外,补充一点关于属性的说明。在HTML中,属性可以用来定义元素的显示格式,比如:<font color='\"red\"'>word</font>将把word显示为红色。而在XML中,属性只是对标识的描述,与元素内容的显示无关。例如同样一句:<font color='\"red\"'>word</font>,并不会将word显示为红色。(那么,有网友会问:如何在XML中将文字显示为红色呢?这就需要使用CSS或者XSL,我们在下面详细讲述。)   
 47  
 48三.注释的语法   
 49  
 50注释是为了便于阅读和理解,在XML文档添加的附加信息,将不会被程序解释或则浏览器显示。   
 51  
 52注释的语法如下:   
 53  
 54<!-- 这里是注释信息 -->   
 55  
 56可以看到,它和HTML中的注释语法是一样的,非常容易。养成良好的注释习惯将使你的文档更加便于维护,共享,看起来也更专业。   
 57  
 58四.CDATA的语法   
 59  
 60CDATA全称character data,翻译为字符数据。我们在写XML文档时,有时需要显示字母,数字和其它的符号本身,比如\"&lt;\",而在XML中,这些字符已经有特殊的含义,我们怎么办呢?这就需要用到CDATA语法。语法格式如下:   
 61  
 62<![CDATA[这里放置需要显示的字符]]>   
 63  
 64例如:   
 65  
 66<![CDATA[<AUTHOR sex=\"female\">ajie</AUTHOR>]]>   
 67  
 68在页面上显示的内容将是\"<author sex='\"female\"'>ajie</author>\"   
 69
 70
 71第四章 XML语法   
 72  
 73五.Namespaces的语法   
 74  
 75Namespaces翻译为名字空间。名字空间有什么作用呢?当我们在一个XML文档中使用他人的或者多个DTD文件,就会出现这样的矛盾:因为XML中标识都是自己创建的,在不同的DTD文件中,标识名可能相同但表示的含义不同,这就可能引起数据混乱。   
 76比如在一个文档<table>wood table</table>中<table>表示桌子,   
 77而在另一个文档<table>namelist</table>中<table>表示表格。如果我需要同时处理这两个文档,就会发生名字冲突。   
 78了解决这个问题,我们引进了namespaces这个概念。namespaces通过给标识名称加一个网址(URL)定位的方法来区别这些名称相同的标识。   
 79Namespaces同样需要在XML文档的开头部分声明,声明的语法如下:   
 80<document xmlns:yourname="\'URL\'">   
 81其中yourname是由你定义的namespaces的名称,URL就是名字空间的网址。   
 82假设上面的\"桌子<table>\"文档来自http://www.zhuozi.com,我们就可以声明为   
 83<document xmlns:zhuozi="\'http://www.zhuozi.com\'">   
 84然后在后面的标识中使用定义好的名字空间:   
 85<zhuozi:table>wood table</zhuozi:table></document></table>   
 86这样就将这两个<table>区分开来。注意的是:设置URL并不是说这个标识真的要到那个网址去读取,仅仅作为一种区别的标志而已。   
 87  
 88六.entity的语法   
 89  
 90entity翻译为\"实体\"。它的作用类似word中的\"宏\",也可以理解为DW中的摸板,你可以预先定义一个entity,然后在一个文档中多次调用,或者在多个文档中调用同一个entity。   
 91entity可以包含字符,文字等等,使用entity的好处在于:1.它可以减少差错,文档中多个相同的部分只需要输入一遍就可以了。2.它提高维护效率。比如你有40个文档都包含copyright的entity,如果需要修改这个copyright,不需要所有的文件都修改,只要改最初定义的entity语句就可以了。   
 92XML定义了两种类型的entity。一种是我们这里说的普通entity,在XML文档中使用;另一种是参数entity,在DTD文件中使用。   
 93entity的定义语法为:   
 94<!DOCTYPE 200427144103.htm [   
 95<!ENTITY entity-name \"entity-content\"   
 96]   
 97>
 98   
 99例如我要定义一段版权信息:   
100<!DOCTYPE copyright [   
101<!ENTITY copyright \"Copyright 2001, Ajie. All rights reserved\"   
102]   
103>
104   
105如果我的版权信息内容和他人共享一个XML文件,也可以使用外部调用的方法,语法象这样:   
106<!DOCTYPE copyright [   
107<!ENTITY copyright SYSTEM \"http://www.sample.com/copyright.xml\">
108   
109]   
110&gt;   
111定义好的entity在文档中的引用语法为:&amp;entity-name   
112例如,上面定义的版权信息,调用时写作?copyright;   
113完整的例子如下,你可以copy下来存为copyright.xml观看实例:   
114<?xml version=\"1.0\" encoding=\"GB2312\"?>
115<!DOCTYPE copyright [   
116<!ENTITY copyright \"Copyright 2001, Ajie. All rights reserved\">
117   
118]&gt;   
119<myfile>
120<title>XML</title>
121<author>ajie</author>
122<email>[email protected]</email>
123<date>20010115</date>   
124©right;   
125</myfile>   
126
127
128第四章 XML语法   
129  
130七.DTD的语法   
131  
132DTD是\"有效XML文档\"的必须文件,我们通过DTD文件来定义文档中元素和标识的规则及相互关系。如何建立一个DTD文件呢?让我们一起来学习:   
133  
1341.设置元素   
135  
136元素是XML文档的基本组成部分。你要在DTD中定义一个元素,然后在XML文档中使用。元素的定义语法为:<!--ELEMENT DESCRIPTION (#PCDATA, DEFINITION)*-->   
137  
138说明:   
139  
140\"<!--ELEMENT\" 是元素的声明,说明你要定义的是一个元素;   
141  
142声明后面的\"DESCRIPTION\",是元素的名称;   
143  
144\"(#PCDATA, DEFINITION)*-->\"则是该元素的使用规则。规则定义了元素可以包含的内容以及相互的关系。下面的表格概要列出了元素的规则:   
145  
1462.元素规则表:   
147  
148
149
150**Symbol**
151
152| 
153
154**含义**
155
156| 
157
158**举例**  
159  
160---|---|---  
161  
162#PCDATA   
163
164
165| 
166
167包含字符或文本数据 
168
169| 
170
171<myfile(#pcdata)>   
172元素MYFILE包含一个文本数据   
173  
174#PCDATA, element-name 
175
176| 
177
178包含文本和其它子元素 
179
180| 
181
182<myfile(#pcdtata,title)>   
183MYFILE元素必须包含文本和TITLE子元素   
184  
185,   
186
187
188| 
189
190使用逗号分隔排序 
191
192| 
193
194<myfile (title,author,email)="">   
195MYFILE元素必须依次包含TITILE,AUTHOR,EMAIL三个子元素   
196  
197| 
198
199| 
200
201使用\"|\"表示或者 
202
203| 
204
205<myfile (title="" author="" email)="" |="">   
206MYFILE元素必须包含TITLE,或者AUTHOR或者EMAIL子元素。   
207  
208name 
209
210| 
211
212只能使用一次 
213
214| 
215
216<myfile (title)="">   
217MYFILE元素必须包含TITLE子元素,而且只能使用一次。   
218  
219name?   
220
221
222| 
223
224使用一次或者不使用 
225
226| 
227
228<myfile (title,author?,email?)="">   
229MYFILE元素必须包含TITLE子元素,而且只能使用一次;可以包含或者不包含AUTHOR和EMAIL子元素,但是如果使用,只能一次。   
230  
231name+   
232
233
234| 
235
236使用至少一次或多次 
237
238| 
239
240<myfile (title+,author?,email)="">   
241MYFILE元素必须包含TITLE子元素,而且使用至少一次;接下来可以跟随AUTHOR子元素,也可以不跟;最后必须包含EMAIL子元素,而且只能使用一次。   
242  
243name*   
244
245
246| 
247
248使用一次,多次,或者根本不使用 
249
250| 
251
252<myfile (title*)="">   
253MYFILE元素可以包含一个,多个或者不包含TITLE子元素   
254  
255( )   
256
257
258| 
259
260设置组,可以嵌套 
261
262| 
263
264<myfile(#pcdata title)*="" |="">   
265元素MYFILE包含一个或者更多的文本或者TITLE子元素。 
266
267<myfile((title*, author?,="" comment)="" email)*="" |="">   
268MYFILE元素必须包含一些内容,内容或者是一个注释;也或者是多个组,组里包含:一个,多个或者没有TITLE子元素,接着是一个或者没有AUTHOR子元素,再接着是一个必须的EMAIL子元素。   
269  
270  
271  
272另外,我们还可以为元素定义属性,因为我们不推荐使用属性,在这里就不详细展开了。   
273  
274最后,我们来总结一些前四章学习的内容,写一个包含DTD,XML,以及Script的简单实例,便于读者理解:   
2751.将下面文件存为myfile.dtd   
276<!--ELEMENT myfile (title, author)-->
277<!--ELEMENT title (#PCDATA)-->
278<!--ELEMENT author (#PCDATA)-->   
279  
2802.然后建立XML文档myfile.xml:   
281<?xml version=\"1.0\" encoding=\"GB2312\"?>
282<!DOCTYPE myfile SYSTEM \"myfile.dtd\">
283
284<myfile>
285<title>XML轻松学习手册</title>
286<author>ajie</author>
287</myfile>   
288  
2893.建立HTML文档myfile.html   
290<html>
291<head>
292<script event='\"onload\"' for='\"window\"' language='\"JavaScript\"'>   
293var xmlDoc = new ActiveXObject(\"Microsoft.XMLDOM\");   
294xmlDoc.async=\"false\";   
295xmlDoc.load(\"myfile.xml\");   
296nodes = xmlDoc.documentElement.childNodes;   
297title.innerText = nodes.item(0).text;   
298author.innerText = nodes.item(1).text;   
299</script>
300<title>在HTML中调用XML数据</title>
301</head>
302<body bgcolor='\"#FFFFFF\"'>
303<b>标题: </b>
304<span id='\"title\"'></span><br/>
305<b>作者: </b>
306<span id='\"author\"'></span><br/>
307</body>
308</html>   
309  
3104.用IE5.0以上浏览器打开myfile.html就可以看到效果了。   
311  
312好了,到今天第四章结束,我们对XML已经有了一些基本的了解。第五章我将为大家讲解一个XMl实际应用的成功例子,展现XML的强大功能。让我们一起来看下一章:XML实例分析。</myfile((title*,></myfile(#pcdata></myfile></myfile></myfile></myfile></myfile></myfile></myfile(#pcdtata,title)></myfile(#pcdata)></table></document></table></table></img></meta></br></p></p>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus