XML学习

1. XML的背景
答:1) XML代表扩展的标记语言(eXtensible Markup Language);
2) XML由W3C联盟发展维护;
3) XML是一种元语言,可以用来定义其它语言;
4) XML没有定义任何标记,它提供了一种工具定义标记以及它们之间的结构关系;
5) XML是一种用于结构化文本交换的标记语言;
6) XML代表了内容的结构也代表了内容本身;
7) XML继承自SGML(标准标记语言)。SGML的前身GML由IBM在1960年发明,用于描述设备无关的文本。
8) XML是SGML的子类, 起初的目的是为Web的结构文档提供服务。
9) W3C组织在1998年2月10日发布XML1.0版,第二个版本发布于2000年10月9日。

2. XML和HTML的关系
答:1) 事实上,HTML和XML不能够进行比较的。因为XML是一种元语言,而HTML是一种定义好的语言。
2) HTML有一套确定的标记。在W3C标准规范中定义了HTML标记的含义并由部分浏览器实现了。
3) HTML标记非常适合描述人类易读的可视化文本。
4) HTML定义了许多表现指令用以优化在浏览器中的显示。
5) 在HTML标记中,数据固有的结构丢失了。
6) HTML没有维持数据类型信息的完整性、约束、或实体间的其它关系,而XML提供了这些特征。

3. SGML、XML和HTML
答:
SGML<----HTML

|
XML

4. XML文件
答:<?xml version="1.0" ?><--------------------------------Processing Instruction
<welcome><---------------------------------------------Root Element
<message><-------------------------------------------Child element
Welcome to the world of EnterInfo!
</message>
<book-info>
<book-title> ↓-------------------------------Entity reference
Web services &amp; IBM WSAD<-------------------Character data
</book-title> ↓-------------------------------Attribute
<data type="lastEditon">
<day><----------------------------------------Begin tag
23
</day><---------------------------------------End tag
<month>
08
</month>
<year>
2001
</year>
</data>
<data type="lastEdition">
<day>
23
</day>
<month>
08
</month>
<year>
2001
</year>
</data>
<email>TonyDeng@enterinfo.net</email>
<filename src = "sg246292.pdf" /><---------------Empty tag
</book-info>
</welcome>

5. XML标记
答:1) XML文档是基于文本的,由标记和内容组成:
. 标记让XML的处理器知道如何去处理内容,以及它们是如何组织的;
. 内容是字符数据,你可以在打印或显示的页面看见它们。
2) XML文档中有六种标记:
a. Elements: 最常见的标记形式,它确定它们所包围的内容。以Start tag开始,以end tag结束。非空元素包含了子元素或字符数据。空元素没有内容,能写成以下二种形式:
<empty-element></empty-element> or
<empty-element/>
b. Attributes: 是出现在元素的first tag中位于元素名称后的名称-值对。所有的属性值必须用单引号或双引号括起来。属性指定了元素的特征。
c. Entity references: 实体引用可用于插入保留字符或任意的unicode,也用于重复或变化的文本,或包含外部文件的内容。实体引用以与号(&)开始,以分号(;)结束。XML规范预定义了五种保留的实体引用:
&lt; 代表 <
&gt; 代表 >
&quot; 代表 "
&apos; 代表 '
d. Comments: 不是XML文档原文内容的一部分,它以“<!--”开始,以“-->”结束。XML处理器不需要将注释传给应用程序。
e. Processing instructions(PIs): PIs不是XML文档的原文内容,但XML的处理器需将它传递给应用程序。
f. CDATA:指示解析器忽略大多数标记字符,该部分封装了一些源代码。

6. 结构良好的的XML文档
答:虽然XML没有任何预定义标签,但成为结构良好的文档,还是存在一些必须尊守的规则。从定义上讲,假如一个文档结构不好,它也就不是XML文档。
1) 标签必须成对。
2) 一份文档必须包含一个根元素。
3) 所有的开始标签和结束标签必须匹配。
4) 空标签必须以“/>”结束。
5) 标签必须嵌套正确。
6) 元素名称大小写敏感。
7) 所有的属性值必须位于单引号或双引号中。
8) 在同一个开始标签或空标签澡属性不允许出现超过一次。
HTML中也存在类似的规则,但HTML浏览器可接受结构不好的HTML文档。

