什么是XML?
XML 代表Extensible Markup Language(eXtensible Markup Language的缩写,意为可扩展的标
记语言)。XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识。
它也是元标记语言,即定义了用于定义其他与特定领域有关的、语义的、结构化的标记语言的句法语言。
XML的特性:
1.XML的核心是数据
2.XML数据的自我描述性(用户可以自己定义标记的名称)
3.XML支持Unicode字符集(它允许使用双字节的字符来定义标记和编写程序)
XML和HTML之间关系的几个要点:
1. XML 不是要替换 HTML;实际上 XML 可以视作对 HTML 的补充。XML 和 HTML 的目标不同:HTML 的设计目标是显示数据并集中于数据外观,而 XML 的设计目标是描述数据并集中于数据的内容。
2. 与 HTML 相似,XML 不进行任何操作。虽然 XML 标记可用于描述订单之类的项的结构,但它不可用于发送或处理该订单以及确保按该订单交货的任何代码。其他人必须编写代码来实际对 XML 格式的数据执行这些操作。
3.与 HTML 不同,XML 标记由架构或文档的作者定义,并且是无限制的。HTML 标记则是预定的;HTML 作者只能使用当前 HTML 标准所支持的标记。
XML的处理过程:
首先,通过编辑器或者应用程序创建一个XML文档;然后,通过语法分析和处理程序对文档进行检测并且转化为元素的树状结构;最后,传送给用户端应用程序进行处理。
XML的应有最主要体现在5个方面:
1. 用于异构系统的数据整合;
2.在客户——服务器模式下,作为客户端存储数据的容器;
3.数据表达的多样性;
4.做配置文件;
5.作为编制新语言的工具。
XML带来的好处 :
(1)更有意义的搜索
数据可被XML唯一的标识。没有XML,搜索软件必须了解每个数据库是如何构建的。这实际上是不可能的,因为每个数据库描述数据都是不同的。譬如:有了XML,书就可以很容易以标准的方式按照作者、标题、ISBN序号或其他的标准分类。搜索书就变得十分方便。
(2)开发灵活的Web应用软件
数据一旦建立,XML能被发送到其他应用软件、对象或者中间层服务器做进一步地处理。或者它可以发送到桌面用浏览器浏览。XML和HTML、脚本、公共对象模式一起为灵活的三层Web应用软件的开发提供了所需的技术。
(3)不同来源数据的集成
现在搜索多样的不兼容的数据库实际上是不可能的。XML能够使不同来源的结构化的数据很容易的结合在一起。软件代理商可以在中间层的服务器上对从后端数据库和其他应用处来的数据进行集成。然后,数据就能被发送到客户或其他服务器做进一步的集合、处理和分发。
(4)多种应用得到的数据
XML的扩展性和灵活性允许它描述不同种类应用软件中的数据,从描述搜集的Web页到数据记录。同时,由于基于XML的数据是自我描述的,数据不需要有内部描述就能被交换和处理。
(5) 本地计算和处理
XML格式的数据发送给客户后,客户可以用应用软件解析数据并对数据进行编辑和处理。使用者可以用不同的方法处理数据,而不仅仅是显示它。XML文档对象模式(DOM)允许用脚本或其他编程语言处理数据。数据计算不需要回到服务器就能进行。分离使用者观看数据的界面,使用简单灵活开放的格式,可以给Web创建功能强大的应用软件,这些软件原来只能建立在高端数据库上。
(6)数据的多样显示
数据发到桌面后,能够用多种方式显示。通过以简单开放扩展的方式描述结果化的数据,XML补充了HTML,被广泛的用来描述使用者界面。HTML描述数据的外观,而XML描述数据本身。由于数据显示与内容分开,XML定义的数据允许指定不同的显示方式,使数据更合理地表现出来。本地的数据能够以客户配置、使用者选择或其他标准决定的方式动态地表现出来。CSS和XSL为数据的显示提供了公布的机制。
(7)粒状的更新
通过XML,数据可以粒状的更新。每当一部分数据变化后,不需要重发整个结构化的数据。变化的元素必须从服务器发送给客户,变化的数据不需要刷新整个使用者的界面就能够显示出来。目前,只要一条数据变化了,整一页都必须重建。这严重限制了服务器的升级性能。XML也允许加进其他数据,比如预测的温度。加入的信息能够流入存在的页面,不需要浏览器发一个新的页面。
(8)在Web上发布数据
由于XML是一个开放的基于文本的格式,它可以和HTML一样使用HTTP进行传送,不需要对现存的网络进行变化。
(9)升级性
由于XML彻底把标识的概念同显示分开,处理者能够在结构化的数据中嵌套程序化的描述以表明如何显示数据。这是令人难以相信的强大的机制,使得客户计算机同使用者间的交互作用尽可能的减少了,同时减少了服务器的数据交换量和浏览器的响应时间。另外,XML使个人的数据只能通过更新的布告发生变化,减少了服务器的工作量,大大增强了服务器的升级性能。
(10)压缩性
XML压缩性能很好,因为用于描述数据结构的标签可以重复使用。XML数据是否要压缩要根据应用来定,还取决于服务器与客户间数据的传递量。XML能够使用HTTP1.1中的压缩标准。
(11)开放的标准
XML基于的标准是为Web进行过优化的。微软和其他一些公司以及W3C中的工作组正致力于确保XML的标准化。
- 1.每个xml元素要有开始标记和结束标记;
- 2.大小写敏感;
- 3.xml标记的嵌套必须合理;
- 4.xml根元素唯一;
- 5.第一行必须写声明,并且格式要对;
- 6.xml的标记名或者是元素名不能是w3c的关键字;
- 7.属性值必须用“ ”或‘ ’括起来。
< | < | Less then |
> | > | Greater then |
& | & | Ampersand |
' | ‘ | Apostrophe |
" | “ | Quotation mark |
- 所有的XML元素必须合理包含,且所有的XML文档必须有一个根元素。如同HTML一样,XML元素同样也可以拥有属性。XML元素的属性以名字/值成对的出现。XML语法规范要求XML元素属性值必须用引号引着。
嵌套需满足以下规则:
1.所有XML文档都从一个根节点开始,根节点包含了一个根元素;
2.文档内所有其他元素必须包含在根元素中;
3.嵌套在内的为子元素,同一层的互为兄弟元素;
4.子元素还可以包含子元素;
5.包含子元素的元素称为分支,没有子元素的元素称为树叶;
文档定义类型
- 什么是DTD?
- DTD(Documnet Type Definition)是XML1.0版规格得一部分,它是XML文件得验证机制,属于XML文件组成得一部分,DTD在XML文件所扮演得角色就是定义XML文件的元素架构、元素标记和属性!
- DTD 是一种保证XML文档格式正确的有效方法,可以通过比较XML文档和DTD文件来看文档是否符合规范,元素和标签使用是否正确。一个DTD文档包含:元素的定义规则,元素间关系的定义规则,元素可使用的属性,可使用的实体或符号规则。
- XML文件提供应用程序一个数据交换的格式,DTD正是让XML文件能够成为数据交换的标准,因为不同的公司只需定义好标准的DTD,各公司都能够依照DTD建立XML文件,并且进行验证,如此就可以轻易的建立标准和交换数据,这样满足了网络共享和数据交互。
- DTD文件是一个ASCII的文本文件,后缀名为.dtd
- Xml文档分为:
- 1.无效的xml文档;
- 2.结构良好的xml文档,符合语法,但不符合DTD;
- 3.符合语法和DTD,有效的xml文档。
- DTD有自己的语法,不按xml语法编写写,存为.dtd文件
- 分类:
- 1.内部DTD——DTD文档定义到xml内部
- 2.外部DTD——DTD单独定义一个文件.dtd
- 下面的是内部DTD:
- <? Xml version=“1.0”?>
- <!DOCTYPE note SYSTEM “note.dtd”>
- <note>
- <to>to</to>
- </note>
- <?xml version=“1.0”?>
- <!DOCTYPE note[
- <!ELEMENT note(to,form)>
- <!ELEMENT to(#PCDATA)>
- <!ELEMENT form(#PCDATA)>
- ]>
- <note>
- <to>to</to>
- <form> form</form>
- </note>
什么是XML Schema?
- XMLSchema是一个基于XML的语法或schema规范,用来定义XML文档的标记方式。XML Schema是一个由Microsoft建议的schema规范,它与文档类型定义(DTD)相比具有很大的优势,而DTD是最初用来定义XML模型的schema规范。DTD存在很多缺点,包括使用非XML 语法,不支持数据类型定义,不具有扩展性等。例如,DTD不允许把元素内容定义为另外 一个元素,或字符串。想了解更多有关DTD的内容,可以参考W3CXML建议书。XMLSchema从几个方面改善了DTD,包括使用XML语法,支持数据类型定义和名域。
- 有人会问DTD和 Schema都是对XML文档的一种约束,为什么不就选其中之一,而又有Schema呢?因为DTD安全度太低了,也就是说它的约束定义能力不足,无法对XML实例文档作出更细致的语义限制。其实细心地人会发现,在DTD中,只有一个数据类型,就是PCDATA(用在元素中)和CDATA(用在属性中),在里面写日期也行,数字还行,字符更没有问题。而Schema是完全使用XML作为
- 描述手段,具有很强的描述能力,扩展能力和处理维护能力等。让我们看一个简单的例子吧:
- Hello.xml
------------------------------------------------
<?xml version=“1.0”?>
<greeting>Hello World!</greeting>
说明:一个根元素:greeting;且这个元素不含属性,无子元素,内容是字符串。
Hello.xsd
------------------------------------------------
<?xml version=“1.0”?>
<xsd:schema xmlns:xsd=“http”//www.w3.org/2001/XMLSchema”>
<xsd:schema name=“greeting” type=“xsd:string”/>
</xsd:schema>
说明:XML Schema文档后缀名是.xsd,完全符合XML语法,根元素是schema,命名空间xsd:schema xmlns:xsd=“http”//www.w3.org/2001/XMLSchema”,用元素<element>定义实例文档中的元素,如:greeting。Xsd:string就是定义了数据类型了,其中的数据类型有很多,比如:int/double/dataTime/Boolean/Integer/folat等,总之java语言里有的数据类型它都有,但是要以xsd:开头。
XML的解析
- XML主要分为四种解析方式,它们分别是:
- 第一种:SAX解析
- 第二种:DOM解析
- 第三种:JDOM解析
- 第四种:DOM4J解析
- 下面我将分别介绍这四种的解析方法。
SAX解析(自己在网上找例子)
- SAX处理机制:SAX是一种基于事件驱动的API。利用SAX解析XML文档,牵涉到两个部分:
- 解析器和事件处理器。解析器负责读取XML文档,并向事件处理器发生事件,如元素开始和元素结束事件;而事件处理器则负责对事件做出响应,对传递的XML数据进行处理。
- SAX是一种XML解析的替代方法。相比于文档对象模型DOM,SAX 是读取和操作 XML 数据的更快速、更轻量的方法。SAX 允许您在读取文档时处理它,从而不必等待整个文档被存储之后才采取操作。它不涉及 DOM 所必需的开销和概念跳跃。 SAX API是一个基于事件的API ,适用于处理数据流,即随着数据的流动而依次处理数据。SAX API 在其解析您的文档时发生一定事件的时候会通知您。在您对其响应时,您不作保存的数据将会 被抛弃。
SAX解析时的接口介绍:
- ContentHandler 接口 :接收文档逻辑内容的通知 的处理器接口。
- DTDHandler 接口 :接收与 DTD 相关的事件的通知的处理器接口。
- EntityResolver 接口 :是用于解析实体的基本接口。
- ErrorHandler接口 :是错误处理程序的基本接口。