现在的位置: 首页 > 综合 > 正文

XML & DTD 学习笔记

2014年03月10日 ⁄ 综合 ⁄ 共 3241字 ⁄ 字号 评论关闭

XML:Extensible Markup Language,可扩展标记语言。目前一般使用的是W3C组织2000年发布的1.0版本,现在最新的版本是1.1版,不过1.0应用范围相对更广一些。一般应用于自定义标记、异构系统整合、配置文件和存储数据等。


DTD:Document Type Definition,文档类型定义,用于约束XML中标签的使用(如何出现、如何嵌套以及如何定义属性等)。
XML Schema:也称为XML Schema Definition(XSD),使用xml定义,定义了比DTD更复杂的规则来约束xml,如使用了xmlns来定义命名空间等。

 

XML语法:
1.通常使用<?xml version="1.0"?>声明语句开头,可以不声明这一句,如果声明后必须在开头的地方(前面不能有注释)。version后面可以加入encoding和standalone属性(可有其一或其二),如<?xml version="1.0" encoding="gbk" standalone="yes"?>,该声明语句的encoding属性默认值为utf-8,如果需要处理中文字符需要声明为gbk或者gb2312。standalone属性代表这个xml文档是否独立存在,如果为yes表示这个文档是独立存在的,如果文档有引用外部文件将会出现错误。如果为no的话则可以引用外部文件,默认值为no。

2.大小写敏感、标签不可以嵌套,标签名不能以数字或"_"(下划线)开头,不能以xml/XML/Xml开头,不能包含空格,名称中间一般不要使用:(一般在命名空间中使用,参看XML Schema)。

3.xml文件一般包含如下几部分:
文档声明:(<?xml version="1.0"?>部分)
元素:(如根元素,每个well-form(格式良好的xml文件)只能定义一个根元素,也可以称为节点)
属性:(在元素标签中使用,用于对元素进行属性说明)
注释:跟HTML的注释类型,<!--注释内容-->
CDATA块:即字符数据(Character Data),xml解析器不会对该部分语言进行解析,对应于PCDATA,Parsed Character Data,xml解析器会对该部分语言进行解析。
使用方法:<![CDATA[需要直接显示的内容]]>
特殊字符:<(&lt;) >(&gt;) &(&amp;) "(&quot;) '(&apos;)
处理指令:PI,Processing instruction,用于指挥解析引擎如何解析xml文档内容,必须以"<?"开头,"?>"结尾,如<?xml version="1.0"?>

DTD文档定义,例student.dtd:
<!ELEMENT students (student+)>
<!ELEMENT student (name,age,sex)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (male|female)>
<!ATTLIST student id ID #REQUIRED>

该dtd文件约束的xml可如下定义:
<?xml version="1.0" encoding="gbk"?>
<!DOCTYPE students SYSTEM "student.dtd"> <!--students是根元素名字,SYSTEM代表该文件是在本地或非PUBLIC的,后面是文件的名字-->
<students>
   <student id="s001">
      <name>张三</name>
      <age>23</age>
      <sex>male</sex>
   </student>
</students>

dtd文件也可以直接在xml文件内部定义,如:
<?xml version="1.0" encoding="gbk"?>
<!DOCTYPE students [
<!ELEMENT students (student+)>
<!ELEMENT student (name,age,sex)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (male|female)>
<!ATTLIST student id ID #REQUIRED>
]>
<students>
   <student id="s001">
      <name>张三</name>
      <age>23</age>
      <sex>male</sex>
   </student>
</students>

 

xml校验(Validation):
IE5以上的浏览器内置了xml的解析工具Microsoft.XMLDOM,但是IE的xml校验默认是关闭的,所以默认情况IE只会对xml文件进行格式检查(是否为well-form的xml文件),而不会检查dtd文件并用它约束xml的内容。如果需要对xml文件进行dtd验证,可以编写javascript代码进行验证。例:
<script type="text/javascript">
//创建IE浏览器的xml文档解析器
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
//开启验证,默认是关闭的
xmlDoc.validateOnParse="true";
//加载xml文件
xmlDoc.load("students.xml");
//显示错误信息
document.write("错误的原因:"+xmlDoc.parseError.reason+"</br>");
document.write("错误的行号:"+xmlDoc.parseError.line);
</script>

 

其他编辑/校验xml的开发工具:
Eclipse:使用Eclipse编写xml文档是可以对xml文档进行well-form检查和dtd校验的,只需对选中xml文件,右键-Validation就可以对xml文件进行验证。
MyEclipse:同Eclipse,MyEclipse也是可以对xml进行well-form和dtd检查的,但是因为MyEclipse内置的MyEclipse Web Browser是IE的,所以直接用它查看的话还是不可以对文档进行dtd校验的。
XML Spy:专业的XML开发工具,不过是商用的,可以很方便对文档进行dtd验证,而且直接用内置的Web Browser查看时也会先对文档进行well-form和dtd验证的。

 

<!ELEMENT studnet (name,age,sex)>:name、age、sex只能出现一次,且出现的次序必须跟声明时的顺序一样
<!ELEMENT studnet (name|age|sex)>:name、age、sex只能出现其中一个元素
<!ELEMENT studnet (name age sex)>:name、age、sex出现的次序可以随意只能出现--网上有些类似的介绍,其实此方法是错误的,因为内容名出现空格xml解释器会报错,如果要次序随意出现的话只能改成如下格式:<!ELEMENT studnet (name|age|sex)*>

?:出现0或1次,如<!ELEMENT students (student?)>表示student只能出现0或1次
+:出现1次到多次,如<!ELEMENT students (student+)>表示student可以出现1次到多次
*:出现0次到多次,如<!ELEMENT students (student*)>表示student可以出现0次或多次

实体定义和引用:
<!ENTITY author "Bill Gates">
<!ENTITY copyright "&#169;Copyright 2011
www.microsoft.com"><!--其中&#169;为UCS中©符号的引用位置-->
引用方法:&copyright;&author;

【上篇】
【下篇】

抱歉!评论已关闭.