热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

XML技术指南(2)_xml

schema一个schema通常是一组为了描述一类给定的XML文档而预先定好的规则。它定义了可以在指定XML文档中出现的各个元素以及和某个元素相关的若干属性。它同时定义了关于XML

 

schema

  一个schema通常是一组为了描述一类给定的xml文档而预先定好的规则。它定义了可以在指定XML文档中出现的各个元素以及和某个元素相关的若干属性。它同时定义了关于XML文档的结构化信息,比如哪几个元素是其他元素的子元素,子元素出现的顺序和他们的数量。它还可以定义一个元素是否为空,能否包含文本或者属性是否有默认值。

  DTDs(Document Type Definitions)和XML数据 都是怎样描述XML文档计划的具体例子。

http://www.gaodaima.com/33696.htmlXML 技术指南(2)_xml

  文档类型定义(Document Type Definitions)

  DTD语言是为了定义SGML文档的确认规则而专门开发的。因为XML是SGML的一个子集,所以DTDs也可以用来定义XML的确定规则。与XMLschema不同,一个XML处理器可以在运行时用DTD来确定一个XML的合法性。

  DTD的语法有时可能会有一些晦涩难懂。DTDs使用不同的语法元素,诸如惊叹号、圆括号、星号、尖括号等,来定义在一个XML文档中那些元素是必备的,哪些是可选的以及可以出现的元素数量等等。DTDs同时还定义了元素之间的关系和属性于不同元素之间的关系。

  下面就是前面列出的hamburger.xml的DTD(hamburger.dtd):

 
 
lowfat CDATA #IMPLIED>
 
 

  这篇文档指出,hamburgers元素可以包含多个hamburger元素。同时,每一个hamburger元素必须包含一个lowfat属性和三个子元素,所有的类型都是#PCData(parsed character data)。遵从这篇DTD的文档都必须加入下面一行代码:

   hamburgers SYSTEM “hamburger.dtd“>

  这句声明告诉分析器不论DTD中的schema是什么都认为XML文档的内容是合法的

  尽管MSXML 2.0支持DTDs,但是你还是会发现使用它们是很费力的。它非常复杂并且难于掌握与使用。请注意,DTD语法并不是合法的XML。正因为如此,XML的处理器除了XML语法,还要支持用来描述schema的DTD语法。设想一下,假如我们用XML来描述schema,那么开发者,特别是XML工具的提供者,所承担的XML文档检验工作将会变得容易得多。W3C正在考虑几种弥补DTDs不足的方案以提高现在的语法定义过程。

  XML数据

  XML-Data是一种XMLschema语言。在微软的定义中,XML-Dataschema通常是指XMLschema,而不是DTDschema。一个XML-Dataschema是一个具有良好结构的XML文档。XML-Data语言基于XML-Data DTD,后者指明所期望的schema定义格式。因为XML-Dataschema是简单的XML文档,任何用于XML文档的工具都可以用来定义XML-Dataschema

  以下的XML-Dataschema产生的schema和先前由hamburger.dtd所定义的schema是一样的:


xmlns=”schemas-microsoft-com:xml-data“>
 <ElementType name=”name” />
 <ElementType name=”description” />
 <ElementType name=”price” />
  <AttributeType name=”lowfat” />
   <ElementType name=”hamburger” />
   maxOccurs=”1″ />
   maxOccurs=”1″ />
   maxOccurs=”1″ />
   lowfat” maxOccurs=”1″ />
  ElementType>
 <ElementType name=”hamburgers” model=”closed”>
  maxOccurs=”*” />
 ElementType>

  在XML-Dataschema中定义元素和属性时,分别用到的是<ElementType>和<AttributeType>元素。它们提供了对元素和属性类型的定义。定义一个元素或是属性时用标签。你可以通过定义minOccurs/maxOccurs来指定元素允许出现的数量。schemaXML结构还定义了元素在XML文档中允许出现的位置(例如一个元素可以包含若干元素,等等)。

  微软通过MSXML 2.0对XML-Data提供支持。根据微软的XML SDK文档,捆绑在IE 5中的XMLschema的实现基本上依托于W3C于1998年1月发布的XML-Data Note。它提供了对XML-Data子集的支持,这虽然和XML的语法稍有不同,正好直接和DCD中阐明的功能相吻合。

