XML预览
1. XML的背?br />{:1) XML代表扩展的标记语a(eXtensible Markup Language);
2) XML由W3C联盟发展l护;
3) XML是一U元语言Q可以用来定义其它语a;
4) XML没有定义M标记Q它提供了一U工具定义标C及它们之间的l构关系;
5) XML是一U用于结构化文本交换的标记语a;
6) XML代表了内容的l构也代表了内容本n;
7) XMLl承自SGML(标准标记语言)。SGML的前wGML由IBM?960q发明,用于描述讑֤无关的文本?br /> 8) XML是SGML的子c? 起初的目的是为Web的结构文档提供服务?br /> 9) W3Cl织?998q??0日发布XML1.0版,W二个版本发布于2000q?0?日?/p>
2. XML和HTML的关p?br />{:1) 事实上,HTML和XML不能够进行比较的。因为XML是一U元语言Q而HTML是一U定义好的语a?br /> 2) HTML有一套确定的标记。在W3C标准规范中定义了HTML标记的含义ƈ由部分浏览器实现了?br /> 3) HTML标记非常适合描述人类易读的可视化文本?br /> 4) HTML定义了许多表现指令用以优化在览器中的显C?br /> 5) 在HTML标记中,数据固有的结构丢׃?br /> 6) HTML没有l持数据cd信息的完整性、约束、或实体间的其它关系Q而XML提供了这些特征?br />
3. SGML、XML和HTML
{:
SGML<----HTML
?br /> |
XML
4. XML文g
{:<?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 & 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文档是基于文本的Q由标记和内容组成:
. 标记让XML的处理器知道如何d理内容,以及它们是如何组l的;
. 内容是字W数据,你可以在打印或显C的面看见它们?br /> 2) XML文档中有六种标记:
a. Elements: 最常见的标记Ş式,它确定它们所包围的内宏V以Start tag开始,以end tagl束。非I元素包含了子元素或字符数据。空元素没有内容Q能写成以下二种形式Q?br /> <empty-element></empty-element> or
<empty-element/>
b. Attributes: 是出现在元素的first tag中位于元素名U后的名U?值对。所有的属性值必ȝ单引h双引hh。属性指定了元素的特征?br /> c. Entity references: 实体引用可用于插入保留字W或L的unicodeQ也用于重复或变化的文本Q或包含外部文g的内宏V实体引用以与号(&)开始,以分?;)l束。XML规范预定义了五种保留的实体引用:
< 代表 <
> 代表 >
" 代表 "
' 代表 '
d. Comments: 不是XML文档原文内容的一部分Q它以?lt;!--”开始,以?->”结束。XML处理器不需要将注释传给应用E序?br /> e. Processing instructions(PIs): PIs不是XML文档的原文内容,但XML的处理器需它传递给应用E序?br /> f. CDATAQ指C析器忽略大多数标记字W,该部分封装了一些源代码?/p>
6. l构良好的的XML文档
{:虽然XML没有M预定义标{,但成为结构良好的文档Q还是存在一些必d守的规则。从定义上讲Q假如一个文档结构不好,它也׃是XML文档?br /> 1) 标签必须成对?br /> 2) 一份文档必d含一个根元素?br /> 3) 所有的开始标{֒l束标签必须匚w?br /> 4) I标{ֿM?>”结束?br /> 5) 标签必须嵌套正确?br /> 6) 元素名称大小写敏感?br /> 7) 所有的属性值必M于单引号或双引号中?br /> 8) 在同一个开始标{或I标{M属性不允许出现过一ơ?br /> HTML中也存在cM的规则,但HTML览器可接受l构不好的HTML文档?/p>
7. 文档cd定义(DTD)(Document type definition)
{:1) l构良好的文档ؓXML提供了许多优势,例如可扩展性、将l构加于一l数据?br /> 2) 无论如何Q通过XML文档交换信息需要更多功能:
. 它必d能对一套文档构建通用语法q能自动验其正确性?br /> . 需要文档类型定?DTD)的地址?br /> 3) 一个DTD定义了:
. 允许的子元素以及它们排列的先后顺?
. 元素和以及属性的多样?
. 属性值和它们的类型以及默认?
. 实体和符?br /> 4) DTD表达了一个文档内容的元信?
5) 通过DTDQXML解析器能校验一份XML文档是否W合定义;
6) 一个DTD可用于一臛_个XML文档;
7) 文档内容能在外部或内部声明:
<!DOCTYPE rootElement SYSTEM "filename.dtd">
<!DOCTYPE rootElement [...(delcarations)...]>
8) 一个DTD标识了文档的根元素以及包含了额外的声明。它必须是文档中PI和注释后的首要内宏V?br /> 9) 外部和内部的DTD元素混合在一h可以的?br /> 因ؓDTD已被XML schemas所替代Q我们可不必详细讨论?/p>
8. 认
{:1) 一份结构良好的文档只有当它包含一个合适的文档cd声明q且W合q䆾声明的约束时才是有效的?br /> 2) 所有有效的文档都是l构良好的,但结构良好的文档q不一定是有效的?/p>
9. XML的名域空?br />{:1) 应用E序通过元素名称(标签)和文档的内容建立联系。应用程序有可能使用相同标签处理二䆾文档。在二䆾文档的这个标{中有不同的意思。因此,引入名域I间的概念以排除命名的冲H?br /> 2) XML的名域空间由W3Cl织?999q??4日定义ƈ推荐?br /> 3) 以后我们会看刎ͼq个定义了Web服务导向的体pȝ构标准利用了强大的概c?br /> 4) 标签名称应该是全球唯一的,但是因ؓ性能原因他们必须短小?br /> 5) Z解决q个冲突QW3Cl织名域I间介绍定义了一个属性:xmlnsQ通过它改qXML元素。假如它出现在一个元素中Q它定了这个元素的名域I间?br /> 6) xmlns属性有下列的语法:
xmlns=localQualifier:"globallyUniqueName"
7) 全局唯一的名UC用URI语法Q但它ƈ非一个真实的可用浏览器通过HTTP协议讉K的URI?br /> 8) 在下列用户元素定义中Q一个accounting名域I间被定义用以区分用戯录。这些记录被其它商业应用E序所创徏?br /> <acct:customer xmlns:acct=" <acct:name>Corporation</acct:name>
<acct:order acct:ref="5566"/>
<acct:status>invoice</acct:status>
</acct:customer>
. 名域I间定义在第一行,分配了一个全局名称http://www.enterinfo.net/acct-REV10l本地的限地词:acct?br /> . q个限定词用于元素名Uͼl定它们到名域空间?br /> W二个应用程序,例如一个fulfillmentpȝQ可以分z一个不同的名域I间l它的customer元素Q?br /> <ful:customer xmlns:ful=" <ful:name>Corporation</ful:name>
<ful:order ful:ref="A98756"/>
<ful:status>shipped</ful:status>
</ful:customer>
现在一个应用程序通过名称可处理相同数据结构中不同的数据?br /> 9) 假设元素没有定义名域I间Q系l会加上默认的名域空间。黙认的名域I间的元素无d~Q注意黙认的名域I间适合于所有有属性定义?br />
10. XML schema
{:1) 作ؓXML文档元素信息W号Q我们只介绍了DTD?br /> 2) DTD有缺点,例如Q它们用不同于XML文档的语法?br /> 3) 它们同样~少数据键入能力?br /> 4) XML schema definition(XSD) 带给XML丰富的数据描q。一个schema可准地定义U束q迫使数据类型尊守?br /> 5) XSD由W3Cl织?001q??日发布?br /> 6) XSD本n是XML文档Q它们可被XML工具或通过MXML处理器管理。换句话_对于XML schemaq存在一个XML schema?br /> 7) 值得注意的是XSD可被引入XML文g。在处理的时候,导入的schema必须可被讉K(例如使用HTTP)?/p>
2004-10-29 星期五 ??/p>
XML预览之二
11. 一个schema定义中的元素
{:1) 声明Q声明元素和属性以特定的名U和cd出现在文档中Q声明包括定义?br /> 2) 定义Q定义创建新的类?单或复杂)?br /> . 单类型:不能有元素内容以及属?
. 复杂cdQ在内容中有元素Q可以有属?
12. W一个Schema范例
{:我们使用simpleType元素定义和命名一个简单类型:
<?xml version="1.0" ?>
<schema xmlns=" targetNamespace=" xmlns:TestSchema=" <simpleType name="ZipCodeType">
<restriction base="integer">
<minInclusive value="10000"/>
<maxInclusive value="99999"/>
</restriction>
</simpleType>
<!--element definitions skipped -->
</schema>
. restriction元素表明其所Z的基本类型ƈ指定了二个方面:minInclusive和maxInclusive。这些范围限制了新类型的范围区间?br /> . 注意我们为schema定义了默认的名域I间作ؓ标准的XML名域I间http://www.w3.org/2001/XMLSchema。我们也定义了自q定的名域I间Q?a >http://www.ibm.com?/p>
13. W二个Schema范例的部?br />{:<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的保留关键字Q定义了一个复杂类型的内置l构;
. type属性是可选的Q它包含了一个类型定义的引用——可定义于XSD文g?如:TestSchema:ZipCodeType)或预先确定的标准数据cd(如String)?/p>
14. 在XML中用XSD
{:信上面定义的XSD文g保存在:c:\temp\TestSchema.xsd中,下面是一个采用该XSD文gq行验证的XML文gQ?br /> <?xml version="1.0" ?>
<x:addressList xmlns:x=" xmlns:xsi=" 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>
. 注意q个XSD文g必须能通过HTTP讉KQ在q个例子中,file:///C:/temp/TestSchema.xsd是位|的真实URL;
. ?a >http://www.ibm.com的命域空间只是用这个符L来进行全球唯一定。假定noProtocol://www.ibm.com是全球唯一的,它也是一个有效的名域I间?br /> . XML标准中schema位置属性的语法是:
xsi:schemaLocation="targetnamespaceURI locationURI"
15. 目标名域I间
{:1) 目标名域I间Q用以识别元素对应的既存的名字?br /> 2) 在声明的情况下,q种联系定了符合schema的XML文g中元素的名域I间?br /> 3) 一个引入了schema的XML文g必须在schemaLocation属性中引用它的目标名域I间?br /> 4) M目标和元素真实名域空间间的错配都会作为schema的确认错误进行报告?br /> 5) 在我们的例子中,目标名域I间是:http://www.ibm.com。它定义在XSD文g中ƈ在XML文g中被引用了二ơ?/p>
16. 处理XML
{:XML是一U存储和描述数据的方式。我们可能想E序d理这些数据,q儿有二U方式:
1) 一个XML的解析器可以产生XML数据的代?像DOM的对?Q这些代表可以通过语言(像Java)的APIq行讉K?br /> 2) 一个XML/XSL处理器能应用XSL style sheetXML文档转化成Q意文本格?其它XML文g、WML、HTML)?/p>
17. XML解析器之DOM
{:1) DOM: 英文全称为document object model;
2) Z对象模型的DOMQ解析以后,内存中装载着DOM对象树。这个对象树提供了XML文档l构和内容的所有信?
3) DOM提供了很多关于DOM树的操作命o;
4) 对应于一个大XML文档的DOM占用了非常大的内存空间。它创徏了许多小的生命周期不长的对象Q这lJVM内存理pȝ带来了很大的压力?br /> 5) DOM最适合于在内存中导航ƈ处理XML文档的结构和内容?/p>
18. XML解析器之SAX
{:1) SAX是英文simple API for XML的羃写,它是事g驱动?
2) 通过Java代码中与SAX事g的对应Q你可以~写ZXML的数据驱动的E序;
3) SAX允许XML数据只在一ơ传送中对应到指定的对象模型;
4) SAX~程模式被认为很ȝ因ؓ它们不能在数据间D;
5) SAX非常适合直接的,映射到指定问题域只传送一ơ的对象模型;
19. XML解析器之JDOM
{:1) JDOM通过一树状l构提供Java讉KXML文档的能力,像DOM一栗?br /> 2) 与DOM不同的是QJDOM专ؓJava设计Q比DOM提供更ؓ直接和容易地使用API的能力?br /> 3) JDOM是由Brett McLaughlin和Jason Hunter发动的一个开源项目?/p>
20. 解析器实?br />{:存在很多解析器实现。例如,Xerces是Apache的一个开源项目,它基于早期IBM的一个称为XML4J的解析器?/p>
21. XML/XSL处理?br />{:1) XSL(eXtensible style sheet language)允许真正的内容和表现形式的分?
2) XSL它本w也是XML格式Q它׃部分l成Q?br /> . XPath: XML路径语言Q在XML文档之内定位信息的标准方式,用于在XML文档中访问文本数据、元素、属性以及其他信息?br /> . XSL-T: 是XSL的副产品Q其以一U标准方式将格式化应用到XML文档。一斚wQ它可以文档变换成XSL-FO重现Q另一斚wQ它可以其变换成其他XML抽象Q也可以变换成其他重现表C?br /> . XSL-FO: XSL格式化对?br /> 3) q儿有一个Apachel织对XSL的开源实现叫做XalanQ它ZLotus的早期XSL实现?/p>
22. ȝ
{:1) XML代表信息而非格式Q它使数据便携?br /> 2) XML处理和传输提供以数据应用不同语义和Ş式表现的能力?br /> 3) XML发展得很快,XML的用一直在高速地增长。例如,XML是Web服务的一基性技术?/p>
DTD和Schema
1. XML和B2B
{:1) 通过XMLQ金融信息可通过互联|进行交?
2) XML正成为金融信息通过互联|交换的主要语言。许多B2B应用E序正在开发中?/p>
2. XMLQ创建新语言
{:1) XML是WAP和WML之母;
2) WML(Wireless Markup language), 用于标记手持讑֤(像手?上互联网应用E序Q用XML写成?/p>
3. 关于XMLq没什么特别的
{:1) XMLq没什么特别的Q就是一些用括hLXML标记的纯文本文g?br /> 2) 可处理纯文本文g的Y件同栯处理XML。在一个简单的文本~辑器中QXML标记可见且不会特别地处理?br /> 3) 在一个XML敏感的应用程序中QXML标记能特别地处理。标C许能或者不可见Q或者是一个功能,q依赖于应用E序?/p>
4. XML元素的关p?br />{:1) 元素以父子关pȝ互联p?
2) 为理解XML术语Q你应该知道XML元素命名间的联系以及元素内容是如何描q的?/p>
5. 元素的内?br />{:1) 元素可有不同的内容类?
2) 一个元素包括从元素开始标记到元素l束标记间的所有东?
3) 一个元素可有元素内宏V合内宏V简单内Ҏ者空内容。一个元素也可有属性?/p>
6. 元素命名
{:XML元素必须遵守q些命名规则Q?br /> 1) 名称可包括字母、数字以及其它字W?
. 名称不能以数字开?
. 不能以字母xml(或XML或Xml)开?
. 名称不能包括I隔;
2) 当你“发明”元素名U时h意ƈ遵定q些单的的规则:
. M名称都可以用,但名字尽量富有描q性。名UC各词间以下划U分隔的形式很棒?br /> . 名称应该短而简单,?lt;book_title>而不是:<the_title_of_the_book>?/p>
7. XML属?br />{:1) XML元素可以像HTML一样在开始标C带有属性?br /> 2) 属性提供不是数据的信息?/p>
8. 引号cd
{:1) 属性值必L在引号内Q要么是单引可么是双引受以一个h的性别举例Qh的标记可写成Q?br /> <person sex="female">或?br /> <person sex='female'>
2) 双引h最常用的,但有?假如q个属性值本w包括引?有必要用单引号。例如:
<gangster name='George "Shotgun" Ziegler'>
3) 数据可存储于子元素或属性中?br /> 4) 关于何时使用属性、何时用子元素q没有什么规则。在HTML使用属性非常方便,但在XML中你应尽量避免它们。假如信息像数据的话使用子元素吧?/p>
9. 避免使用属性?
{:1) 使用属性存在一些问题:
. 属性不能包括多个|但子元素?
. 属性对未来的变化不Ҏ扩展;
. 属性不能描q结构,但子元素?
. 属性用程序代码操作困隑־?
. 属性gҎ使用DTD试;
2) 假如你用属性作为数据的容器Q你得到的将是难于阅dl护的文档。用元素描q数据,只在当信息与数据无关时才使用属性?/p>
10. “有效的”XML文档
{:一个“有效的”XML文档是一个“结构良好”的XML文档Q同样遵守DTD?/p>
11. DTD和Schema
{:1) 一个DTD定义了一个XML文档元素的合法性?br /> 2) DTD的目的是定义XML文档的有效构建块。它用一个有效元素的列表定义了文档结构?br /> 3) XSchema是一个XML文档Q用来代替DTD?/p>
12. 错误会中止?br />{:1) XML文档的错误将会中止当前XMLE序?br /> 2) W3C的XML规范规定Q假如发C个确定的错误Q程序不应该l箋处理当前XML文档。原因在于XML软g应该Ҏ写,所有XML文档应该一致?br /> 3) 在HTML中,它可能创建带有很多错误的文档。一个主要的原因在于HTML览器非常大Q在它们到HTML错误时它有自q方式L定这份文档应该像什么?/p>
13. XML内嵌于HTML?br />{:1) 非法定的<xml>标记使XML数据内嵌于HTML中?br /> 2) XML数据能直接内嵌入HTML文g中,如:
<xml id="note"><note><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don't forget me this weekend!</body></note></xml>
或者作Z个单独的XML文g以下列方式内嵌:
<xml id="note" src="note.xml"></xml>
注意<xml>标记是HTML元素Q而不是XML元素?/p>
14. 数据l定
{:数据岛能l定到HTML元素。在下面的例子中Q一个ID为“cdcat”的XML数据岛通过一个外在的XML文g装蝲q来。一个HTML表格通过数据源属性绑定到数据Q最后表数据属性通过span内一数据字段属性绑定到XML数据?br /> <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. 名域I间属?br />{:1) 名域I间属性置于元素的开始标CQ它的语法如下:
xmlns:namespace-prefix="namespace"
2) 当一个元素的开始标记定义了一个名域空_所有的带有相同前缀的子元素都和q个名域I间相联p?
3) 注意到那个地址用于识别名域I间Q而不是用于解析器L信息。唯一的目的是l名域空间一个唯一的名字?/p>
16. l一资源标识W?URI)
{:1) 一个URI是一个用来确定网l资源的字符丌Ӏ最常用的URI是URLQ它用来标识一个互联网域名地址。另一U不太普遍的cd是URN。在我们的范例中Q我们仅使用URL?br /> 2) ׃我们的设备范例用了一个互联网地址标识它的名域I间Q我们可信它是唯一的?/p>
17. DTD有关介绍
{:1) DTD的目的是验证XML文档的有效性,它用一个有效元素的列表定义了文档的l构?br /> 2) 一个DTD可以声明在你XML文档的内容,也可作ؓ一个外部引用?/p>
18. 内置DOCTYPE声明
{:假如DTD声明在XML源文件内Q它使用以下语法装在DOCTYPE定义?
<?xml version="1.0"?>
<!DOCTYPE note[ <!--定义q是一个notecd的文?->
<!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源文件的语法如下Q?br /> <!DOCTYPE root-element SYSTEM "filename">
范例Q?br /> <?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. Z么用DTDQ?br />{:1) 通过DTDQ每个XML文g可以有一个它格式的描q?
2) 通过DTDQ彼此独立的l织可以使用共同的标准交换数?
3) 你的应用E序可以使用一个标准的DTD去验证你从外部接收到的数据是否有?
4) 你同栯使用DTD去验证你自己的数据?/p>
21. XML文档的构建块
{:从DTD的观Ҏ看,所有的XML文档(以及HTML文档)都由以下单的构徏块组成:
. Elements
. Tags
. Attributes
. PCDATA
. CDATA
22. 元素
{:元素是XML和HTML文档的主要构建块;
23. 标签
{:标签用于标记元素Q一个开始标{标C元素的开始,一个结束标{标C元素的结?
24. 属?br />{:属性提供了关于属性的额外信息。属性一般置于元素的开始标{ֆ。属性一般以名称/值对形式出现?/p>
25. PCDATA
{:1) PCDATA是解析字W数?parsed character data)的羃写?br /> 2) 字符数据看作是XML元素开始标{֒l束标签间找到的文本。PCDATA是将会被解析器解析的文本。文本中的标{ְ会作为标记处理?/p>
26. CDATA
{:1) CDATA同样是字W数?
2) CDATA是不会被解析器解析的文本。文本内的标{ְ不会被作为标记处理,文本内的实体不会展开?/p>
27. 声明一个元?br />{:在一个DTD中,XML元素声明为element。一个element声明有如下语法:
<!ELEMENT element-name category> 或?br /> <!ELEMENT element-name (element-content)>
28. I元?br />{:I元素的category关键字声明ؓEMPTY:
<!ELEMENT element-name EMPTY>
. DTD范例Q?lt;!ELEMENT br EMPTY>
. XML范例Q?lt;br/>
29. 只有一个字W数据的元素
{:只有一个字W数据的元素在圆括号内声?PCDATA
<!ELEMENT element-name (#PCDATA)>
范例Q?br /> <!ELEMENT from (#PCDATA)>
30. 带有子元素的元素
{:语法Q?lt;!ELEMENT element-name(child-element-name)>或?lt;!ELEMENT element-name(child-element-name,child-element-name,...)
范例Q?lt;!ELEMENT note(to, from, heading, body)>
当子元素以逗号分隔的序列Ş式声明的时候,子元素必M相同的序列出现在文档中。对于一个完整的声明Q子元素也必d明。子元素也可以有子元素。完整的声明可能是:
<!ELEMENT note (to, from, heading, body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
31. 相同元素出现一?br />{:<!ELEMENT element-name (child-name)>
范例Q?br /> <!ELEMENT note(message)>
上面的声明范例声明子元素message只能在note元素中出Cơ?/p>
32. 过出现一?br />{:<!ELEMENT element-name(child-name+)>
范例Q?br /> <!ELEMENT note (message+)>
?”号表示子元素message必须在“note”中出现一臛_ơ?/p>
33. 出现O臛_?br />{:<!ELEMENT element-name (child-name*)>
范例Q?br /> <!ELEMENT note(message*)>
?”号表示子元素message必须在“note”中出现一臛_ơ。 ?
34. 出现O??br />{:<!ELEMENT element-name (child-name?)>
范例Q?br /> <!ELEMENT note(message?)>
?”号表示子元素message必须在“note”中出现一臛_ơ?/p>
35. 声明可选的内容
{:<!ELEMENT note (to,from,header,(message|body))>
36. 声明混合的内?br />{:<!ELEMENT note (#PCDATA|to|from|header|message)*>
可以有由L多的解析字符和元?to、from、header、message)l成的合内宏V?br /> . #PCDATA必须是该l中的第一个标受该l必LL选择而不是序列。其他组成必L元素cd?从不加括Ll?。末W号必须L星号(*)Q而决不能是加?+)?/p>
37. Schema和XSD
{:1) XML Schema是XML格式的DTD的替代品?br /> 2) 一个XML schema描述了一份XML文档的结构?br /> 3) XML Schema languageUCؓXSD?/p>
38. XML Schema是什么?
{:1) XML Schema的目的是定义XML文档合法的构建块Q就像DTD一栗?br /> 2) 一个XML Schema:
. 定义了可出现在文档中的元?
. 定义了可出现在文档中的属?
. 定义了哪些元素是子元?
. 定义了子元素的顺?
. 定义了子元素的数?
. 定义了一个子元素是否为空或是否能包含文本;
. 定义了元素和属性的数据cd;
. 定义了默认和固定的元素倹{?/p>
39. XML Schemas, DTD的任?br />{:我们认ؓ不久的将来XML Schemas作ؓDTD的替代品会用在大多数Web应用E序中,理由是:
. XML Schemas可扩?
. XML Schemas比DTD更丰富以及更有用;
. XML Schemas用XML~写;
. XML Schemas支持数据cd;
. XML Schemas支持名域I间;
40. XML Schemas, W3Cl织推荐
{:1) XML Schema最初由微Y提出Q但是正式由W3Cl织推荐是在2001q??
2) q个规范现在是稳定的Qƈ作ؓW3C的成员?/p>
41. SchemaҎ据类型的支持
{:1) XML Schema最显著的增强是Ҏ据类型的支持;
2) Ҏ据类型的支持使得Q?br /> . 更易描述允许的文档内?
. 更易验证数据的正?
. 更易和来自于数据库的数据工作;
. 更易于定义数据的限制;2
. 更易于定义数据的格式;
. 更易于在不同数据cd间{?
44. XML Schema使用XML语法
{:1) 关于XML Schema的另外一个显著的增加是他们用XML~写?br /> 2) 因ؓXML Schemas用XML~写Q?br /> . 不必重新学习其它语言;
. 可以使用XML~辑器编辑Schema文g;
. 可以使用XML解析器解析你的Schema文g;
. 可以通过XML DOM操作你的Schema文g;
. 可以通过XSLT转换你的Schema文g;
2004-11-1 星期一 ?/p>
43. XML Schemas安全的数据交?br />{:1) 当数据从发送者发送到接收者,本质上双斚w知道内容的样?
2) 通过XML SchemasQ发送者以接收者理解的方式描述数据;
3) 一个类g?999-03-11”的数据在某些城市会译?1?日而在另外一些城市会译??1日,但是一个XML元素的数据类型定义ؓcM于:
<date type="date">1999-03-11</date>
q样大家都能理解内容。因为XML的data数据cd格式为:CCYY-MM-DD?/p>
44. XML Schemas是扩展的
{? 1) XML Schemas是扩展的Q就像XMLQ因Z们是用XML写的?br /> 2) 通过一个扩展的Schema定义Q你可以Q?br /> . 在其它Schemas中重用你的Schema;
. 从标准类型中创徏你自q数据cd;
. 相同的文档引用多个schemas;
45. l构良好q不?br />{:1) l构良好的XML文档W合XML语法规则Q?br /> . 必须以XML声明开?
. 必须有一个唯一的根元素;
. 所有开始标{ֿd配结束标{?
. XML标签大小写敏?
. 所有元素必d?br /> . 所有元素必d套适当;
. 所有属性值必ȝ引号引v?
2) 即便文档l构良好Q他们依然可能出现错误,而这些错误可能出C重的l果?/p>
46. 一个简单的XML文档
{:看看q个名称为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
{:q个名称为note.dtd的简单DTD定义了上面note.xml的元素:
<!ELEMENT note (to, from, heading, body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
行一定义了note元素有四个子元素Q行二定义了to元素的类型ؓ?PCDATA?行三定义了from元素的类型ؓ?PCDATA?如此{等
48. 一个简单的XML Schema 49. 一个XML Schema的引?br />{:q䆾XML文档有XML Schema的一个引用: 50. XSD单元?br />{:1) 一个简单元素是一个内容仅为文本的XML元素。它不能包含M其它属性和元素?br /> 2) 无论如何Q“仅为文本”限制是一U误对{文本可以是很多不同cd。它可以是包含在XML Schema定义中的一U类型,也可以是一U你自行定义的一U类型?br /> 3) Z限制一个数据的内容Q你也可以加入约束。数据需要匹配一个定义好的类型?/p>
51. 怎样定义一个简单的元素Q?br />{:定义一个简单元素的语法是: 52. 一般的XML Schema数据cd 53. 默认和固定?br />{:1) 单元素可以有一个默认或固定| XML处理(解析)?/p>
1. XML处理(解析)?br />{:1) 一个XML处理器可以是验证或非验证解析器?br /> 2) ҎXML1.0规范Q?br /> . 一个验证解析器必须阅读整个DTDq检验XML是否q背于DTD?br /> . 一个非验证解析器可以不需要DTD?br /> . 二种解析器都查XML文档是否l构良好?/p>
2. 验证q是非验证? 3. Tree-based解析?br />{:1) 在tree-based解析Ӟ解析器试图ؓ整个文档建立{架构; 4. Event-based解析?br />{:1) 一旦解析器遇到文档的标{,便可Ҏ档进行处? 5. 最行的XML解析?br />{:1) 市场上最行的的XML解析器是Apache的Xerces; 6. XML4J和XML4C 7. XML应用E序 8. XSLT 9. XMLT 10. SAX2 11. SAX应用E序lg 12. SAX2的类和接?br />{:ContentHandler接口被认为是最重要的接口,它的Ҏ包括Q?br /> startDocument(): 只调用一? 13. XML名域I间支持 14. 属?br />{:1) 对于属性来_你可以通过getValueҎL到属性名U的? 15. DefaultHandlerc?br />{:1) Z使用方便QSAX提供了一个称为DefaultHandler的类Q它实现了ContentHandler接口; 16. DefaultHandlercȝҎ 17. DOM 18. DOMl构体系 19. Document 20. XML名域I间支持
{:q个名称为note.xsd的简单XML Schema定义了上面note.xml的元素:
<?xml version="1.0"?>
<xs:schema xmlns:xs=" targetNamespace=" xmlns=" 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)是简单类型,因ؓ他们没有包括其它元素。你在下面学到更多有关单和复杂cd的知识?br /> 1) <schema>元素是每个XML Schema的根元素Q?br /> <?xml version="1.0"?><xs:schema>...</xs:schema>
2) <schema>元素可包含一些属性,一个schema描述通常看上dq样Q?br /> <?xml version="1.0"?>
<xs:schema xmlns:xs=" targetNamespace=" xmlns=" elementFormDefault="qualified">
...
</xs:schema>
3) xmlns=" 4) elementFormDefault="qualified"说明用这个schema声明的XML实例文档中Q何元素必ȝ合这个名域空间?br /> 5) xmlns:xs="
<?xml version="1.0"?>
<note xmlns=" xmlns:xsi=" xsi:schemaLocation=" <to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
1) xmlns=" 2) 一旦你有了有效的XML Schema实例名域I间Qxmlns:xsi="
<xs:element name="xxx" type="yyy"/>
xxx是元素名Qyyy是元素的数据cd名。这儿是一些简单元素:
<lastname>Refsnes</lastname>
<age>34</age>
<dateborn>1968-03-27</dateborn>
下面是对应的元素定义Q?br /> <xs:element name="lastname" type="xs:string"/>
<xs:element name="age" type="xs:integer"/>
<xs:element name="dateborn" type="xs:date"/>
{:XML Schema有许多内|的数据cd。这儿是大部分一般类型的列表Q?br /> xs:string
xs:decimal
xs:integer
xs:boolean
xs:date
xs:time
2) 当没有指定值时Q一个默认的D动分配给元素。在q个例子中,默认gؓredQ?br /> <xs:element name="color" type="xs:string" default="red"/>
3) 一个固定g是自动分配给元素的,你不能指定其它倹{在q个例子中,默认gؓredQ?br /> <xs:element name="color" type="xs:string" fixed="red"/>
{:1) 大多数解析器能运行于验证及非验证模式;
2) XML文档的验证在软g开发生命周期的开发和试阶段臛_重要。而在q行阶段验证有一个性能上的消费?br /> 3) 在品中Q当一个系l数据的可靠性已l徏立,验证功能可关掉?br /> 4) 一些解析器默认是非验证状态?/p>
2) 对于一个非常大的文档,q非常占用内存资?
3) 元素和属性只有在整个文档解析后才可用;
4) 一旦在内存中创Z文档Q它p被遍历和q行改变;
5) 一个DOM解析器是一个tree-based解析器的例子?/p>
2) q是一个以数据Z心的XML格式视图;
3) 无论何时遇到元素或标讎ͼ便能够进行处?
4) 一旦标记过了,便不能返?
5) 解析器返回元素,它的属性以及内?
6) event-based解析器从不试囑־立数据的l构Q因此它内存需求较?br /> 7) 在只惛_文档中寻扑适元素的情况下,q种解析器非常有?
8) 一个SAX解析器是一个event-based解析器的例子?/p>
2) Xerces提供了XML的解析和产生Q对Java和C++都有效。它实现了W3C XML和DOM标准Q以及SAX标准;
3) Xerces也支持XML Schema;
4) q个解析器已q入IBM的系列?WebSphereQWSAD和DB2)?/p>
{: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的实C及W3C schema的部分,但这些均处于试验阶段?/p>
{:1) 如今l织对于商业的快速变化带来了柔性系l架构的新需?
2) pȝ应该功能强大Q可升、健壮,最最重要的是要能满新的商业需?
3) 应用E序通常需要支持多U客L?
4) Web应用E序占统d位的客户端到现在为止是浏览器;
5) 蜂窝电话、PDA以及其它l端讑֤Q都h不同的XML能力?/p>
{:1) XSLT设计用于XML数据转化为其它XML格式;
2) 一个XSLT处理器,例如Apache的Xalan, 用一臛_个XSLT stylesheet(XML格式文档)完成转换;
3) 在一个基于XSLT以及Java的Web应用E序, XML数据Z数据库查询动态地产生?/p>
{:1) 即有些数据库可数据导出成XML格式Q我们通常自行写Java代码用JDBC数据导ZؓXML;
2) Z在大多数览器上能显CXML数据Q它必须首先转化为HTML;
3) XML数据作ؓ一个输入反馈给处理器,XSLT stylesheet作ؓW二个输入。输出直接作Z个HTML传送到Web览?
4) XSLT stylesheet产生了HTML格式的输出,而XML提供了原始的数据;
{:1) SAX代表Simple API for XML;
2) SAX是Java中有关XML的第一个采用的API;
3) SAX API是event-based APIQ通过回调Ҏ处理解析事g;
4) SAX通常不徏立一个内在的?
5) q些event-driven API用于讉KXML文档q从中获取信?
6) 它们不能用于操作XML文档的内在结?
7) 当XML文档被解析时Q应用程序用SAX接收各种解析事g的信?
8) 应用E序实现q些不同事g的处理方?
9) 你可处理比系l内存大得多的文档,q且通过回调事g的处理方法你可以构徏数据的结构?/p>
{: XML Application
??br /> SAX API
??br /> XML Parser
?br /> XML Document
startElement(): 每个元素标签调用一?
characters():
endElement(): 每个元素标签调用一?
endDocument(): 文档l束调用一ơ?br /> 1) SAX提供了一个实CContentHandler接口的类;
2) 使用DefaultHandler, 创徏一个它的子cdƈ覆盖你感兴趣的方法。而其它方法可以忽略掉Q因Z们只是空Ҏ?/p>
{:1) SAX2增加了对XML名域I间的支?
2) 每个SAX2 XMLReader接口的实现默认地支持名域I间处理?br /> 3) 通过名域I间Q元素和属性有二部分名UͼURI和localName, 有时UCؓ通用或扩展名U?br /> 4) 名域I间支持影响到ContentHandler和属性接口?/p>
2) 通过getURI和getLocalNameҎQ你可以得到名域I间的URI或属性的本地名称;
2) 使用DefaultHandlerӞ创徏一个子cdƈoverride你感兴趣的方?
3) 其它Ҏ可安全地忽略Q因Z们只是空Ҏ;
{:1) startDocument
public void startDocument() throws SAXException
. 在解析期_startDocument()只被调用一?
. 接收文档开始的事g;
. 一般这个方法不做什么事Q也可以写一些特定的操作;
2) endDocument
public void endDocument() throws SAXException
. 在解析期_endDocument()只被调用一?
. 接收文档l束的事?
. 一般这个方法不做什么事Q也可以写一些特定的操作;
3) startElement
public void startElement(java.lang.String uri, java.lang.String localName, java.lang.String qName, Attributes attributes) throws SAXException
. XML中每个标{调用一ơ这个方?
. 接收元素开始的事g;
. 一般这个方法不做什么事Q也可以写一些特定的操作;
. uri: 名域I间的URIQ如果元素没有名域空间或者名域空间处理不被执行则可用空字符?
4) endElement
public void endElement(java.lang.String uri, java.lang.String localName, java.lang.String qName) throws SAXException
. XML中每个标{调用一ơ这个方?
. 接收元素l束的事?
. 一般这个方法不做什么事Q也可以写一些特定的操作;
5) characters
public void characters(char[] ch, int start, int length) throws SAXExcepiton
{:1) XML是一U描q树形结构数据的语言QDOM了一pd接口讉KXML文档的树形结?
2) DOM详细说明了XML文档是如何表Cؓ对象;
3) 不同于SAXQDOM也允许创建和修改XML文档的内?
4) DOM level2, 包含了创Z份文档的接口Q从一份文档导入一个节点到另外一份文档,支持XML名域I间;
{:1) DOM提供了一pd标准对象接口QXML解析器用这些接口将文档内容提供l一个客LE序;
2) q些接口提供了访问原始文档的所有信?
3) 遍历树Şl构的基本接口是NodeQ它定义了必要的Ҏ遍历和修改XML文档的树形结构。这些方法包括getting, deleting, modifying以及inserting?br /> 4) 每个详细的文档结构在DOM中由下面接口之一表现Q?br /> . Document
. Attr
. Element
. Text
. Comment
. CDATASection
. DocumentType
. Notation
. Entity
. EntityReference
. ProcessingInstruction
5) q些专门的接口都l承了Node接口的基本属性和Ҏ
6) 他们都提供了专门的访问方式访问XML文档目相关的唯一信息;
7) 产生出的特定节点存储于一个有父子以及同链接l构的一个列表中;
8) q个链接l构可通过节点接口使用父、子以及同链接关系q行遍历;
{:1) Document代表了整个文档以及定义了创徏元素、属性、注释等{方法的接口;
2) 一个节点的属性用元素接口方法操?
3) 应该注意到当一个DOM应用E序dXML文档形成相应的对象后Q该对象只保存在内存?
4) 改变内存中一个DOM对象q没有自动修改原始文?
{:1) DOM Level2支持XML名域I间Q它允许创徏和修改名域空间相关的元素和属?
2) 节点固定地绑定到创徏时相关的名域I间URI。因此,使用DOM在一个文档里Ud节点Q不会引起它的名域空间前~或名域空间URI的变化?br /> 3) 名域I间验证对于解析器而言q强制QDOM应用E序是可靠的?/p>
]]>