??xml version="1.0" encoding="utf-8" standalone="yes"?>
* 定义部分,定义XML数据的类型以?qing)所使用的DTD(可?.
* 内容部分,用XML标签和注释标注过的文档类?
声明
XML文档以XML声明开?声明本文档是一个XML文档.一般这样书?
<? xml version encoding standalone?>
定义W?lt;??>表示q是一条给XML解析器的处理指o(h).虽然声明q条语句是可有可无的,但考虑C后的兼容,读者还是写上ؓ(f)?随着语言的进一步发?以后的浏览器如果知道文档所用的XML版本的话,是有好处的.q天语句必须全部用小?
在上面的声明中version表示的XML的标准版本号.encoding表示的是文档所用的~码.standalone用来指定在XML文档被解析之?是否使用外部或内部DTD,它的值只能是yes或no.如果为no,表示使用外部DTD;如果为yes表示使用内部DTD;如果不用DTD,则不使用q个属?
看下面的实际例子:
<?xml version="1.0" encoding="UTF-8" standalone="yes">
在XML声明之后,紧接着是类型定义部?定义XML文档中数据的cd.
文档定义cd(DTD)
DTD是用来定义XML文档内容的结构的,以便按统一的格式存储信?DTD规定?jin)XML文档中可以出现哪些元?q些元素是必ȝq是可选的;q些元素有什么属?以及(qing)它们之间的相互位|关p?{等.XML允许用户q应用E序定义专用的DTD,q样用户可以完全检查文档结构和内容的过E了(jin).q一(g)验过E称为有效化,严格依从一个DTD的XML文档被称作有效文?
创徏DTD的过E与在数据库里创建数据表是类似的.在DTD?用户定义用来表示数据的元?然后规定数据的结?q规定这个元素是可选的q是必须?q就好比创徏数据表的列;然后你把数据存入XML文档,好比添加数据表的记?
XML文档使用的元素可以在内部DTD中定?也可以在外部DTD中定?
内部DTD
DTD可以作ؓ(f)文档的一部分直接攑ֈ文档里面,q样的DTD只能用于包含它的q个文档,别的文档׃能用了(jin).创徏内部DTD的语法如?
<!DOCTYPE rootelement
[element and attribute declarations]
>
<!DOCTYPE标识文档cd定义的开?属性rootelement指明跟元素名?
为部DTD
外部DTD是一个单独的文g,存放XML文档中可以用的全部元素?qing)属性的定义.你可以在多个文档中同时用同一个DTD,以便保持多个文档之间数据l构的一致性?br />在XML文档中引用外部DTD的语法如?
<!DOCTYPE rootelement [PUBLIC|SYSTEM] "name-of-file">
其中,DOCTYPE标识q是文档cd定义部分;rootelement代表根元?PUBLIC表示q个DTD是存攑֜公用服务器上?SYSTEM表示q个DTD是存攑֜本地计算机系l上?Name-of-file是被引用的DTD文g的名U?
DTD字符
下表是DTD中用的部分专用字符?qing)其含?DTD字符 含义 举例 描述 , 指定序中的"? Firstname ,Lastname Firstname与Lastname,以此序 | "? Firstname | Lastname Firstname或Lastname ? "可选项',只能出现一?/font> Lastname? 可以不出现Lastname,但如果?则只能出C?/font> () 用于l成元素 (Firstname | Lastname),Address 一个Firstname或Lastname元素必须出现在Address元素之前 * 该元素可以不出现也可以出现多?/font> (Firstname | Lastname)* 可以以Q何顺序出CQ意个数Firstname或Lastname元素 Q?/font> 该元素至出Cơ也可以出现多次 (Firstname +) 可以出现多个Firstname元素
在DTD中定义元?br />
元素是XML文g的基本组成部?每个元素都是用标{标识的一段数据.标签包括?jin)元素的名字和属?
XML允许用于创徏自己的元素集.因此,元素名应该取得容易记?q且最好有一定的含义,让h一看到?便对里面的数据有个大概的?jin)?XML是大写敏感?所以要么你全用大写,要么׃律用写.
定义元素的语法如?
<!ELEMENT elementname content>
在DTD?你通过创徏一个元素内Ҏ(gu)?element content model)来精的规定一个元素中是否喊有其它元素,可以出现多少ơ以?qing)按什么顺序出?如果元素中只包含别的元素,而不包含字符数据,我们p它只含有元素内容.
XML中命名元素的规则
* 元素名至要含有一个字?a-z或A-Z中的一?
* 元素名可以用下划U?_)或冒? : )开?
* W一个字W后面可以是一个或多个字母,数字,q字W?下划U或句号,但不能是I格和定位符(tab),至于标点W号只能使用q字W?-)和句?.).
对于完整的命名规?请参?a >http://www.w3.org/XML/上的在线XML介绍
元素cd
元素有空元素,自由元素和容器元素三U?如下?)
PCDATA 表示 parsable character data,既可解析的字W数?Z(jin)避免这一关键字与普通的元素名淆v来,在此关键字前加前~字符#.元素cd 语法 I元?Empty) <!ELEMENT empty.element EMPTY> <!ELEMENT empty.element EMPTY> 自由元素(Unrestricted) <!ELEMENT any.element ANY> <!ELEMENT any.element ANY> 容器元素(Container) <!ELEMENT TITLE(#PCDATA)> <!ELEMENT TITLE(#PCDATA)>
分析下面的标{?
<student>
<firstname> Blove </firstname>
<lastname> Saga </lastname>
<rollno> 49 </rollno>
<score> 70 </score>
</student>
要上面的文档生?必须创徏一个DTD,里面包含student,firstname,lastname,rollno,score{五个元素的定义.另外,q要规定q五个元素是必须的或可选的;以规定顺序或L排序;以及(qing)它们出现的次?用户些规定编写元素定?每个元素的定义可能不?
譬如,如果firstname和lastname都是必需的元?q且firstname要在lastname后面,那么DTD可以q样~写:
<!ELEMENT student (firstname,lastname)><!--元素内容-->
<!ELEMENT firstname (#PCDATA)><!--元素内容-->
<!ELEMENT lastname (#CDATA)><!--元素内容-->
注意:
数据cd#CDATA表示元素包含字符型数?解析器不解析q些数据,其中的标{是不作为标记的.
数据cd#PCDATA表示元素包含字的数据由解析器解?其中的标{是被作为标记处?
]]>
* 元素
* 内容
* 属?br /> * 注释
元素
元素是XML文g的基本构造块,作ؓ(f)主要的标注组?用来描述文g的内?每一个元素用一个标{来表示一D|本信?大部分标{是成对出现?开始标{֜数据的开始处,l束标签攑֜数据的末?开始标{֒l束标签之间嵌有信心(j)的元素称为容器元?例如:
<Title> My Title </Title>
我们知道,上面语句中的Title是HTML里的元素,用来昄览器窗口的标题.在XML里,你可以创q元素,?
<empname> John Rambo </empname>
在上面的语句?empname是由开始标?<>)和结素标?</>)定义的元?嵌在q两个标{中的信息就是这个元素的内容.利用元素嵌套,你可以构Z个分层的l构.
也有一些标{不是成对出现的,被称作空元素.I元素不能包含的元素或数?因ؓ(f)它没有开始和l束标签.最单的I元素例子是?lt;BR>标签表示的断行元?
在一个XML文g?可以有一个或多个元素,但只能有一个根元素,根元素下面允许有多个子元?
内容
在XML?由元素表C的信息,UCؓ(f)内容.L(fng)下面的例?
<TITLE> LION KING </TITLE>
上面q行语句?LION KING是TITLE元素所表示的内?
属?br />属性提供元素的补充信息.每个属性有一个属性名和属性?属性值可以是数字,单词,或URL.
在HTML?我们l常使用字体元素的颜色属??
<Font color="red">Displayed in red</Font>
其中,color是属性名,其属性值是red.
在XML中,属性g律要加上引号.例如:
<empname doj="2006">John Rambo</empname>
q里,"2006"是doj属?data of joining)的属性?用来描述元素empname.
注释
注释是用来给XML文档加上注释?览器和XML处理器都忽略注释,不加处理.使用注释的好处是能所有用XML文档的h都对文档中各U元素的用法一目了(jin)?
要在XML文g中输入注?可以依次输入一个小于号,一个感叹号和两个横?再输入注释的文本内容,q确保文本中没有两个横杠.q一点W3C规定?以保持XML与SGML的兼?最后输入两个横杠和一个大于号来结束注?例如:
<!-- Writing comments in XML Documents-->
q就是注?
l构良好的XML文档
一个结构良好的XML文档应该遵守以下五个基本规则:
* 标签不能隐含,必须昑ּ出现.每一个v始标{ֿL对应的结束标{?每一个结束标{也必须有对应的起始标签,Ҏ(gu)一下HTML和XML的不?
在HTML?可以用下面的q段代码创徏一个编号列?
<OL>
<LI> Number list item one
<LI> Number list item two
<LI> Number list item three
</OL>
在上诉代码中,?lt;OL>?lt;/OL>来表C是一个顺序列??lt;LI>表示当前列表的开?而列表项的结?则是靠后一列表的开始来暗示?如果q段代码出现在XML文档?览器是不会(x)正确解析q个面?
因ؓ(f)它ƈ不是一个结构良好的文档.
XML文档中的标签必须昑ּ出现Q不能隐?如果用XML实现上面的例?必须q样书写:
<OL>
<LI> Number list item one</LI>
<LI> Number list item two</LI>
<LI> Number list item three</LI>
</OL>
从上面这个例子中,你能看到,W一个列表必d含在开始标{֒l束标签之间,以满结构良好的XML文档的第一个规?
* I标{l束字符'>'前必M?/'字符.
所谓空标签,是指标签的所有信息都攑֜它的分界W里,没有M属于它的文本信息.比如象HTML中的<BR>?lt;IMG>,都不需要结束标{?因ؓ(f)标签里已l包含了(jin)所有的信息.
HTML中的标签全部是预定义?览器能够直接识?但是必须C,XML中没有Q何预定义的标{?用户q面定义自己的语a.正因?XMLq不能知?lt;BR>,<IMG>是空标签,你必d标签的结束处加上斜杠(/),来指明他们是I标{?像q样:
<BR/>
<IMG SRC="image.gif"/>
* 所有的属性值必ȝ双引hh.
在HTML当中,下面的语法是正确?
<TD WIDTH="25%">
<TD WIDTH=25%>
然而在XML当中,׃属性值必ȝ引号括v?所以只有前面一句和</TD>配合h才是合法?
* 标签不能交叠使用
比如?下面q行语句׃叠v来了(jin):
<CITY>Chicago<STATE>Michigan</CITY></STATE>
在XML中,必须从里到外地关闭标{?正确的顺序是:
<CITY>Chicago<STATE>Michigan</STATE></CITY>
* 标签大小写敏?每次都必M格匹?br />在XML文档?必须区分大小?如果你写?jin)如下的语?导致一个致命的错误(fatal error):
<P> Able was I, ere I saw Elba</p>
标签<P>不能用来关闭标签</p>,因ؓ(f)两者的大小写是不同?所有的标签必须大小写严格匹?
一个结构良好的XML文档,是一个严格遵循XML标签规则,但没有文档类型定?DTD, Document Type Definition)的文?