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,其他很多工具箱也作为选项提供了规范化功能。


猜你喜欢
- 写在前面最近每日一更,我这菜鸡都有点儿不好意思了简单介绍简单用法是:assert expression让我们用程序来测试这个expressi
- 思路:利用time函数返回的时间字符串与指定时间字符串做比较,相等的时候执行对应的操作。不知道大家的思路是什么,感觉这样比较耗CPU。。。。
- 定义神经网络继承nn.Module类;初始化函数__init__:网络层设计;forward函数:模型运行逻辑。class NeuralNe
- 使用方法很简单,如果你有两个站,把这段代码放在访问高的那个站来刷自己的新站,放在那个文件里面呢?就放在INDEX里面吧.或者公用的头或者尾!
- 目录楔子鼠标操作鼠标监控鼠标键盘监控楔子python是一门很神奇的语言,原因在于它有很多的库可以实现各种意想不到的功能。当然我们这次介绍的库
- 引言照例,我们先来一个场景~面试官:"知道事务的四大特性么?"你:"懂,ACID嘛,原子性(Atomicity
- ROC曲线绘制要点(仅记录)1、ROC用于度量模型性能2、用于二分类问题,如若遇到多分类也以二分类的思想进行操作。3、二分类问题代码实现(至
- 本文实例讲述了python写日志文件操作类与应用。分享给大家供大家参考,具体如下:项目的开发过程中,日志文件是少不了的,通过写日志文件,可以
- isset和is_null啥区别,看手册上讲的话, isset和is_null的功能几乎完全”相反的一样”..是不是isset就是一个is_
- 问题Vue项目中需要用Echarts的柱状图显示数据,并且每次搜索要更新柱状图。这时候小编发现在控制台会出现这样的报错:原来的代码是这样的,
- 一、subprocess以及常用的封装函数运行python的时候,我们都是在创建并运行一个进程。像Linux进程那样,一个进程可以fork一
- IE的for...in循环存在严重的缺陷,除了性能低下外,有许多属性不可遍历,著名有这三兄弟:constructor ,toString ,
- 我一直都不喜欢在访问数据库时采用拼接SQL的方法,原因有以下几点: 1. 不安全:有被SQL注入的风险。 2. 可能会影响性能:每条SQL语
- 1. 前言我们已经知道,对于InnoDB存储引擎而言,页是磁盘和内存交互的基本单位。哪怕你要读取一条记录,InnoDB也会将整个索引页加载到
- Deepin安装开发环境 系统环境配置挂载分区1、挂载分区(需要先卸载分区):deepin:sudo mount -t ext4 /dev/
- 1、使用cmd打开命令行窗口。2、在输入python时,进入python交互模式。3、输入exit(),退出交互模式,在命令行模式下运行.p
- 深度优先算法(DFS 算法)是什么?寻找起始节点与目标节点之间路径的算法,常用于搜索逃出迷宫的路径。主要思想是,从入口开始,依次搜寻周围可能
- Python中内置了一些与时间处理相关的库,如time、datatime和calendar库。其中time库是Python中处理时间的标准库
- 之前在使用Pandas处理csv文件时,发现如果文件名为中文,则会报错:OSError: Initializing from file fa
- 本周的豆知识分享就来深入研究一下window.event对象。请先看看下边的代码片断。 <button id=”btn”&g