扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
XML的一个重要特性是,它天生就能够对数据模型提供可扩展性。你可以轻松地在XML文档中加入新元素,且避免打乱你的应用。但是有些技术的发展会给XML的易扩展性带来麻烦。那就让我们来看看这些技术的优劣。
绑定
对于使用面向对象编程语言的程序员(Java或者C++)来说,经常要用的XML技术就是将二进制对象绑定到XML文档中。对于开发环境,这种方法非常有用。这样,程序员可以将对象解析,并且使用这个二进制对象,而不是使用代码中的XML文档。这样的改变完成后,程序员可以将对象嵌入XML表单,并且发送出去。
但是以这种方式绑定有一个很大的缺点,那就是它限制了XML的可扩展性。当你对XML文档加入一个新元素时,你都必须更改解析器,告诉它在什么地方可以找到新元素,以及如何将新元素映射到二进制对象上。同时,你还必须为二进制对象更改相关定义(比如Java的类)。
因为可以使用文本来标记XML文档中的所有元素,这样就为直接存取XML文档提供了方便。如果XML在你的应用中至关重要,那么将以类为中心的数据元素转换为以XML文档为中心可以很好地将你要处理数据的方式和输入输出数据结合在一起。
DTDs和schemas
DTDs和schemas都为XML文档的有效性提供了很好的方法。当你扩展你的XML文档时,DTDs和schemas会做很多附加的工作。如果你在使用真正的有效性解析器,并且你的DTD规则良好,那么这种对XML文档的扩展也必须出现在DTDs和schemas里面,因为正是DTD定义了你的XML文档。它也许会识别<face/>,<arm/>,和<leg/>这样的标记,但是如果你使用<tail/>来扩展XML文档,那么解析器的有效性校验将报错。
对于这种情况,你只有两种选择。如果你在应用中不使用DTDs和schemas,那么只要你愿意,你可以轻松加入你需要的元素。如果你要求的有效性必须达到XML解析器的水准,那么你就需要描述扩展XML文档的所有必要步骤,包括对DTDs和schemas的任何改动。
文档持久性
扩展XML的另一个可能发生的问题是文档中的元素何时可以持久。要讨论这个主题会涉及很多方面,但是对于扩展性来说,它是指XML文档应该映射到何处以及在关系数据库中存于何处。有两个方面需要讨论。
首先,只要你向文档中加入新的元素,你就必须更改数据映射,以便使持久引擎能够知道在哪存放新元素。如果文档中加入了新元素,但是没有字段与其对应,那么数据就不能够持久。所以,你每一次向文档中加入新元素时,你都必须向映射机构描述如何在XML文档中扩展字段,以及将它放在数据库的什么地方。
其次,你需要对新元素在数据库中加入一个实际的点(比如表中的字段)。每一次扩展XML文档时,不仅需要将新元素映射到新字段中,而且你还必须创建这个字段。创建字段失败将导致数据丢失。
同样道理,反过来也是这样。持久性不仅是指存储文档,还包括检索。因此,你需要记住,数据库中数据的任何扩展也必须映射到XML文档上。
上述的一个简单的做法是,将XML文档的内容只存成一个字段。许多数据库都支持大文本比如BLOB(长二进制对象)型字段。你可以使用它存储整个的XML文档的内容。其缺点是失去索引,及不能按单个元素检索。但事实上你会发现,真正对用于索引和检索的字段的扩展是很少的。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者