IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  XML  >

XML 问题 #6: 编辑器综述

编辑器综述

developerWorks
文档选项

未显示需要 JavaScript 的文档选项


级别: 初级

David Mertz,博士 (mertz@gnosis.cx), 转换专家, Gnosis Software, Inc.

2001 年 1 月 01 日

在本专栏中,David Mertz 提供了他对半打主要 XML 编辑器所进行的最新评论。他比较了每一种的优缺点和能力 -- 特别是在处理有大量文本的散文文档方面。本专栏致力于解决一个非常实际的问题,即如何着手创建、修改和维护面向散文的 XML 文档。

使用标记过的散文


可能已相当明显,任何使用 XML文档的方法的首要需求是要保证在进程中生成的文档是 有效的。使用DTD (或 XML模式)时,我们这样做是因为希望文档符合其规则。无论使用哪些工具,都必须确保作为创建和维护进程一部分的这种有效性。

我所讨论的大多数工具和技术也是使用更多面向数据 XML文档的有用方法,但本专栏的重点是使用标记过的散文。在面向散文 XML和面向数据 XML 之间有一些主要差异。此外,还有一些 XML方言处于这些类别之间,或者完全不属于这些类别(MathML或向量图形格式就既不是散文,也不是常规意义上的数据)。通常将面向散文的XML 格式设计成捕捉对打印页面所期待的特性(因此在字处理器中)。虽然大多数这样的格式都旨在捕捉语义方面而不是排版方面的特性(例如, 概念"foreign word" 而非 字型"italic"),但它们与传统读写材料的关系非常相近。另一方面,面向数据的XML格式与(关系)数据库格式的内容更为接近;通常可以将内容视为记录/属性(行/列),人们期待的是回归数据字段的模式。

使用面向散文 XML方言,人们将要遇到的是大量 混合内容:使用面向数据 XML方言,人们很少或根本不会遇到 混合内容。即,大多数“数据”是文本,其中散布着字符级标记。从DTD 方面来说,人们所看到的元素和下例差不多(取自用于教程的 IBM developerWorksDTD):

清单 1. 来自 developerWorks的示例

<!--Contains a paragraph of text.-->
<!ELEMENT p (#PCDATA | code | img | br | i | b | a)* >
                



当然,也使用块级标记来提供整体的组织结构,但字符级标记在面向散文XML 格式中很重要,而在面向数据 XML格式中很少出现。在我的经验中,这些标记级别之间的划分给 XML编辑工具进行得体的处理造成了最大的难题。

让我们看看一些工具和方法是如何满足这些需求的。





回页首


使用文本编辑器和确认器


第一种可以考虑的方法是对 XML文档修改使用“零案例”(或者从科学上说,是“空假设”,从哲学上说,是“第一法则”)。毕竟XML文档实际上最终只是文本文件。那么,为什么不使用已经过高度提炼的那些用于文本文件的工具,而且程序员已经掌握了许多有关它们的知识并有深入体会?如果您象我一样,那么无论多喜欢其它一些讨论过的工具,总是会有偶尔几次不过是希望了解一下使用文本编辑器 究竟会发生什么。

良好的用于 XML 的文本编辑器将有对于所有 XML方言来说都是常规性的语法突出显示,而对于给定的方言,可能还有一些配置更特定部分的选项。它将具有灵活的(可能的基于规则表达式)搜索和替换能力。如果文本编辑器可以支持 折叠(有时称为“代码隐藏”),拥有这种能力就显得极为有利,特别是在处理大型文档时。很显然,能够对块执行操作很有用处,无论是缩排/突出、剪切/复制/粘贴还是使用模板。可能您喜爱的文本编辑器(如果您是程序员)很容易配置成调用将当前工作文件作为输入的外部程序。

在使用功能强大的文本编辑器时,有一些准则可以使面向散文 XML使用起来更容易。大部分是常识,而且是和用在其它语言中美化代码 同样的常识。妥善使用缩排和空白;XML文档中的某些部分应该得以突出,使其在匆匆一瞥时一目了然。尽管 XML本身保留空白,但大多数应用程序会在做进一步处理之前将空白标准化。因此缩排和添加纵向空格在功能上并不重要,而只是让XML文档更易于阅读(如果几个额外的字节有那么重要,您可能会错误地一上来就选择XML;相对于其它格式来说,这种格式非常冗长)。总的说来,字符级元素最好放在一行当中,而块级元素最好从新行开始(从层次结构上缩排)。很明显,使用判断力而不是死板教条的规则确定什么是看上去最整齐的,但也要重视外观的清晰。

文本编辑器需要一个外部工具来执行实际的确认。有许多好的工具用于各种平台。我个人经常使用 Python 模块 xmlproc。不论您使用什么,确认器都应该为方便地确定和改正问题提供非常明确的建议(通常包括错误和警告的确切位置)。例如,下面是我所运行的确认的一部分:

确认样本

c:\xml-files\>python xvcmd.py test.xml
xmlproc version 0.62
Parsing 'test.xml'
E:test.xml:6:110: Attribute 'zip_file_comment' not declared
E:test.xml:45:152: '<' not allowed in attribute values
E:test.xml:55:34: '=' expected
E:test.xml:55:49: One of '>' or '/>' expected
E:test.xml:60:14: End tag for 'body' seen, but 'p' expected
E:test.xml:783:12: Premature document end, element 'p' not closed
[...]
Parse complete, 22 error(s) and 0 warning(s)
                



编辑和确认验证与编程语言中的编辑/编译或编辑/单元测试周期非常类似。如果经常执行确认,那么清除一些错误并不困难,也花不了多少时间。





回页首


基本增强编辑器


基本 XML 编辑工具对常规文本编辑器添加了三个功能,使它们更适合于 XML编辑:

  1. 文档的集成确认
  2. XML 文档的分层(树)视图
  3. 已转换 XML 文档(通常使用 XSLT 或 CSS2 转换成HTML)的集成“预览”。


有一些特别的工具可以提供这些增强功能中的一部分。我已查看过本课程中的三种特定工具(但也可能有其它工具存在)。

Microsoft XML Notepad
XML Notepad的功能或多或少地可以从其名称中猜到一些。它是一种免费工具 -- 只用于 Win32 -- 提供 XML文档经过语法分析和结构化的视图。另外, XML Notepad将对声明的DTD 执行确认(只在文档打开时)。 XML Notepad的基本界面由两个窗格构成,一个窗格中是 XML文档的可折叠树视图,另一个窗格包含一些表明元素内容和属性的行。编辑元素或属性严格按照每文本块一行的原则,这意味着必须在一段的输入区域中左卷/右卷。总的来说, XML Notepad可能更适合于编辑面向数据的 XML文档,而非面向散文的文档。但作为在面向散文文档中浏览或进行一些小改动的一种快速方法,该工具还不坏。 XML Notepad不执行任何种类的转换、预览或视觉格式化。

Wattle Software - XMLWriter
XMLWriterXML Notepad的加强,或一个分支。它也是仅Win32 产品,但它是共享件;若要在试用期过后使用它,需要支付AU$75(大约 US$40)的费用。 XMLWriter的界面比 XMLNotepad要丰富得多。一个特别的、显而易见的例外是可浏览树/层次结构视图。 XMLWriter可以让您查看仅预览树视图,但不允许在该视图中编辑,也不允许用它跳转到可浏览窗格。为了这一功能,它还基于有些脆弱的MSXMLDLL,因此不是总能发挥作用。不过,在大多数方面, XMLWriter是修改 XML 文档的相当丰富的工作环境。

XMLWriter的基本思想接近于文本编辑器,只是向其中投入了一些特定于 XML的额外内容。文档的视图是文本视图,它有语法突出显示、可选的行编号,以及对常规文本编辑器所期望的常规特性(但警告和提醒要比常规程序员编辑器少)。不过,除了文本编辑特性以外, XMLWriter还有一些用于确认、检查文本格式如何、XSLT转换、浏览器预览等选项,以及“项目”的概念(相关文件的收集:XML、XSL、CSS、模式等等)。 XMLWriter提供了使用 XML的良好环境,它无疑仍属于“增强编辑器”类别。

TIBCO Extensibility XML Instance
XML Instance是基于 Java 的 XML 编辑器,因此可用在 Java运行所在的一系列平台。Java 虚拟机 (JVM)在质量和速度上差别很大,您对 XML Instance是否满意有部分是取决于所使用的 JVM(在我使用过的几种平台上的虚拟机中,IBM的最好)。在我称之为“增强编辑器”的工具中, XML Instance是最高级的;其 $100 的售价与特性上的增加相称。

在某些方面, XML Instance类似于一个非常完善的 XMLNotepad。使用相同的常规界面,左侧有一个可折叠树,右侧将属性/元素内容显示在一行上。但这只是开始。每个元素都可以作为子层次结构或原始标记查看。通过查看包括字符级元素的块级元素的原始标记,可以在各种类型的元素之间以可视方式得到准确的差别。另外,查看元素最初是作为单一行出现的,但对每个元素,可以展开视图以包括多行(使用滚动条可以查看的所需的行数)。这可以让您以一种灵活的方式进行浏览和编辑。

另外, XML Instance在确认检查和 XSL 转换(包括编辑 XSLT文档)时还执行一项有用的操作(但并不完美)。 XML Instance在插入子标记和属性上提供了一些基本的辅助,但它所提供的辅助无论在数量上还是在保证有效性方面,几乎无法与本专栏中讨论的其它工具相提并论。

前面描述的那些产品可以使许多操作变得简单,但这些工具(甚至下面一些更高级的工具)都要求您放弃常规文本编辑器的许多强大但一般的能力。这些工具通常是那些还没有日常使用的程序员文本编辑器的用户的最佳选择。





回页首


XML 开发环境


除了基本编辑器以外,还有一些被描述为 XML 的“集成开发环境(IDE)”可用工具。 XML Instance很接近这一类,但缺乏其它工具所具有的一些特性。要让某一工具属于这一类,它应该具有一些超过增强编辑器所提供的特性的特性。这些工具在创建有效 XML方面提供了更多帮助。在许多情况下,工具只是简单地不允许创建无效的XML,而在对哪些元素和属性可以出现在文档中特定地方提供了直觉的帮助。XMLIDE 所做的另一件事是添加了更多不同的 XML文档视图,每个视图都适合不同的特殊目的和不同类型的文档。

Icon Information Systems XML Spy
XML Spy是用于 Win32 的另一种商业工具;它的售价大约为$150。编辑 XML 文档(或其它文件类型)时, XML Spy提供了两个基本视图:“文本视图”(看上去与所有文本编辑器基本类似)和“增强的网格视图”(是文档的结构化图解表示)。还有一个“浏览器视图”,它只是对Internet Explorer 5.5 或以上版本的外部 DDE调用;不能在“浏览器视图”中进行编辑。

在两个编辑视图中,都会看到显示在屏幕上的用来输入有效标记和属性的提示和快捷键。如果使用的是DTD 或模式, XML Spy可以提供更多帮助。有一个信息窗口描述了当前上下文(元素对属性、模型和出现规则)。还有一个“输入帮助程序”窗格,显示了在上下文中有哪些子标记、属性和实体是可用的,并帮助您输入必需的或允许的元素。这些帮助程序让您在尝试遵循DTD(或开发 DTD)时更容易。

XML Spy真正有魔力的一个内置工具是其自动的DTD/模式生成。 XML Spy可以非常顺利地从一个无类型的 XML文档中推导出基本DTD(以及创建和连接它)。我发现这种生成不是非常完美。例如,它认为在我正在使用枚举类型,而实际上只不过是CDATA。但它所犯的“错误”也不及一个只有 XML文档、而没有基本设计规则的人所犯的错误。清除或定制 XML Spy生成的 DTD 比从头开始编写要快得多。

另一种很好的接口设备是“增强的网格视图”中的选项。大多数时候,子标记以分层的树的形式显示。 不过, XML Spy会自动检测到它认为某些数据最好以重复元素顺序的“数据库/表视图”形式显示的情况。您也可以手工强制显示这个视图或另一个视图。对于基本上是从表格数据开始的情况,使用这种视图使进入和理解XML 文档更为容易。

SoftQuad XMetal
XMetal仍是另一种商业 Win32 产品,它的售价相当昂贵,大约$500。但它比其它工具所做的事要多出许多。象 XML Spy一样, XMetal在您使用文档时执行确认(当然,是在使用DTD/模式的情况下)。 XMetal的缺省编辑界面称为“正常”或“字处理”视图,开始时看上去非常眼熟(特别对于Microsoft Word用户)。和许多以后的工具一样,许多工具栏图标、菜单快捷键、菜单等等都是从MS Office 复制的。

除了“普通”视图以外, XMetal还提供了几个其它视图,大部分特性都是从 SoftQuad 的流行 HotMetalHTML编辑器中借鉴的。可以在“纯文本”视图中进行编辑,该视图仅是一个对XML 了解甚少的文本编辑器所具有的视图 --有一些语法突出显示、行号、Windows/CUA剪贴板操作,以及搜索/替换特性(包括基本规则表达式)。不幸的以及不必要的是,XMetal的其它一些能力在“纯文本”视图中是禁用的(例如“结构视图”和区分上下文的元素列表)。

SoftQuad首先创造的视图(据我所知)是“标记”视图。这个视图很有趣,也很有用。文档(无论是打开还是关闭)中的每个标记都由一个包含标记名的、象箭头一样的图标表示。标记中的字是以“正常”视图的风格产生的,即使用不同的字体、磅值、颜色等。这种组合让您清晰地看到文档标记结构,同时让您看到非常近似于最终产生的XML文档。很明显,如果使用数据库风格而不是书籍/文章/文档风格的特殊XML 文档,产生的文档就具有比较少的文字意义(但仍以可视方式突出显示XML 中的信息类别)。元素产生可以使用 CSS 进行配置。

另一个可选的视图可以作为单独的窗格使用。“结构视图”是在主窗格中被编辑的文档的分层树表示。两个窗格之间的导航是同步的。如果说“纯文本”或“标记”视图是显示标记信息的话,“结构视图”则帮助使它更为明确。结构视图本身可以有多种外观,有一些很有用,但选项通常都涉及一些有帮助的嵌套缩排和/或图标。

XMetal中真正缺乏的一样事物是内置 XSLT 支持。您可以调用外部程序,然后将该调用放在菜单中,但既然支付了$500,人们希望它包括每个提醒和警告。我也对 SoftQuad 对许多 Win32工具似乎都使用的 MSXML DLL 的依赖有些吹毛求疵(在使用 beta DLL中我有许多问题)。





回页首


值得一提的工具


有一些其它工具值得顺便一提。本专栏不涉及对它们的完整评论或描述,但您至少可以进一步对它们加以研究。

Morphon是一种商业 Java XML编辑器/IDE。在撰写本文时它仍是免费的 beta版,但它正式发行的版本售价大约在 $150 左右。 Morphon提供了一些视图,它大体上类似于 XMetalXML Spy。象 XMetal一样, Morphon依赖于 CSS 提供文档的可视"WYSYWIG" 表示。Beta 版不太稳定,但这大半是由于 JVM问题所导致。因为 Morphon是基于 Java 的,所以它往往比仅Win32 产品有好得多的跨平台支持。

Xeena是一种类似于 Morphon的 Java XML 编辑器。但 Xeena具有免费(实际上是指免费实验版本,它有 90天许可证)这个很好的额外特性,以及具有一部分 IBM alphaWorks系列的工具。使用 Xeena进行的编辑比使用最好的 IDE受到更多限制。您可以得到很好的确认实施,以及类似于 XMLNotepadXML Instance所具有的“分层的树加行视图”。但 Xeena实际上对于使用面向散文 XML 文档不似 MorphonXMetal来得友好。不过,和大多数 IBM Java 技术一样,我发现 Xeena比较稳定而牢靠(大多数 Java应用程序都做不到这一点)。

Conglomerate是一种基于 GTK+ 的自由软件项目。它在 Linux上的编译相当容易,而且原则上应当也可以在 Windows 上编译(因为 GTK是可用的)。这里有一些好消息和坏消息。 Conglomorate具有我所遇到过的用于面向散文 XML文档 绝对最棒的接口概念。它不尝试用 CSS产生字符级元素,而对这样的元素使用带有标签和有颜色的“下划线”。然后,块级元素使用以类似方法产生的垂直彩色块进行标识。有关屏幕快照,请查看它的主页。坏消息是 Conglomorate仍然基本上是 alpha级软件。它不稳定,并需要额外的特性。但它是我所见到的最有前途的开端之一;我希望有人(可能就是你们当中的一位)能够将 Conglomorate的开发推进到自由软件最终目标的 XML编辑器/IDE。

最后一种值得考虑的可能的工具。 Corel WordPerfect 2000在早期 WordPerfect版本中的 SGML 支持上构建,提供构造精良的XML支持和确认。它从总体上说是一种功能强大的字处理器,通过使用它,可以使用相同的工具来进行XML 文档的开发。



参考资料



关于作者

Author photo

David Mertz 一定将其 MacGuffin 误放在了其它某个文章之中。它将很快再一次出现。可以通过 mertz@gnosis.cx与 David 联系; http://gnosis.cx/publish/ 上详细介绍了他的生活。非常欢迎对过去的、这一篇以及将来的专栏文章提出意见和建议。




对本文的评价










回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款