7. 文档类型定义(DTD)(Document type definition)
答:1) 结构良好的文档为XML提供了许多优势,例如可扩展性、将结构加于一组数据。
2) 无论如何,通过XML文档交换信息需要更多功能:
. 它必须可能对一套文档构建通用语法并能自动检验其正确性。
. 需要文档类型定义(DTD)的地址。
3) 一个DTD定义了:
. 允许的子元素以及它们排列的先后顺序;
. 元素和以及属性的多样性;
. 属性值和它们的类型以及默认值;
. 实体和符号
4) DTD表达了一个文档内容的元信息;
5) 通过DTD,XML解析器能校验一份XML文档是否符合定义;
6) 一个DTD可用于一至多个XML文档;
7) 文档内容能在外部或内部声明:
<!DOCTYPE rootElement SYSTEM "filename.dtd">
<!DOCTYPE rootElement [...(delcarations)...]>
8) 一个DTD标识了文档的根元素以及包含了额外的声明。它必须是文档中PI和注释后的首要内容。
9) 外部和内部的DTD元素混合在一起是可以的。
因为DTD已被XML schemas所替代,我们可不必详细讨论。

8. 确认
答:1) 一份结构良好的文档只有当它包含一个合适的文档类型声明并且符合这份声明的约束时才是有效的。
2) 所有有效的文档都是结构良好的,但结构良好的文档并不一定是有效的。

9. XML的名域空间
答:1) 应用程序通过元素名称(标签)和文档的内容建立联系。应用程序有可能使用相同标签处理二份文档。在二份文档的这个标签中有不同的意思。因此,引入名域空间的概念以排除命名的冲突。
2) XML的名域空间由W3C组织于1999年1月14日定义并推荐。
3) 以后我们会看到,这个定义了Web服务导向的体系结构标准利用了强大的概念。
4) 标签名称应该是全球唯一的,但是因为性能原因他们必须短小。
5) 为了解决这个冲突,W3C组织名域空间介绍定义了一个属性:xmlns,通过它改进XML元素。假如它出现在一个元素中,它确定了这个元素的名域空间。
6) xmlns属性有下列的语法:
xmlns=localQualifier:"globallyUniqueName"
7) 全局唯一的名称使用URI语法,但它并非一个真实的可使用浏览器通过HTTP协议访问的URI。
8) 在下列用户元素定义中,一个accounting名域空间被定义用以区分用户记录。这些记录被其它商业应用程序所创建。
<acct:customer xmlns:acct="http://www.enterinfo.net/acct-REV10">
<acct:name>Corporation</acct:name>
<acct:order acct:ref="5566"/>
<acct:status>invoice</acct:status>
</acct:customer>
. 名域空间定义在第一行,分配了一个全局名称http://www.enterinfo.net/acct-REV10给本地的限地词:acct。
. 这个限定词用于元素名称,绑定它们到名域空间。
第二个应用程序,例如一个fulfillment系统,可以分派一个不同的名域空间给它的customer元素:
<ful:customer xmlns:ful="http://www.enterinfo.net/ful">
<ful:name>Corporation</ful:name>
<ful:order ful:ref="A98756"/>
<ful:status>shipped</ful:status>
</ful:customer>
现在一个应用程序通过名称可处理相同数据结构中不同的数据。
9) 假设元素没有定义名域空间,系统会加上默认的名域空间。黙认的名域空间的元素无须前缀,注意黙认的名域空间适合于所有有属性定义。

10. XML schema
答:1) 作为XML文档元素信息符号,我们只介绍了DTD。
2) DTD有缺点,例如,它们使用不同于XML文档的语法。
3) 它们同样缺少数据键入能力。
4) XML schema definition(XSD) 带给XML丰富的数据描述。一个schema可准确地定义约束并迫使数据类型尊守。
5) XSD由W3C组织于2001年5月2日发布。
6) XSD本身是XML文档:它们可被XML工具或通过任何XML处理器管理。换句话说,对于XML schema还存在一个XML schema。
7) 值得注意的是XSD可被引入XML文件。在处理的时候,导入的schema必须可被访问(例如使用HTTP)。


