提纲
一XML语法规则
二元素的语法
三注释的语法
四CDATA的语法
五Namespaces的语法
六entity的语法
七DTD的语法
一XML语法规则
XML的文档和HTML的原代码类似也是用标识来标识内容创建XML文档必须遵守下列重要规则
规则必须有XML声明语句
这一点我们在上一章学习时已经提到过声明是XML文档的第一句其格式如下
<?xml version= standalone=yes/no encoding=UTF?>
声明的作用是告诉浏览器或者其它处理程序这个文档是XML文档声明语句中的version表示文档遵守的XML规范的版本standalone表示文档是否附带DTD文件如果有参数为noencoding表示文档所用的语言编码默认是UTF
规则是否有DTD文件
如果文档是一个有效的XML文档(见上一章)那么文档一定要有相应DTD文件并且严格遵守DTD文件制定的规范DTD文件的声明语句紧跟在XML声明语句后面格式如下
<!DOCTYPE typeofdoc SYSTEM/PUBLIC dtdname>
其中
!DOCTYPE是指你要定义一个DOCTYPE;
typeofdoc是文档类型的名称由你自己定义通常于DTD文件名相同
SYSTEM/PUBLIC这两个参数只用其一SYSTEM是指文档使用的私有DTD文件的网址而PUBLIC则指文档调用一个公用的DTD文件的网址
dtdname 就是DTD文件的网址和名称所有DTD文件的后缀名为dtd
我们还是用上面的例子应该写成这样
<?xml version= standalone=no encode=UTF?>
<!DOCTYPE filelist SYSTEM filelistdtd>
规则注意你的大小写
在XML文档中大小写是有区别的<P>和<p>是不同的标识注意在写元素时前后标识大小写要保持一样例如:<Author>ajie</Author>写成<Author>ajie</author>是错误的
你最好养成一种习惯或者全部大写或者全部小写或者大写第一个字母这样可以减少因为大小写不匹配产生的文档错误
规则给属性值加引号
在HTML代码里面属性值可以加引号也可以不加例如:<font color=red>word</font>和<font color=red>word</font>都可以被浏览器正确解释
但是在XML中则规定所有属性值必须加引号(可以是单引号也可以是双引号)否则将被视为错误
规则所有的标识必须有相应的结束标识
在HTML中标识可能不是成对出现的比?lt;br>而在XML中规定所有标识必须成对出现有一个开始标识就必须有一个结束标识否则将被视为错误
规则所有的空标识也必须被关闭
空标识就是标识对之间没有内容的标识比如<br><img>等标识在XML中规定所有的标识必须有结束标识针对这样的空标识XML中处理的方法是在原标识最后加/就可以了例如
<br>应写为<br />
<META name=keywords content=XML SGML HTML>应写为<META name=keywords content=XML SGML HTML />
<IMG src= coolgif>应写为<IMG src= coolgif />
第四章 XML语法
二元素的语法
元素由一对标识以及其中的内容组成就象这样ajie元素的名称和标识的名称是一样的标识可以用属性来进一步描述
在XML中没有任何保留字所以你可以随心所欲的用任何词语来作为元素名称但是也必须遵守下列规范
名称中可以包含字母数字以及其它字母名称不能以数字或_ (下划线)开头名称不能以字母 xml(或 XML 或 Xml ……)开头名称中不能包含空格名称中间不能包含(冒号)
为了使元素更容易阅读理解和操作我们还有一些建议名称中不要使用因为在很多程序语言中是作为对象的属性例如lor同样的原因也最好不要用必须使用的以_代替名称尽量简短
名称的大小写尽量采用同一标准
名称可以使用非英文字符比如用中文但是有些软件可能不支持(IE目前是支持中文元素的)
另外补充一点关于属性的说明在HTML中属性可以用来定义元素的显示格式比如<font color=red>word</font>将把word显示为红色而在XML中属性只是对标识的描述与元素内容的显示无关例如同样一句<font color=red>word</font>并不会将word显示为红色(那么有网友会问如何在XML中将文字显示为红色呢?这就需要使用CSS或者XSL我们在下面详细讲述)
三注释的语法
注释是为了便于阅读和理解在XML文档添加的附加信息将不会被程序解释或则浏览器显示
注释的语法如下
<! 这里是注释信息 >
可以看到它和HTML中的注释语法是一样的非常容易养成良好的注释习惯将使你的文档更加便于维护共享看起来也更专业
四CDATA的语法
CDATA全称character data翻译为字符数据我们在写XML文档时有时需要显示字母数字和其它的符号本身比如<而在XML中这些字符已经有特殊的含义我们怎么办呢?这就需要用到CDATA语法语法格式如下
<![CDATA[这里放置需要显示的字符]]>
例如
<![CDATA[<AUTHOR sex=female>ajie</AUTHOR>]]>
在页面上显示的内容将是<AUTHOR sex=female>ajie</AUTHOR>
第四章 XML语法
五Namespaces的语法
Namespaces翻译为名字空间名字空间有什么作用呢?当我们在一个XML文档中使用他人的或者多个DTD文件就会出现这样的矛盾因为XML中标识都是自己创建的在不同的DTD文件中标识名可能相同但表示的含义不同这就可能引起数据混乱
比如在一个文档<table>wood table</table>中<table>表示桌子
而在另一个文档<table>namelist</table>中<table>表示表格如果我需要同时处理这两个文档就会发生名字沖突
了解决这个问题我们引进了namespaces这个概念namespaces通过给标识名称加一个网址(URL)定位的方法来区别这些名称相同的标识
Namespaces同样需要在XML文档的开头部分声明声明的语法如下
<document xmlns:yourname=URL>
其中yourname是由你定义的namespaces的名称URL就是名字空间的网址
假设上面的桌子<table>文档来自我们就可以声明为
<document xmlns:zhuozi=>
然后在后面的标识中使用定义好的名字空间
<zhuozi:table>wood table</table>
这样就将这两个<table>区分开来注意的是设置URL并不是说这个标识真的要到那个网址去读取仅仅作为一种区别的标志而已
六entity的语法
entity翻译为实体它的作用类似word中的宏也可以理解为DW中的摸板你可以预先定义一个entity然后在一个文档中多次调用或者在多个文档中调用同一个entity
entity可以包含字符文字等等使用entity的好处在于它可以减少差错文档中多个相同的部分只需要输入一遍就可以了它提高维护效率比如你有个文档都包含copyright的entity如果需要修改这个copyright不需要所有的文件都修改只要改最初定义的entity语句就可以了
XML定义了两种类型的entity一种是我们这里说的普通entity在XML文档中使用另一种是参数entity在DTD文件中使用
entity的定义语法为:
<!DOCTYPE filename [
<!ENTITY entityname entitycontent
]
>
例如我要定义一段版权信息:
<!DOCTYPE copyright [
<!ENTITY copyright Copyright Ajie All rights reserved
]
>
如果我的版权信息内容和他人共享一个XML文件也可以使用外部调用的方法语法象这样
<!DOCTYPE copyright [
<!ENTITY copyright SYSTEM >
]
>
定义好的entity在文档中的引用语法为&entityname;
例如上面定义的版权信息调用时写作?copyright;
完整的例子如下你可以copy下来存为copyrightxml观看实例
<?xml version= encoding=GB?>
<!DOCTYPE copyright [
<!ENTITY copyright Copyright Ajie All rights reserved>
]>
<myfile>
<title>XML</title>
<author>ajie</author>
<email></email>
<date></date>
©right;
</myfile>
第四章 XML语法
七DTD的语法
DTD是有效XML文档的必须文件我们通过DTD文件来定义文档中元素和标识的规则及相互关系如何建立一个DTD文件呢?让我们一起来学习
设置元素
元素是XML文档的基本组成部分你要在DTD中定义一个元素然后在XML文档中使用元素的定义语法为<!ELEMENT DESCRIPTION (#PCDATA DEFINITION)*>
说明
<!ELEMENT 是元素的声明说明你要定义的是一个元素
声明后面的DESCRIPTION是元素的名称
(#PCDATA DEFINITION)*>则是该元素的使用规则规则定义了元素可以包含的内容以及相互的关系下面的表格概要列出了元素的规则
元素规则表:
Symbol
含义
举例
#PCDATA
包含字符或文本数据
<MYFILE(#PCDATA)>
元素MYFILE包含一个文本数据
#PCDATA elementname
包含文本和其它子元素
<MYFILE(#PCDTATATITLE)>
MYFILE元素必须包含文本和TITLE子元素
使用逗号分隔排序
<MYFILE (TITLEAUTHOREMAIL)>
MYFILE元素必须依次包含TITILEAUTHOREMAIL三个子元素
|
使用|表示或者
<MYFILE (TITLE | AUTHOR | EMAIL)>
MYFILE元素必须包含TITLE或者AUTHOR或者EMAIL子元素
name
只能使用一次
<MYFILE (TITLE)>
MYFILE元素必须包含TITLE子元素而且只能使用一次
使用一次或者不使用
<MYFILE (TITLEAUTHOR?EMAIL?)>
MYFILE元素必须包含TITLE子元素而且只能使用一次可以包含或者不包含AUTHOR和EMAIL子元素但是如果使用只能一次
使用至少一次或多次
<MYFILE (TITLE+AUTHOR?EMAIL)>
MYFILE元素必须包含TITLE子元素而且使用至少一次接下来可以跟随AUTHOR子元素也可以不跟最后必须包含EMAIL子元素而且只能使用一次
使用一次多次或者根本不使用
<MYFILE (TITLE*)>
MYFILE元素可以包含一个多个或者不包含TITLE子元素
设置组可以嵌套
<MYFILE(#PCDATA | TITLE)*>
元素MYFILE包含一个或者更多的文本或者TITLE子元素
<MYFILE((TITLE* AUTHOR? EMAIL)* | COMMENT)>
MYFILE元素必须包含一些内容内容或者是一个注释也或者是多个组组里包含一个多个或者没有TITLE子元素接着是一个或者没有AUTHOR子元素再接着是一个必须的EMAIL子元素
另外我们还可以为元素定义属性因为我们不推荐使用属性在这里就不详细展开了
最后我们来总结一些前四章学习的内容写一个包含DTDXML以及Script的简单实例便于读者理解
将下面文件存为myfiledtd
<!ELEMENT myfile (title author)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT author (#PCDATA)>
然后建立XML文档myfilexml:
<?xml version= encoding=GB?>
<!DOCTYPE myfile SYSTEM myfiledtd>
<myfile>
<title>XML轻松学习手册</title>
<author>ajie</author>
</myfile>
建立HTML文档l
<html>
<head>
<script language=JavaScript for=window event=onload>
var xmlDoc = new ActiveXObject(MicrosoftXMLDOM);
xmlDocasync=false;
xmlDocload(myfilexml);
nodes = xmlDocdocumentElementchildNodes;
titleinnerText = em()text;
authorinnerText = em()text;
</script>
<title>在HTML中调用XML数据</title>
</head>
<body bgcolor=#FFFFFF>
<b>标题: </b>
<span id=title></span><br>
<b>作者: </b>
<span id=author></span><br>
</body>
</html>
用IE以上浏览器打开l就可以看到效果了
好了到今天我们对XML已经有了一些基本的了解