860 likes | 1.18k Views
XML 技术及 GML 简介. HTML —— H yper T ext M arkup L anguage, —— 超文本置标语言 XML —— The e X tensible M arkup L anguage —— 可扩展标记语言 GML —— G eography M arkup L anguage —— 地理标记语言. 标记语言 是一种用来定义文档语法和文法的标记的集合。 XML 是一种 元标记语言 ,用户可以定义自己需要的标记。. 标记语言的概念. 在我们日常学习生活中广泛使用标记语言 ,例如,
E N D
XML技术及GML简介 • HTML——HyperText Markup Language,——超文本置标语言 • XML—— The eXtensible Markup Language —— 可扩展标记语言 • GML—— Geography Markup Language ——地理标记语言
标记语言是一种用来定义文档语法和文法的标记的集合。标记语言是一种用来定义文档语法和文法的标记的集合。 • XML是一种元标记语言,用户可以定义自己需要的标记。
标记语言的概念 • 在我们日常学习生活中广泛使用标记语言,例如, • 在阅读过程中,用不同的颜色标记不同的重点内容,以便浏览; • 早在印刷出版技术出现时,作者就曾经在草稿上做出各种说明,指导印刷工人如何处理版面排放以及其他制作问题。这些说明被称作标记,而协调一致用来定义整套语法和文法的标记集合则被称作语言。例如,校对者就是用手写的标记语言( markup language,M L)与作者交流文字的正确与否。即使是现代的标点符号的使用也是某种形式的标记,因为它告诉读者如何对一段文本进行断句。 • 文字编辑器借助置标来定义格式与外观;…… • 标记语言是一种用来定义文档语法和文法的标记的集合。
主要内容 • XML简介 • XML语法 • XML文档校验 • XSL/XSLT/XPath • XLink/XPointer • GML简介 • XML编程
一、XML简介 • HTML、 XML文档范例 • XML产生背景 • HTML缺陷、XML特点与优势 • XML应用 • XML核心 • XML编辑工具
HTML文档范例 • HTML-Sample.html <HTML> <HEAD><TITLE>字体样式</TITLE> </HEAD> <BODY><P>白居易(772-846年)字乐天</P> </BODY> </HTML>
XML文档范例 例2: purchaseOrder.xml gml_sample.XML
XML语言产生背景 • XML、HTML都来自SGML(Standard Generalized Markup Language,ISO 8879),即标准通用置标语言。早在Web产生之前 , SGML就已存在(1986),主要用于印刷和电子出版物领域。 但是SGML十分庞大 ,既不容易学 ,也不容易使用 ,在计算机上实现起来也很困难。鉴于这些原因 ,Web的发明者提出了HTML语言。 • 为了便于在计算机上实现 ,HTML只使用了SGML标记中很小的一部分 ,而且这些标记的形式与其含义都是固定的,例如HTML3.2定义了70种标记 ,HTML4.0中约有100个标记 ,因而HTML语法是不能扩展的,但易学易用 ,开发浏览器也比较容易 ,这在一定程度推进了Web技术的发展 。
但随着应用的深入,HTML缺陷越来越明显,已经制约了Web技术的发展;但随着应用的深入,HTML缺陷越来越明显,已经制约了Web技术的发展; • Internet海量的信息资源——不同平台、不同格式——数据不能共享、处理功能不能互操作;如数据库、各种MIS、Web应用等; • 人们对Web服务功能提出了更高的要求; • 于是SGML的一个精简版本XML就应运而生了。XML精简了很多SGML中极少用到的部分 ,同时充分考虑到Web的特性,XML是SGML的一个有限子集 ,可以有DTD或Schema ,因而XML语法是可以扩展的。XML是由W3C在 1996年赞助的XML工作组发展起来的 ,W3C于1998年1月10日正式公布XML1.0版本标准。
HTML的局限 • 作为一种简单的表示性语言,它只能显示内容而无法表达数据结构。而这一点恰恰是电子商务、智能搜索引擎所必需的。 • HTML语言不能描述矢量图形、数学公式、化学符号等特殊对象,在数据显示方面的描述能力也不尽如人意。 • HTML只是SGML(Standard Generalized Markup Language,标准通用置标语言)的一个实例化的子集,标记的形式与其含义都是固定的,可扩展性差,用户根本不能自定义有意义的置标供他人使用。这一切都成为Web技术进一步发展的障碍。
XML的特点 • XML是一种元标记语言,用户可以定义自己需要的标记,是简化的SGML。它允许各行业、各组织、个人建立适合自己需要的置标集合,如GML、MathML、CML 等等; • XML描述的是结构和语义,而不是格式化,即内容和表现形式分离; • 比关系数据库的表结构更灵活; • 独立于任何体系结构的数据格式; • 独立于任何语言的数据格式; • 便于网络传输;
XML的优势 • 设计与特定领域有关的标记语言,如GML、MathML、CML、VoiceXML等 • 异质系统间的通信 • 开发灵活的Web应用软件 • 在Web上发布数据 • 更有意义和更准确的搜索 XML的标记含义丰富 ,与其内容紧密相连 ,明确地标志所标记的内容 ,因而使得检索行为更加简单 ,检索结果也更有意义。
XML应用 • CML(Chemical Markup Language ,化学标记语言)可能是XML的第一个应用。CML原来是要发展成SGML应用的 ,但随着XML标准的发展 ,逐步演化成了XML。CML对传统管理化学数据方法最大的改善在于数据的检索。CML还使得复杂的分子数据可在Web上发送; • MathML(Mathimatical Markup Language,数学标记语言 )是一种用于数学方程的XML应用; • GML——地理标记语言; • SVG——Scalable Vector Graphics-可缩放矢量图形; • Web Services的核心技术SOAP、WSDL、UDDI都是以XML文件格式表达的, XML是Web Services的基础。 • …………………
XML核心 • XML文档校验(DTD、Shema) • XSL/XSLT/XPath • XLink/XPointer • XML编程技术(DOM、SAX)
XML编辑工具 • XMLSpy • XMLWriter
二、XML语法 • XML文档中的有效对象有:元素、处理指令、注释、根元素、子元素和属性。 • XML文档内容的基本单元——元素(element),它的语法格式如下:〈标签〉元素内容〈/标签〉 • 元素是由起始标签、元素内容和结束标签组成。用户把要描述的数据对象放在起始标签和结束标签之间。例如: • <姓名>王平</姓名> • 无论元素内容有多长或者多么复杂,XML元素中还可以再嵌套别的元素,这样使相关信息构成等级结构。
处理指令处理指令 给XML解析器提供信息,使其能够正确解释文档内容,它的起始标识是“<?”,结束标识是“?>”。 常见的XML声明就是一个处理指令: <?xml version=“1.0”?> <?xml-stylesheet href="SalesToHTML.xsl" type="text/xsl" ?> • 注释 注释是XML文件中用作解释的字符数据,XML处理器不对它们进行任何处理。注释是用“<!--”和“-->”引起来的,可以出现在XML元素间的任何地方,但是不可以嵌套: <!--这是一个注释-->
根元素和子元素 • 属性 属性给元素提供进一步的说明信息,它必须出现在起始标签中。属性以名称/取值对出现,属性名不能重复,名称与取值之间用等号“=”分隔,并用引号把取值引起来。例如: <salary currency=“US$”> 25000 </salary>
XML文档的基本结构由序言部分和一个根元素组成。序言包括了XML声明和DTD(或者是XML Schema)。 • DTD(Document Type Define,文档定义类型)和XML Schema都是用来描述XML文档结构的,也就是描述元素和属性是如何联系在一起的。例如,在例1的文档前面加上如下的序言部分,就构成了一个完整的XML文档: • <?xml version=“1.0”?> • <!DOCTYPE employees SYSTEM “employees.dtd”> • 一个XML文档中有且仅有一个根元素,其他所有的元素都是它的子元素,
一个XML文档首先应当是“格式良好的”(Well-Formed),该规定的正式定义位于:http://www.w3.org/TR/REC-xml一个XML文档首先应当是“格式良好的”(Well-Formed),该规定的正式定义位于:http://www.w3.org/TR/REC-xml • “格式良好的”XML文档除了要满足根元素唯一的特性之外,还包括: • 起始标签和结束标签应当匹配:结束标签是必不可少的 • 大小写应一致:XML对字母的大小写是敏感的,<employee>和<Employee>是完全不同的两个标签,所以结束标签在匹配时一定要注意大小写一致; • 元素应当正确嵌套:子元素应当完全包括在父辈元素中,下面的例子就是嵌套错误:<A><B></A></B>正确的嵌套方式如下:<A><B></B></A> • 属性必须包括在引号中; • 元素中的属性是不允许重复的。
XML文档的“有效性” • XML文档的“有效性”是指一个XML文档应当遵守DTD文件或是Schema的规定,“有效的”XML文档肯定是“格式良好的”,有关内容我们会在以后详细说明。
三、XML文档校验 • XML被作为一种元标记语言,是一种描述标记语言的语言。在节中我们将学习如何说明和描述所创建的新标记语言。这些新的标记语言,要通过文档类型定义(DTD)或模式(Schema)来定义。各个文档要与DTD或XML Schema相比较,这一过程称为合法性检验。如果文档符合DTD或XML Schema中的约束,这个文档就被认为是合法的,否则就是不合法的。 • 文档类型定义(DTD——Document Type Definition) • XML模式(Schema) • XML命名空间
1、文档类型定义(DTD) • 文件client.xml的DTD定义: • <?xml version="1.0" encoding="GB2312"?> • <!ELEMENT 联系人列表(联系人)*> • <!ELEMENT 联系人(姓名, ID, 公司, EMAIL, 电话, 地址)> • <!ELEMENT 地址(街道, 城市, 省份)> • <!ELEMENT 姓名(#PCDATA)> • <!ELEMENT ID (#PCDATA)> • <!ELEMENT 公司(#PCDATA)> • <!ELEMENT EMAIL (#PCDATA)> • <!ELEMENT 电话(#PCDATA)> • <!ELEMENT 街道(#PCDATA)> • <!ELEMENT 城市(#PCDATA)> • <!ELEMENT 省份(#PCDATA)> fclml.dtd
内部DTD • 在XML文件的序言部分加入一个DTD描述,加入的位置是紧接在XML处理指示之后。一个包含DTD的XML文件的结构为: • <?xml version = “1.0” encoding=“GB2312” standalone = “yes”?><!DOCTYPE 根元素名[元素描述]>文件体....... • 如文件:内部DTD--XML.xml
外部DTD • 将文档类型定义文件保存为一个外部DTD文件,然后在XML文件中引用这个外部DTD文件,文档类型声明格式如下: • <?xml version = "1.0" encoding="GB2312" standalone = "no"?> • <!DOCTYPE 根元素名 SYSTEM "外部DTD文件的URL"> • 如文件:外部DTD--XML.xml
元素声明 • ANY:任意类型 • #PCDATA:简单元素类型 • #CDATA:纯文本类型
控制元素出现的次数 • ?:出现0或1次,即为可选元素; • *:出现0或多次; • +:出现1或多次。
2、XML Schema • DTD存在的缺陷: • 1)DTD是基于正则表达式的,描述能力有限; • 2)DTD没有数据类型的支持,在大多数应用环境下能力不足; • 3)DTD的约束定义能力不足,无法对XML实例文档作出更细致的语义限制; • 4)DTD的结构不够结构化,重用的代价相对较高; • 5)DTD并非使用XML作为描述手段,而DTD的构建和访问并没有标准的编程接口,无法使用标准的编程方式进行DTD维护。 • Schema已逐步取代DTD!
XML Schema规范 • XML Schema规范分为三部分: • 第一部分(XML Schema Part 0: Primer)是对Schema的总体介绍,目的是帮助读者快速理解如何利用Schema语法创建Schema文档; • 第二部分(XML Schema Part 1: Structure) • 第三部分(XML Schema Part 2: Datatypes)是对XML Schema语法规范的完整描述,其中前者为描述XML1.0文档的结构和内容约束提供了文档,而后者则为Schema及其他XML规范定义了数据类型.
XML Schema的优点 • 对数据类型的支持 • 使用XML语法 • 对内容模型的有力支持 • 可扩展性 • 自我存档
XML 命名空间的概念 • 名称的命名集; • 使用URI、命名空间前缀来保证XML命名的唯一性; • 如: • xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> • xsd:street完整名称为http://www.w3.org/2001/XMLSchema:street • xsd:city完整名称为http://www.w3.org/2001/XMLSchema: city
模式范例 • purchaseOrder.xml ——订单XML文件 • purchaseOrder.xsd ——订单模式 • Gml-sample.xml • Cgml.xml • Cgeoml.xsd
简单元素定义 <xsd:element name="productName" type="xsd:string"/> <xsd:element name="USPrice" type="xsd:decimal"/> <xsd:element name="shipDate" type="xsd:date" minOccurs="0"/> 一般格式: <命名前缀:element name=“元素名称”type=“数据类型"/>
基本数据类型 short unsignedShort decimal float double boolean time dateTime duration date gMonth gYear gYearMonth gDay gMonthDay Name QName NCName anyURI language ID IDREF IDREFS ENTITY ENTITIES NOTATION NMTOKEN NMTOKENS • tring • normalizedString • token • byte • unsignedByte • base64Binary • hexBinary • integer • positiveInteger • negativeInteger • nonNegativeInteger • nonPositiveInteger • int • unsignedInt • long • unsignedLong
属性声明 <xsd:complexTypename="PurchaseOrderType"> • <xsd:sequence> • <xsd:element name="shipTo" type="USAddress"/> • <xsd:element name="billTo" type="USAddress"/> • <xsd:element ref="comment" minOccurs="0"/> • <xsd:element name="items" type="Items"/> • </xsd:sequence> • <xsd:attribute name="orderDate" type="xsd:date"/> </xsd:complexType>
<xsd:element name="product"> • <xsd:complexType> • <xsd:attribute name="productID" use="required" type="xsd:ID"/> • <xsd:attribute name="name" use="required" type="xsd:string"/> • <xsd:attribute name="description" use=“optional" type="xsd:string"/> • <xsd:attribute name="unit" type="xsd:positiveInteger"/> • <xsd:attribute name="price" use="required" type="xsd:decimal"/> • </xsd:complexType> </xsd:element>
内容模型 • Any:元素可以包含任何文本、空白和子元素; • Empty:元素可以包含属性,但不允许出现文本和子元素; • element-only: • Mixed:元素可以包含文本内容、子元素和属性三者的混合体; • <xsd:element name = “myElement” type=“xsd:anyType” />
定义新的简单类型 <xsd:simpleType name=“myInteger”> • <xsd:restriction base=“xsd:integer” • <xsd:minInclusive value=“10000”> • <xsd:maxInclusive value=“10000”> • </xsd:restriction> </xsd:simpleType> <xsd:simpleTypename="SKU"> • <xsd:restriction base="xsd:string"> • <xsd:pattern value="\d{3}-[A-Z]{2}"/> • </xsd:restriction> </xsd:simpleType>
复合类型定义 <xsd:complexTypename="PurchaseOrderType"> • <xsd:sequence> • <xsd:element name="shipTo" type="USAddress"/> • <xsd:element name="billTo" type="USAddress"/> • <xsd:element ref="comment" minOccurs="0"/> • <xsd:element name="items" type="Items"/> • </xsd:sequence> • <xsd:attribute name="orderDate" type="xsd:date"/> </xsd:complexType>
<xsd:complexType name="USAddress"> <xsd:sequence> <xsd:element name="name" type="xsd:string"/> <xsd:element name="street" type="xsd:string"/> <xsd:element name="city" type="xsd:string"/> <xsd:element name="state" type="xsd:string"/> <xsd:element name="zip" type="xsd:decimal"/> </xsd:sequence> <xsd:attributename="country" type="xsd:NMTOKEN" fixed="US"/> </xsd:complexType>
出现次数约束 • 通过minOccurs、MaxOccurs来控制元素出现的次数,它们的默认值都为1;如: • <xsd:element name="item" minOccurs="0" maxOccurs="unbounded"> • <xsd:element ref="comment" minOccurs="0"/>
四、 XSL/XSLT/XPath • XSL ——eXtensible Stylesheet Language • XSLT ——eXtensible Stylesheet Language Transformation • XPath —— XML Path
XSL是三种语言的结合体 • XSL实际上包含三种语言,具体是: XSLT是一种转换XML的语言; XPath是一种定位XML部分或模式的语言; XSL格式化对象是一种定义XML显示方式的语言。 • XSLT是一种用来将XML文档转换成其他类型文档或其它XML文档的语言。 • XPath是一种对XML文档的部分进行寻址的语言。 • 通过定义多个不同的*.xsl文件,可将XML文档以不同的形式显示。
Xpath表达式 • <?xml version="1.0" encoding="utf-8"?> • <?xml-stylesheet href="SalesToHTML.xsl" type="text/xsl" ?> • <SalesReport> • <Company>XMML.com</Company> • <Period>2001-2002</Period> • <Sales Region="EU">50,000</Sales> • <Sales Region="NA">150,000</Sales> • <Sales Region="AU">10,000</Sales> • </SalesReport> • Xpath表达式,如:/SalesReport/Company • /SalesReport/Sales@Region • /SalesReport/Sales[position=2]
Xpath的定位轴 ancestor preceding-sibling preceding ancestor-or-self • child • descendant • attribute • self • descendant-or-self • following-sibling • following • namespace • parent
<xsl:for-each select="child::PEOPLE/descendant::PERSON"> • 更简单的写法为: • <xsl:for-each select="PEOPLE/PERSON"> • PERSON[position()=2]
XSLT——XSL转换 • XSLT是XSL标准中最重要的部分,它用于将一个XML文档转换成另一个XML文档或另一种类型的文档,也就是将一个XML文档转换成浏览器所能识别的一种格式。这其中之一就是HTML。通常,XSLT将每个XML元素都转换成一个HTML元素。 • XSLT还可以向输出文件中增加全新的元素,或去掉一些元素。它可以重新安排这些元素并对元素进行分类,测试并确定显示哪些元素等等。 • 描述这种转换过程的一个常用说法是:XSL用XSLT将一个XML来源树转换成另一个XML结果树(或将一个XML源文档转换成另一个XML结果文档)。
将XML文档转化成目标文档 • 创建、编辑XML文档 • 创建一个XSL样式表文档 • 将样式表连接到XML文档
将XML文档转化成HTML文档范例 • 1、SpeakerList.xml • SpeakerList.xsl • SpeakerList.html • 2、BookCatalogSample.xml • catalog_ui.xsl