XML预览之二

11. 一个schema定义中的元素
答:1) 声明:声明使元素和属性以特定的名称和类型出现在文档中,声明包括定义。
2) 定义:定义创建新的类型(简单或复杂)。
. 简单类型:不能有元素内容以及属性;
. 复杂类型:在内容中有元素,可以有属性;

12. 第一个Schema范例
答:我们使用simpleType元素定义和命名一个简单类型:
<?xml version="1.0" ?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.ibm.com"
xmlns:TestSchema="http://www.ibm.com">
<simpleType name="ZipCodeType">
<restriction base="integer">
<minInclusive value="10000"/>
<maxInclusive value="99999"/>
</restriction>
</simpleType>
<!--element definitions skipped -->
</schema>
. restriction元素表明其所基于的基本类型并指定了二个方面:minInclusive和maxInclusive。这些范围限制了新类型的范围区间。
. 注意我们为schema定义了默认的名域空间作为标准的XML名域空间http://www.w3.org/2001/XMLSchema。我们也定义了自己特定的名域空间:http://www.ibm.com。

13. 第二个Schema范例的部分
答:<element name="address">
<complexType>
<sequence minOccurs="1" maxOccurs="1">
<element ref="TestSchema:street"/>
<element ref="TestSchema:zipCode"/>
<element ref="TestSchema:city"/>
</sequence>
</complexType>
<element>
<element name="street" type="string"/>
<element name="zipCode" type="TestSchema:ZipCodeType"/>
<element name="city" type="string"/>
<element name="addressList">
<complexType>
<sequence minOccurs="0" maxOccurs="unbounded">
<element ref="TestSchema:address"/>
</sequence>
</complexType>
</element>
. sequence是XSD的保留关键字,定义了一个复杂类型的内置结构;
. type属性是可选的,它包含了一个类型定义的引用——可定义于XSD文件中(如:TestSchema:ZipCodeType)或预先确定的标准数据类型(如String)。

14. 在XML中使用XSD
答:确信上面定义的XSD文件保存在:c:\temp\TestSchema.xsd中,下面是一个采用该XSD文件进行验证的XML文件:
<?xml version="1.0" ?>
<x:addressList xmlns:x="http://www.ibm.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.ibm.comfile:///c:/temp/TestSchema.xsd">
<x:address>
<x:street>x:Vangerowstrasse</x:street>
<x:zipCode>69115</x:zipCode>
<x:city>x:Heidelberg</x:city>
</x:address>
<x:address>
<x:street>x:Bennal Road</x:street>
<x:zipCode>90375</x:zipCode>
<x:city>x:San Jose</x:city>
</x:address>
</x:addressList>
. 注意这个XSD文件必须能通过HTTP访问,在这个例子中,file:///C:/temp/TestSchema.xsd是位置的真实URL;
. 像http://www.ibm.com的命域空间只是使用这个符号用来进行全球唯一确定。假定noProtocol://www.ibm.com是全球唯一的,它也是一个有效的名域空间。
. XML标准中schema位置属性的语法是:
xsi:schemaLocation="targetnamespaceURI locationURI"

15. 目标名域空间
答:1) 目标名域空间,用以识别元素对应的既存的名字。
2) 在声明的情况下,这种联系确定了符合schema的XML文件中元素的名域空间。
3) 一个引入了schema的XML文件必须在schemaLocation属性中引用它的目标名域空间。
4) 任何目标和元素真实名域空间间的错配都会作为schema的确认错误进行报告。
5) 在我们的例子中,目标名域空间是:http://www.ibm.com。它定义在XSD文件中并在XML文件中被引用了二次。

16. 处理XML
答:XML是一种存储和描述数据的方式。我们可能想程序去处理这些数据,这儿有二种方式:
1) 一个XML的解析器可以产生XML数据的代表(像DOM的对象),这些代表可以通过语言(像Java)的API进行访问。
2) 一个XML/XSL处理器能应用XSL style sheet将XML文档转化成任意文本格式(其它XML文件、WML、HTML)。

