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

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

Henri 关于 Unicode 和字符处理的建议基本上是完全正确的。不过我认为“Avoid adding pretty-printing white space in character data”一节有点夸大其词。多数情况下,元素之间而不是带有字符数据的元素内部的精细打印是安全的。如 Henri 所述,清单 1 所示的如果以清单 2 的形式呈现通常是不安全的。

清单 1. XML 例子

<foo>bar</foo>

清单 2. 在字符数据中增加空白后的 XML 例子

<foo>
 bar
</foo>

但通常以清单 3 的形式打印 XML 是安全的,输出结果如清单 4 所示。

清单 3. 另一个 XML 例子


<doc><foo>bar</foo></doc>


清单 4. 清单 3 中的 XML 在字符数据中增加了空格

<doc>
 <foo>bar</foo>
</doc>

很多 XML 序列化工具能够理解相对安全和不安全的的打印格式。必须知道的是,如果在混合内容中增加空格,则清单 3 和 4 中所示的精细打印形式可能造成扭曲。如果使用模式制导的序列化,则可以避免这类问题。但在实践中,使用混合内容的多数词汇表对空白规范化没有这么敏感,因此不用过于担心精细打印。应该充分了解该问题,并知道没有办法关闭精细打印(最好默认不用精细打印)。Henri 提出了清单 5 所示的精细打印实践,但是我不同意,因为我认为那些难看的标记不容易理解。

清单 5. Henri Sivonen 建议但本文作者不同意的精细打印方式

<foo
>bar</foo
>

修道院的建议

现在换换档,本文要探讨的第二篇资料是 Simon St. Laurent 撰写的&ldquo;Monastic XML&rdquo;(请参阅参考资料)。这是一组小短文,围绕着如何充分利用 XML 而就处理和思考 XML 提出了一些建议。Simon 使用修道院和禁欲主义作为比喻,提出为 XML 增加不适应其简单文本根 (textual root) 的过多负担是危险的。 在&ldquo;Marking-up at the foundation&rdquo;中,他讨论了字符数据和标记(元素和属性)的本质作用。在&ldquo;Naming things and reading names&rdquo;中,他解释了为何一般标识符(也称为元素类型名)是一个重要的概念,应该作为标记信息结构的惟一关键成分。理想情况下,如果使用 XML 名称空间,关键就是统一名称(名称空间 URI 加上本地名),这种复杂化就是 Simon 在&ldquo;Namespaces as opportunity&rdquo;中厉声疾呼的原因之一。&ldquo;Accepting the discipline of trees&rdquo;揭示了 XML 一个不幸的秘密:尽管看起来 XML 的层次结构很容易扩展成图形结构,但实践证明用 XML 建模图有点困难。但目前为止,&ldquo;Monastic XML&rdquo;网站上最重要的建议是&ldquo;优化标记的处理总是不成熟&rdquo;。XML 是一种声明性技术,对很多开发人员来说,关于它的强大和不足有很多不实之词。那些尽量把 XML 设计和处理细节拉近的开发人员,从长期来看,通常使得处理更加困难。XML 成功的关键是关注需要抽象表示的信息的特点,将它与需要处理这些信息的系统的技术设计分离开来。


结束语

讨论 XML 最佳实践时总是有一些不同的观点,特别是在初期阶段,但听到不同的声音是一件好事。关于这个话题的参考资料很少,我将继续在本专栏中讨论它。如果对最佳实践有什么资料或者建议或者希望分享您的观点,请参加 Thinking XML 论坛上的讨论。

标签:
0
投稿

猜你喜欢

  • vue实现评论列表功能

    2023-07-02 17:05:29
  • Python爬取豆瓣数据实现过程解析

    2022-01-27 09:12:20
  • python实现beta分布概率密度函数的方法

    2021-08-02 21:39:16
  • Linux下mysql 5.6.17 安装图文教程

    2024-01-26 10:59:16
  • Numpy中array数组对象的储存方式(n,1)和(n,)的区别

    2022-08-28 03:08:32
  • 详解Go语言中用 os/exec 执行命令的五种方法

    2024-05-28 15:21:51
  • Python简直是万能的,这5大主要用途你一定要知道!(推荐)

    2021-03-16 16:20:31
  • 使用python检查值是否已经存在于字典列表中

    2023-10-25 03:08:21
  • 微信小程序使用自定义组件导航实现当前页面高亮

    2024-04-22 12:50:16
  • ASP将Excel数据导入到SQLServer的实现代码

    2011-03-10 10:38:00
  • JavaScript解决Joseph问题

    2008-06-21 17:11:00
  • Centos7下安装MySQL8.0.23的步骤(小白入门级别)

    2024-01-22 02:10:34
  • bootstrap table单元格新增行并编辑

    2024-04-10 16:09:09
  • Go语言学习之goroutine详解

    2024-03-25 02:45:56
  • python分别打包出32位和64位应用程序

    2023-11-03 04:41:10
  • python使用PIL模块获取图片像素点的方法

    2022-07-28 10:57:57
  • 详解重置Django migration的常见方式

    2022-10-30 13:21:17
  • FF和IE之间7个JavaScript的差异[译]

    2009-05-04 18:19:00
  • Python之Matplotlib文字与注释的使用方法

    2022-09-09 10:36:51
  • Python matplotlib绘制图形实例(包括点,曲线,注释和箭头)

    2021-08-31 22:57:06
  • asp之家 网络编程 m.aspxhome.com