一.XML的主要相关技术
1.处理XML的相关技术
处理XML数据时,一定要使用XML Processor(也就是XML Parser),把XML数据结构的检查等交给XML Rarser去做。关于XMLProcessor有许多软件产品,当然,也有不少事免费的。开发工程师只需要将XML数据的检查工作交给XML Processor即可,集中精力开发应用程序部分,减少了不小的负担。常用技术如DOM,SAX,JDOM以及轻量级开发包 DOM4J.
应用程序对接收XML Processor传递来的XML树进行处理,向用户提供服务。此时,不管是电子商务,还是知识管理,都是定义XML数据结构的技术、显示XML数据的技术、XML数据结构变更技术、XML数据连接整合技术、用程序操作XML树的API和其他应用技术的组合。
2.定义XML数据结构的技术
DTD和XML Schema
3.显示和打印XML数据的技术
CSS,XSLT
4.XML数据结构转换技术
二.
1.任何的XML文件有且仅有一个根元素。通常把跟在根元素下的并且是并列关系的元素称为子元素。当然,每个子元素也可以包含自己的子元素,对根元素来说就像儿子的儿子一样。
<?xml version="1.0" encoding="UTF-8" ?>
<book>
<title>My First XML</title>
<prod id="33-657" media="paper" />
<chapter>
Introduction to XML
<para>What is HTML</para>
<para>what is XML</para>
</chapter>
<charter>
XML Syntax
<para>Elements must have a closing tag</para>
<para>Elements must be properly nested</para>
</charter>
</book>
2.一个XML元素可以包含不同类型的元素内容,结合以上实例,可以把元素内容类型分为以下三种:
(1).混合型 混合型内容是指一个元素既有文本内容,又有嵌套元素。在以上实例中,chapter 拥有混合型内容,因为它同时拥有文本内容“Introduction to XML ”以及嵌套的元素para。
(2)简单内容 简单内容是指一个元素拥有文本内容。元素para就拥有简单内容,因为他只拥有文本内容。
(3)空内容 空内容是指一个元素不带有任何内容。元素prod就属于空内容,因为它并不携带任何内容。
3.元素的属性
一个XML元素也可以包含元素的属性,在以上实例中,只有prod元素拥有属性,id 属性值是“33-657” ,media属性值是“paper”。
XML元素属性是用于提高这个元素的额外信息的,在上面的实例中,prod 元素本身没有包含元素的值,但是包含用于描述这个元素的额外信息,即这本书的出版社的ID,以及所采用的媒介。它并不是元素的值,所以在解析的时候,这些值是不会被Java或其他的语言所提取出来的。
在属性的描述中,必须给属性值加上引号,单引号和双引号都可以。
4.结构良好的文档
语法正确
XML中有5个保留字:“”” “&” “<”“>” 以及“’”
在编写自己的XML文档时,有时会出现数据中本身就包含这几个对于解析器来说比较敏感的字段。为了不让解析器误解,XML引入实体来代替以上几个敏感保留字,当编写XML文档时就可以采用这几个实体来替换,如表所示。
实体 |
符号 |
名称 |
< |
< |
小于 |
> |
> |
大于 |
& |
& |
和号 |
' |
’ |
单引号 |
" |
” |
引号 |
三.命名空间
1.XML中采用命名空间的的目的有二:
a. 解决XML文档中具有相同名称的元素和属性命名的冲突问题。
b.将来自单一XML应用的相关元素和属性集合在一起,使软件能更容易识别。
2.命名空间是用来混合多个词汇为一个单一文档的标准工具,通过在每个元素和属性的名称之间添加前缀来实现命名空间。每个前缀映射到一个URI(Uniform Resource Identifier,统一资源标识符)。还可以为元素提供默认的URI,与相同URI关联的元素和属性属于同一个命名空间。
3.命名空间的定义 xmlns属性用来命名空间的定义
命名空间为元素和属性分派URI,以消除相同名称所产生的的歧义。命名空间属性被放置于元素的开始标签之中。
命名空间的声明有两种方式:直接命名定义方式和默认命名定义方式。
l 直接命名定义方式: xmlns:[命名空间前缀]=[命名空间名URI]
l 默认命名定义方式: xmlns=[命名空间名URI]
4.命名空间作用域
默认命名定义方式:定义命名空间的元素的任何没有特殊说明的子元素以及包含在没有前缀的元素内的子元素。
直接命名定义方式:定义命名空间的元素的子元素除非子元素指定了其他的命名空间。默认命名定义方式声明命名空间时url可以为空直接定义不可以当url为空的时候表示该元素不属于任何一个命名空间。
命名空间作用于属性 没有前缀的属性,不属于任何命名空间。若一个属性所在的元素属于某一个命名空间,并不足以让该属性本身也属于这个命名空间。唯一让一个属性归属于一个命名空间的方法是,让它有个已声明的前缀,例如xlink:type
Xpath 简写方式
有些轴可以使用缩写形式,其中包括:
@ 代替 attribute::
// 代替descendant-or-self::node()
. 代替 self::node()
.. 代替 parent::node()
无代替 child:: (如果 XPath 表达式没有给出节点,则默认使用这个轴)
如果是用星号(*),可以选择特定节点的所有孩子,如 topics/* 选择 topics 下的所有子节点
四.XML文档类型定义——DTD
1.XML DTD声明
DTD使用文档类型声明(例如:DOCTYPE)引入到XML文档结构中。文档声明放在XML文档的序言部分,以“<!DOCTYPE”开头,以“>”结束。
XML DTD
简介:文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。
DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。
1. 内部的 DOCTYPE 声明
假如 DTD 被包含在您的 XML 源文件中,它应当通过下面的语法包装在一个 DOCTYPE 声明中:*****************************************************************************
<!DOCTYPE 根元素 [元素声明]>
*****************************************************************************
带有 DTD 的 XML 文档实例
*****************************************************************************
<?xmlversion="1.0"?>
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend</body>
</note>
*****************************************************************************
以上 DTD 解释如下:
!DOCTYPE note (第二行)定义此文档是 note 类型的文档。
!ELEMENT note (第三行)定义 note 元素有四个元素:"to、from、heading,、body"
!ELEMENT to (第四行)定义 to 元素为"#PCDATA" 类型
!ELEMENT from (第五行)定义 from 元素为"#PCDATA" 类型
!ELEMENT heading (第六行)定义 heading 元素为 "#PCDATA" 类型
!ELEMENT body (第七行)定义 body 元素为 "#PCDATA" 类型
2. 外部文档声明
假如 DTD 位于 XML 源文件的外部,那么它应通过下面的语法被