17. XML解析器之DOM
答:1) DOM: 英文全称为document object model;
2) 基于对象模型的DOM:解析以后,内存中装载着DOM对象树。这个对象树提供了XML文档结构和内容的所有信息;
3) DOM提供了很多关于DOM树的操作命令;
4) 对应于一个大XML文档的DOM占用了非常大的内存空间。它创建了许多小的生命周期不长的对象,这给JVM内存管理系统带来了很大的压力。
5) DOM最适合于在内存中导航并处理XML文档的结构和内容。

18. XML解析器之SAX
答:1) SAX是英文simple API for XML的缩写,它是事件驱动的;
2) 通过Java代码中与SAX事件流的对应,你可以编写基于XML的数据驱动的程序;
3) SAX允许XML数据只在一次传送中对应到指定的对象模型;
4) SAX编程模式被认为很麻烦因为它们不能在数据间导航;
5) SAX非常适合直接的,映射到指定问题域只传送一次的对象模型;

19. XML解析器之JDOM
答:1) JDOM通过一树状结构提供Java访问XML文档的能力,就像DOM一样。
2) 与DOM不同的是,JDOM专为Java设计,比DOM提供更为直接和容易地使用API的能力。
3) JDOM是由Brett McLaughlin和Jason Hunter发动的一个开源项目。

20. 解析器实现
答:存在很多解析器实现。例如,Xerces是Apache的一个开源项目,它基于早期IBM的一个称为XML4J的解析器。

21. XML/XSL处理器
答:1) XSL(eXtensible style sheet language)允许真正的内容和表现形式的分隔;
2) XSL它本身也是XML格式,它由三部分组成:
. XPath: XML路径语言,在XML文档之内定位信息的标准方式,用于在XML文档中访问文本数据、元素、属性以及其他信息。
. XSL-T: 是XSL的副产品,其以一种标准方式将格式化应用到XML文档。一方面,它可以将文档变换成XSL-FO重现,另一方面,它可以将其变换成其他XML抽象,也可以变换成其他重现表示。
. XSL-FO: XSL格式化对象
3) 这儿有一个Apache组织对XSL的开源实现叫做Xalan,它基于Lotus的早期XSL实现。

22. 总结
答:1) XML代表信息而非格式,它使数据便携。
2) XML处理和传输提供以数据应用不同语义和形式表现的能力。
3) XML发展得很快,XML的使用一直在高速地增长。例如,XML是Web服务的一项基础性技术。

DTD和Schema

1. XML和B2B
答:1) 通过XML,金融信息可通过互联网进行交换;
2) XML正成为金融信息通过互联网交换的主要语言。许多B2B应用程序正在开发中。

2. XML,创建新语言
答:1) XML是WAP和WML之母;
2) WML(Wireless Markup language), 用于标记手持设备(像手机)上互联网应用程序,用XML写成。

3. 关于XML并没什么特别的
答:1) XML并没什么特别的,就是一些用尖括号括起的XML标记的纯文本文件。
2) 可处理纯文本文件的软件同样能处理XML。在一个简单的文本编辑器中,XML标记可见且不会特别地处理。
3) 在一个XML敏感的应用程序中,XML标记能特别地处理。标记也许能或者不可见,或者是一个功能,这依赖于应用程序。

4. XML元素的关系
答:1) 元素以父子关系相互联系;
2) 为理解XML术语,你应该知道XML元素命名间的联系以及元素内容是如何描述的。

5. 元素的内容
答:1) 元素可有不同的内容类型;
2) 一个元素包括从元素开始标记到元素结束标记间的所有东西;
3) 一个元素可有元素内容、混合内容、简单内容或者空内容。一个元素也可有属性。

