XML简介
Extensible Markup Language(XML)是一种多用途的标记语言。它被划分为标记语言是因为它允许用户自己定义标签(tags)。在软件工程中,可扩展对系统而言意味着可以被修改,增加或改动特征(features)。XML的首要目的是促进不同信息系统之间的数据共享,尤其是通过网络的数据。
XML被World Wide Web Consortimu(W3C)推荐。它是免费的开放的标准。W3C指定了包阔它的语法,需求和解析。
HTML和XML最基本的不同是:
HTML是用来显示数据和专注于数据的表现;
XML是用来描述数据和专注于数据本身是什么。
一个简单的用XML的程序:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Sample Program -->
<Note>
<to>Irshad</to>
<from>Farhan</from>
<heading>Test Application</heading>
<body>Don't forget me this weekend!</body>
</Note>
注意
一个组织很好的XML文件必须要有合适打开和关闭标签。
数据可以被存储在孩子元素(child elements)中或者在属性中(attributes),例如:
<Note to="Irshad"> //XML attribute<from>Farhan</from> //XML child element<heading>Test Application</heading><body>Don't forget me this weekend!</body></Note>属性在HTML中是很方便使用的,但是在XML中最好避免使用。如果信息感觉像数据,那么就用孩子元素(child elements)存储。
XML 验证
关于XML文件有两级准确性:
1. XML的语法正确;
2. XML验证一个DTD(文档类型定义)是一个有效的XML。
一个组织良好的XML文档是符合XML语法规则的文档,比如:
XML文档必须要有一个根元素(root element);
XML元素必须有结束标签(closing tag);
XML标签是区分大小写的(case sensitive);
XML标签必须要有正确的嵌套;
XML属性值必须总是被引用的(quoted)。
一个有效的XML文档是一个组织良好的XML文档,是遵循文档类型定义(DTD)的文档。
DTD(文档类型定义)
DTD(文档类型定义)的目的是合法定义XML文档的基础。它用一系列合法的元素(elements)定义了文档的结构。
一个DTD可以在一个XML文档内部声明,或者作为外部引用。
Internal DTD Declaration
如果DTD是在XML文件内部声明的,它应该在一个DOCTYPE定义中,用下面的语法:
<?xml version="1.0"?><!DOCTYPE Note [<!ELEMENT Note (to,from,heading,body)><!ELEMENT to (#PCDATA)><!ELEMENT from (#PCDATA)><!ELEMENT heading (#PCDATA)><!ELEMENT body (#PCDATA)> ]>上面的DTD解释如下:
!DOCTYPE Note定义了这个文档的根节点是Note;
!ELEMENT Note定义了note元素包含四个元素“to , from , heading , body”;
!ELEMENT to定义了to元素是被定义成#PCDATA类型;
!ELEMENT from定义了from元素是被定义成#PCDATA类型,等等。
External DTD Declaration:
如果DTD是在一个外部文件声明的,应该用下面的语法来包含在一个DCOTYPE定义中:
<?xml version="1.0"?><!DOCTYPE note SYSTEM "note.dtd"><note><to>Irshad</to><from>Farhan</from><heading>Test Application</heading><body>Don't forget me this weekend!</body></note>这是包含DTD的note.dtd文件:
<!ELEMENT note (to,from,heading,body)><!ELEMENT to (#PCDATA)><!ELEMENT from (#PCDATA)><!ELEMENT heading (#PCDATA)><!ELEMENT body (#PCDATA)>XML Schema
XML Schema就像DTD一样,也是合法定义XML文档的基础。XML Schema是DTD的继承者,也被叫做XML Schema Definition(XSD)。
XML Schemas如今在许多的WEB应用中取代了DTD,在不久的将来,由于以下原因,它们会完全取代DTD:
XML Schemas对未来的设备来说是可扩展的;
XML Schemas比DTD更加的丰富和强大;
XML Schemas是写在XML中;
XML Schemas支持数据类型;
XML Schemas支持命名空间。
比如:
一个非常简单的XML Schema定义的例子:
<xs:schemaxmlns:xs="http://www.w3.org/2001/XMLSchema"><xs:element name="country" type="Country"/><xs:complexType name="Country"><xs:sequence><xs:element name="name" type="xs:string"/><xs:element name="population" type="xs:decimal"/></xs:sequence></xs:complexType></xs:schema>含有这个schema的XML文档如下:
<country>xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="country.xsd">
XQuery:
对XQuery最好的解释是:“XQuery对于XML就像SQL对于数据库表格”(“XQuery is to XML what SQL is to database tables”)。
XML Query工程的任务是提供合适的查询设备在万维网中从真实的和虚拟的文档中得到数据,因此最终是提供WEB和数据库的转换。
XQuery用XPath(XPath是一种从XML文档中查询信息的语言。XPath被用作遍历XML文档的元素和属性。)表达式文法来阐述XML文档中一个指定的部分。用SQL像“FLWOR表达式”来补充。FLWOR有五个从句组成:FOR, LET, WHERE, ORDER BY, RETURN。
例如
我们随便找个XML文档:
<?xml version="1.0" encoding="ISO-8859-1"?><bookstore><book category="Poetry"><title>Bang-e-Dara</title><author>Allama Iqbal</author><year>1930</year><price>100.00</price></book><book category="Children"><title>Chocolate Factory</title><author>Amra Alam</author><year>2007</year><price>50.00</price></book></bookstore>一个简单的XQuery查询此XML文档的语句可以写成如下:
"doc("books.xml")/bookstore/book[price<70]"
以上的XQuery会被解释成:
<book category="Children"><title>Chocolate Factory</title><author>Amra Alam</author><year>2007</year><price>50.00</price></book>