当前位置: 首页 > 图文教程 > XML家族 > XML > 网页编程必看:XML文法分析

XML
XML简易教程之四
XML与HTML的结合(上)
XML与HTML的结合(下)
XML入门的常见问题(一)
XML入门的常见问题(二)
XMLHTTP资料
什么是XML
什么是 XML Web Service
XML正在接管Web服务 成为SOA的基础
怎么样在网页上读取远程xml的数据
XML教程—编写结构完整的XML文档
读写xml文件的2个小函数
XML文档的基本操作
初学者如何开发出一个高质量的J2EE系统
优化 JavaScript 代码
自动更新程序的设计框架
使Firefox对XML的处理兼容IE的节点处理方法
WML学习之四 锚和任务
WML学习之五 显示表单
WML学习之六 事件

网页编程必看:XML文法分析


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-17   浏览: 35 ::
收藏到网摘: n/a

 在进行XML文法分析之前,首先有必要了解XML语法的基本规则:

 词法特征:1)XML区分大小写,如元素名在打开和关闭标记中应保持大小写一致<mytag>…</mytag>,XML的保留词串应符合大小写要求<?xml …> <!ENTITY>…。

 2)XML保留标记字符为:< > &,保留字符不允许出现在元素名、元素文本、属性名、属性值中,< 用户打开标记,>用于关闭标记,&用于转意,常见的转意为 &lt生成<,&gt生成>,&amp生成&,&apos生成’,&quot生成”

 3)元素名以下划线或字母开始,可包含字母、数字、句点、连字符、下划线、冒号和用于其他语言的扩展字符,元素名中不能有空格符(分格符、跳格符、换行符、回车符),元素名可以由名域前缀。如:<mytag> <dt:mytag> 元素文本可以是除XML保留字符外的字符集合,如<mytag> my money is $2000 </mytag>

 4)属性名的规则同元素名,属性值由单引号或双引号括约其中,可由除XML保留字符以外的字符串组成,如:<mytag myprop=”proper value”>。属性名有xmlns前缀,表明该属性定义了一个名域,如:<mytag xmlns:ns=”http://www.myweb.com/myschema”>

 句法特征:1)XML文档由一个XML说明、多个可选的文档说明、多个可选的XML指令、多个可选的XML注释和一个根元素的数据体组成,此外还可以有嵌入语句中的CDATA段,如:

 2)XML说明由<?xml打开,由?>标关闭,其中包含版本、编码等可选说明,如:<?xml version=”1.0” encoding=”UTF-9”?>

 3)XML文档说明由<!和保留串打开,由>关闭,如:<!DOCTYPE mydoc SYSTEM “mydoc.dtd”>

 4)XML指令由<?和保留串打开,由?>关闭,如:<?xml-stylesheet type=”text/xsl” href=”mystyle.xsl”?>

 5)XML注释由<!――打开,由――>关闭,如:<!--   this is my xml document  -->

 6)XML元素由<元素名>打开,由/>,或</元素名>关闭,元素的打开和关闭标记相互匹配,如<myteg../>或<mytag>…</myteg>,XML的元素允许嵌套,应此还应保持层次上的匹配,如<myteg><subtag>..</subtag></mytag>。

 7)CDTATA段由<![CDATA[>打开,由]]>关闭,用于使居于其中的语句规避XML解析规则。如:<![CDATA[ select * from mytable where thefield <= ‘100’ ]]>

 根据以上的XML文法特征,可以构造出用于词法分析的正则式和用于句法分析的下推自动机结构。

 XML词法正则式:

 #define digit [1,2,…,9] /*数字字符*/
 #define letter [a,b,…,z,A,B,…,Z] /*字母字符*/
 #define signs [~, ! , @, #, %, ^, &,*,(, ), ?, :, ;, “, ‘, ,, ., /,-, _, +, =, |, \] /*符号字符*/
 #define ascii2 [0x80,…,0xFF] /*ASCII chart2 扩展字符*/
 #define space [0x20, \t, \r, \n] /*空格符,跳格符,回车符,换行符*/
 #define reserve [< , >, &] /*XML保留字符*/

 1) 元素名的正则式:

 element_name -> (_ | letter | ascii2) (ε| _ | - | : | . | digit | letter | signs | ascii2)*

 2) 元素文本的正则式:

 element_text -> (ε| not reserve)*

 3) 属性名的正则式:

 proper_name -> (_ | letter | ascii2) (ε| _ | - | : | . | digit | letter | signs | ascii2)*

 4) 属性文本的正则式:

 proper_value -> (ε| not reserve)*