6. 元素命名
答:XML元素必须遵守这些命名规则:
1) 名称可包括字母、数字以及其它字符;
. 名称不能以数字开头;
. 不能以字母xml(或XML或Xml)开头;
. 名称不能包括空隔;
2) 当你“发明”元素名称时请注意并遵定这些简单的的规则:
. 任何名称都可以使用,但名字尽量富有描述性。名称中各词间以下划线分隔的形式很棒。
. 名称应该简短而简单,像<book_title>而不是:<the_title_of_the_book>。

7. XML属性
答:1) XML元素可以像HTML一样在开始标记中带有属性。
2) 属性提供不是数据的信息。

8. 引号类型
答:1) 属性值必须括在引号内,要么是单引号要么是双引号。以一个人的性别举例,人的标记可写成:
<person sex="female">或者
<person sex='female'>
2) 双引号是最常用的,但有时(假如这个属性值本身包括引号)有必要使用单引号。例如:
<gangster name='George "Shotgun" Ziegler'>
3) 数据可存储于子元素或属性中。
4) 关于何时使用属性、何时使用子元素并没有什么规则。在HTML使用属性非常方便,但在XML中你应尽量避免它们。假如信息像数据的话使用子元素吧。

9. 避免使用属性?
答:1) 使用属性存在一些问题:
. 属性不能包括多个值,但子元素能;
. 属性对未来的变化不容易扩展;
. 属性不能描述结构,但子元素能;
. 属性使用程序代码操作困难得多;
. 属性值不容易使用DTD测试;
2) 假如你使用属性作为数据的容器,你得到的将是难于阅读和维护的文档。使用元素描述数据,只在当信息与数据无关时才使用属性。

10. “有效的”XML文档
答:一个“有效的”XML文档是一个“结构良好”的XML文档,同样遵守DTD。

11. DTD和Schema
答:1) 一个DTD定义了一个XML文档元素的合法性。
2) DTD的目的是定义XML文档的有效构建块。它用一个有效元素的列表定义了文档结构。
3) XSchema是一个XML文档,用来代替DTD。

12. 错误将会中止你
答:1) XML文档的错误将会中止当前XML程序。
2) W3C的XML规范规定:假如发现一个确定的错误,程序不应该继续处理当前XML文档。原因在于XML软件应该容易写,所有XML文档应该一致。
3) 在HTML中,它可能创建带有很多错误的文档。一个主要的原因在于HTML浏览器非常大,在它们碰到HTML错误时它有自己的方式去断定这份文档应该像什么。

13. XML内嵌于HTML中
答:1) 非法定的<xml>标记使XML数据内嵌于HTML中。
2) XML数据能直接内嵌入HTML文件中,如:
<xml id="note"><note><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don't forget me this weekend!</body></note></xml>
或者作为一个单独的XML文件以下列方式内嵌:
<xml id="note" src="note.xml"></xml>
注意<xml>标记是HTML元素,而不是XML元素。

14. 数据绑定
答:数据岛能绑定到HTML元素。在下面的例子中,一个ID为“cdcat”的XML数据岛通过一个外在的XML文件装载进来。一个HTML表格通过数据源属性绑定到数据,最后表数据属性通过span内一数据字段属性绑定到XML数据。
<html><body>
<xml id="cdcat" src="cd_catalog.xml"></xml>
<table border="1" datasrc="#cdcat">
<tr>
<td><span datafld="ARTIST"></span></td>
<td><span datafld="TITLE"></span></td>
</tr>
</table>
</body>
</html>

15. 名域空间属性
答:1) 名域空间属性置于元素的开始标记中,它的语法如下:
xmlns:namespace-prefix="namespace"
2) 当一个元素的开始标记定义了一个名域空间,所有的带有相同前缀的子元素都和这个名域空间相联系;
3) 注意到那个地址用于识别名域空间,而不是用于解析器寻找信息。唯一的目的是给名域空间一个唯一的名字。

16. 统一资源标识符(URI)
答:1) 一个URI是一个用来确定网络资源的字符串。最常用的URI是URL,它用来标识一个互联网域名地址。另一种不太普遍的类型是URN。在我们的范例中,我们仅使用URL。
2) 由于我们的设备范例使用了一个互联网地址标识它的名域空间,我们可确信它是唯一的。

