java填充xml
似乎到处看起来都在以Java编写的源代码形式发布了一些与XML相关的新工具。 尽管Java在XML领域明显占主导地位,但许多C / C ++程序员仍在进行XML开发,并且为C和C ++程序员提供了大量XML工具。 我们将面对XML库问题,例如验证,模式和API模型。 接下来,我们将研究一组通用XML工具,例如IDE和模式设计器。 最后,我们将以C和/或C ++可用或实际用C和/或C编写的库的列表和讨论结束。
在本文中,我将跳过使用XML的参数。 我假设您已经有充分的理由想要增加这项技术。 另外,我会留下XML的更详细的解释,在后台资源相关主题 。 可以说XML是数据交换的标准(不仅仅是文件格式)。 数据可以以XML格式的应用程序文件的形式交换,也可以通过仅存在片刻的网络连接进行交换,直到在线交易结束或网络连接结束时才被丢弃。
另外,这不是对工具进行评分的比较性评论。 我的目标是解释您可能需要的工具类型,并向您指出可能的候选人。 您仍然需要根据项目需求研究,测试和比较工具功能,以组装最终的工具箱。
两组工具
为了将XML整合到您自己的软件项目中,您将需要在技巧包中包含两组工具。 第一组是方言设计器(或更恰当地说是“模式设计器”)。 第二套工具包括软件库,这些库将为您的应用程序添加解析和XML生成功能。
设计自己的XML方言
XML语言只是一组特定的XML标签以及一些有关如何将标签组合在一起的规则。 当前指定或定义XML方言的两种主要方法是通过文档类型定义(DTD)或XML模式。 我将两者统称为架构。
您项目的域可能已经具有为您设计的特定架构。 如果没有,您可以使用纯文本编辑器修改自己的架构。 一种更完善的方法是使用可以检查语法的实际方言设计器 。 (不正确的架构在以后尝试使用它来验证XML数据时将无济于事。)
设计工具
如今,大多数程序员的文本编辑器(尤其是在IDE中发现的文本编辑器)都对语法突出显示和部分键入的单词或短语的自动完成功能提供了不错的宏和模板支持。 因此,在此讨论中,我将省略仅执行语法突出显示和自动完成的所有XML编辑器。 Microsoft Word或Emacs宏可以做到这一点,因此“ XML编辑器”应该意味着更多。
表1中显示的工具分为三类:
- IDE(集成开发环境,瑞士军刀方法)
- 对模式敏感的XML编辑器(增强了在模式或DTD中找到的允许的标记结构和属性)
- 模式设计器(用于编写自己的模式或DTD)
因为表1中的所有工具都在运行应用程序,所以它们适用于所有XML开发人员,而不仅仅是使用C ++的开发人员(与本文其他表中列出的工具不同)。
表1.适用于各种平台的方言设计工具
产品 | 供应商 | 描述 | 执照 | 平台 |
---|---|---|---|---|
科莫多 | 活跃状态 | XML编辑器和IDE | 商业的 | Linux,Win32等 |
XML间谍 | 阿尔托娃 | 用于XML编辑和架构设计的IDE | 商业的 | Win32的 |
XML记事本 | 微软 | XML编辑器 | 自由 | Win32的 |
Morphon XML | Lunatech研究 | 模式敏感的XML数据编辑器 | 商业的 | Java |
XED | 爱丁堡大学 | 模式敏感的XML数据编辑器 | 非商业的 | Win32,Linux,Unix |
谢纳 | IBM alphaWorks | 模式敏感的XML数据编辑器 | 免费试用/商业 | Mac,Unix,Win32 |
Netpadd | 菲利普·伦森 | 替代Microsoft的XML记事本 | 非商业的 | Win32的 |
XMetal | 软四方 | DTD敏感的XML编辑器 | 商业的 | Win32的 |
美乐 | 通道点 | 可视XML编辑器; 支持DTD插件 | 非商业的 | Java |
C和C ++工具
本文的其余部分将为通过软件库为C / C ++程序员添加XML功能提供帮助。 您将在本文的下一部分中看到,可以在软件库中找到更多的命令行实用程序作为测试和/或示例程序。 例如,Transformiix可用作库,Perl模块或命令行工具。
到现在为止,我一直在节俭使用与XML相关的术语。 但是,在进一步阅读之前,如果您不熟悉XML基础知识,则可能需要扫描XML术语侧栏中定义的术语 。 这些术语将帮助您关注本文的其余部分,并有助于您自己深入研究它们时所提到的工具和库的功能。
解析器
一旦有了DTD或架构以及XML文档,便需要一个解析器来读取和解释XML文档。 表2概述了C / C ++开发人员的解析器库。 但是,在开始遍历表格中的网格之前,需要一些背景知识。
验证方式
XML解析器有两种形式:验证和非验证。 您需要哪一个? 如果您没有正式的DTD或架构,则验证功能对您而言并不重要。 如果您已经或打算使用DTD或架构,则您可能更喜欢验证解析器。 (在这种情况下,我建议您还学习如何手动读写DTD / schema,以便在出现验证问题时能够处理错误。有时错误在DTD / schema中,因此您可能正在调试DTD / schema文件以及您的XML数据。)
解析器API模型
存在两种用于将软件与XML解析器接口的常见API模型:文档模型和事件模型。 文档API模型解析XML数据以生成一个对象。 该对象将文档的内容抽象为树形结构。 该应用程序在此树结构对象上运行。 事件API模型使用回调机制来通知应用程序XML数据的结构。 事件/回调通常在解析时发生。
API标准:DOM和SAX
通用解析器API模型已进一步完善为特定的API标准。 W3C已推荐DOM(第1和第2级,草案中为第3级)作为标准化文档API模型。 虽然不是W3C项目,但SAX已取代了它成为事实上的标准事件API模型。
W3C标准
在比较解析器和其他XML工具中的功能时,请寻找对W3C建议和新兴规范(例如名称空间,XPath,XLink,XInclude和XInfoset)的支持。 请记住,XML技术正在Swift成熟,并且对规范的第一级(例如DOM)的支持可能缺少该规范的第二级中引入的重要功能。 如果规范的最新形式的功能对您的项目很重要,请相应地选择工具。
读桌子
在表2中,“事件”列指定支持推送或事件模型API(例如SAX)的解析器。 Doc列指定支持提取或文档模型API(例如DOM)的解析器。 和以前一样,该表同时列出了商用和非商用工具(有关软件许可证的详细信息,请参见侧栏“ 许可 ”。)
表2. C / C ++开发人员的解析器
图书馆 | 供应商 | 事件 | 文件 | 强调 | 执照 |
---|---|---|---|---|---|
外籍人士 | 詹姆斯·克拉克/外籍团队 | 本机和SAX | -- | 具有本地API和SAX包装器的非常快速的推模型解析器。 | LGPL(免费) |
的libxml | 侏儒 | 萨克斯 | DOM | 非常坚固; SAX和DOM包装器; 进行DTD验证 | LGPL(免费) |
Xerces | Apache软件基金会 | 萨克斯 | DOM | SAX加上DOM级别1和2吗? DTD验证; 增量XML模式 | Apache(免费) |
XTL | 生动的创作 | 萨克斯 | DOM | 具有SAX和DOM的基于STL的XML工具包 | 商业的 |
RXP | 爱丁堡大学 | -- | 本机 | 在C中验证可识别名称空间的XML解析器 | GPL(免费) |
XML4C | IBM alphaWorks | 萨克斯 | DOM | IBM赞助的Xerces变体 | Apache(免费) |
XML Booster | PhiDaNi软件 | -- | 本机 | 解析器生成器,生成C源解析器 | 商业的 |
开源前三名
三种最流行的开源XML库是expat,libxml和Xerces。 这三个都是跨平台的,并且每个都是XSLT库实现的基础,一旦满足了基本的XML需求,它们便为您提供了一条成长之路。
- Expat是James Clark发起的一个开源的,面向事件的XML解析库。 他已将该项目转移到SourceForge上的一个小团队中。 提供了SAX包装器。 expat解析器可以在许多项目中找到,例如开源浏览器Mozilla,XSLT处理器Transformiix和RDF工具repat。
- Libxml为SAX和类似DOM的操作提供了双模式API。 它支持针对DTD进行验证,并在Gnome的XSLT处理器libxslt中使用 。 Libxml被重写并发布为libxml(2),但也可以称为libxml2 。 该库的用户应确保他们具有当前版本。
- Xerces是一个非常扎实,文档齐全的库,它是IBM alphaWorks XML4C库的基础。 Xerces还用于Apache XSLT处理器Xalan中。 Xerces支持DOM,SAX和DTD验证。 最新版本读取和解释了W3C XML Schema Recommendation(具有针对2001年底的完整XML Schema支持)的部分内容。
轻松将前三个库之一编译并链接到您的项目中。 大多数软件包都包含针对每个平台的详尽说明。 这里有一些示例安装说明。
在Windows上构建开源库
从头开始在Windows上构建libxml只需四个简单的步骤:
- 下载源压缩包。
- 使用Winzip之类的程序将内容解压缩到目录中。 确保指示您的解压缩实用程序为libxml可能需要的任何子目录保留路径名。
- 在
./win32/dsp
子文件夹中找到libxml2.dsw
文件,然后从MS Developer Studio中打开它。 - 从DevStudio的顶部菜单中选择全部构建。 这将构建所有示例和测试程序以及运行它们所需的libxml DLL。
您可以使用上述步骤在Windows上构建Xerces。 唯一的区别是在./c/samples/Projects/Win32/VC6
子文件夹中查找samples.dsw
工作区文件。
Expat已开始包括DSP项目Makefile。 查看lib
和xmlwf
子文件夹。
在Unix上构建开源库
对于在Linux或Unix上运行的项目,在大多数情况下,您可以将源代码解压缩到一个空目录,设置一些选项,然后键入“ make”以构建共享库。 Solaris用户:不要忘记使用GNU untar实用程序。 以下代码在Slackware Linux下的bash shell中为我工作:
tar -x <xerces-c-src1_5_1.tar
cd xerces-c-src1_5_1
export XERCESCROOT=/home/mine/xerces-c-src1_5_1
cd src
autoconf
chmod 377 runConfigure
./runConfigure -p linux
gmake
cd ../samples
chmod 377 runConfigure
./runConfigure -p linux
gmake
XML和COM
MSXML是Microsoft针对Windows操作系统家族的专有XML产品,被实现为可编写脚本的COM对象的集合,因此它在其他语言环境中也能很好地发挥作用并有据可查。 该库支持DOM以及本机面向文档的接口。 还支持SAX事件。
作为MSXML的替代品,Apache XML Project的Xerces库带有COM包装器,在许多情况下,它将使它充当MSXML的直接替代品。 Vivid Creations在其XTL库中提供了SAX和DOM API的COM包装器,这些包装器还可以替代MSXML。
XML转换:XSLT和XQuery
转换是从仅在元素和属性级别处理XML数据开始的XML进化阶梯的下一步。 XML转换对输入的XML数据进行操作以产生XML输出。 转换可以重组标签结构,添加/删除标签和属性,以及进行过滤以放大XML数据的选定片段。
XQuery文档将转换过程称为查询,但含义相同。
XSLT和XQuery是XML方言,用于指定如何对随机XML数据执行此类操作。 您可以编写一个脚本文件,其中的更改以XML表示为XSTL或XQuery,而不必将一些XML数据加载到DOM中,而必须以编程方式操作DOM版本以产生所需的结果。 这种更通用的方法可带来更大的灵活性并减少开发时间。 现在,您的非C / C ++程序员的Web开发人员可以将自己的转换编写为XML,这可以使C ++程序员腾出更多精力进行更复杂的工作。
表3. C / C ++转换/查询库
图书馆 | 供应商 | 强调 | 执照 |
---|---|---|---|
libxslt | 侏儒 | 建立在libxml之上 | LGPL或类似X11(免费) |
Xalan | 阿帕奇 | 建立在Xerces解析器之上 | Apache(免费) |
变形金刚 | 斜接 | 基于expat的XSLT处理器 | 非商业的 |
消息传递:XML-RPC和SOAP工具
就本文而言, 消息传递是指使两个软件代理相互通信。 这种消息传递有时称为面向消息的中间件。 (这不是短信像AOL,MSN或ICQ,好吗?还有就是进行所谓的Jabber的基于XML的即时通讯协议的努力。我已经包括在一个链接相关信息为您的好奇心,但同样,这不是什么我在这里谈论。)
使用XML进行消息传递已经变得足够流行,已经产生了这两种选择:XML-RPC和SOAP。 这些协议最吸引人的特征是,客户端,服务器和对等设备在开发人员选择实施工具方面可能会大不相同。 好像所有开发人员都可以使用他们喜欢的语言,开发工具包或软件库,并且仍然可以一起工作。
(作为旁注,Gregor Purdy以一种提议的替代形式对XML-RPC进行了出色的评论(请参阅参考资料 )。
表4包括一些用于面向消息的中间件类别的库。 这不是该类别资源的详尽列表,并且有许多新工具在Swift发展,但这是一个好的开始。
表4. C / C ++消息传递库
图书馆 | 供应商 | 强调 | 执照 | 平台 |
---|---|---|---|---|
4S4C SOAP服务 | 西蒙·费尔 | 开源SOAP工作 | 非商业的 | Linux,Unix,Win32 |
SOAP组件 | mozilla.org | 可编写脚本的XPCOM组件 | 非商业的 | 众多 |
用于C / C ++的XML-RPC | 第一对等 | C语言中的XML-RPC库 | 非商业的 | Linux,Unix,Win32 |
XML-RPC组件 | mozilla.org | 可编写脚本的XPCOM组件 | 非商业的 | 众多 |
用于C / C ++的XML-RPC | pin | C语言中的XML-RPC库 | 非商业的 | Linux,Unix,Win32 |
分开
这些工具应该为您在XML工具箱上提供一个良好的开端。 如果您想为尝试使用的XML建议其他C / C ++工具或发表其他评论,请加入本文所附的讨论(使用参考资料中的链接或单击文章页面顶部或底部的“讨论”图标)。 )。
XML术语
当您阅读本文讨论的库时,这些XML术语可能会派上用场:
- 文档模型:将 XML数据解析和处理为树状对象的技术; 这也称为“拉”模型。 请参阅DOM API标准作为示例。
- DOM:文档对象模型是XML文档的特定树结构编程模型,被W3C描述为标准。 DOM标准目前分为三个级别。 DOM 1.0指的是DOM Level 1.0的一致性; DOM级别2是W3C批准为建议书的最新规范。 在撰写本文时,DOM Level 3正在起草中。
- DTD:文档类型定义。 一个XML文件,该文件定义XML元素和这些元素的XML属性,并指定有关如何嵌套XML标签以及元素可以包含哪些数据的规则。
- 事件模型:使用回调或处理程序解析XML数据的技术; 这也称为“推”模型。 请参见 SAX API标准作为示例。
- 命名空间:明确标识来自不同DTD或模式的XML标记的方法,以便可以将它们混合在同一XML文档中。 RDF高度依赖此功能。 XML 1.0令牌“ xmlns”可用于定义XML文档中的名称空间。
- RDF:资源描述框架,一种紧凑的XML方言,用于将XML属性数据与通常位于其他地方的信息相关联。 您的驾驶执照将类似于描述您的RDF XML文件。
- SAX:用于XML的简单API是XML解析器实现的标准编程接口。 SAX使用面向事件的编程模型。 SAX是事实上的标准,最初由David Megginson开发,现在由XML-dev邮件列表维护。
- SOAP:简单对象访问协议是类似于XML-RPC的网络协议( 请参阅 XML-RPC)。 使用SOAP,应用程序可以创建一个远程对象,在该对象上调用方法,并检索结果。
- 验证:验证格式正确的XML文档相对于DTD或架构是否正确。
- 格式正确的:一个XML文档,其标签和数据与XML 1.0语法一致。
- W3C:全球Web联盟,它已成为大多数与XML相关的技术的关键标准机构。 W3C将最终批准的规范称为建议书(而不是标准)。
- XML 1.0: W3C认可的第一个XML语法标准; 建立XML数据的基本规则,例如所有标签必须用斜杠(
/
)闭合,如下所示:<example/>
或后跟闭合标签,如下所示:<example>close the tag on your way out</example>
。 - XML-RPC: XML远程过程调用。 XML-RPC是一种标准的XML方言,用于通过网络调用方法和服务。 可以猜到,XML-RPC使用XML进行客户端和服务器之间的消息传递。
- XML模式: W3C推荐的XML模式,就像DTD一样,用于定义XML文档的结构,但具有更大的灵活性。 与用于DTD的旧SGML语法相反,XML Schema使用XML 1.0语法来指定模式。
- XQuery:在某些功能上与XSLT类似,但在设计上更趋向于充当XML数据的查询语言-类似于在关系数据库中使用SQL。 作为规范,它还不如XSLT成熟,因此XQuery可能成为下一个十年SQL。
- XSLT:可扩展样式语言转换,一种用于转换XML内容的XML方言。 您将XSLT文件应用于一些XML输入数据以生成所需的XML输出数据。
翻译自: https://www.ibm.com/developerworks/xml/library/x-ctlbx/index.html
java填充xml