|
技巧:用面向对象编程创建有效的XML广告 技巧:用面向对象编程创建有效的XML
Gesticulator, Gnosis Software, Inc. 2002 年 3 月 在这篇技巧文章中,David 提供了一些技巧,使用面向对象语言的程序员可以在他们的程序中使用这些技巧以在创建 XML 文档时确保
XML 文档的有效性。 什么构成有效性? XML 有效性的基本思想是指定在元素内部可以出现什么,它每隔多久可以出现一次以及可以出现的内容有哪些替代选择。另外,当在一个元素中可以出现多个事物时,还可以指定它们出现的顺序(或按照需要不指定)。下面我们看一看一个高度简化的假想的 dissertation.dtd: 具备所有基本约束的“dissertation”DTD 换句话说,dissertation 可以包含一个
dedication,必须包含一个或多个 chapter 并且可以包含零或多个
appendix。不同的子元素以列出的顺序出现(如果有的话)。一些元素仅包含字符数据。就 使对象看起来象文档 XML
文档是分层的,类似的,可以包含其它对象作为属性的对象也是分层的。对于不同的属性,我们仅需选择几种对象类型。 在文档根处 — 以及在其之下的其它级别上 —
我们要指定可以出现的子元素及其出现的顺序。我想起了两种方法。一种方法是创建可以在该元素中出现的那些事物的不同种类的序列。Haskell 和 Python
元组具有保持不变的良好品质(例如,象 Fortran 记录那样),但是常规列表或数组(例如 void 指针)也可以这样做。例如,在 Ruby
中,我们可能会“声明”: 用成员“part”初始化 Ruby“Root”类 dissertation = Root.new [
Maybe_dedication.new,
\ 该示例完全没有说明类 Maybe_dedication、Some_chapter 和 Any_appendix
做什么,但是包含序列思想。dissertation 是类 Root 的实例,其工作是保存一个序列(可能还有其它几个方法,如写 XML
或验证当前实例)。 第二种方法在很多语言中要更简单一些,它使事物直接以根元素属性出现,但是保留一个指示序列的特殊属性。例如,Java
可能做类似于下面的事: 将 dissertation 部分作为成员保留的 Java 类 public class dissertation
{ 表达量化 限制情况(一次或零次,也就是说不多于一次)的结构不太明显。最可能的情况是,应该在基本序列对象的基础之上构建 Maybe
类(以及象 Maybe_dedication
这样的子类),并且在提供的方法中有防止添加一个以上事物的保护手段。这类似于我们存在情况(一次或多次)的示例。那么,让我们看一看可能(不完整)的 Python
实现: 拥有“一次或多次”事物的 Python 类 更健壮的示例可能会在 .append()、.extend()、.__setitem__()
和其它可以添加到列表的方法中添加一些特性,例如检查项目类型是否正确。具有静态类型定义的语言可能仅仅会在列表中声明事物类型,但可能使用类似的大小验证。在
C++ 中,您可能使用模板和通用编程方法来实现 ExistentialList 的一般特性,但是要特别指明子元素类型。 每一个表示子元素的对象的重要特性是将其本身序列化成 XML 的能力。Python 保留一个名为 __repr__()
的“神奇”方法;其它语言可能使用一个名为 .write() 或 .toXML() 的方法。序列化还需要向下递归遍历子元素,这由 Python
使用神奇方法自动处理。在其它情况下,需要对属性对象进行一些人工调用。 表达分离 您可能通过为构造器提供多个类型说明来编写多态构造器函数。交替模式中的每一个允许的事物都将有一个构造器(可能包括在与 DTD
中的分离一起使用的量词处的序列类型)。 然而,更灵活的方法是使用一个通用框架,该通用框架来通过初始化变量或通过 Or
超类的继承来接收其交替列表。这样的子类看起来可能类似于: Or 抽象类的 Python 专门化 假设抽象类 Or 的基本功能知道查找 disjoins
类成员,那么这可能是足够的专门化。当然,在父类中需要定义受保护的写方法和读方法(在 Python 案例中,可能用神奇方法来实现)。 结束语 最后再提个醒:虽然我没有在这里给出示例,但是 Eiffel
的“programming-by-contract”非常适合于表示本文所讨论的约束。
如果您希望与本文章的作者或其所在机构,进一步交流,请联系:畅享网 姜小姐 jill.jiang@amteam.org | 021-51096826-112 | 在线联系 |
节能与优化IT 企业CIO过冬良策当前金融危机的影响还在继续漫延,很多企业都在苦寻过冬的良策,在这种情况下,节能与优化技术与产品无疑成为CIO们关注的首要对象,本次选题就是针对节能与优化IT来为CIO们提供过冬的良…… 观08软件并购风潮 议09巨头何处生花2008,似乎注定是不平静的一年。有人说2008是并购年。业内人士表示,在全球软件行业,并购一直是大企业谋求做大做强的捷径之一,包括甲骨文、SAP,微软等全球软件巨头都为了扩大自己…… |
|
|