17. DTD有关介绍
答:1) DTD的目的是验证XML文档的有效性,它用一个有效元素的列表定义了文档的结构。
2) 一个DTD可以声明在你XML文档的内容,也可作为一个外部引用。

18. 内置DOCTYPE声明
答:假如DTD声明在XML源文件内,它使用以下语法封装在DOCTYPE定义中:
<?xml version="1.0"?>
<!DOCTYPE note[ <!--定义这是一个note类型的文档-->
<!ELEMENT note (to,from,heading,body)> <!--定义note元素的四个子元素-->
<!ELEMENT to (#PCDATA)> <!--定义to元素的类型为#PCDATA"-->
<!ELEMENT from (#PCDATA)> <!--定义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>

19. 外置DOCTYPE声明
答:假如DTD对于你XML源文件而言是一个外在文件,它装入XML源文件的语法如下:
<!DOCTYPE root-element SYSTEM "filename">
范例:
<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don't forget me this weekend!</body></note>

20. 为什么使用DTD?
答:1) 通过DTD,每个XML文件可以有一个它格式的描述;
2) 通过DTD,彼此独立的组织可以使用共同的标准交换数据;
3) 你的应用程序可以使用一个标准的DTD去验证你从外部接收到的数据是否有效;
4) 你同样能使用DTD去验证你自己的数据。

21. XML文档的构建块
答:从DTD的观点来看,所有的XML文档(以及HTML文档)都由以下简单的构建块组成:
. Elements
. Tags
. Attributes
. PCDATA
. CDATA

22. 元素
答:元素是XML和HTML文档的主要构建块;

23. 标签
答:标签用于标记元素,一个开始标签标记了元素的开始,一个结束标签标记了元素的结束;

24. 属性
答:属性提供了关于属性的额外信息。属性一般置于元素的开始标签内。属性一般以名称/值对形式出现。

25. PCDATA
答:1) PCDATA是解析字符数据(parsed character data)的缩写。
2) 字符数据看作是XML元素开始标签和结束标签间找到的文本。PCDATA是将会被解析器解析的文本。文本中的标签将会作为标记处理。

26. CDATA
答:1) CDATA同样是字符数据;
2) CDATA是不会被解析器解析的文本。文本内的标签将不会被作为标记处理,文本内的实体将不会展开。

27. 声明一个元素
答:在一个DTD中,XML元素声明为element。一个element声明有如下语法:
<!ELEMENT element-name category> 或者
<!ELEMENT element-name (element-content)>

28. 空元素
答:空元素的category关键字声明为EMPTY:
<!ELEMENT element-name EMPTY>
. DTD范例:<!ELEMENT br EMPTY>
. XML范例:<br/>

29. 只有一个字符数据的元素
答:只有一个字符数据的元素在圆括号内声明#PCDATA
<!ELEMENT element-name (#PCDATA)>
范例:
<!ELEMENT from (#PCDATA)>

30. 带有子元素的元素
答:语法:<!ELEMENT element-name(child-element-name)>或者<!ELEMENT element-name(child-element-name,child-element-name,...)
范例:<!ELEMENT note(to, from, heading, body)>
当子元素以逗号分隔的序列形式声明的时候,子元素必须以相同的序列出现在文档中。对于一个完整的声明,子元素也必须声明。子元素也可以有子元素。完整的声明可能是:
<!ELEMENT note (to, from, heading, body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>

31. 相同元素出现一次
答:<!ELEMENT element-name (child-name)>
范例:
<!ELEMENT note(message)>
上面的声明范例声明子元素message只能在note元素中出现一次。

32. 超过出现一次
答:<!ELEMENT element-name(child-name+)>
范例:
<!ELEMENT note (message+)>
“+”号表示子元素message必须在“note”中出现一至多次。

33. 出现O至多次
答:<!ELEMENT element-name (child-name*)>
范例:
<!ELEMENT note(message*)>
“*”号表示子元素message必须在“note”中出现一至多次。

34. 出现O至1次
答:<!ELEMENT element-name (child-name?)>
范例:
<!ELEMENT note(message?)>
“?”号表示子元素message必须在“note”中出现一至多次。

35. 声明可选的内容
答:<!ELEMENT note (to,from,header,(message|body))>

36. 声明混合的内容
答:<!ELEMENT note (#PCDATA|to|from|header|message)*>
可以有由任意多的解析字符和元素(to、from、header、message)组成的混合内容。
. #PCDATA必须是该组中的第一个标号。该组必须总是选择而不是序列。其他组成必须是元素类型名(从不加括号的组)。末尾的符号必须总是星号(*),而决不能是加号(+)。

37. Schema和XSD
答:1) XML Schema是XML格式的DTD的替代品。
2) 一个XML schema描述了一份XML文档的结构。
3) XML Schema language简称为XSD。

38. XML Schema是什么?
答:1) XML Schema的目的是定义XML文档合法的构建块,就像DTD一样。
2) 一个XML Schema:
. 定义了可出现在文档中的元素;
. 定义了可出现在文档中的属性;
. 定义了哪些元素是子元素;
. 定义了子元素的顺序;
. 定义了子元素的数量;
. 定义了一个子元素是否为空或是否能包含文本;
. 定义了元素和属性的数据类型;
. 定义了默认和固定的元素值。