处理器(API)技术

  我们在前面已经提过了,为了有效的使用XML,你必须通过编程来访问数据。我们将一个能访问XML文档同时又能提供对其内容和数据结构进行访问的软件模块称为一个XML处理器或是一个XML API。

  虽然开发者完全有自由去开发或使用他们自己的XML API,但从他们的利益出发,我还是建议他们使用行业标准的API。因为只有接受了行业标准的API,开发者写出的代码可以无需修改便能在其他的环境中顺利执行。

  目前有两种主要的API已经得到了广大开发者的广泛使用,即将成为未来的行业标准。它们分别是:DOM(Document Object Model)和SAX(Simple API for XML)。

  DOM 文档对象模型

  文档对象模型是一种通过编程方式对XML文档中数据及结构进行访问的标准。W3C已经同意将其列为未来行业标准第一等级规范的推荐对象。

  DOM是基于XML文档在内存中的树状结构。当一个XML文件被装入到处理器中时,内存中建立起一棵相应的树(见图1)。DOM还定义了用来遍历一棵XML树和管理各个元素、值和属性的编程接口(包括方法和属性的名字)。

Figure 1. XML in-memory representation

  MSXML 2.0完全支持DOM并提供了一个易用的对象模型与内存中树进行交互。下面是一个简单的VB例子,它演示了如何用MSXML来遍历一颗树的所有子元素。

Set xmlDoc = CreateObject(“MSXML.DOMDocument“)
bSuccess = xmlDoc.load(“hamburger.xml“)
If bSuccess Then
 For Each node in xmlDoc.documentElement.childNodes
  val = node.text
 Next
End If

  SAX

  DOM标准的一个主要不足在于将整个XML文档装入内存所引起的巨大开销。当文件的数据量非常大时,这会给我们带来一些问题。当你在内部网或是因特网上传输如此巨大的XML文件时,你可能等不及所有的文件传输结束就开始处理数据。很多XML的开发者已经意识到这一点,于是他们一起努力(从XML-DEV邮件列表开始)开始创立另一种新的标准。这就是SAX。虽然SAX还处于发展的初期,但因为它出色的性能,它正快速的得到大家的欢迎。

  SAX是一种非常简单的XML API(正如它的名字那样,Simple API for XML),它允许开发者使用事件驱动的XML解析。与DOM不同,SAX并不要求将整个XML文件一起装入内存。它的想法十分的简单,一旦XML处理器完成对XML元素的操作,它就立刻调用一个你自定义一个事件处理器及时的处理这个元素和相关数据。这样做虽然能极大的提高效率,但也会造成一定的问题。比如说,开发者将不得不在灵活性上受到限制。如果你想了解更为详细的资料,请访问http://www.megginson.com/SAX/sax.html。

转换技术

  一旦你开始使用标准的DOM API来实现于XML数据的交互,你便会发现,无论是从一个大型的文档中取得一个特定的数据,还是将一个XML文档的某一部分转换为另一种格式的数据(例如HTML),都是十分单调乏味的。

欢迎大家阅读《XML 技术指南(2)_xml》,跪求各位点评,若觉得好的话请收藏本文,by



推荐阅读
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • MVC设计模式的介绍和演化过程
    本文介绍了MVC设计模式的基本概念和原理,以及在实际项目中的演化过程。通过分离视图、模型和控制器,实现了代码的解耦和重用,提高了项目的可维护性和可扩展性。详细讲解了分离视图、分离模型和分离控制器的具体步骤和规则,以及它们在项目中的应用。同时,还介绍了基础模型的封装和控制器的命名规则。该文章适合对MVC设计模式感兴趣的读者阅读和学习。 ... [详细]
author-avatar
mobiledu2502923673
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有