XML学习笔记

菜鸟 09:46:08

能不能给我讲讲几个基本概念?如 DTD,DOM,SAX,schema等

大师HJ 09:48:43

DOM

SAX

是两种不同的解析方式

SAX 是基于事件的,装载所需要的

DOM是一次性的把整个文件都装载入内存

菜鸟 09:47:54

那DTD和schema呢?

大师HJ 09:49:07

DTD,Schema 是xml定义文件

菜鸟 09:48:04

两者有什么不同?

大师HJ 09:49:23

Schema 本身也是xml格式的文件

菜鸟 09:48:50

难道DTD是普通的文本?

大师HJ 09:53:14

schema和dtd都是用来定义xml的,但是他们采用的是完全不同的描述方式。schema采用的是xml格式进行描述,对于dtd已经停止发展。而schems还在发展过程中,他提供了更加灵活直观的描述方式,特别适合于设计大规模的xml项目

chema和dtd也可用作 验证工具

===================================================================================================

可通过多种方式使用 XML 封装的数据。一种常见的处理方式是通过使用可扩展样式表语言转换(Extensible Stylesheet Language Transformations,XSLT),开发人员可以使用 XSLT 定义对 XML 文档的操作,以生成特定的结果。这种动态转换信息的能力允许从单个源文档产生多种输出,无论输出到不同的数据库还是输出到不同的浏览器。

开发 XML 应用程序时常用到几种模型。您可以使用根据这些模型创建的 API 来分析和操纵 XML 结构,这些模型可以是基于对象的,如文档对象模型(Document Object Model,DOM)和 JDOM;也可以是基于事件的,如 Simple API for XML(SAX)。另外,Java API for XML Parsing(JAXP)提供了使用 DOM、SAX 和 XSLT 处理 XML 文档的通用接口。

由松散组织创建的另一种 API 是 JDOM――它是基于对象的。JDOM 和 DOM 类似,但是和 Java 语言的联系更密切。

XHTML 是 XML 形式的 HTML 修订版。XHTML 文档就是遵守 XML 规则的 HTML 文档。

DOM 文档 是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中导航仪寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而 DOM 被认为是基于树或基于对象的。

对于特别大的文档,解析和加载整个文档可能很慢且很耗资源,因此使用其他手段来处理这样的数据会更好。这些基于事件的模型,比如 Simple API for XML(SAX),适用于处理数据流,即随着数据的流动而依次处理数据。

有三个通用术语用来描述 XML 文档的组成部分:标记、元素和属性。

标记是左尖括号(&lt)和右尖括号(&gt)之间的文本。有开始标记

元素是开始标记、结束标记以及位于二者之间的所有内容。

属性是一个元素的开始标记中的名称-值对。

XML 文档必须包含在一个单一元素中。这个单一元素称为根元素,它包含文档中所有文本和所有其它元素。

XML 元素是区分大小写的。

大多数 XML 文档以 XML 声明作为开始,它向解析器提供了关于文档的基本信息。建议使用 XML 声明,但它不是必需的。如果有的话,那么它一定是文档的第一样东西。

XML 的能力来自它的灵活性,即您和我以及数百万其他人可以定义我们自己的标记来描述我们的数据。记得表示个人姓名和地址的样本 XML 文档吗?那个文档包括表示个人尊称的 &lttitle&gt 元素,这是对元素名称非常合理的选择。如果您经营一家网上书店,您或许会创建一个表示书名的 &lttitle&gt 元素。如果您经营一家网上抵押放款公司,您或许会创建表示一份财产名称的 &lttitle&gt 元素。所有这些都是合理的选择,但它们都用相同的名称创建元素。如何分辨某个特定的 &lttitle&gt 元素指的是人、书籍还是一份财产呢?可以使用名称空间。

名称空间定义中的字符串仅仅是字符串。对,这些字符串看似 URL,其实不是。您可以定义 xmlns:addr="mike",那也是有效的。名称空间唯一的重要性在于其唯一性;这就是为什么大多数名称空间定义看起来象 URL 的原因。XML 解析器不会到 http://www.zyx.com/books/ 去搜索 DTD 或模式,它只是把那个文本作为字符串使用。这有些令人困惑,但名称空间就是这样工作的。

DTD样例:

&lt!ELEMENT address (name, street, city, state, postal-code)&gt

&lt!ELEMENT name (title? first-name, last-name)&gt

&lt!ELEMENT title (#PCDATA)&gt

&lt!ELEMENT first-name (#PCDATA)&gt

&lt!ELEMENT last-name (#PCDATA)&gt

&lt!ELEMENT street (#PCDATA)&gt

&lt!ELEMENT city (#PCDATA)&gt

&lt!ELEMENT state (#PCDATA)&gt

&lt!ELEMENT postal-code (#PCDATA)&gt

XML schema是可扩展的。除了 XML 模式规范中定义的数据类型以外,您还可以创建自己的数据类型,并且可以基于其它数据类型派生出新的数据类型。

WHY JDOM: 用 DOM 和 SAX 模型完成某些任务时的困难使 Jason Hunter 和 Brett McLaughlin 感到失望,于是他们创建了 JDOM 包。JDOM 是基于 Java 技术的开放源码项目,它试图遵循 80/20 规则:用 DOM 和 SAX 20% 的功能来满足 80% 的用户需求。JDOM 使用 SAX 和 DOM 解析器,因此它是作为一组相对较小的 Java 类被实现的。

Leave a Comment

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.