39. XML Schemas, DTD的继任者
答:我们认为不久的将来XML Schemas作为DTD的替代品会使用在大多数Web应用程序中,理由是:
. XML Schemas可扩展;
. XML Schemas比DTD更丰富以及更有用;
. XML Schemas用XML编写;
. XML Schemas支持数据类型;
. XML Schemas支持名域空间;

40. XML Schemas, W3C组织推荐
答:1) XML Schema最初由微软提出,但是正式由W3C组织推荐是在2001年5月;
2) 这个规范现在是稳定的,并作为W3C的成员。

41. Schema对数据类型的支持
答:1) XML Schema最显著的增强是对数据类型的支持;
2) 对数据类型的支持使得:
. 更易描述允许的文档内容;
. 更易验证数据的正确性;
. 更易和来自于数据库的数据工作;
. 更易于定义数据的限制;2
. 更易于定义数据的格式;
. 更易于在不同数据类型间转换;

44. XML Schema使用XML语法
答:1) 关于XML Schema的另外一个显著的增加是他们用XML编写。
2) 因为XML Schemas用XML编写:
. 不必重新学习其它语言;
. 可以使用XML编辑器编辑Schema文件;
. 可以使用XML解析器解析你的Schema文件;
. 可以通过XML DOM操作你的Schema文件;
. 可以通过XSLT转换你的Schema文件;


43. XML Schemas安全的数据交互
答:1) 当数据从发送者发送到接收者,本质上双方都知道内容的样子;
2) 通过XML Schemas,发送者以接收者理解的方式描述数据;
3) 一个类似于“1999-03-11”的数据在某些城市会翻译为11月3日而在另外一些城市会翻译为3月11日,但是一个XML元素的数据类型定义为类似于:
<date type="date">1999-03-11</date>
这样确使大家都能理解内容。因为XML的data数据类型格式为:CCYY-MM-DD。

44. XML Schemas是扩展的
答: 1) XML Schemas是扩展的,就像XML,因为他们是用XML写的。
2) 通过一个扩展的Schema定义,你可以:
. 在其它Schemas中重用你的Schema;
. 从标准类型中创建你自己的数据类型;
. 相同的文档引用多个schemas;

45. 结构良好并不够
答:1) 结构良好的XML文档符合XML语法规则:
. 必须以XML声明开始;
. 必须有一个唯一的根元素;
. 所有开始标签必须匹配结束标签;
. XML标签大小写敏感;
. 所有元素必须封闭
. 所有元素必须嵌套适当;
. 所有属性值必须用引号引起来;
2) 即便文档结构良好,他们依然可能出现错误,而这些错误可能出现严重的结果。

46. 一个简单的XML文档
答:看看这个名称为note.xml的简单XML文档:
<?xml version = "1.0 " ?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<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应用程序是可靠的。

原文地址:https://www.cnblogs.com/suifengbingzhu/p/2648222.html