XM语法⼤全(转载)
Chapter 1. XML简介
XML(eXtensible Markup Language,可扩展标记语⾔)是SGML的⼀个⼦集,但⽐SGML简单,⽤以创建可相互转换的结构化⽂本⽂档和数据⽂档。下⾯说明⼀下与XML相关的⼀些概念。
SGML(Standard Generalized Markup Language,标准通⽤标记语⾔),由于IBM公司的三位先驱者Charles GoldFarb、Edward Mosher和Raymond Lorie创⽴,主要作为⼤型⽂档的编制⼯具。DTD(Document Type Definition,⽂档类型定义)是SGML⽂档的核⼼,它定义了SGML⽂档必须遵循的⼀组语法规则。由于它很复杂,所以只是在⼀些⼤公司或⼤项⽬中使⽤。直到HTML⾯世,它还是默默⽆闻。
HTML(Hypertext Markup Language,超⽂本标记语⾔),它是在SGML框架中通过DTD定义的标记语⾔,是SGML的⼀种应⽤。它由于结构简单,容易学习⽽迅速普及,每个⼈都能很快地建⽴⾃已的页⾯,HTML造就了现时Internet上⽆数的信息资源。HTML标记只描述⽂档的外观,⽽不描述⽂档的内容本⾝--⾥⾯有什么。HTML是不明⽩⽹页内容的,这样就造成了内容搜索的差异和不确定性。
另⼀个问题是,HTML不是可扩展的,这意味着没有⼀种⽅便的途径来扩展标记。每⼀个新标记的引⼊
都会造成系统的不⼀致性和对标准的修订。这就是为什么现在我们⽤不同的浏览器浏览同⼀个⽹站时表现效果会有差异。
XHTML(eXtensible Hypertext Markup Language,可扩展超⽂本标记语⾔),它是按XML规则编写的HTML,由于有统⼀的规则约束,所以它不会出现如HTML⼀样的不规范、不⼀致性问题。
XML(eXtensible Markup Language,可扩展标记语⾔),继承了SGML的优点,但⼜没有了SGML的复杂性。XML专门为WEB应⽤⽽设计,和HTML不同,它是⼀种元标记语⾔(meta-markup language),也就是说它没有⼀套能够适⽤于各个领域中所有⽤户的固守的标签和元素,相反,它允许开发者根据⾃已的需要定义⾃已的元素,XML中的X(eXtensible)就是说明了这⼀点。它的特点有:
XML使⽤Unicode字符集,可⽣成英⽂、中⽂、希腊⽂或梵⽂等多种语⾔。
可将多个来源(包括其他XML⽂档和⼆进制⽂件)汇合进⼀个XML⽂档。
可利⽤DTD或Schema(模式)管理⼀致性问题。DTD主要⽤于⽂档型⽂档,Schema主要⽤数据型⽂档。
具有很好的扩展性,可定义⾃已的元素和属性。
通过XML可从关系数据库管理系统中提取数据到结构化⽂档。它还被设计成可对各种数据对象进⾏操作。
在⼀个设计良好的XML应⽤中,XML标记不涉及⽂档如何显⽰,只表⽰⽂档的结构。
元数据,定义数据的数据。
标记语⾔是⼀种定义⽂档的格式语⾔。SGML、XML、XHML、HTML都属标记语⾔。
XML⽂档是什么?它有时是⼀个⽂件,有时是关系数据库中的⼀条记录,有时是由Object Request Broker(对象请求代理程序)传送的⼀个对象,有时是到达⽹络接⼝的⼀个字节流。XML⽂档可使不同系统、不同平台的数据实现统⼀接⼝,这就是XML真正的威⼒所在。下⾯列举⼏个使⽤XML的领域:
⽂档设计和管理,可利⽤XML维护公司的⽂档资料。
Web开发,利⽤XHTML和XSLT实现的Web页⾯扩展性更好,更容易维护。
数据库应⽤和程序开发,可从数据库中提取数据并⽣成XML⽂档,实现信息的跨平台、跨系统沟通。
定义其它语⾔,WML和WAP就是⽤通过XML建⽴的。
XML不是什么?
XML只是⼀种标记语⾔,不是⼀种编程语⾔。不存在⼀种编译器,把XML⽂档转化成可执⾏⼆进制代码。
XML不是⼀种⽹络传输协议,但通过⽹络协议传输的数据格式则可以是XML格式的。
XML不是数据库,不能替代Oracle或MySQL这类的关系数据库管理系统。
Chapter 2. XML语法
Table of Contents
创建⼀个简单的l⽂档:
xml标签大全<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="basic.xsl"?>
<basic>Hello World</basic>
下⾯创建⼀个名为basic.xsl的XML样式表(XSL),以便在浏览器中显⽰XML⽂档内容:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head>
<title>a basic stylesheet</title>
</head>
<body>
<xsl:value-of select="/" />
</body>
</html>
</xsl:template>
</xsl:stylesheet>
接着在浏览器中打开l⽂档,则可显⽰“Hello World”。上⾯两个⽂档都是合法的XML⽂件,具体的语法规则下⾯会详细介绍,上例可先给⼤家⼀个感性的认识。
合法的XML⽂档可有种意思,⼀个是良构⽂档(well-format),即符合XML规则书写的⽂档;另⼀种是有效⽂档,是已验证符合⼀个DTD的⽂档。
2.1. 基本语法规则
XML是区分⼤⼩写的;
所有元素的起始和结束标注必须成对出现,且要正确嵌套;
如果使XML说明,则它必须是XML⽂档的第⼀⾏:
<?xml version="1.0"?>
元素属性必须⽤引号引起来,单、双引号都可以,但必须成对出现。如:
<basic attr="1.0">
<basic attr='1.0'>
XML命名规则:
XML名以下划线或字母开始;
XML名可包含字母、数字、句点、下划线和冒号;
XML名不能包含空格;
XML名不能以数字开始,但可包含数字;
XML名区分⼤⼩写。
保留标记字符,如果要在XML中显⽰<;或&之类的标记,就要使⽤字符的实体形式,XML中有五种预先定义了的实体:
< 表⽰<;字符
> 表⽰>字符
& 表⽰&字符
' 表⽰'字符
" 表⽰"字符
我们也可⽤ENTITY⾃定义实体:
<!ENTITY linux "linux is a very good system">
这样我们可⽤&linux;来调⽤。
XML⽂档内容中的空格是有意义的,在转换后会保留。
空元素以<;开始并以/>结束,如<br/>。
2.2. 良构XML⽂档和有效XML⽂档
符合XML语法规则的XML⽂档称为良构⽂档,这些规则如下:
应当只有⼀个⽗标志,由⽗标志派⽣所有其它⼦标志,在⼀个⽂档中不能存在多个⽗标志。
嵌套元素应按正确的顺序开始和结束。
⼦标志应在⽗标志完成前关闭。
属性值应放在双引号中。
通过某个DTD或Schema验证的⽂档称为有效XML⽂档。
2.3. XML⽂档的组成
XML声明:
version,定义XML规范的版本号,到现在为⽌,只有⼀个版本号1.0。
encoding,指定⽂档的编码系统。
standalone,定义⽂档是独⽴的还是需要装⼊其他元素才能正确分析。如果XML⽂档没有外部实体或DTD,则可以设置为no,否则设置为yes。可⽤该值提⾼性能:如果为no,则可提⾼处理速度;如果设置为yes,则⾸先要分析⽂档,确定需要其他哪些⽂件,然后才能完全分析⽂档。
根元素,每篇XML⽂档都需要有且只能有⼀个根元素。由元素是⽂档的第⼀个元素,包含其它所有元素。下例的portal就是根元素,如:
<portal>
<name>jims</name>
<email></email>
...
</portal>
属性,每个元素都可以设置⼀个或多个属性,如:
<portal>
<name id='1',sex="male">Jims</name>
</portal>
元素和属性都可以表⽰信息,什么时候使⽤元素,什么时候使⽤属性呢?属性信息表现能⼒有限,它只能表⽰字符串。所以当需灵活表⽰信息时应该使⽤元素。⼀般把信息主体放到元素中,属性只放⼀些注释或额外的信息。
CDATA部份,它⽤<![CDATA[和]]>表⽰,它们之间的数据作为原始字符显⽰,唯⼀不能出现的标志是]]>。
注释,注释是很重要,不论是在编写程序和⽂档时,所以XML也提供了注释功能,以<!--开头-->结尾的⼀对区间为注释。在以-->结束之前,不能出现“--”号,“---”更不允许。
处理指令,处理指令以<?开头以?>结尾。如PHP处理指令可写成,<?php ... ?>。处理指令是标记,⽽不是元素。因此,与注释⼀样,处理指令可出现在XML⽂档的标签外的任何位置,包括根元素之前或之后。最常见的处理指令是,xml-stylesheet样式表指令,它会告诉浏览器在显⽰⽂档时应⽤什么样式表。如:
<?xml-stylesheet href="sample.css" type="text/css"?>
<portal>
<name>...</name>
...
</portal>
2.4. XML⽂档树
XML⽂档是⼀种结构化的⽂档,可⽤树的形式表⽰出来。树是⼀种由节点和分⽀组成的简单结构,两个节点间由分⽀连接。上端的节点称为⽗节点,下端的节点称为⼦节点。⼀个节点如果没有⽗节点,则称为树的根节点(根),每个树必须有且只能有⼀个根节点。⼀个节点如果没有⼦节点,则称为树的叶节点。只有⼀个节点的树也是允许的。
Chapter 3. DTD
Table of Contents
由于XML可⾃定义标签,所以每个⼈定义的标签集都会不同,如果没有⼀套标准来规定标签的定义原则,则应⽤程序就不能对XML⽂档进⾏处理。解决该问题的⽅案采⽤DTD,DTD(Document Type Definition,⽂档类型定义),⽤于定义XML⽂档的编写规则。如哪些元素可出现在⽂档中,及元素的内容和属性的要求等。应⽤程序会利⽤这个DTD对⽂档进⾏检验,符合DTD约束规则的XML⽂档称之为有效⽂档,可以进⾏下⼀步处理,否则会报错,应⽤程序可捕获该错误进⾏相应的异常处理。检验过
程是可选,这要视具体应⽤⽽定。
3.1. ⽂档类型声明
要使⽤DTD进⾏有效性检验,就要使⽤⽂档类型定义声明指定DTD。如:
<?xml version="1.0" standalone="no"?>
<!DOCTYPE portal SYSTEM "www.w3c/dtd/portal.dtd">
<portal>
<name>Jims</name>
<email>Jims@163</email>
<email>Jims@21cn</email>
</portal>
⽂档类型声明位于XML声明之后,根元素之前。如果dtd⽂档位于本机,可⽤路径名直接指出dtd⽂档的位置。portal.dtd的内容如下:
<!ELEMENT portal (name,email*)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT email (#PCDATA)>
上⾯的内容也可直接写到XML⽂档内,这种dtd声明⽅式叫内部dtd⼦集,如:
<?xml version="1.0" standalone="no"?>
<!DOCTYPE portal [
<!ELEMENT portal (name,email*)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT email (#PCDATA)>
]>
<portal>
<name>Jims</name>
<email>Jims@163</email>
<email>Jims@21cn</email>
</portal>
如果dtd位于XML⽂档外,则叫外部dtd⼦集。我们可以结合内外dtd,共同组成⼀个dtd来为XML⽂档作验证。如:
<!DOCTYPE portal SYSTEM "external.dtd" [
<!ELEMENT portal (name,email*)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT email (#PCDATA)>
]>
注意,使⽤内外dtd时,这两个dtd要互相兼容,不能有冲突。
3.2. 元素声明
上节⽂档类型声明中的每⼀项都是元素声明,定义了每个元素的约束。元素声明的格式为:
<!ELEMENT element_name (content_model)>
有效⽂档中使⽤的每个元素都必须在⽂档的DTD中⽤元素声明进⾏声明。element_name可是任何合法的XML名称,content_model(内容模型)指定元素可以或必须包含的⼦元素以及⼦元素的顺序。下⾯具体介绍内容模型的内容。
#PCDATA,规定元素只包含已析的字符数据。下⾯声明指出⼀个name元素可以包含⽂本,但不能划分为独⽴的area_code、number和extension元素:
<!ELEMENT name (#PCDATA)>
⼦元素,可指明元素的⼦元素。下⾯声明表⽰name元素必须包含且只包含⼀个desc元素。
<!ELEMENT name (desc)>
也可⽤逗号为分隔符,指明多个⼦元素。并且⼦元素出现的次序必须按定义时的顺序。如:
<!ELEMENT name (id,desc)>
name元素的id⼦元素必须在desc⼦元素前⾯,否则验证会出错,该⽂档不是⼀个有效的XML⽂档。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论