📄 8_xml学习笔记.txt
字号:
<body>Don't forget me this weekend!</body>
</note>
47. 一个简单的DTD
答:这个名称为note.dtd的简单DTD定义了上面note.xml的元素:
<!ELEMENT note (to, from, heading, body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
行一定义了note元素有四个子元素,行二定义了to元素的类型为“#PCDATA”,行三定义了from元素的类型为“#PCDATA”,如此等等
48. 一个简单的XML Schema
答:这个名称为note.xsd的简单XML Schema定义了上面note.xml的元素:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
xmlns="http://www.w3schools.com"
elementFormDefault="qualified">
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
note元素是复杂类型,因为它包含了其它元素。其它元素(to,from,heading,body)是简单类型,因为他们没有包括其它元素。你将在下面学到更多有关简单和复杂类型的知识。
1) <schema>元素是每个XML Schema的根元素:
<?xml version="1.0"?><xs:schema>...</xs:schema>
2) <schema>元素可包含一些属性,一个schema描述通常看上去像这样:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3work.com"
xmlns="http://www.w3work.com"
elementFormDefault="qualified">
...
</xs:schema>
3) xmlns="http://www.w3work.com"说明默认的名域空间为"http://www.w3work.com"
4) elementFormDefault="qualified"说明用这个schema声明的XML实例文档中任何元素必须符合这个名域空间。
5) xmlns:xs="http://www.w3.org/2001/XMLSchema"说明这个schema的元素和数据类型来自于"http://www.w3.org/2001/XMLSchema"名域空间。它也说明来自于这个名域空间的元素和数据类型应该冠以前缀“xs:”。
49. 一个XML Schema的引用
答:这份XML文档有XML Schema的一个引用:
<?xml version="1.0"?>
<note xmlns="http://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3schools.com/schema/note.xsd">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
1) xmlns="http://www.w3school.com"说明默认的名域空间声明。这个声明告诉schema-validator所有用于这个XML文档中的元素声明在名域空间"http://www.w3schools.com";
2) 一旦你有了有效的XML Schema实例名域空间:xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"。你可以使用schemaLocation属性,这个属性有二个值。这第一个值是要使用的namespace。这二个值是用于这个名域空间的XML schema的位置。
50. XSD简单元素
答:1) 一个简单元素是一个内容仅为文本的XML元素。它不能包含任何其它属性和元素。
2) 无论如何,“仅为文本”限制是一种误导。文本可以是很多不同类型。它可以是包含在XML Schema定义中的一种类型,也可以是一种你自行定义的一种类型。
3) 为了限制一个数据的内容,你也可以加入约束。数据需要匹配一个定义好的类型。
51. 怎样定义一个简单的元素?
答:定义一个简单元素的语法是:
<xs:element name="xxx" type="yyy"/>
xxx是元素名,yyy是元素的数据类型名。这儿是一些简单元素:
<lastname>Refsnes</lastname>
<age>34</age>
<dateborn>1968-03-27</dateborn>
下面是对应的元素定义:
<xs:element name="lastname" type="xs:string"/>
<xs:element name="age" type="xs:integer"/>
<xs:element name="dateborn" type="xs:date"/>
52. 一般的XML Schema数据类型
答:XML Schema有许多内置的数据类型。这儿是大部分一般类型的列表:
xs:string
xs:decimal
xs:integer
xs:boolean
xs:date
xs:time
53. 默认和固定值
答:1) 简单元素可以有一个默认或固定值:
2) 当没有指定值时,一个默认的值自动分配给元素。在这个例子中,默认值为red:
<xs:element name="color" type="xs:string" default="red"/>
3) 一个固定值也是自动分配给元素的,你不能指定其它值。在这个例子中,默认值为red:
<xs:element name="color" type="xs:string" fixed="red"/>
XML处理(解析)器
1. XML处理(解析)器
答:1) 一个XML处理器可以是验证或非验证解析器。
2) 根据XML1.0规范:
. 一个验证解析器必须阅读整个DTD并检验XML是否违背于DTD。
. 一个非验证解析器可以不需要DTD。
. 二种解析器都检查XML文档是否结构良好。
2. 验证还是非验证?
答:1) 大多数解析器能运行于验证及非验证模式;
2) XML文档的验证在软件开发生命周期的开发和测试阶段至关重要。而在运行阶段验证有一个性能上的消费。
3) 在产品中,当一个系统数据的可靠性已经建立,验证功能可关掉。
4) 一些解析器默认是非验证状态。
3. Tree-based解析器
答:1) 在tree-based解析时,解析器试图为整个文档建立等级架构;
2) 对于一个非常大的文档,这非常占用内存资源;
3) 元素和属性只有在整个文档解析后才可用;
4) 一旦在内存中创建了文档,它就能被遍历和进行改变;
5) 一个DOM解析器是一个tree-based解析器的例子。
4. Event-based解析器
答:1) 一旦解析器遇到文档的标签,便可对文档进行处理;
2) 这是一个以数据为中心的XML格式视图;
3) 无论何时遇到元素或标记,便能够进行处理;
4) 一旦标记过了,便不能返回;
5) 解析器返回元素,它的属性以及内容;
6) event-based解析器从不试图建立数据的结构,因此它内存需求较少。
7) 在只想在文档中寻找合适元素的情况下,这种解析器非常有用;
8) 一个SAX解析器是一个event-based解析器的例子。
5. 最流行的XML解析器
答:1) 市场上最流行的的XML解析器是Apache的Xerces;
2) Xerces提供了XML的解析和产生,对Java和C++都有效。它实现了W3C XML和DOM标准,以及SAX标准;
3) Xerces也支持XML Schema;
4) 这个解析器已并入IBM的系列产品(WebSphere,WSAD和DB2)。
6. XML4J和XML4C
答:1) 另一个解析器是IBM的XML4J和XML4C;
2) XML4J是确认型的XML解析器,完全用Java编写;
3) XML4C是面向C++的确认型的XML解析器;
4) 它提供了解析、产生、操作以及验证XML文档的类;
5) 二种解析器均支持XML1.0建议以及相关标准(DOM1.0、SAX1.0、DOM2.0);
6) XML4J包含了DOM 2的实现,SAX 2的实现以及W3C schema的部分,但这些均处于试验阶段。
7. XML应用程序
答:1) 如今组织对于商业的快速变化带来了柔性系统架构的新需求;
2) 系统应该功能强大,可升级、健壮,最最重要的是要能满足新的商业需求;
3) 应用程序通常需要支持多种客户类型;
4) Web应用程序占统治地位的客户端到现在为止是浏览器;
5) 蜂窝电话、PDA以及其它终端设备,都具有不同的XML能力。
8. XSLT
答:1) XSLT设计用于将XML数据转化为其它XML格式;
2) 一个XSLT处理器,例如Apache的Xalan, 用一至多个XSLT stylesheet(XML格式文档)完成转换;
3) 在一个基于XSLT以及Java的Web应用程序, XML数据基于数据库查询动态地产生。
9. XMLT
答:1) 即使有些数据库可将数据导出成XML格式,我们通常自行写Java代码用JDBC将数据导出为XML;
2) 为了在大多数浏览器上能显示XML数据,它必须首先转化为HTML;
3) XML数据作为一个输入反馈给处理器,XSLT stylesheet作为第二个输入。输出直接作为一个HTML流传送到Web浏览器;
4) XSLT stylesheet产生了HTML格式的输出,而XML提供了原始的数据;
10. SAX2
答:1) SAX代表Simple API for XML;
2) SAX是Java中有关XML的第一个采用的API;
3) SAX API是event-based API,通过回调方法处理解析事件;
4) SAX通常不建立一个内在的树;
5) 这些event-driven API用于访问XML文档并从中获取信息;
6) 它们不能用于操作XML文档的内在结构;
7) 当XML文档被解析时,应用程序使用SAX接收各种解析事件的信息;
8) 应用程序实现这些不同事件的处理方法;
9) 你可处理比系统内存大得多的文档,并且通过回调事件的处理方法你可以构建数据的结构。
11. SAX应用程序组件
答: XML Application
↑ ↓
SAX API
↑ ↓
XML Parser
↑
XML Document
12. SAX2的类和接口
答:ContentHandler接口被认为是最重要的接口,它的方法包括:
startDocument(): 只调用一次;
startElement(): 每个元素标签调用一次;
characters():
endElement(): 每个元素标签调用一次;
endDocument(): 文档结束调用一次。
1) SAX提供了一个实现了ContentHandler接口的类;
2) 使用DefaultHandler, 创建一个它的子类并覆盖你感兴趣的方法。而其它方法可以忽略掉,因为他们只是空方法。
13. XML名域空间支持
答:1) SAX2增加了对XML名域空间的支持;
2) 每个SAX2 XMLReader接口的实现默认地支持名域空间处理。
3) 通过名域空间,元素和属性有二部分名称:URI和localName, 有时称为通用或扩展名称。
4) 名域空间支持影响到ContentHandler和属性接口。
14. 属性
答:1) 对于属性来说,你可以通过getValue方法寻找到属性名称的值;
2) 通过getURI和getLocalName方法,你可以得到名域空间的URI或属性的本地名称;
15. DefaultHandler类
答:1) 为了使用方便,SAX提供了一个称为DefaultHandler的类,它实现了ContentHandler接口;
2) 使用DefaultHandler时,创建一个子类并override你感兴趣的方法;
3) 其它方法可安全地忽略,因为他们只是空方法;
16. DefaultHandler类的方法
答:1) startDocument
public void startDocument() throws SAXException
. 在解析期间,startDocument()只被调用一次;
. 接收文档开始的事件;
. 一般这个方法不做什么事,也可以写一些特定的操作;
2) endDocument
public void endDocument() throws SAXException
. 在解析期间,endDocument()只被调用一次;
. 接收文档结束的事件;
. 一般这个方法不做什么事,也可以写一些特定的操作;
3) startElement
public void startElement(java.lang.String uri, java.lang.String localName, java.lang.String qName, Attributes attributes) throws SAXException
. XML中每个标签调用一次这个方法;
. 接收元素开始的事件;
. 一般这个方法不做什么事,也可以写一些特定的操作;
. uri: 名域空间的URI,如果元素没有名域空间或者名域空间处理不被执行则可使用空字符串;
4) endElement
public void endElement(java.lang.String uri, java.lang.String localName, java.lang.String qName) throws SAXException
. XML中每个标签调用一次这个方法;
. 接收元素结束的事件;
. 一般这个方法不做什么事,也可以写一些特定的操作;
5) characters
public void characters(char[] ch, int start, int length) throws SAXExcepiton
17. DOM
答:1) XML是一种描述树形结构数据的语言,DOM了一系列接口访问XML文档的树形结构;
2) DOM详细说明了XML文档是如何表现为对象;
3) 不同于SAX,DOM也允许创建和修改XML文档的内容;
4) DOM level2, 包含了创建一份文档的接口,从一份文档导入一个节点到另外一份文档,支持XML名域空间;
18. DOM结构体系
答:1) DOM提供了一系列标准对象接口,XML解析器使用这些接口将文档内容提供给一个客户端程序;
2) 这些接口提供了访问原始文档的所有信息;
3) 遍历树形结构的基本接口是Node,它定义了必要的方法遍历和修改XML文档的树形结构。这些方法包括getting, deleting, modifying以及inserting。
4) 每个详细的文档结构在DOM中由下面接口之一表现:
. Document
. Attr
. Element
. Text
. Comment
. CDATASection
. DocumentType
. Notation
. Entity
. EntityReference
. ProcessingInstruction
5) 这些专门的接口都继承了Node接口的基本属性和方法
6) 他们都提供了专门的访问方式访问XML文档项目相关的唯一信息;
7) 产生出的特定节点存储于一个有父子以及同级链接结构的一个列表中;
8) 这个链接结构可通过节点接口使用父、子以及同级链接关系进行遍历;
19. Document
答:1) Document代表了整个文档以及定义了创建元素、属性、注释等等方法的接口;
2) 一个节点的属性使用元素接口方法操作;
3) 应该注意到当一个DOM应用程序读取XML文档形成相应的对象后,该对象只保存在内存中;
4) 改变内存中一个DOM对象并没有自动修改原始文件;
20. XML名域空间支持
答:1) DOM Level2支持XML名域空间,它允许创建和修改名域空间相关的元素和属性;
2) 节点固定地绑定到创建时相关的名域空间URI。因此,使用DOM在一个文档里移动节点,不会引起它的名域空间前缀或名域空间URI的变化。
3) 名域空间验证对于解析器而言并非强制,DOM应用程序是可靠的。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -