Thinking XML: 创建 XML 的好建议(2)

来源:互联网 时间:2008-05-29 11:25:00 

上面的评述表明,Henri 的建议可能由于过分关心生成结构良好的 Web 提要的问题而有些偏激。警告人们简单的堆砌字符串,期望它成为结构良好的 XML 的做法是危险的,这一点上他是正确的。我也在文章中建议人们使用成熟的 XML 工具箱而不是使用简单的文本工具来创建 XML(请参阅参考资料)。我疑虑的是 Henri 描述这个建议的方式有点混乱,在更广泛的 XML 处理上下文中会造成误解。他在“Don't use text-based templates”和“Don't print”两节中反复重申这个观点。我认为可以将他的建议归纳为“不要使用不能保证产生结构良好的 XML 的机制。”这确实是一项很重要的建议。正像 Herni 所提到的,安全创建 XML 的一种方法是发送 SAX 事件,“使用树或栈(或者 XML 解析器)”。但即使这样做也不能令您高枕无忧。使用的 SAX 工具不一定要进行所有必要的结构良好性检查。比如,XML 中禁止某些 Unicode 字符。为了解决这些问题可能需要进行额外的检查。

Henri 建议用户不要尝试手工管理名称空间,这是正确的。我曾经在 developerWorks 上讨论过,必须非常小心地处理 XML 名称空间。他建议开发人员,按照统一名[名称空间统一资源标识符(URI)加上本地名]来考虑一般情况就行了,但有时候不可避免地要面对前缀或者 XML 声明。在 XSLT 这样的规范中,QName(前缀/本地名组合)可在属性值中使用,并假定前缀根据作用范围内的名称空间声明解释。这种模式称为上下文中的 QName。在这种情况下,开发人员必须控制声明的前缀,否则 XML 处理就会失败。如果开发人员管理自己的名称空间声明,由于 XML 名称空间的复杂性,结果往往会显得杂乱无章。

因为经过 XML 处理管道之后名称空间语法可能变得非常混乱,一种解决方法是在管道的最后插入一个规范化步骤。XML 规范化消除了 XML 1.0 和 XML 名称空间允许的各种语法变体,包括不同的名称空间声明方式。规范化不能消除使名称空间声明对开发人员变得危险的所有问题。规范化也不能解决上下文中的 QName 问题,因为它并没有改变文档中使用的前缀,但它确实可以减轻名称空间声明的混乱程度,使您很容易确定问题所在,甚至可以编写代码自动纠正这些问题。GenX 库是 Henri 建议使用的 XML 创建工具之一,能够自动生成规范的 XML,其他很多工具箱也作为选项提供了规范化功能。

标签:
0
投稿

猜你喜欢

  • uniqueidentifier转换成varchar数据类型的sql语句

    2011-09-30 11:17:48
  • Python中三元表达式的几种写法介绍

    2022-01-24 20:10:10
  • 用正则表达式找出不包含连续字符串abc的单词

    2010-03-02 20:28:00
  • Python实现socket库网络通信套接字

    2023-08-07 17:38:59
  • 20个Javascript手风琴折叠菜单

    2009-10-12 12:09:00
  • Python实现绘制圣诞树和烟花的示例代码

    2022-03-22 16:22:20
  • Python生成词云的实现代码

    2023-09-12 22:42:48
  • Python3 ffmpeg视频转换工具使用方法解析

    2021-07-28 15:00:30
  • Python使用urllib2模块实现断点续传下载的方法

    2021-12-27 05:20:01
  • 由黄钻等级图标处理引发的思考

    2009-11-16 12:37:00
  • 利用Python实现普通视频变成动漫视频

    2023-02-05 05:13:59
  • 基于python全局设置id 自动化测试元素定位过程解析

    2022-04-28 18:52:08
  • Java字符串 正则表达式详解

    2023-07-16 12:30:35
  • Python切片用法实例教程

    2023-09-28 15:26:17
  • 利用Python实现眨眼计数器的示例代码

    2021-04-16 10:39:53
  • 解决js相同的正则多次调用test()返回的值却不同的问题

    2024-04-17 09:42:18
  • Python编程快速上手——Excel表格创建乘法表案例分析

    2021-06-10 20:45:37
  • Python爬取求职网requests库和BeautifulSoup库使用详解

    2021-12-29 09:07:49
  • python实现测试工具(一)——命令行发送get请求

    2022-04-06 03:49:00
  • 详解MySQL数据库安全配置

    2010-01-26 15:19:00
  • asp之家 网络编程 m.aspxhome.com